Pascal: SOLUTIONS BÀI TẬP 4
Bài tập 4.1:
Mã chương trình:
Program In_So_Le; uses crt; var i,n:integer; begin clrscr; Repeat write('Nhap so n: ');readln(n); until n>0; i:=1; while i<=n do begin write(i:3,', '); i:=i+2; end; readln end. |
Nhận xét:
- Mọi vòng lặp For ... to ... do đều có thể thay thế bằng vòng lặp while ... do.
- Đoạn mã:
Repeat
write('Nhap so n: ');readln(n);
until n>0;
Dùng để kiểm tra, khống chế điều kiện của dữ liệu vào.
- Trong vòng lặp while nhất thiết phải có một câu lệnh làm thay đổi điều kiện lặp. Ở đây là i:=i+2. Nếu không có sẽ dẫn đến trường hợp lặp vô hạn. Chương trình chạy mãi mà không có lối ra (Không thoát ra khỏi vòng lặp được).
Bài tập 4.2:
Mã chương trình:
Program Giai_Thua_while; uses crt; var n, gt:longint; begin clrscr; Repeat write('Nhap so n: ');readln(n); until n>0; gt:=1; while n>0 do begin gt:=gt*n; n:=n-1; end; writeln('Giai thua cua n la: ',gt); readln end. |
Nhận xét:
Tiết kiệm được một biến i để chạy nhưng làm thay đổi n nên khi xuất ra chỉ có thể xuất một câu chung chung “Giai thua cua n la:”.
Bài tập 4.3:
Mã chương trình:
Program Giai_thua_kep; uses crt; var n,gt:longint; begin Repeat write('Nhap so n: ');readln(n); until n>0; gt:=1; while n>0 do begin gt:=gt*n; n:=n-2; end; write('Giai thua la: ',gt); readln end. |
Nhận xét:
- Với thuật toán trên ta không cần xét n là chẵn hay lẻ.
Bài tập 4.4:
Mã chương trình:
Program Tong_Repeat; uses crt; var i: byte; so, tong: real; begin write('NHAP CAC SO - NHAP 0 DE NGUNG '); readln; repeat clrscr; write('Nhap so thu ',i,': '); readln(so); tong:=tong+so; i:=i+1; until so=0; write('Tong la: ',tong:6:1); readln end. |
Bài tập 4.5:
Mã chương trình:
Program UCLN; uses crt; var a,b,r:byte; begin clrscr; writeln('CHUONG TRINH TIM UCLN CUA HAI SO'); write('Nhap a: ');readln(a); write('Nhap b: ');readln(b); r:=a mod b; while r<> 0 do begin b:=r; a:=b; r:=a mod b; end; write('UCLN cua hai so la: ',b); readln end. |
Bài tập 4.6:
Mã chương trình:
Program Fi_Bo_na_xi; Var n, F_2,F_1, F: Longint; Begin Write('Nhap n: ');Readln(n); F_1:=1; F_2:=1; Write(F_2,';',F_1,';'); Repeat F:=F_2+F_1; if F< n then Write(F,';'); F_2:=F_1; F_1:=F; Until F>n; Readln; End. |
Nhận xét:
Giữa Repeat ... until có thể chứa nhiều lệnh mà không cần ghép.
Hãy phát triển bài tập theo hướng chỉ in một phần tử trong dãy lớn nhất nhưng bé hơn n hoặc theo hướng phần tử thứ k của dãy.