Bµi thùc hµnh sè 4 Gi¸o viªn híng dÉn : ThÇy TrÇn Do·n Vinh Sinh viªn thùc tËp : Ph¹m ThÞ Minh Thïy Líp K56A_Khoa CNTT_§HSP Hµ Néi... 2 ► a Hãy tìm hiểu và chạy thử chơng trình thực hi
Trang 1Bµi thùc hµnh sè 4
Gi¸o viªn híng dÉn : ThÇy TrÇn Do·n Vinh Sinh viªn thùc tËp : Ph¹m ThÞ Minh Thïy
Líp K56A_Khoa CNTT_§HSP Hµ Néi
Trang 22
► a) Hãy tìm hiểu và chạy thử chơng
trình thực hiện thuật toán sắp xếp dãy số nguyên bằng thuật toán tráo đổi với các giá trị khác nhau của n dới đây.Qua đó
nhận xét về thời gian chạy của chơng
trình ?
Trang 3I_Bµi 1:
Uses Crt ;
Const Nmax=250 ;
Type ArrInt =
array[1 Nmax] of integer ;
Var n , i , j , t : integer ;
A : ArrInt ;
BEGIN ClrScr;
Randomize ; Write (‘Nhap n = ‘) ; Readln(n);
For i :=1 to n do A[i] :=random(300)- random(300);
For i:=1 to n do write (A[i] :5) ; Writeln ;
Trang 44
I_Bµi 1:
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 duoc sap xep : ‘) ;
For i := 1 to n do Write (A[i] :7 );
Writeln ; Readln END
Trang 5I_Bài 1:
► b) Khai báo thêm biến nguyê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 trong thuật toán Đa kết quả tìm đợc ra màn hình
Trang 66
I_Bµi 1:
+ Khai b¸o : n , i , j ,t , d :integer ;
+ Bæ sung ch¬ng tr×nh :
d :=0 ;
For j:= N downto 2 do
For i:=1 to j – 1 do
If A[i] > A[i+1] then
Begin
d:= d+1 ;
t := A[i] ;
A[i] := A[i+1]
A[i+1] := t ;
End ; Writeln (‘ So lan thuc hien thuat toan :’,d,’’);
Writeln (‘ Day so duoc sap xep: ‘); For i:=1 to n do
Write (A[i] : 7);
Write (d);
Writeln;
Readln End
Trang 7II_Bài 2:
► Hãy đọc và tìm hiểu những phân tích để viết chơng trình giải bài toán :
► Cho mảng A gồm n phần tử Hãy viết
chơng trình tạo mảng B[1 n], trong đó
B[i] là tổng của i phần tử đầu tiên của A
Trang 88
II_Bµi 2:
Program SubSum1;
Const max=100;
Type
MyArray=array[1 max]
of integer;
Var A , B : MyArray;
n , i , j : integer ;
Begin Radomize;
Write (‘ Nhap n =’);
Readln(n) ; For i :=1 to n do A[i] := random(300) – random(300) ;
For i :=1 to n do write(A[i] :5);
Writeln ;
Trang 9II_Bài 2:
For i :=1 to n do
Begin
B[i]:=0;
For j :=1 to i do
B[i]:=B[i]+A[j];
End ;
For i :=1 to n do write (B[i]
:6);
Readln
End
Ta tạo các phần tử thứ i của mảng B bằng cách cho vòng For chạy từ 1 đến i , sau đó cộng dần các A[i] lại với nhau :
For i :=1 to n do Begin
B[i] :=0 ; For j := 1 to i do B[i] := B[i]+A[j] ;
Trang 1010
II_Bài 2:
►Ta có hệ thức sau :
B[1]:=A[1] ;
B[i]:=B[i-1]+A[i] , 1<i =< n
►Do đó có đoạn chơng trình khác là :
B[1]:=A[1] ;
For i :=2 to n do B[i]:=B[i-1]+A[i] ;
►Với 2 lệnh này máy chỉ phải thực hiện n-1 phép
cộng
Trang 11Bài tập về nhà :
►-Viết chơng trình tìm phần tử có giá trị lớn nhất của
mảng và đa ra màn hình chỉ số và giá trị của phần tử tìm đợc Nếu có nhiều phần tử có cùng giá trị lớn nhất thì đa ra phần tử có chỉ số nhỏ nhất ?
►- Hớng dẫn qua : + Xác định dữ liệu vào , dữ liệu ra
?
+ Sử dụng biến j để lu giá trị max
Trang 1212
Xin cảm ơn các bạn
đã theo dõi !