Thứ Ba, 13 tháng 12, 2016

MỘT SỐ DẠNG BÀI TẬP PASCAL 11

Bài Tập Pascal

Bài Tập Pascal

Viết chương trình nhập vào dãy số nguyên có n phần tử (1≤n≤30), đưa ra màn hình dãy số vừa nhập:

Var A:array[1..30] of integer;
i,n: integer;
Begin
            Writeln(‘nhap n:’);
            Readln(n);
            Writeln(‘nhap vao day so gom ‘,n,’ phan tu:’);
            For i:=1 to n do
            Begin
                        Write(‘A[‘,i,’]=’);
                        Readln(A[i]);
            End;
Writeln(‘day so vua nhap la: ’);
For i:=1 to n do write(A[i],’ ‘);
readln
End.

Lưu ý:
-          Chương trình này chỉ đúng khi nhập 1≤n≤30 thôi nhé, nếu các bạn nhập n nhỏ hơn 1 hay vượt quá 30 thì chương trình sẽ báo lỗi.
-           Đây chỉ là bài toán cụ thể mình đưa ra, nếu đề bài cho dãy số khác với mình thì các bạn nhớ khai báo khác nhé. Chẳng hạn, nếu đề bài cho viết chương trình nhập vào dãy số thực có n phần tử 1≤n≤100 thì các bạn khai báo như sau:
Var A:array[1..100] of real;
-          i và n lúc nào cũng là kiểu số nguyên.

Nếu bài trên kết hợp với câu tính trung bình cộng các số dương trong dãy số ta làm như sau:

Var A:array[1..30] of integer;
i,n,d: integer;
S:real;
Begin
            Writeln(‘nhap n:’);
            Readln(n);
            For i:=1 to n do
            Begin
                        Write(‘A[‘,i,’]=’);
                        Readln(A[i]);
            End;
Writeln(‘day so vua nhap la: ’);
For i:=1 to n do write(A[i],’ ‘);
S:=0;                                               
d:=0;
for i:=1 to n do
if A[i]>0 then
begin
            S:=S+A[i];
            d:=d+1;
end;
if d=0 then writeln(‘khong co so duong nao trong day so’)
else writeln(‘TBC=’,S/d);
readln;
End.

Một số bài toán: (sau đây mình chỉ ghi phần tính toán trong chương trình, còn việc khai báo với nhập n các bạn tự làm nhé, nhớ là tùy thuộc vào đề bài mà khai báo biến cho chính xác nha)
MỘT SỐ DẠNG BÀI TẬP PASCAL 11
MỘT SỐ DẠNG BÀI TẬP PASCAL 11 

Giải:
1)      S:=0;
For i:=1 to n do S:=S+i;
Writeln(‘S=’,S);

2)      H:=0;
d:= -1;
For i:=1 to n do
Begin
            H:=H+d*i;
            d:=-d;
end;
writeln(‘H=’,H);

3)      T:=0;
For i:=1 to n do T:=T+sqrt(i);
Writeln(‘T=’,T);

4)      K:=0;
S:=0;
For i:=1 to n do
Begin
            S:=S+i;
            K:= K+sqrt(S);
End;
Writeln(‘K=’,K);

5)      M:=0;
For i:=1 to n do M:=M+i/(i+1);
Writeln(‘M=’,M);

6)      N:=0;
d:=1;
for i:=1 to n do
begin
            N:=N+d*i/(i+1);
            d:=-d;
end;
writeln(‘N=’,N);


7)      P:=0;
mau:=1;
For i:=1 to n do
Begin
mau:=mau*i;
P:=P+1/mau;
End;
Writeln(‘’P=’,P);

Lưu ý: khi gặp các bài đan dấu như bài 2 và bài 6 thì các bạn hãy quan sát số hạng đầu tiên, nếu số hạng đầu tiên dương thì gán d:=1; nếu số hạng đầu tiên âm thì gán d:= -1;

Sau đây là những bài kiểm tra tính chất của dãy số vừa nhập. Các bạn tự nhập dãy số vào nhé, mình chỉ trình bày cách kiểm tra thôi.
1)      Kiểm tra tính đối xứng của dãy số
d:= n div 2;
i:=1;
while (i<=d) and (A[i]=A[n-i+1]) do i:=i+1;
if i>d then writeln(‘day doi xung’) else writeln(‘day khong doi xung’);
2)      Kiểm tra dãy số có tăng dần hay không
i:=1;
while (i<n) and (A[i]<=A[i+1]) do i:=i+1;
if i=n then writeln(‘day so tang’) else writeln(‘day so khong tang’);
3)      Kiểm tra dãy số có giảm dần hay không
i:=1;
while (i<n) and (A[i]>=A[i+1]) do i:=i+1;
if i=n then writeln(‘day so giam’) else writeln(‘day so khong giam’);

