Tải bản đầy đủ (.doc) (7 trang)

bai tap thuc hanh 3(11)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (116.18 KB, 7 trang )

BÀI TẬP THỰC HÀNH 3
Người soạn: Nguyễn Thị Huê.
SV lớp: SP Tin K40.
Ngày soạn: 27/10/08.
Người hướng dẫn: Nguyễn Văn Trường.
I. MỤC ĐÍCH, YÊU CẦU.
- Củng cố cho học sinh những hiểu biết về kiểu dữ liệu mảng.
- Tổ chức hoạt động trong phòng máy để học sinh có được các kĩ năng cơ
bản làm việc với kiểu mảng một chiều trong lập trình.
- Cung cấp cho học sinh một số thuật toán đơn giản thường gặp trong lập
trình, như: tính tổng phần tử thoả mãn điều kiện, đếm số phàn tử thoả mãn điều
kiện.
II. CHUẨN BỊ.
Giáo viên chuẩn bị: máy chiếu, chương trình phần a và phần b bài 1, cài đặt
chương trình phần a bài 1 lên các máy học sinh thực hành.
III. NỘI DUNG.
1. Ổn định tổ chức lớp.
Sĩ số: vắng: có phép: không phép:
2. Kiểm tra bài cũ
• Câu hỏi: Em hãy nêu cách khai báo biến mảng 1 chiều (7 điểm) và lấy 1 ví
dụ (3 điểm)?
• Đáp án:
Cách 1: Khai báo trực tiếp:
Var <tên biến mảng>: array [kiểu chỉ số] of <kiểu phần tử>;
Cách 2: Khai báo gián tiếp:
Type <tên kiểu mảng> = array [kiểu chỉ số] of <kiểu phần tử>;
Var <tên biến mảng>: <tên kiểu mảng>;
Ví dụ:
Var A: array [1 20] of integer;
1
3. Bài mới


Hoạt động của giáo viên Hoạt động của học sinh TG
Các em đã được tìm hiểu về kiểu dữ
liệu có cấu trúc đầu tiên là kiểu mảng.
Để hiểu hơn về nó, chúng ta cùng xét
một số bài tập cụ thể trong buổi thực
hành hôm nay.
Bài 1 (trang 63 SGK):
a, Hãy chạy thử chương trình sau:
? Em hãy đọc đề bài và xác định
Input, Output của bài toán?
Với bài toán này, ta có thể chia thành
các công việc nhỏ:
- Nhập N và k.
- Nhập dãy A.
- Tính tổng các phần tử chia hết cho
k.
Trong chương trình có: thủ tục
Randomize dùng để khởi tạo bộ lấy số
ngẫu nhiên; hàm Random(n) để lấy
một số ngẫu nhiên trong phạm vi từ 0
đến n – 1.
VD: lệnh n:=Random(20) thì n sẽ
được gán một giá trị bất kì trong
khoảng từ 0 đến 19.
Ta đi xét từng công việc cụ thể:
BÀI TẬP THỰC HÀNH 3.
Bài 1:
Đọc bài và xác định:
- Input: Mảng A gồm N số nguyên
A

1
, A
2
, …, A
N
, N <= 100, |A
i
|
<=300, 1<=i<=N, số k nguyên
dương.
- Output: Tổng các phần tử chia
hết cho k.
Nghe và ghi bài.
2
• Nhập N và nhập k.
? Trong chương trình, đoạn lệnh nào
dùng để nhập N, đoạn lệnh nào dùng
để nhập k?
• Nhập dãy A.
? Câu lệnh A[i] := random(300) –
random(300) có ý nghĩa gì?
Vậy nên câu lệnh For i:=1 to n do
A[i]:= random(300) – random(300);
chính là câu lệnh tạo mảng A thoả
mãn: giá trị tuyệt đối mỗi phần tử
không quá 300.
• Tính tổng các phần tử chia hết
cho k.
Việc này ta làm như sau: Dùng S để
lưu tổng cần tìm, khởi tạo bằng 0.

Duyệt từ đầu đến cuối mảng, nếu
phần tử nào chia hết cho k thì cộng
thêm phần tử đó vào S.
? Đoạn chương trình nào thực hiện
công việc này?
? Lệnh S:=S+A[i] được thực hiện
bao nhiêu lần?
Để kiểm tra kết quả của chương trình,
chúng ta cùng test thử với một vài bộ
Input nhỏ.
Trả lời: đoạn lệnh nhập N:
Write(‘nhap n=’); readln(n);
đoạn lệnh nhập k:
Write(‘nhap k=’); readln(k);
Trả lời: lấy hiệu của 2 số ngẫu
nhiên trong khoảng từ 0 đến 299,
rồi gán cho A[i].
-Trả lời: đoạn chương trình:
S:=0;
For i:=1 to n do
If A[i] mod k = 0 then
S:=S+A[i];
Trả lời: số lần thực hiện tuỳ thuộc
vào số phần tử trong mảng A chia
hết cho k.
Test thử chương trình.
3
? Em hãy bỏ câu lệnh xoá màn hình
Clrscr, bỏ thủ tục Randomize, chạy
thử chương trình 2,3 lần với một bộ

