Lập trình Pascal 8

G

gapro124

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Câu 1,Viết chương trình nhập vào 1 số nguyên n, kiểm tra n có phải là số đơn điệu hay không? ( số đơn điệu là số mà các chữ số của nó luân phiên nhau giảm tăng hoặc tăng giảm).
Câu 2, Viết chương trình nhập vào 1 số nguyên n, biểu diễn số đó dưới dang tổng của các số phi-bô-na-xi.
( số phi-bô-na-xi là số thuộc dãy 1,1,2,3,5,8,13..... nghĩa là số này bằng tổng hai số đứng trước nó)
3,Viết chương trình nhập vàp một số nguyên n. Phân tích n thành tổng các số tự nhiên liên tiếp ( VD: 11 = 5+6;....)
____________
Giúp em cái nha, em sẽ cảm ơn :)
 
Q

quanghero100

Bài 1:
Mã:
uses crt;
var n:string;
    i,j,k:integer;
    kt:boolean;
begin
   clrscr;
    write('nhap so can kiem tra: '); readln(n);
    kt:=true;
    i:=1;
   repeat
       j:=i+1;
       k:=j+1;
       if ((n[i]>=n[j]) and (n[j]>=n[k])) or ((n[i]<=n[j]) and (n[j]<=n[k])) then kt:=false;
       inc(i);
   until (kt=false) or (i>length(n)-2);
  if kt=true then write(n,' la so don dieu')
 else write(n,' khong phai la so don dieu cho bi loi la: ',n[i-1],n[j],n[k]);
readln;
end.
 
Q

quanghero100

Bài 3:
Mã:
uses crt;
var n:longint;
    i,j,k,s:longint;
begin
    clrscr;
   write('n='); readln(n);
   i:=1;
   repeat
   s:=i;
   j:=i;
    repeat
      inc(j);
      s:=s+j;
    until (s=n) or (j=n div 2 +1);
    if s=n then
     begin
      for k:=i to j-1 do
       write(k,'+');
      writeln(j);
     end;
    inc(i);
   until i=n div 2 + 1;
readln;
end.
 
Last edited by a moderator:
C

cuong276

bài 2
mã:
Mã:
uses crt;
var i,n:integer;
      st:string;
function fibo(i:integer):integer;
  begin
       if i<=2 then fibo:=1
       else fibo:=fibo(i-1)+fibo(i-2);
  end;
begin
  write('n='); readln(n);
  write(n,' viet duoc thanh tong: 1');
  st:='';
  n:=n-1;
  while n<>0 do
       begin
           i:=1;
           while fibo(i)<=n do i:=i+1;
           write(' + ',fibo(i-1));
           n:=n-fibo(i-1);
       end;
   readln;
end.
 
Last edited by a moderator:
C

cuong276

Bài 3: Mình làm như thế này không biết có đúng không nha
Mã:
uses crt;
var s,i,n,j:integer;
      x,st:string;
begin
    write('n='); readln(n);
    for i:=1 to n-1 do
        begin
           str(i,st);
           s:=i;
           j:=i+1;
           while s<n do
                 begin
                     s:=s+j;
                     str(j,x);
                     st:=st+' + '+x;
                     j:=j+1;
                 end;
           if s=n then write(st);
        end;
      
      readln;
end.
 
Last edited by a moderator:
M

mikelhpdatke

Bài 3

Mã:
{$R+}
const
  Inp = 'P11.INP';
  Out = 'P11.OUT';
  Ind = 46;
var
  n: LongInt;
  Fibo: array[1..Ind] of LongInt;
procedure Init;
var
  i: Integer;
begin
  Fibo[1] := 1; Fibo[2] := 1;
  for i := 3 to Ind do Fibo[i] := Fibo[i - 1] + Fibo[i - 2];
end;
procedure Solution;
var
  i: LongInt;
  hfi, hfo: Text;
begin
  Assign(hfi, Inp);
  Reset(hfi);
  Assign(hfo, Out);
  Rewrite(hfo);
  while not Eof(hfi) do
  begin
    Readln(hfi, n);
    Write(hfo, n, ' = ');
    i := Ind; while Fibo[i] > n do Dec(i);
    Write(hfo, Fibo[i]);
    Dec(n, Fibo[i]);
    while n > 0 do
    begin
      Dec(i);
      if n >= Fibo[i] then
      begin
        Write(hfo, ' + ', Fibo[i]);
        Dec(n, Fibo[i]);
      end;
    end;
    Writeln(hfo);
  end;
  Close(hfo);
  Close(hfi);
end;
begin
  Init;
  Solution;
end.
 
Q

quanghero100

Bài 3: Mình làm như thế này không biết có đúng không nha
Mã:
uses crt;
var s,i,n,j:integer;
      x,st:string;
begin
    write('n='); readln(n);
    for i:=1 to n-1 do
        begin
           str(i,st);
           s:=i;
           j:=i+1;
           while s<n do
                 begin
                     s:=s+j;
                     str(j,x);
                     st:=st+' + '+x;
                     j:=j+1;
                 end;
      readln;
