Tóm tắt chương iv - Câu trang SGK Tin học

Mảng có các kiểu như biến : integer.Real.char.String.byte....- Tham chiếu đến phần tử của mạng có 2 kiểu :** Với mảng 1 chiều:- Cách tham chiếu đến mảng: A[i] với i là chỉ số phân tử trong mảng.vd: Vẫn xét mảng 10 20 30 5 6 7A[1]=10; A[2]=20; A[3]=30; A[4]=50; A[5]=6; A[7]=7- Cách khai báo mảng: Có 2 cách khai báo:Khai báo trực tiếp: Thường thì cách khai báo trực tiếp được dùng nhiều hơn vì nó ngắn gọn.var :array[kiểu chỉ số] of ;ví dụ:a:array[1..100] of integer;b,c:array[1..250] of integer;Khai báo gián tiếp:type =array[kiểu phần tử] of ;var :;vd:type mang=array[1..100] of integer;var a,b,c:mang;**Với mảng 2 chiều :- Tham chiếu: Vì mảng 2 chiều là bảng nên sẽ cần chỉ số hàng và chỉ số cột: A[i,j] với i là chỉ số hàng, j là chỉ số cột.- Khai báo: Tương tự như mảng 1 chiều nhưng thêm chỉ số cột.

Câu 1 trang 79 SGK Tin học 11

Tại sao mảng là kiểu dữ liệu có cấu trúc?

Trả lời:

Mảng là kiểu dữ liệu có cấu trúc bởi vì mảng [một chiều, hai chiều hay nhiều chiều] là kiểu có cấu trúc được đề cập tới sớm nhất trong các ngôn ngữ lập trình. Nó được xây dựng từ những kiểu dữ liệu dã có theo quy tắc khuôn dạng do ngôn ngữ lập trình cung cấp. Nó được dùng để chỉ định một nhóm đối tượng cùng một tính chất nào đó. Chẳng hạn, vectơ là một nhóm các số mà mỗi số ta có thể xác định chỉ cần biết chỉ số. Như vậy, để khai báo kiểu mảng phải chỉ ra kiểu dữ liệu chung của các phần tử và kiểu chỉ số.

Chúng ta phải khai báo kích thước cùa mảng bởi vì để cách đánh số các phần tử của nó.


Câu 2 trang 79 SGK Tin học 11

Tại sao phải khai báo kích thước của mảng?

Trả lời:

Các phần tử của mảng có thể có những kiểu sau đây: real, boolean, integer, longint


Câu 3 trang 79 SGK Tin học 11

Các phần tử của mảng có thể có những kiểu gì?

Trả lời:

