Trang chủ > Lớp 11 > Giải BT Tin học 11 > Giải bài tập Tin học 11 trang 79 và trang 80

Giải bài tập Tin học 11 trang 79 và trang 80

Bài 5 (trang 79 sgk Tin học lớp 11): 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... AN có giá trị tuyệt đối 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.

Bài giải:

Nhận xét:

- Nếu dãy chỉ có một số hoặc hai số thì chắc chắn là cấp số cộng.

- Nếu dãy có hơn hai số thì tính công sai là: a [1]-a [0]; sau đó duyệt cả mảng nếu có số nào vi phạm quy luật của cấp số cộng a [i] khác a [i-1]+d thì kết luận luôn không là cấp số cộng.

- Nếu đến cuối dãy mà không có số nào vi phạm thì kết luận là cấp số cộng.


program csc; uses crt; var a: array [1.. 100] of integer; i, n, d: integer; t: boolean; begin clrscr; write ('nhap so phan tu cua day '); readln (n); for i: =1 to n do begin write ('a [', i, ']='); readln (a [i]); end; if n< =2 then write ('la cap so cong ') else begin d: =a [2]-a [1]; t: =true; for i: =3 to n do if a [i]< > a [i-1]+d then begin t: =false; break; end; if t then write ('la cap so cong') else write ('khong phai cap so cong '); end; readkey; end.

Kết quả:

* Trường hợp là cấp số cộng:

Bài 5 trang 79 sgk Tin học 11 ảnh 1

* Trường hợp không là cấp số cộng:

Bài 5 trang 79 sgk Tin học 11 ảnh 2
Bài 6 (trang 79): 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 đưa ra những thông tin sau:

a) Số lượng số chẵn và số lượng số lẻ

b) Số lượng số nguyên tố trong dãy

Bài giải:

a) Duyệt toàn bộ mảng, nếu số nào chia hết cho 2 thì là số chẵn, còn lại là số lẻ. Ta dùng một biến để đếm số chẵn. Sau đó lấy số phần tử trừ đi số phần tử chẵn.

Chương trình được viết như sau:


program csc; uses crt; var a: array [1.. 100] of integer; i, d, n: integer; begin clrscr; write ('nhap so phan tu cua day '); readln (n); d: =0; for i: =1 to n do begin write ('a [', i, ']='); readln (a [i]); end; for i: =1 to n do if a [i] mod 2=0 then d: =d+1; writeln ('so so chan la ', d, ' so so le la ', n-d); readkey; end.
Bài 6 trang 79 sgk Tin học 11 ảnh 1

b) Số lượng số nguyên tố trong dãy

Duyệt toàn bộ các số trong dãy với mỗi số ta kiểm tra xem số này có chia hết số nào từ 2 đến a [i]-1 của nó không? Nếu không thì kết luận là số nguyên tố.

program csc;
uses crt;
var a: array [1.. 100] of integer;
i, d, n, j: integer;
t: boolean;
begin clrscr;
write ('nhap so phan tu cua day ');
readln (n);
d: =0;
for i: =1 to n do begin write ('a [', i, ']=');
readln (a [i]);
end;
for i: =1 to n do begin t: =true;
for j: =2 to a [i]-1 do begin if (a [i] mod j=0) and (a [i]< > 2) then begin t: =false;
break;
end;
end;
if t=true then d: =d+1;
end;
writeln ('so cac so nguyen to trong day la ', d);
readkey;
end. Kết quả:
Bài 6 trang 79 sgk Tin học 11 ảnh 2

Bài 7 (trang 79): Dãy F là dãy Phi-bo-na-xi nếu:

F0=0, F1 = 1, Fn = Fn-1 + Fn-2 với N ≥ 2

Viết chương trình nhập từ bàn phím số nguyên dương N và đưa ra màn hình số hạng thứ N của dãy Phi-bo-na-xi. Chương trình của bạn thực hiện với giá trị lớn nhất của N là bao nhiêu?

Bài giải:

Sử dụng 2 biến để lưu giá trị hiện tại của 2 số fibonaci. Mỗi lần sinh ra số fibonaci mới ta sẽ gán lại giá trị mới cho 2 biến này bằng đoạn code;

F1: =F0+F1;

F0: =F1-F0;


program csc; uses crt; var n, i: integer; f0, f1: integer; begin clrscr; write ('nhap so n: '); readln (n); f0: =0; f1: =1; for i: =2 to n do begin f1: =f0+f1; f0: =f1-f0; end; write ('so fibonaci thu n la: ', f1); readkey; end.

Chương trình chạy tối đa đến N=23 với số fibonaci là 28657. Nếu lên đến số 24 sẽ vượt quá phạm vi của biến kiểu integer.