end.

Bài của cậu chạy hem được kìa tớ test thử thì nhận thấy:
thiếu một lệnh end;
khi thêm vào thì chạy không cho ra gì cả
Bạn kiểm tra lại nha :) :)
 
C

cuong276

Cái lệnh end thì đúng là mình thiếu thật, còn nó không chạy vì mình quên chưa write ra. Giờ mình sửa lại rồi đó
 
Q

quanghero100

Bài 3

Mã:
{$R+}
const
  Inp = 'P11.INP';
  Out = 'P11.OUT';
  Ind = 46;
var
  n: LongInt;
  Fibo: array[1..Ind] of LongInt;
procedure Init;
var
  i: Integer;
begin
  Fibo[1] := 1; Fibo[2] := 1;
  for i := 3 to Ind do Fibo[i] := Fibo[i - 1] + Fibo[i - 2];
end;
procedure Solution;
var
  i: LongInt;
  hfi, hfo: Text;
begin
  Assign(hfi, Inp);
  Reset(hfi);
  Assign(hfo, Out);
  Rewrite(hfo);
  while not Eof(hfi) do
  begin
    Readln(hfi, n);
    Write(hfo, n, ' = ');
    i := Ind; while Fibo[i] > n do Dec(i);
    Write(hfo, Fibo[i]);
    Dec(n, Fibo[i]);
    while n > 0 do
    begin
      Dec(i);
      if n >= Fibo[i] then
      begin
        Write(hfo, ' + ', Fibo[i]);
        Dec(n, Fibo[i]);
      end;
    end;
    Writeln(hfo);
  end;
  Close(hfo);
  Close(hfi);
end;
begin
  Init;
  Solution;
end.

Bài của cậu cơ bản là đúng tuy nhiên theo tớ thì cần phải liệt kê tất cả các cách biểu diễn số n thành tổng của các fibo
Bài của cậu chỉ đáp ứng có một cách chưa liệt kê ra hết :D bạn suy nghĩ thêm nha :)
Ví dụ:
n=15 thì cho ra
15=13+2
15=13+1+1
15=8+5+2
15=5+5+5
15=5+5+3+2
...............
Không biết có phải là đưa ra cách phân tích với ít hạn tử nhất không nhỉ
 
M

mikelhpdatke

Chết nhầm, bài đấy là bài 2.
Còn bài 3 thì dùng 2 vòng for là ok mà. Vì đầu bài chỉ cho tổng của một số sô tự nhiên liên tiếp ;))
 
M

mythampretty

Có mem nàocho mình thuật toán biểu diễn phân số trên pascal được ko? Thank nhiêu
Vd:23/5=4.6; 3/8=0.375; 1/7=0.(142857)
Trả lời nhanh mai thi rồi :)
 
K

khai221050

Bạn nói rõ hơn được không, input là 1 phân số nào đó và out là 1 số thập phân = phân số đó à hay là sao?
 
M

mythampretty

Ukm!
Bạn trả lời giúp mình với nha! :)
_______________________________________________________________________
Cuộc sống là một món quà
 
D

demon311

Đại khái là bạn xem nếu Nhân số đó từ 1 đến 100000 mà kết quả có $trunc(x)=x$ thì đưau ra thôi
 
M

mimimenmen

giúp mih vs ạ mai mih lam bai thi hk 2 rồi

1)viết chương trình pascal tính tổng nhập vào 2 số a,b in ra màn hình UCLN(a,b),BCNN(a,b)
2)viết chương trình pascal nhập vào 1 dãy số gồm n số in ra man hình số lớn nhất và số nhỏ nhất của dãy số đó. sắp xếp dãy số theo thứ tự tăng dần hoặc giảm dần
3)viết chương trình pascal tính tổng
a) S= 1/1+1/2+1/3....+1/n(vs n nhập từ bàn phím
b) s= 1/1^2 +1/2^2....+1/n^2
P/s: làm ơn giúp mih vs do mih mới chơi nên k biết chỗ giủi câu hỏi ở đâu đành gửi tạm ở đây nếu làm phiển cho mih xin lỗi
 
H

hoatraxanh24

Câu 3: Quá dễ
-Có thể dùng vòng lặp for-do hoặc while-do đều được.
a.
program bt3a;
uses crt;
var i,n: longint;
S:real;
begin
clrscr;
S:=0;
write('Nhap n =');readln(n);
for i:=1 to n do
S:=S+1/i;
write('tong la',S);
Readln
end.
/S phải là kiểu số thực nhé. nếu khai báo var i,n,S:longint sẽ báo lỗi và chạy không được
S có thể định dạng thêm S:4:2 tùy ý ha/
b.
program bt3b;
uses crt;
var i,n: longint;
S:real;
begin
clrscr;
S:=0;
write('Nhap n =');readln(n);
for i:=1 to n do
S:=S+1/(i*i);
write('tong la',S);
Readln
end.
 
Top Bottom