Write( ' X [',i, '] = ' ); (*Tạo chỉ dẫn để biết mà gõ vào *) Readln (X[i] ); (*Vào số nguyên qua bàn phím *)
End;
Writeln('Vào mảng Y');
For i:=1 To 5 Do Begin
Write( ' Y [',i, '] = ' ); (*Tạo chỉ dẫn để biết mà gõ vào *) Readln (Y[i] ); (*Vào số nguyên qua bàn phím *)
End;
Writeln('Tính tổng Z:=X+Y');
For i:=1 To 5 Do Z[i]:=X[i]+Y[i]; (*Tính tổng hai mảng *)
End.
Ví dụ 3:
Giả sử ta muốn biết trong 50 lần gõ vào phím chữ cái trên bàn phím (ở chế độ
chữ nhỏ), có bao nhiêu lần gõ vào mỗi loại chữ cái nhỏ từ 'a' đến 'z'.
Program ChuongTrinhDem; Uses Crt;
Var
i : integer; Chr : Char
A: Array[ 'a'... 'z'] Of Integer;Begin Begin
For Chr := 'a' To ' z' Do A[Chr] :=0; (*Xoá mảng A *)
For i:=1 To 50 Do Begin
Readln (Chr);
A[Chr] :=A[Chr] + 1;(* đếm số lần xuất hiện *)
End;
For Chr:= 'a' To 'z' Do
If A[Chr] > 0 Then
Writeln ('Chu ', Chr, ' = ' , A[Chr] : 3);
End.
10.2 Xếp mảng.
Việc sắp xếp các phần tử của mảng tăng hoặc giảm dần là một việc hay xảy ra
trong cuộc sống. Sau đây sẽ trình bày một số phương pháp sắp xếp mảng qua các
ví dụ.
Đầu tiên đem phần tử thứ nhất lần lượt so sánh với các phần tử tiếp theo, nếu
nó lớn hơn thìđem đổi chỗ giá trị của hai phần tử so sánh. Kết quả sau lượt đầu,
phần tử đầu tiên giữ giá trị nhỏ nhất. Tiếp tục vòng hai, đem phần tử thứ hai so
sánh với các phần tử tiếp theo ....
Program XepMang; Uses Crt; Const N=10 ; Var a: Array[1..N] Of Integer;
tg: Integer ; (*tg là biến trung gian *)
i,j: Integer;
Begin
ClrScr;
(*Vào mảng *)
For i:=1 To n Do Begin
Write (' Vào a [' ,i ,' ] = '); Readln (a[i]); End; (*xếp mảng lớn dầnx *) For i:=1 To n-1 Do For j:=i+1 To n Do Begin
If a[i] >a[j] Then Begin
(*đổi chỗ phần tử cho nhau® *)
tg:=a[i]; a[i]: = a[j]; a[j]:= tg;
End; End;
(*In ra kết quả I*)
For i:=1 To n Do Writeln (a[i]:5); End. Ví dụ 2: Cộng hai ma trận cùng số dòng và cùng số cột: c(m,n) = a(m,n)+b(m,n) Program TongHaiMaTran; Const m =3; n=4; Var a, b, c: Array [1...m, 1...n ] Of Integer; i, j, k: Integer; Begin
(*Vào dữ liệu cho ma trận aV *) For i:= 1 To m Do For j:= 1 To n Do Begin Write( 'a[', i, ',' , j, '] =' ); Readln (a[i, j] ); End;
(*Vào dữ liệu cho ma trận bV *)
For i:= 1 To m Do For j := 1 To n Do Begin Write( 'b[', i, ',' , j, '] =' ); Readln (b[i,j] ); End; (*Cộng hai ma trậnC *) For i:=1 To m Do For j:= 1 To n Do c[i,j]:=a[i,j]+b[i,j]; (*Hiển thị ma trận CH *) For i:=1 To m Do Begin
For j:= 1 To n Do Write (C [I, J] : 5 ); (*In một hàng *) Writeln;
End; End.
Trong chương trình trên, việc vào dữ liệu cho ma trận được tiến hành theo từng
dòng.
Ví dụ 3: Ví dụ 2 được viết lại theo kiểu thủ tục:
Program TongHaiMaTran; Const
m =3; n=4;
Type
Mang= Array [1..m, 1..n] Of Real; Var
a,b,c: Mang;
Procedure VaoMang(Var x, y: Mang); Var
i, j : Integer;
Begin
(*Vào dữ liệu cho ma trận xV *)
For i:= 1 To m Do For j:= 1 To n Do
Begin
Write( 'x[', i, ',' , j, '] =' ); Readln (x[i, j] );
End;
(*Vào dữ liệu cho ma trận yV *)
For i:= 1 To m Do For j := 1 To n Do Begin Write( 'y[', i, ',' , j, '] =' ); Readln (y[i,j] ); End; End;
Procedure TongHaiMaTran(x,y:Mang; Var Tong:Mang);
Var I,j: Integer;
Begin For i:=1 To m Do For j:= 1 To n Do Tong[i,j]:=x[i,j]+y[i,j]; End; Begin VaoMang(a,b); TongHaiMaTran(a,b,c); For i:=1 To m Do Begin
For j:=1 To n Do Write(c[i,j]; Writeln;
End; End.
Câu hỏi và bài tâp:
1. Vào lương của 10 người sau đó tính tổng lương?
2. Vào tên củ 10 sinh viên sau đó xếp tên theo A,B,C.. 3. Vào dữ liệu cho ma trận có dạng sau:
1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 Sau đó chuyển thành: 0 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0
4. Tìm Max của mảng một chiều có 10 phần tử
5. Tìm Max của mảng A (10,12)
6. Cho hai mảng một chiều A và B hãy xếp hai mảng đó tăng dần sau đó trộn
hai mảng đó thành mảng C theo trật tự sau: a[1],b[1],a[2],b[2] v.v.
7. Cho ma trận thực dạng A [1..10,1..10] hãyđưa vào 100 thành phần của nó là các số ngẫu nhiên (Random), sau đó tính t ổng hai đường chéo chính. Tính tổng
tất cả các phần tử, trừ các thành phần của hai đường chéo chính.