Bài giảng Tin học Lớp 11 - Bài 13: Bài tập mảng một chiều

1. Nhập n và dãy a1,.,an;

2. Max ? a1 ; i ? 1;

3. Nếu i>N đa ra MAX và chỉ số i => Kết thúc;

4. Nếu a[i]>max thì max?a[i],

i ? i+1 => quay lại bớc 3.

Write(‘ Nhap vao so luong phan tu:’);

Readln(n);

For i:=1 to n do

 begin

 write(‘ Phan tu thu ’ ,i, ’ = ’);

 readln(a[i])

 end;

Max:=a[1]; csmax:=1;

 For i :=2 to n do

IF a[i]>max then

 begin

 max:=a[i];

 csmax:=i;

 end;

 

ppt 15 trang trandan 300
Bạn đang xem tài liệu "Bài giảng Tin học Lớp 11 - Bài 13: Bài tập mảng một chiều", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Tin học Lớp 11 - Bài 13: Bài tập mảng một chiều

Bài giảng Tin học Lớp 11 - Bài 13: Bài tập mảng một chiều
 hiện bằng pascal 
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 := 1 to n do 
	Begin 
	 write(‘ Phan tu thu ‘,i,’ = ‘) ; 
	 readln(A[i]) ; 
	 End; 
 Max := A[1[ ; csmax :=1 ; 
 For i := 1 to n do 
	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 ; 
END. 
Nhap vao so phan tu cua day so : 
7 
Phan tu thu 1 = 
15 
20 
16 
25 
18 
12 
19 
Gia tri cua phan tu Max : 25 
Chi so cua phan tu Max : 4 
Chương trình chạy và cho kết quả như sau: 
Phan tu thu 2 = 
Phan tu thu 3 = 
Phan tu thu 4 = 
Phan tu thu 5 = 
Phan tu thu 6 = 
Phan tu thu 7 = 
Bài 2 . Nhập vào một dãy số nguyên, sắp xếp dãy theo trình tự không giảm. 
* INPUT : Nhập số nguyên dương n và dãy n số nguyên dương a 1 ,a 2 ,...,a n . 
* OUTPUT : Dãy số được sắp xếp theo trình tự không giảm. 
Các em hãy cho biết để giải bài toán trên, ở lớp 10 chúng ta dùng thuật toán gì? 
 Là Thuật toán tráo đổi kiểu nổi bọt từ trên xuống! 
3 
2 
9 
7 
6 
Cho dãy số sau: 3 2 9 7 6 
Giả sử: 
	  Mỗi phần tử được xem như một bọt nước; 
Lượt 1: 
i chạy từ đầu dãy đến vị trí [cuối dãy -1] 
Khi a[i]>a[i+1] tức là bọt nước bên trên nặng hơn bọt nước bên dưới => bọt nước trên chìm xuống và bọt nước bên dưới nổi lên ( tráo đổi vị trí). 
Sau lượt thứ nhất, bọt nước có trọng lượng lớn nhất sẽ chìm xuống đáy. 
 Trọng lượng của bọt nước thứ i là giá trị của A[i]. 
Lượt 2: 
i chạy từ đầu dãy đến vị trí [cuối dãy - 2] (bỏ qua phần tử cuối). 
Sau lượt thứ hai bọt nước có trọng lượng lớn thứ hai nằm sát trên bọt nước lớn nhất. 
Quá trình duyệt, tráo đổi được lặp đi lặp lại cho đến khi chỉ còn duyệt hai phần tử và thu được dãy không giảm. 
Nhận xét: 
 Số phần tử ở các lượt duyệt (j) sẽ giảm từ n xuống hai phần tử. 
 Tại mỗi lượt duyệt: 
 - Cho i chạy từ 1 đến số phần tử -1, 
 n ếu A[i]>A[i+1] thì 
	tráo đổi vị trí A[i] và A[i+1] 
	thông qua biến trung gian (Tg) . 
Các em hãy cho biết trong Pascal nhận xét 1 được thể hiện bằng lệnh gì ? 
1 
For j := n downto 2 do 
2 
For i := 1 to j-1 do 
IF A[i]>A[i+1] then 
Tg := A[i]; 
A[i] := A[i+1]; 
A[i+1]:=Tg; 
Begin 
end; 
Khai báo mảng 1 chiều 
Nhập mảng 1 chiều 
Xử lí mảng bằng thuật toán nổi bọt 
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 := 1 to n do 
	Begin 
	 write(‘ Phan tu thu ‘,i,’ = ‘); 
	 readln(A[i]); 
	end; 	 
 For j := n downto 2 do 
 For i:= 1 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 do Write(A[i]:5); 
 Readln; 
END. 
Chương trình pascal 
Bài 3. Nhập vào một dãy A tăng gồm N (N 250) số nguyên dương khác nhau và một số k. Cho biết vị trí của số hạng có giá trị bằng k trong dãy (nếu có) ? 
* INPUT: Nhập số nguyên dương n, dãy n số nguyên dương a 1 ,a 2 ,...,a n và số nguyên k 
* OUTPUT: Chỉ số i mà a i = k hoặc thông báo “Không tìm thấy” nếu không có số hạng nào của dãy A có giá trị bằng k. 
Các em hãy nêu các cách để giải bài toán trên ? 
	 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 cho đến khi gặp được số hạng bằng k, hoặc dãy đã được xét hết và không có số hạng nào có giá trị bằng k. 
Từ ý tưởng trên hãy viết đoạn chương trình bằng PASCAL để tìm số hạng của dãy có giá trị bằng k? 
For i := 1 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’); 
 Cách 1: Tìm kiếm tuần tự 
 Cách 2: Tìm kiếm nhị phân	 
10 
9 
8 

File đính kèm:

  • pptbai_giang_tin_hoc_lop_11_bai_13_bai_tap_mang_mot_chieu.ppt