Tiếp theo là sắp xếp dãy số, các bạn cũng tự nhập dãy vào nhé!
1)      Sắp xếp dãy số theo thứ tự giảm dần
For i:=1 to n-1 do
For k:=1 to n do
If A[i]<A[k] then
Begin       
            Tam:=A[k];
                                    A[k]:=A[i];
                                    A[i]:=tam;
                        End;
                        Writeln(‘mang A vua sap xep: ‘);
For i:=1 to n do write(A[i],’ ‘);

2)      Sắp xếp dãy số theo tứ tự tăng dần
For i:=1 to n-1 do
For k:=1 to n do
If A[i]>A[k] then
Begin       
            Tam:=A[i];
                                    A[i]:=A[k];
                                    A[k]:=tam;
                        End;
                        Writeln(‘mang A vua sap xep: ‘);
For i:=1 to n do write(A[i],’ ‘);

3)      Chèn h vào dãy số và sắp xếp theo thứ tự tăng/giảm dần: để làm bài này thì trước tiên các bạn cần sắp xếp dãy số ban đầu theo yêu cầu đề bài (tăng dần hay giảm dần) rồi mới bắt đầu chèn như sau:
Đối với dãy giảm dần:
            Writeln(‘nhap h: ‘);
            Readln(h);
            i:=1;
While (i<=n) and (A[i]>h) do i:=i+1;
For j:=n+1 downto i do A[j]:=A[j-1];
A[i]:=h;
Writeln(‘mang A: ’);
For i:=1 to n+1 do write(A[i],’ ‘);
Đối với dãy tăng dần:
            Writeln(‘nhap h: ‘);
            Readln(h);
            i:=1;
While (i<=n) and (A[i]<h) do i:=i+1;
For j:=n+1 downto i do A[j]:=A[j-1];
A[i]:=h;
Writeln(‘mang A: ’);
For i:=1 to n+1 do write(A[i],’ ‘);

Sau đây là 1 bài mẫu gồm các câu đã có ở trên, mình chỉ viết lại thành bài hoàn chỉnh thôi nhé ^^!
Viết chương trình nhập vào n nguyên dương (1≤n≤20)
a)      Tính S=-1+2-3+…+(-1)n.n
b)      Nhập vào mảng A gồm các số nguyên có n phần tử. In mảng vừa nhập.
c)      Kiểm tra dãy số có đối xứng hay không
d)      Sắp xếp các số trong mảng A vừa nhập theo thứ tự giảm dần.
e)      Chèn số h vào mảng A và sắp xếp theo thứ tự giảm dần.

Giải:
MỘT SỐ DẠNG BÀI TẬP PASCAL 11

MỘT SỐ DẠNG BÀI TẬP PASCAL 11 

MỘT SỐ DẠNG BÀI TẬP PASCAL

MỘT SỐ DẠNG BÀI TẬP PASCAL 

BÀI TẬP PASCAL

BÀI TẬP PASCAL

Kết quả như sau:
BÀI TẬP PASCAL 11

BÀI TẬP PASCAL 11

Mỗi bài đều có nhiều cách làm khác nhau, các bạn có thể làm theo cách khác mình và hay hơn mình, nên có điều gì sai sót trong bài viết trên mong các bạn góp ý, hay có điều chi thắc mắc thì hãy để lại bình luận nhé! Cảm ơn vì đã quan tâm đến bài của mình ^^!
Chúc các bạn may mắn! <3
Tag: STEPHEN HAWKING | PHÁT TRIỂN MỘT LOẠI THUỐC MỚI TẠI HOA KỲ | CES 2017 | VẬT LIỆU NANO LÀ GÌ?

2 nhận xét:

  1. Hay lắm bạn, bạn chỉ mình bài này được không :
    ''kiểm tra dãy tăng hay giảm'' và ''kiểm tra các phần tử của dãy có bằng nhau không''.Cảm ơn bạn trước

    Trả lờiXóa