BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Kiểm tra bài cũ
Bài 1 cho chương trình sau:
Const nmax=100;
Type MyArray=Array[1 nmax] of integer;
Var A:MyArray;
n,i,Dem:integer;
Begin
Randomize;
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do A[i]:=Random(301)-Random(301);
For i:=1 to N do Write(a[i]:5);
Writeln;
Dem:=0;
For i:=1 to N do
If A[i] >0 then Dem:=Dem+1;
Write(Dem);
Readln
End.
Giải thích các
thành phần trong
chương trình
Dem:=0;
For i:=1 to N do
if A[i] >0 then Dem:=Dem+1;
Write(Dem);
Giả sử Nhập N=5
15 -48 -35 200 12
Kết quả in ra
màn hình như thế
nào?
Đáp án: 3
Bài 2: Cho chương trình sau:
Const nmax=100;
Type MyArray=Array[1 nmax] of integer;
Var A:MyArray;
n,i,CS:integer;
Begin
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do
Begin
Write('A[',i,']= ');
Readln(A[i]);
End;
cs:=1
For i:=2 to N do
if A[i] <A[cs] then Cs:=i;
Write(A[cs]);
Readln
End.
Giả sử nhập N=5
2 -5 8 6 12
Hỏi kết quả in ra màn
hình như thế nào?
Minh họa
Bài tập và thực hành 4 (tiết 1)
BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Bài tập 1a:
Const nmax=250;
Type ArrInt=Array[1 nmax] of Integer;
Var n,i,j,t:integer;
A:ArrInt;
Begin
Randomize;
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do A[i]:=Random(301)-Random(301);
For i:=1 to N do Write(a[i]:4);
Writeln;
For j:=N downto 2 do
For i:=1 to j-1 do
If A[i]>A[i+1] then
Begin
t:=A[i];
A[i]:=A[i+1];
A[i+1]:=t
End;
Writeln('Day so sau khi duoc sap xep: ');
For i:=1 to N do Write(A[i]:4);
Readln;
End.
Giải thích các
thành phần trong
chương trình
BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Bài tập 1a: Soạn thảo chương trình sau: Nhập N= 10 và xem kết quả. Lưu File
với tên sxgiamB5
Const nmax=250;
Type ArrInt=Array[1 nmax] of Integer;
Var n,i,j,t:integer;
A:ArrInt;
Begin
Randomize;
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do A[i]:=Random(301)-Random(301);
For i:=1 to N do Write(a[i]:4);
Writeln;
For j:=N downto 2 do
For i:=1 to j-1 do
If A[i]>A[i+1] then
Begin
t:=A[i];
A[i]:=A[i+1];
A[i+1]:=t;
End;
Writeln('Day so sau khi duoc sap xep: ');
For i:=1 to N do Write(A[i]:4);
Readln;
End.
BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Bài tập 1: Từ chương trình trên hãy sửa lại để có chương trình sắp xếp các phần
tử của mảng thành 1 dãy không tăng
Const nmax=250;
Type ArrInt=Array[1 nmax] of Integer;
Var n,i,j,t:integer;
A:ArrInt;
Begin
Randomize;
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do A[i]:=Random(301)-Random(301);
For i:=1 to N do Write(a[i]:4);
Writeln;
For j:=N downto 2 do
For i:=1 to j-1 do
If A[i]>A[i+1] then
Begin
t:=A[i];
A[i]:=A[i+1];
A[i+1]:=t;
End;
Writeln('Day so sau khi duoc sap xep: ');
For i:=1 to N do Write(A[i]:4);
Readln;
End.
If A[i]<A[i+1] then
If A[i]>A[i+1] then
Minh họa
BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Bài tập 1b: Khai báo thêm biến Dem và bổ sung vào chương trình những câu
lệnh cần thiết để biến Dem tính số lần thực hiện tráo đổi
Const nmax=250;
Type ArrInt=Array[1 nmax] of Integer;
Var n,i,j,t
A:ArrInt;
Begin
Randomize;
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do A[i]:=Random(301)-Random(301);
For i:=1 to N do Write(a[i]:5);
Writeln;
For j:=N downto 2 do
For i:=1 to j-1 do
If A[i]>A[i+1] then
Begin
t:=A[i];A[i]:=A[i+1]; A[i+1]:=t;
End;
Writeln('Day so sau khi duoc sap xep: ');
For i:=1 to N do Write(A[i]:5);
Writeln;
Readln;
End.
Minh họa
Dem
Dem:=0;
Dem:=dem+1;
Write('So lan trao doi la: ',Dem);
,Dem
Dem:=0;
Dem:=dem+1;
Write('So lan trao doi la: ',Dem);
Đoạn lệnh nào thể
hiện một lần tráo
đổi giữa 2 phần tử
Begin
t:=A[i];A[i]:=A[i+1]; A[i+1]:=t;
End;
If A[i]>A[i+1] then
Việc thực hiện tráo
đổi khi thoả mãn đk
gì?
:integer;
BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Bài tập 1b: Mở bài tập 1a và sửa lại chương trình cách thêm vào các câu lệnh để
được chương trình sắp xếp thành 1 dãy không giảm và số lần tráo đồi
Const nmax=250;
Type ArrInt=Array[1 nmax] of Integer;
Var n,i,j,t,Dem:integer;
A:ArrInt;
Begin
Randomize;
Write('Nhap so luong phan tu N= ');readln(n);
For i:=1 to N do A[i]:=Random(301)-Random(301);
For i:=1 to N do Write(a[i]:5);
Writeln;
BÀI TẬP VÀ THỰC HÀNH 4 TIẾT 1
Bài tập 1b: Mở bài tập 1a và sửa lại chương trình cách thêm vào các câu lệnh để
được chương trình sắp xếp thành 1 dãy không giảm và số lần tráo đồi
Dem:=0;
For j:=N downto 2 do
For i:=1 to j-1 do
If A[i]>A[i+1] then
Begin
t:=A[i];
A[i]:=A[i+1];
A[i+1]:=t;
Dem:=dem+1;
End;
Writeln('Day sau khi duoc sap xep: ');
For i:=1 to N do Write(A[i]:5);
Writeln;
Write('So lan trao doi la: ',Dem);
Readln;
End.
Minh họa
Cũng cố
Bài 1: Đoạn lệnh sau thực hiện công việc gì?
Write(‘Nhap so luong phan tu N= ‘);Readln(N);
For i:=1 to N do A[i]:= random(101)-Random(101);
For i:=1 to N do Write(A[i]:5);
A. Nhập dữ liệu từ bàn phím gồm N phẩn tử
B. Tạo ngẫu nhiên 1 dãy số gồm N phần tử có trị tuyệt
đối không quá 100
C. Tạo ngẫu nhiên 1 dãy số gồm N phần tử có trị tuyệt
đối không quá 300
Cũng cố
Bài 2: Cho đoạn chương trình sau
For j:=N downto 2 do
For i:=1 to j-1 do
If A[i]<A[i+1] then
Begin
t:=A[i]; A[i]:=A[i+1]; A[i+1]:=t
End;
For i:=1 to N do Write(A[i]:4);
Giã sử khi chạy chương trình nhập dãy số: -3 9 -15 21 -3 10
Hỏi chương trình in ra màn hình như thế nào?
Đáp án: 21 10 9 -3 -3 -15
Dặn dò
- Về nhà hoàn thiện bài tập 1b vào vở
-
Xem trước bài tập 2 trong BT và TH 4
-
Sử dụng giải thuật khác để sắp xếp các phần tử của
dãy thành một dãy không giảm
Bài giảng đến đây kết thúc
Kính mong sự góp ý của quý thầy cô
và các em học sinh để bài giảng sau
đ ợc tốt hơn. Xin chân thành cảm ơn!