Đề: Viết chương trình nhập từ bàn phím số nguyên dương n (n<= 100) và dãy a gồm n số nguyên a1, a2, ..., an có giá trị tuyệt đối không lớn hơn 1000. Hãy cho biết dãy a có phải là một cấp số cộng hay không và thông báo kết quả ra màn hình.
n=5;
a1=1; a2=2; a3=3; a4=4; a5=5;
Output: Day so vua nhap la mot cap so cong
Input:
n=5
a1=2; a2=3; a3=9; a4=4; a5=7;
Output: Dãy so vua nhap khong phai la mot cap so cong
Giải bài tập Turbo Pascal - Bài 5 trang 79 |
TEST
Input:n=5;
a1=1; a2=2; a3=3; a4=4; a5=5;
Output: Day so vua nhap la mot cap so cong
Input:
n=5
a1=2; a2=3; a3=9; a4=4; a5=7;
Output: Dãy so vua nhap khong phai la mot cap so cong
Ý tưởng
Ta đã biết một dã số là một cấp số cộng nếu các phần tử liên tiếp hơn kém nhau một số d. Vậy ta sẽ nhập dãy số vào một mảng rồi kiểm tra hiệu của (a[i]-a[i-1]) có bằng (a[i+1] - a[i]) không, sau đó i lại được tăng thêm 1.
Nếu (a[i]-a[i-1]) khác (a[i+1] - a[i]) thì chắc chắn dãy số không phải là một cấp số cộng nên ta sẽ gán hàm kiểm tra là check:=false ngay và kết thúc vòng lặp bằng lệnh break bởi có kiểm tra tiếp thì cũng không có tác dụng gì.
Ngay từ đầu chương trình thì biến check đã được gán giá trị true nên nếu không có trường hợp (a[i]-a[i-1]) khác (a[i+1] - a[i]) nào xảy ra thì biến check luôn là true.
Nếu (a[i]-a[i-1]) khác (a[i+1] - a[i]) thì chắc chắn dãy số không phải là một cấp số cộng nên ta sẽ gán hàm kiểm tra là check:=false ngay và kết thúc vòng lặp bằng lệnh break bởi có kiểm tra tiếp thì cũng không có tác dụng gì.
Ngay từ đầu chương trình thì biến check đã được gán giá trị true nên nếu không có trường hợp (a[i]-a[i-1]) khác (a[i+1] - a[i]) nào xảy ra thì biến check luôn là true.
Chương trình
{Bai tap 5, trang 79, sgk tin hoc 11 } PROGRAM KIEM_TRA_CAP_SO_CONG; uses crt; type arrint = array[1..100] of integer; var check: boolean; a : arrint; n,i : integer; BEGIN clrscr; {Nhap phan tu cua day so } writeln('Nhap so phan tu cua day so (n<=100)'); readln(n); for i:= 1 to n do begin writeln('Nhap phan tu n(',i,')'); readln(a[i]); end; {Kiem tra cap so cong} check:= true; {Gia su day so la mot cap so cong} for i:= 2 to (n-1) do if (a[i] - a[i-1]) <> (a[i+1] - a[i]) then begin check:=false; break; end; if check=true then writeln('Day so vua nhap la mot cap so cong') else writeln('Day so vua nhap khong phai la mot cap so cong'); readln; END.
This comment has been removed by a blog administrator.
ReplyDeletesai roi be khanh oi
ReplyDeleteso stupiud!!!!!!!!
hello
ReplyDeletenung qua huhu
ReplyDeleteeya
ReplyDelete