Bài 8 (trang 79): Chương trình sau thực hiện những gì?
program BT8; const NMax = 50; type Mass = array [1... NMax, O.. NMax-1] of real; var A: Mass; i, j N: byte; C: real; begin Write ('Nhap N=? '); readln (N); for i: = 1 to N do for 0 to N-1 do begin write ('A [i, j; readln (A [i, j]) end, for i: = 1 to N do for j: = 1 to N-1 do begin C: = A [i, j]; A [i, j]: = A [N-i+1, j] A [N-i+1, j]: = C; end; for i: =1 to N do begin for j: =1 to N— 1 do write (A [i, j]: 5: 2, ' '); writeln end; End.

Bài giải:

Chương trình thực hiện việc: Hoán đổi vị trí dòng thứ i với dòng thứ N-i+J, nghĩa là hoán đổi vị trí dòng đầu tiên với dòng cuối cùng của màng hai chiều, dòng thứ hai từ trên xuống với dòng thứ hai từ dưới lên,..

Việc hoán đổi vị trí dòng thứ i với dòng đối xứng với nó được thực hiện khi i nhận giá trị từ 1 đến N, làm cho mỗi dòng được hoán đổi vị trí hai lần. Do vậy, cuối cùng mảng A không thay đổi so với ban đầu.

Bài 9 (trang 80): Cho mảng hai chiều kích thước nxm với các phần tử là những số nguyên. Tìm trong mỗi dòng phần tử lớn nhất rồi đổi chỗ nó với phần tử có chỉ số dòng bằng chỉ số cột.
program Diag; uses crt; Var N, i, j, Max, Ind, Vsp: integer; A: array [1.. 15,1.. 15] of integer; begin clrscr; write ('nhap N nho hon 15: '); readln (N); for i: =1 to N do for j: =1 to N do begin write ('a [', i, ', ', j, ']='); readln (a [i, j]); end; for i: =1 to N do begin Max: =A [i, 1]; Ind: =1; for j: =2 to N do if A [i, j]> Max then begin Max: =A [i, j]; Ind: =j; end; vsp: =A [i, i]; A [i, i]: =Max; A [i, Ind]:=vsp; end; for i: =1 to N do begin writeln; for j: =1 to N do write (a [i, j]: 3); end; writeln readkey; end.

Bài giải:


for i: =1 to N do begin Max: =A [i, 1]; Ind: =1; for j: =2 to N do if A [i, j]> Max then begin Max: =A [i, j]; Ind: =j; end; vsp: =A [i, i]; A [i, i]: =Max; A [i, Ind]:=vsp; end;

Đoạn code này có nhiệm vụ duyệt từng hàng. Ban đầu gán phần tử đầu tiên của hàng là max. Sau đó nếu trong hàng đó có phần tử nào lớn hơn max thì lưu lại giá trị max và chỉ số của phần tử đó trong hàng.

Để sửa chương trình trên để tìm kiếm trong mỗi cột thì ta sửa lại như sau:


program Diag; uses crt; Var N, i, j, Max, Ind, Vsp: integer; A: array [1.. 15,1.. 15] of integer; begin clrscr; write ('nhap N nho hon 15: '); readln (N); for i: =1 to N do for j: =1 to N do begin write ('a [', i, ', ', j, ']='); readln (a [i, j]); end; for i: =1 to N do begin Max: =A [i, 1]; Ind: =1; for j: =2 to N do if A [i, j]> Max then begin Max: =A [i, j]; Ind: =j; end; vsp: =A [i, i]; A [i, i]: =Max; A [i, Ind]:=vsp; end; for i: =1 to N do begin writeln; for j: =1 to N do write (a [i, j]: 3); end; writeln; readkey; end.

Kết quả:

Bài 9 trang 80 sgk Tin học 11 ảnh 1

Bài 10 (trang 80): Viết chương trình nhập từ bàn phím xâu kí tự S có độ dài không quá 100. Hãy cho biết có bao nhiêu chữ số xuất hiện trong xâu S. Thông báo kết quả ra màn hình.

Bài giải:

Ta chỉ cần duyệt lần lượt từng kí tự của xâu S nếu nó nằm trong đoạn từ '0' đến '9' thì ta tăng biến đếm lên 1.


program Diag; uses crt; Var s: string [100]; i, d: integer; begin clrscr; d: =0; write ('Nhap xau S: '); readln (s); for i: =1 to length (s) do if ('0'< =s [i]) and (s [i]< ='9') then d: =d+1; writeln ('so ki tu la so xuat hien trong xau s la ', d); readkey; end.

Kết quả:

Bài 10 trang 80 sgk Tin học 11 ảnh 1

Bài 11 (trang 80): Hãy bổ sung thêm vào chương trình Xep_loai ở bài 13 những lệnh cần thiết để chương trình đưa ra danh sách học sinh xếp loại A.

Bài giải:

Khi in ra kết quả ta chỉ việc kiểm tra loại học sinh xem xếp loại có phải là 'A' hay không. Nếu là 'A' thì in kêt quả ra màn hình.

Chương trình được viết như sau:

program xep_loai;
uses crt;
const max= 60;
type Hocsinh = record hoten: string [30];
ngaysinh: string [10];
Diachi: string [50];
Toan, Van: real;
Xeploai: char;
end;
var Lop: array [1.. max] of hocsinh;
N, i: byte;
Begin clrscr;
write ('So luong hoc sinh trong lop N= ');
readln (N);
for i: = 1 to N do begin writeln ('Nhap so lieu ve hoc sinh thu', i, ': ');
Write ('Ho va ten: ');
readln (lop [i]. hoten);
Write (' Ngay sinh: ');
readln (lop [i].ngaysinh);
Write (' Dia chi: ');
readln (lop [i].Diachi);
Write ('Diem Toan: ');
readln (lop [i]. Toan);
Write ('Diem Van: ');
readln (lop [i]. Van);
If Lop [i]. Toan+Lop [i]. Van > =18 then Lop [i]. xeploai: ='A';
if (Lop [i].Toan+Lop [i].Van> =14) and (Lop [i]. Toan+Lop [i]. Van < 18) then Lop [i]. xeploai: ='B';
if (Lop [i].Toan+Lop [i].Van> =10) and (Lop [i]. Toan+Lop [i]. Van > =14) then Lop [i]. xeploai: ='C';
if (Lop [i].Toan+Lop [i].Van< =10) then Lop [i].xeploai: ='D';
end;
clrscr;
writeln ('Danh sach xep loai hoc sinh trong lop: ');
for i: =1 to N do if Lop [i].xeploai='A' then writeln (Lop [i].Hoten: 30, ' – Xep loai: ', Lop [i]. Xeploai);
readln End.