Giáo viên HD: thầy Lê Minh Triết.. Sinh viên TH: Nguyễn Hoàng Anh..[r]
Trang 1Giáo viên HD: thầy Lê Minh Triết Sinh viên TH: Nguyễn Hoàng Anh.
Trang 2Kiểm tra bài cũ:
Câu hỏi 1:
Định nghĩa mảng một chiều?
Câu hỏi 2:
Cách khai báo mảng một chiều trong pascal?
Trang 3Bài Toán Số 1 :
Tạo mảng A gồm n (n≤100) số nguyên, mỗi số có giá trị tuyệt đối không quá 300 Tính tổng của các phần tử của mảng là bội số của một số nguyên dương k cho trước.
YÊU CẦU
CỦA BÀI TOÁN LÀ GÌ?
Trang 4Các yêu cầu của bài toán:
Yêu cầu 1: Tạo mảng và nhập vào mảng số
nguyên có n phần tử (n≤100) Mỗi phần tử có giá trị tuyệt đối không quá 300.
Yêu cầu 2: Tìm các số trong mảng là bội số của một số nguyên dương k cho trước Và tính tổng của chúng.
Trang 5Với yêu cầu số I:
• Bước 1: Nhập vào số phần tử n.
• Bước 2: cho i chạy từ 1n
•Với mỗi i ta nhập vào giá trị cho a[i].
Với yêu cầu số I:
Thuật Toán- Cài Đặt Bằng Pascal.
-writeln('nhap vao so phan tu (n) cua mang: ');
readln(n);
for i:=1 to n do
begin
writeln('nhap vao phan tu thu ',i,': ');
readln(a[i]);
end;
Trang 6
-Với yêu cầu số II:
• Bước 1: Nhập vào số K.
• Bước 2: cho i chạy từ 1n
•Với mỗi i ta kiểm tra a[i] mod K=0?
•Nếu có thì cộng a[i] vào tổng.
Với yêu cầu số II:
Thuật Toán- Cài Đặt Bằng Pascal.
-writeln('nhap vao mot so nguyen K: ');
readln(k);
s:=0;
for i:=1 to n do
if a[i] mod k=0 then
s:=s+a[i];
writeln('tong cac phan tu la boi cua ',k,' la: ',s);
Trang 7
-Chương trình hoàn chỉnh:
Program Thuc_Hanh3;
uses crt;
type myarr=array [1 100] of integer;
var a:myarr;
var n,i,k,s:integer;
Begin
clrscr;
writeln('nhap vao so phan tu (n) cua mang: ');
readln(n);
for i:=1 to n do
begin
writeln('nhap vao phan tu thu ',i,': ');
readln(a[i]);
end;
for i:=1 to n do write(a[i],' - ');
writeln;
writeln('nhap vao mot so nguyen K: ');
readln(k);
s:=0;
for i:=1 to n do
if a[i] mod k=0 then s:=s+a[i];
writeln('tong cac phan tu la boi cua ',k,' la: ',s);
readln End
Chương trình của chúng ta đã hoàn thiện chưa? Nếu chưa
Các bạn hãy chỉ ra một trường hợp mà chương trình sẽ bị
lỗi? (gợi ý dùng các quy tắc toán học để dự đoán)
Trang 8Bài Toán Số 2 :
Tìm phần tử lớn nhất mảng Nếu có trên hai phần tử có cùng giá trị lớn nhất thì đưa ra phần tử có chỉ
Trang 9Yêu cầu của bài toán:
Yêu cầu: Tìm phần tử có giá trị lớn nhất trong mảng Nếu có trên 2
phần tử có gía trị lớn nhất thì chỉ
lấy phần tử có chỉ số nhỏ nhất.
Trang 10Chúng ta giải quyết
như thế nào?
Trang 11Mô Tả
• Bước 1: gán biến tạm max:=a[1]; maxpos:=1;
• Bước 2: cho i chạy từ 2n
•Với mỗi i ta kiểm tra a[i]>max?
•Nếu a[i]>max thì max:=a[i] và maxpos:=i;
Thuật Toán- Cài Đặt Bằng Pascal.
-max:=a[1];
maxpos:=1;
for i:=2 to n do
if a[i] > max then
begin
max:=a[i];
maxpos:=i;
end;
writeln('phan tu co gia tri lon nhat mang la: ',max);
writeln('xuat hien o vi tri dau tien la: ',maxpos);
Trang 12
-Chương trình hoàn chỉnh:
Program Thuc_Hanh3;
uses crt;
type myarr=array [1 100] of integer;
var a:myarr;
Var n,i,max,maxpos:integer;
begin
clrscr;
readln(n);
for i:=1 to n do
begin
writeln('nhap vao phan tu thu ',i,': ');
readln(a[i]);
end;
for i:=1 to n do write(a[i],' - ');
writeln;
max:=a[1];
maxpos:=1;
for i:=2 to n do
if a[i] > max then begin
max:=a[i];
maxpos:=i;
end;
writeln('phan tu co gia tri lon nhat mang la: ',max); writeln('xuat hien o vi tri dau tien la: ',maxpos);
readln end.
Nếu thay dòng lệnh: if a[i] > max then bằng dòng lệnh sau:
if a[i] >= max then thì bài toán của chúng ta sẽ thay đổi như
thế nào?
Trang 13Trong bài toán trên với n nhỏ thì chúng ta có thể dễ dàng nhập giá trị cho từng phần tử Nhưng với những chương trình có lượng dữ liệu lớn
chẳng hạn n>=100 thì việc nhập giá trị cho từng phần tử gần như là việc rất khó khăn Vậy làm thế nào ta có thể kiểm tra chương trình với n lớn nhưng tiết kiệm được nhiều thời gian????
Trang 14Hàm Random(n) là hàm dùng để tạo ra các giá trị ngẫu nhiên trong khoảng từ 1n-1 Dùng hàm Random(n) khi ta muốn tạo ra các giá trị ngẫu
nhiên để kiểm tra tính đúng đắn của chương trình và để tiết kiệm thời gian Lưu ý khi dùng hàm
Random(n) ta phải gọi thủ tục Randomize() để
khởi tạo cơ chế này.
Câu hỏi bổ sung: có thể dùng hàm random(n)
trong những chỗ nào trong bài thực hành trên
để tiết kiệm thời gian?
Trang 15Viết chương trình thực hiện việc nhập vào 100 số nguyên có giá trị của mỗi số không quá 200 Từ các số đó hãy tính tổng các số là ước của 200?