II. BÀI TẬP – VẬN DỤNG
Bài tập:
B1. Hãy liệt kê các lỗi có trong chƣơng trình dƣới đây và sửa lại cho đúng:
Var a,b:= integer;
Const c:=300;
Begin
a:=100;
b:=c/a;
Writeln(b)
End.
B2. Hãy chỉ ra INPUT và OUTPUT của các bài toán sau:
a) Tính tổng của các phần tử lớn hơn 0 trong dãy n số cho trước.
b) Tìm số các số có giá trị nhỏ nhất trong n số đã cho.
B3. Mỗi điều kiện hoặc biểu thức cho kết quả đúng hay sai?
a) 120 là số chia hết cho 5.
b) Nếu ba cạnh a, b và c của một tam giác thỏa mãn c2 > a2 + b2 thì tam giác đó có một
góc vuông.
c) 152 > 200.
d) x2 < 1.
B4. Các câu lệnh Pascal sau đây đƣợc viết đúng hay sai? Nếu câu lệnh nào sai hãy
sửa lại cho đúng
a) if x:=7 then a:=b;
b) if x > 5; then a:=b;
c) if x > 5 then; a:=b;
d) if x > 5 then a:=b; m:=n;
e) if x > 5 then a:=b; else m:=n;
f) if n > 0 then begin a:=0; m:=-1 end else c:=a;
B5. Với mỗi câu lệnh sau đây giá trị của biến X sẽ là bao nhiêu, nếu trƣớc đó giá trị
của X bằng 10?a) if (45 mod 3) = 0 then X:= X+1;
b) if X > 10 then X:= X+1;
B6. Câu lệnh sau là đúng hay sai?
If a>b then writeln(‘a>b’) else
If aM then M:=M+N; N:=N-1;
B11. Hãy khai báo một mảng gồm 50 phần tử, dữ liệu kiểu mảng là integer.
B12. Các khai báo biến mảng sau đây trong Pascal đúng hay sai?
a) Var A: Array[1,,100] of integer;
b) Var X: Array[5…..10] of real;
c) Var A: Array[1..10,51] of integer;
d) Var A: Array[3,4..5,8] of real;
e) Var N: Array[100..10] of real;
B1:
Var a : integer; b:real;
Const c=300;
Begin
a:=100;
b:=c/a
Writeln(‘Gtri B luc nay= ‘, b;
End.
B2:
a) Input: Dãy N cho trước
Output: Tính tổng của các phần tử lớn hơn 0 trong dãy N
b) Input: Dãy N cho trước
Output: Số các số có giá trị nhỏ nhất trong dãy N
B3:
a) Đúng vì 120 chia 5 bằng 24
b) Sai vì nếu $c^{2}=a^{2}+b^{2}$ thì đó mới là một Δvuông
c) Sai do 152<200. Hoặc nếu là $15^{2}$ thì $15^{2}>200$ vì kết quả của $15^{2}$ = 225>200 nên đây là phép so sánh đúng.
d) Hoặc đúng nếu -1 < x < 1;
Hoặc sai nếu x ≤ 1 hoặc x ≥ 1.
B4:
Sai: Ý a,b,e
Đúng: Số còn lại
*Nếu cần giải thích thì hãy comment bên dưới!
B5
a) Vì 45 chia hết cho 3 nên giá trị x lúc này được tăng thêm 1 đơn vị tức x=11.
b) Vì x=10. Mà điều kiện cho là x>10 nên x vẫn được giữ nguyên.
B6:
Trong các câu lệnh writeln không có dấu ” ‘ ” mà chỉ có ” ‘ ” nên sai. Mặt khác, phải đổi điều kiện “a<b và writeln(‘a<b’)” sang “write(‘a=b’); Nếu không có các cách khắc phục trên, câu lệnh ghép này sẽ sai.
B7:
a) Sai ở chỗ giá trị cuối không được cho là kiểu thập phân, mà chỉ có kiểu nguyên dương. Dấu nháy trong () sai.
b) Đúng
c) Sai do Gtri đầu và Gtri cuối phải ∈ kiểu nguyên dương. Mặt khác, nếu trong writeln() mà thuộc kiểu dòng chữ thì phải có 2 dấu nháy để máy hiểu đây là dòng câu lệnh chữ.Còn nếu đây là phép gán tổng thì phải là: “s:=s+i” rồi sau đó mới thêm writeln(s) để in kết quả s
d) Sai do nếu đây là một phép lặp chạy ngược từ 1000-> 10 thì phải là: “For i:=1000 downto 10 do writeln(i);”. Hoặc không thì máy sẽ hiểu là sai do for..do chạy phải có gtri đầu nhỏ hơn hoặc bằng gtri cuối.
B8:
Chương trình pascal này sai. Do sau For..do không có câu lệnh mà lại có ” ; “
B9: Tự làm
B10:
a) Sau while..do là một phép so sánh, chứ không phải lệnh gán.
b) Sai do đây là một câu lệnh lặp với số lần chưa biết trước, phải có “begin” và “end;” sau while…do
c) Sai do sẽ rơi vào vòng lặp vô hạn. Vì điều kiện luôn đúng, không sai.
d) Sau “M:=0” không có “;” . Mặt khác, chỉ có while..do chứ không có while..then.
B11:
Uses Crt;
Var a:array[1..1000] of integer;
i,n:integer;
Begin
Clrscr;
Write(‘Nhap do dai N=’); Readln(n);
For i:= 1 to n do
Begin
Write(‘Nhap a[‘,i,’]=’); Readln(a[i]);
End;
Readln
End.
B12:
a) Sai do Trong array[] không có ” ,, “.
b) Sai do thừa 3 dấu “.” trong ngoặc [].
c) Các chỉ số phần tử không thuộc kiểu thập phân mà chỉ thuộc kiểu nguyên dương.
d) Như ý trên.
e) Chỉ số đầu phải nhỏ hơn chỉ số cuối trong [] khi khai báo mảng.