Input và đưa ra nhận xét?
→ Ý nghĩa của thủ tục Randomize:
xáo trộn bộ sinh số ngẫu nhiên để mỗi
lần thực hiện chương trình sẽ có kết
quả ngẫu nhiên khác nhau.
Thấy rằng, nếu dùng đoạn lệnh nhập
N như trên thì ta có thể nhập N có giá
trị bất kì.
? Nếu nhập N=103 thì chuyện gì sảy
ra?
Để tránh nhập N sai, ta phải kiểm tra
ngay sau khi nhập. Nếu N<=100 thì
thôi không nhập nữa, nếu không thì
phải nhập lại N.
Gợi ý: Dùng biến KT kiểu Boolean,
khởi tạo bằng False. Thực hiện lặp
trong khi KT còn bằng False: nhập N;
kiểm tra N; nếu đúng thì gán lại KT :=
True, không thì nhập lại N.
Tương tự như vậy, ta cũng có thể
nhập lại mảng A từ bàn phím thoả
mãn |A[i]| <=300.
Gợi ý: Không dùng biến KT kiểu
Boolean nữa, mà khởi tạo biến i:=1.
Thực hiện lặp trong khi i<=N: nhập
A[i]; kiểm tra A[i] thoả mãn |A[i]|
<=300 thì tăng 1 lên 1 đơn vị để nhập
Nhận xét: Dãy A được tạo không
thay đổi giá trị các phần tử.
Trả lời: nếu nhập n=103 thì

chương trình bị thoát ngay lập tức.
4
phần tử tiếp theo.
BTVN: Hãy sửa lại chương trình để
nhập N, dãy A từ bàn phím thoả mãn
yêu cầu của bài toán.
b, Sửa đổi chương trình.
? Em hãy đọc đề bài và xác định
Input, Output của bài toán?
? Em hãy cho biết: từng đoạn chương
trình sau có ý nghĩa gì?
+ posi, neg : integer;
+ posi := 0; neg := 0;
+ If A[i] > 0 then posi := posi +1
Else if A[i] < 0 then neg := neg +1;
+ Writeln ( posi : 4 , neg : 4);
? Vậy thì 2 biến posi neg dùng để làm
gì?
? Em hãy thay các đoạn lệnh đó vào
chương trình ở những vị trí cần thiết,
để đưa ra số các phần tử nguyên
Đọc bài và xác định:
- Input: Mảng A gồm N số nguyên
A
1
, A
2
, …, A
N
, N <= 100, |A

i
|
<=300, 1<=i<=N, số k nguyên
dương.
- Output: Số các số nguyên dương
và số các số nguyên âm trong
mảng.
Trả lời:
+ Khai báo 2 biến posi và neg
thuộc kiểu dữ liệu Integer.
+ Khởi tạo giá trị cho posi và neg
bằng 0.
+ Kiểm tra nếu A[i] lớn hơn 0 thì
tăng biến posi lên 1 đơn vị, còn
nếu A[i] nhỏ hơn 0 thì tăng biến
neg lên 1 đơn vị.
+ Viết ra màn hình giá trị của posi
và neg.
Trả lời: biến posi dùng để lưu số
các phần tử lớn 0, neg lưu số các
phần tử nhỏ hơn 0 trong dãy.
Thay các đoạn lệnh và chương
trình.
5
dương và số các phần tử nguyên âm
trong mảng?
Đưa ra chương trình hoàn chỉnh.
Bài 4.9 (trang 32 SBT):
? Em hãy đọc đề bài và xác định
Input, Output của bài toán?

? Với bài toán này, ta có thể chia
thành những công việc nhỏ nào?
• Việc nhập N thoả mãn 3 <= N <=
100 giống như cô đã hướng dẫn ở bài
1, em hãy tìm hiểu cách viết đoạn lệnh
này ở nhà.
• Việc nhập dãy A: làm như một
dãy thông thường.
• Việc đếm số phần tử:
? Em hãy cho biết: điều kiện A[i] ở vị
trí chẵn và có giá trị lẻ thì được biểu
diễn dưới dạng biểu thức logic như
thế nào?
? Em hãy nêu cách đếm số phần tử ở
vị trí chẵn có giá trị lẻ?
Đoạn lệnh như sau:
For i := 1 to n do
Đọc bài và xác định:
- Input: Mảng A gồm N số nguyên
A
1
, A
2
, …, A
N
, 3 <= N <= 100.
- Output: Số phần tử ở vị trí chẵn
có giá trị là lẻ.
Trả lời: Ta có thể cha thành các
công việc nhỏ sau:

+ Nhập N.
+ Nhập dãy A.
+ Đếm số phần tử ở vị tí chẵn có
giá trị lẻ.
Trả lời:
i mod 2 = 0 and A[i] mod 2 <> 0
Trả lời: Duyệt từ đầu đến cuối dãy,
nếu A[i] thoả mãn điều kiện trên
thì tăng biến đếm lên 1 đơn vị.
6
If (i mod 2 = 0) and (A[i] mod 2
<> 0) then dem := dem + 1;
Về nhà, em hãy hoàn thiện chương
trình của bài này.
IV. C ỦNG CỐ VÀ DẶN DÒ.
- Sau bài thực hành hôm nay, các em cần nhớ và hiểu được tính tổng phần tử
thoả mãn điều kiện, đếm số phần tử thoả mãn điều kiện.
- BTVN: 4.10, 4.12, đọc và tìm hiểu trước bài 2 trang 64 GSK.
V. NHẬN XÉT VÀ ĐÁNH GIÁ.










7

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×