1. Trang chủ
  2. » Giáo án - Bài giảng

bai tap thuc hanh 3(11)

7 775 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 7
Dung lượng 86 KB

Nội dung

- 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ặ

Trang 1

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

- 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.

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;

Trang 2

3 Bài m iới

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

Trang 3

 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

Trang 4

? 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

Trang 5

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

Trang 6

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ị

Trang 7

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

Ngày đăng: 30/06/2014, 16:00

TỪ KHÓA LIÊN QUAN

w