[r]
(1)(2)Bài 1. Tìm phần tư lín nhÊt cđa d·y sè nguyªn (víi n 250 vµ A[i] 500), nÕu d·y cã nhiỊu phần tử giá trị đ a số phần tử lớn
* INPUT: Nhập số nguyên d ơng n dÃy n số nguyên d ơng a1,a2, ,an
(3)Quả lớn
Quả lớn
nhất
ồ! Quả lớn Tìm qu¶ lín nhÊt råi!
tht toán tìm max
(4)1 Nhập n vµ d y a· 1, ,an;
2 Max a1 ; i 1;
3 NÕu i>N ® a MAX vµ chØ sè i => KÕt thóc;
(5)1 NhËp n vµ d y a· 1, ,an; Write(‘ Nhap vao so luong phan tu:’);
Readln(n);
For i:=1 to n begin
write(‘ Phan tu thu ’ ,i, ’ = ’); readln(a[i])
end;
2 Max a1 ; i 1; Max:=a[1]; csmax:=1;
For i :=2 to n
IF a[i]>max then begin
max:=a[i];
csmax:=i; end;
3 Nếu i>N đ a MAX chỉ số i => KÕt thóc;
(6)Program Tim_Max;
Uses crt;
Type dayso = Array[1 250] of integer;
Var
A : dayso ; i,n,max,csmax : integer;
BEGIN
Clrscr;
write(‘ Nhap vao so phan tu cua day so : ’) ; readln(n) ;
For i := to n Begin
write(‘ Phan tu thu ‘,i,’ = ‘) ; readln(A[i]) ;
End; Max := A[1[ ; csmax :=1 ;
For i := to n
If (A[i]>max) Then
begin
max := a[i]; csmax=i; end;
Writeln(‘ Gia tri cua phan tu Max : ’,Max) ; Writeln(‘ Chi so cua phan tu Max : ’, csmax) ; Readln ;
(7)Nhap vao so phan tu cua day so : 7
Phan tu thu = 15 20 16 25 18 12 19
Gia tri cua phan tu Max : 25 Chi so cua phan tu Max :
Ch ơng trình chạy cho kết nh sau:
(8)Bài 2. Nhập vào dÃy số nguyên, xếp dÃy theo trình tự không giảm
* INPUT: Nhập số nguyên d ơng n dÃy n số nguyên d ơng a1,a2, ,an
(9)3
2
9
7
6
Cho d·y sè sau:
Giả sử:
Mỗi số đ ợc xem nh phần tử;
L ợt 1:
•i chạy từ đầu d y đến vị trí ã
[ci d y -1]·
•Khi a[i]>a[i+1] tức phần tử bên nặng phần tử bên d ới => phần tử chìm xuống phàn tử bên d ới
lờn (trỏo i v trớ).
ãSau l ợt thứ nhất, Phần tử có trọng l ợng lớn nhÊt sÏ ë vÞ trÝ cuèi cïng.
Phần tử thứ i giá trị A[i]
L ợt 2:
ãi chy t u d y đến vị trí ã
[cuèi d y - 2]· (bá qua phÇn
tư ci).
ãSau l ợt thứ hai phần tử có trọng l ợng lớn thứ hai nằm sát phần tư lín nhÊt
(10)Số phần tử l ợt duyệt (j) giảm từ n xuống hai phần tử.
Tại l ợt duyệt:
- Cho i chạy từ đến số phần tử -1,
nÕu A[i]>A[i+1] th×
tráo đổi vị trí A[i] A[i+1]
th«ng qua biÕn trung gian (Tg).
1
For j := n downto do
2 For i := to j-1 do
IF A[i]>A[i+1] then
Tg := A[i]; A[i] := A[i+1]; A[i+1]:=Tg;
Begin
(11)Khai báo mảng chiều
Nhập mảng chiỊu
Xử lí mảng thuật tốn Tráo đổi
In kÕt qu¶
PROGRAM Sapxep; Uses crt;
Type dayso = Array[1 250] of integer; Var
i, j , n , tg : integer; A : dayso;
BEGIN
Clrscr;
write(‘ Nhap vao so phan tu cua day so : ’); readln(n);
For i := to n Begin
write(‘ Phan tu thu ‘,i,’ = ‘); readln(A[i]);
end;
For j := n downto do For i:= to j-1 do
If A[i]>A[i+1] Then begin
Tg := A[i]; A[i]:=A[i+1]; A[i+1]:=Tg; end;
Writeln(‘ Day so duoc sap xep ’); For i:=1 to n Write(A[i]:5);
Readln;
(12)Bµi NhËp vµo mét d·y A gồm N (N 250) số nguyên d ơng khác một số k Cho biết vị trí số hạng có giá trị k dÃy (nếu có) ? Thông báo kết hình
* INPUT: Nhập số nguyên d ơng n, dÃy n số nguyên d ơng a1,a2, ,an số nguyên k
(13)Lần l ợt từ số hạng thứ nhất, so sánh giá trị số hạng đang xét với k gặp đ ợc số hạng k, hoặc d y đ đ ợc xét hết khơng có số hạng có ó ó
giá trị k.
For i := to n do
IF A[i] = k then
Begin
Tim_thay:=true; cs:=i;
break; end;
Tim_thay := false;
IF tim_thay then writeln(‘Chi so tim duoc: ’,i) else writeln(‘Khong tim thay);
(14)Cách 2: Tìm kiếm nhị phân 10 9 8 7 6 5 4 3 2 1 i 33 31 30 22 21 9 6 5 4 2 A
Víi k = 21 d y A gồm 10 số hạng nh sau: Ã
L ợt thứ nhất: agiữa a5 = 9; < 21
vïng t×m kiÕm thu hĐp ph¹m vi tõ a6 a10;
33 31
30 22
21
L ỵt thø hai: agiữa a8 = 30; 30 > 21
vùng tìm kiếm thu hẹp phạm vi từ a6 a7;
L ợt thứ ba: agiữa a6 = 21; 21= 21
VËy chØ sè cần tìm i = 6.
22 21
6
(15)Dau:=1; Cuoi:=n; tim_thay:=false;
while ( Dau<= Cuoi) or NOT(tim_thay) do
Begin
Giua:= (Dau+Cuoi) div 2;
IF A[giua] = k then Tim_thay :=true
else
IF (A[Giua]>k) then Cuoi := Giua 1–
else Dau := Giua +1; end;
IF Tim_thay then Writeln(‘ Chi so tim duoc la : ’,Giua) Else Writeln(‘Khong tim thay’);
V× d y A d y tăngà à , ta thực thu hẹp nhanh phạm vi tìm kiếm bằng cách so sánh k với A[giua] xét tr ờng hợp:
- A[giua]=k tìm thấy số kết thúc;
- A[giua]>k Thu hẹp phía bên trái (Cuối = Giữa -1); - A[giua]<k Thu hẹp phía bên phải (Đầu = Gi÷a +1);
(16)