Tham chiếu đến phần tử của mảng một chiều được xác định bởi tên mảng cùng với chỉ số, được viết trong cặp ngoặc [ và ] [ví dụ nhietdo[20J]. Còn tham chiếu đến phần tử của mảng hai chiều được xác định bởi tên mảng cùng với hai chỉ số được phân cách bởi dấu phẩy và viết trong cặp ngoặc [ và ] [ví dụ Arrlnt[5, 9J].


Câu 4 trang 79 SGK Tin học 11

Tham chiếu đến phần tử của mảng bằng cách nào?

Trả lời:

Mảng có các kiểu như biến : integer.Real.char.String.byte....

- Tham chiếu đến phần tử của mạng có 2 kiểu :
** Với mảng 1 chiều:
- Cách tham chiếu đến mảng: A[i] với i là chỉ số phân tử trong mảng.
vd: Vẫn xét mảng 10 20 30 5 6 7
A[1]=10; A[2]=20; A[3]=30; A[4]=50; A[5]=6; A[7]=7

- Cách khai báo mảng: Có 2 cách khai báo:

Khai báo trực tiếp: Thường thì cách khai báo trực tiếp được dùng nhiều hơn vì nó ngắn gọn.

var :array[kiểu chỉ số] of ;

ví dụ:
a:array[1..100] of integer;
b,c:array[1..250] of integer;

Khai báo gián tiếp:

type =array[kiểu phần tử] of ;
var :;

vd:
type mang=array[1..100] of integer;
var a,b,c:mang;

**Với mảng 2 chiều :
- Tham chiếu: Vì mảng 2 chiều là bảng nên sẽ cần chỉ số hàng và chỉ số cột: A[i,j] với i là chỉ số hàng, j là chỉ số cột.

- Khai báo: Tương tự như mảng 1 chiều nhưng thêm chỉ số cột.

Câu 5 trang 79 SGK Tin học 11

Viết chương trình nhập từ bàn phím số nguyên dương N [N100] và dãy A gồm N số nguyên A1...ANcó 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ành hình.

Trả lời

Để lập chương trình nhập từ bàn phím số nguyên dương N [N=1000] or [N-1000] and [A[i]0 then writeln['A khong la cap so cong'] else writeln[A la cap so cong'];

readln,

end.

Khi chạy chương trình, nếu nhập số phần tử cùa dãy N= 5 và các phần tử của dãy theo thứ tự là 2,4,6, 8,10 thì chương trình đưa ra thông báo A la cap so cong[Hình 59].

Nhưng khi nhập N không thỏa mãn điều kiện đầu bài, chẳng hạn N= -5 thì chương trình đưa ra thông báo Mời nhập lại!. Khi đó, ta phải vào lại N, chẳng hạn, N= 5 và nhập tiếp các phần tử của dãy, chẳng hạn: 1, 3, 5, 7, 9 thì kết quả của chương trình: A la cap so cong [Hình 60].

Còn trong trường hợp các phần tử nhập vào của dãy không thỏa mãn điều kiện A[i] < 1000 và A[i] > -1000: thì ta phải nhập lại các phần tử của dãy cho đến khi chương trình đưa ra thông báo A là cấp số cộng hay không?

Chẳng hạn, ta nhập vào dãy N= 7 phần từ với giá trị các phần tử lần lượt như sau:

2, 5, 7 8, 9, 4, 7 [ở phần tử thứ tư lúc đầu nhập vào số-1500 thì chương trình yêu cầu nhập lại và đã nhập vào số 8] thì chương trình dưa ra thông báo: " A khong la cap so cong* [Hình 62].

Bài 6 trang 79 SGK Tin học 11

Viết chương trình nhập từ bàn phím số nguyên dương N [N100] và dãy A gồm N số nguyên A1, A2...ANcó 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

Trả lời

Đối với với bài toán này thì phần kiểm tra số nguyên dương N[N0 then NT:= false;

so_chan:=0; so_nt:=0;

{Nhap vao]

repeat

write['So phan tu cua day A [N0] and

[N1000] or [a[i]10 A [5] =11

thì chương trinh đưa ra thông báo:

So luong so chan: 2

So luong so le: 3

So luong so nguyen to: 3

Kết quả của chương trình như hình 63 sau đây:

Trong trường hợp số phần tử nhập vào và giá trị các phần tử của dãy A không thỏa mãn điều kiện thì chương trình sẽ có thông báo mời nhập lại. Chẳng hạn, trong các trường hợp sau đây:

A[1] = 12

A [ 2] = 2000 thì chương trình đưa ra yêu cầu Moi nhap lai A[2]= 800 A[3 = 17

A [ 4] = -1500 thì chương trình đưa ra yêu cầu Moi nhap lai A[4]= -200 A[5] =31 A [ 6 = 5 A[7 = 350

Kết quả chương trình đưa ra thông báo [Hình 64]:

So luong so chan: 4

So Luong so le: 3

So luong so nguyen to: 3

Câu 7 trang 79 SGK Tin học 11

Dãy F là dãy Phi-bo-na-xi nếu:

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

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ãyPhi-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?

Trả lời

Ta cần viết chương trình nhập vào 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-bô-nan-xi và đưa ra kết luận: với giá trị lớn nhất nào của N thì chương trình thực hiện được?

Chương trình:

program bai7_chuong4;

uses crt;

var

N,i: word;

F,F1,F2: word;

Begin

clrscr;

repeat

writeln['Tim so hang thu N cua day Fibonaxi, Nĩ=']];

readln[N];

if N Max then begin

Max: = A [ i, j ],Ind: = j 'n

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

End.

Hãy sửa lại chương trình trên khi yêu cầu bài toán thay dòng bằng cột.

Trả lời:

Có thể được chia thành ba đoạn chương trình sau đây:

Đoạn thứ nhất:Hai vòng lặp for-do lồng nhau ở đầu chưong trình có nhiệm vụ nhập vào một mảng hai chiều từ bàn phím

for i:= 1 to N do for j:= 1 to N do

begin

write['A[',i, , ',j, ']= ] ;

readln[A[i,j]];

end;

Đoạn thứ hai: Hai vòng lặp lồng nhau tiếp theo thực hiện việc tìm phần tử lớn nhất trên dòng thứ i hoán đổi vị trí phần tử này với phần từ vừa nằm trên dòng i vừa có chỉ số cột bằng 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 thứ ba: Hai vòng lặp lồng nhau cuối chương trình in ra mảng kết quả

for i:=1 to N do

begin

writeln;

for j:= 1 to N do write [A[i , j ] : 3 ];

end;

writeln

- Khi chạy chưomg trình trên, nhập vào N= 3 thì ta có mảng hai chiều 3x3 với 9 phần tử, chẳng hạn theo thứ tự như sau:

A[1,1]=4

A[1,2]=6

A[1,3]= 8

A[2,1]=3

A[2,2]= 7

A[2,3]= 9

A[3,l]= 4

A[3,2]=9

A[3,3]= 5

Ta nhận thấy rằng, ở dòng thứ nhất, phần tử lớn nhất của dòng là A[ 1,3 J= 8, phần từ có chỉ số dòng bằng chỉ số cột là A[1,1]= 4. Bởi vậy, sau khi tráo đổi thì giá trị của A[1,1]= 8, còn A[1,3]= 4. Vì vậy, dòng thứ nhất sau khi được tráo đổi là: A[1,1]= 8, A[ 1,2]= 6, A[ 1,3]=4.

Tương tự, ở dòng thứ 2 thì phần lớn nhất của dòng là A[2,3]= 9 sẽ được tráo đổi với phần tử A[2,2]= 7. Bởi vậy, sau khi tráo đổi thì giá trị của A[2,2]= 9, còn A[2,3]= 7. Vì vậy, dòng thứ hai sau khi được tráo đổi là:

A[2,1 ]= 3, A[2,2]= 9, A[2,3]= 7.

ở dòng thứ ba sau khi được tráo đổi là: A[3,1]= 4, A[3,2]= 5, A[3,3]=9.

Khi đó, các dòng sau khi được tráo đổi sẽ như sau:

A[1,1]= 8,A[1,2]= 6, A[1,3]= 4

A[2,1]=3,A[2,2]=9,A[2,3]=7

A[3,1]=4,A[3,2]= 5, A[3,3]= 9

Kết quả chương trình có dạng như hình 68 dưới đây:

Muốn sửa lại chương trình để thực hiện đổi chỗ phần tử lớn nhất trên cột với phần tử vừa nằm trên cột đó vừa có chỈ số dòng bằng chỉ số cột thì chì cần hoán đổi vị trí cỦa hai chỉ số trong đoạn thứ hai của chương trình. Điều đó có nghĩa là chỉ đổi i trở thành chỉ số thứ hai, chỉ số thứ hai trở thành chỉ số i trong các câu lệnh có liên quan. Như vậy, chỉ có đoạn thứ hai trong chương trình khác đi và trở thành như sau:

for i:= 1 to N do

begin

Max: = A [ 1, i ] ,Ind:= 1;

for j:= 2 to N do

if A[i,j] > Max then begin

Max:- A[j,i];

Ind:= j;

end;

Vsp:= A[i,i]; A[i,i]:= Max; A[Ind,i]:= Vsp;

{Hoac Vsp: =A[ i , i ] ,A [ i , i ] : =A [ Ind, i] ; A [Ind, i ] : =Vsp; }

end;

Do vậy, chương trình tìm trong mỗi cột phần tử lớn nhất rồi đổi chỗ nó với phần tử có chỉ số dòng bằng số cột là như sau:

progran Diag_2; var

N, j, Max, Ind, Vsp: integer;

A: array[1..15, 1...15] of integer;

Begin

write[Nhap N:],

readln[N];

for i:= 1 to N do for j:= 1 to N do

begin

write[1 A[,i,..,j, ]= ];

readln[A[i,j]];

end;

:or i:= 1 to N do begin

Max:= A[1,i];

Ind:= 1; for j:= 2 to N do

if A[j,i] > Max then

begin

Max: = A [ j , i ] ,Ind:= j;

end;

Vsp: = A[i,i],A [ i , i ] : = Max; A[Ind,i]:= Vsp;

{Hoac Vsp:=A[i,i];A[i,i]:=A[Ind,i]; A[Ind,i]:=Vsp;}

end;

for i:= 1 to N do

begin

writeln;

for j:= 1 to N do write[A[i,j]:3];

end;

vriteln

readln

End

A[1,1]=4

A[ 1,2]= 3

A[ 1,3]= 6

A[2,1]= 9

A[2,2]= 5

A[2,3]= 7

A[3,1]=5

A[3,2]= 9

A[3,3]=4

Ta nhận thấy rằng, phần tử lớn nhất của cột thứ nhất là 9 và nỏ sẽ tráo đổi với phần tử A[ 1,1]= 4. Tương tự, phần tử lớn nhất cùa cột thứ hai là 9 và nó sỗ tráo đổi với phần tử A[2, 2]= 5. Phần tử lớn nhất cùa cột thứ ba là 7 và nó sẽ tráo đổi với phần tử A[3, 3]= 4

Như vậy, các phần tử cùa mảng A sau khi đã tráo đổi như sau:

9 3 6

4 9 4

5 5 7

Kết quả chương trình như hình 69 dưới đây:

Câu 10 trang 80 SGK Tin học 11

Viết chương trình nhập vào 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ố thập phân xuất hiện trong xâu s. Thông báo kết quả ra màn hình.

Trả lời:

Chương trình nhập vào từ bàn phím xâu kí tự s có độ dài không quá 100. Cho biết số chữ số thập phân xuất hiện trong xâu s. Thông báo kết quả ra màn hình.

Chương trình:

program bai_10_chuong_4;

uses crt;

var

s: string[100];

i, dem: integer;

Begin

clrscr;

write['Nhap xau vao:']; readln[s]; dem:= 0;

for i:= 1 to length[s] do

if ['0'=18

then Lop [i]. xeploai:=A;

if [Lop[i].Toan+Lop[i].Van>=14] and

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

Bài Viết Liên Quan

Chủ Đề