Lặp với số lần biết trước là gì

Trang chủ » Tin học lớp 8 » Sự khác nhau giữa câu lệnh lặp với số lần chưa biết trước và câu lệnh lặp với số lần biết trước?

Lời giải:

Câu lệnh lặp với số lần biết trước:

– Chỉ thị cho máy tính thực hiện 1 lệnh hay 1 nhóm lệnh với số lần đã được xác định từ trước.

– Điều kiện là 1 giá trị của 1 biến đếm có giá trị nguyên

Câu lệnh lặp với số lần chưa biết trước:

– Chỉ thị cho máy tính thực hiện 1 lệnh hay 1 nhóm lệnh với số lần lặp chưa biết trước.

– Điều kiện tổng quát hơn, có thể là kiểm tra của 1 giá trị có thực, cũng có thể là 1 điều kiện tổng quát khác.

Câu lệnh lặp với số lần biết trước :

– Chỉ thị cho máy tính thực hiện 1 lệnh hay 1 nhóm lệnh với số lần đã được xác định từ trước.

– Điều kiện là 1 giá trị của 1 biến đếm có giá trị nguyên

Câu lệnh lặp với số lần chưa biết trước :

– Chỉ thị cho máy tính thực hiện 1 lệnh hay 1 nhóm lệnh với số lần lặp chưa biết trước.

– Điều kiện tổng quát hơn, có thể là kiểm tra của 1 giá trị có thực, cũng có thể là 1 điều kiện tổng quát khác.

Cùng Top lời giảitrả lời chi tiết, chính xác về “Câu lệnh lặp với số lần chưa biết trước”và đọc thêm phần kiến thức tham khảo giúp các bạn học sinh ôn tập và tích lũy kiến thức bộ môn Tin học 8.

Câu lệnh lặp với số lần chưa biết trước

- Để viết chương trình chỉ dẫn máy tính thực hiện xác hoạt động lặp mà chưa xác định trước được số lần lặp, ta có thể sử dụng câu lệnh có dạng lặp với số lần chưa xác định.

- Cấu trúc:

While do ;

Trong đó:

- Điều kiện: Thường là 1 phép so sánh.

Câu lệnh: Có thể là câu lệnh đơn giản hay câu lệnh ghép.

- Câu lệnh lặp với số lần chưa biết trước:

+ Chỉ thị cho máy tính thực hiện 1 lệnh hay 1 nhóm lệnh với số lần lặp chưa biết trước.

+ Điều kiện tổng quát hơn, có thể là kiểm tra của 1 giá trị có thực, cũng có thể là 1 điều kiện tổng quát khác.

Kiến thức mở rộng về câu lệnh lặp

1. Sơ đồ khối

Các bước thực hiện như sau:

- Bước 1: Kiểm tra điều kiện

- Bước 2: Nếu điều kiện SAI, câu lệnh sẽ bị bỏ qua và việc thực hiện lệnh lặp kết thúc. Nếu điều kiện đúng, thực hiện câu lệnh và quay lại bước 1.

Kết luận: việc lặp lại một nhóm hoạt động với số lần chưa xác định trước phụ thuộc vào 1 điều kiện cụ thể và chỉ dừng lại khi điều kiện không thỏa mãn.

2. Ví dụ về số lần lặp không biết trước

Ví dụ 1:Nếu cộng lần lượt n số tự nhiên đầu tiên [n = 1, 2, 3,...], cần cộng bao nhiêu số tự nhiên đầu tiên để ta nhận được tổng Tn nhỏ nhất lớn hơn 1000?

Điều kiện: Khi tổng Tn nhỏ nhất lớn hơn 1000 thì kết thúc hoạt động lặp.

Mô tả thuật toán bằng liệt kê:

- Bước 1: S 0, n 0

- Bước 2: Nếu S ≤ 1000, n n + 1; ngược lại chuyển tới Bước 4

- Bước 3: S S + n và quay lại Bước 2

- Bước 4: In kết quả: S và n là số tự nhiên nhỏ nhất sao cho S > 1000. Kết thúc thuật toán[ thuật toán chỉ dừng lại khi S > 1000].

Ví dụ 2:Chúng ta biết rằng, nếu n [ n >0] càng lớn thì 1/n càng nhỏ, nhưng luôn lớn hơn 0. Với giá trị nào của n thì 1/n < 0.005 hoặc 1/n < 0.003? chương trình dưới đây tìm số n nhỏ nhất để 1/n nhỏ hơn 1 sai số cho trước.

3. Lặp vô hạn - Lỗi lập trình cần tránh

Khi viết chương trình sử dụng cấu trúc lặp cần chú ý tránh tạo nên vòng lặp không bao giờ kết thúc.

Chẳng hạn, chương trình dưới đây sẽ lặp lại vô tận:

var a:integer;

begin

a:=5;

while a 4, chuyển bước 6; ngược lại, đặt hướng = hướng + 1 và quay lại bước

3.

Bước 6. Tô màu và kết thúc thuật toán.

b] Thuật toán tương tự như trên. Thao tác chính cần lặp lại là vẽ hình vuông. Tại mỗi

bước, giữ nguyên tâm hình vuông và thay đổi hướng vẽ một góc 30o.

Lưu ý đối với giáo viên. Bài này không yêu cầu học sinh mô tả một cách chính xác các

bước của thuật toán. Điều quan trọng là học sinh nhận biết được: muốn vẽ được các hình đã

cho chỉ cần lặp thao tác vẽ nửa đường tròn bốn lần hoặc lặp thao tác vẽ hình vuông ba lần.

Bµi 3.Câu lệnh lặp có tác dụng chỉ dẫn cho máy tính thực hiện lặp lại một câu lệnh hay

nhóm câu lệnh với một số lần nhất định. Câu lệnh lặp làm đơn giản và giảm nhẹ công

sức của người viết chương trình.

Bµi 4.Chúng ta nói rằng khi thực hiện các hoạt động lặp, chương trình kiểm tra một điều

kiện. Với lệnh lặp

for := to do ;

của Pascal, điều kiện cần phải kiểm tra chính là giá trị của biến đếm lớn hơn giá trị

cuối. Nếu điều kiện không được thoả mãn, câu lệnh được tiếp tục thực hiện; ngược lại,

chuyển sang câu lệnh tiếp theo trong chương trình.

Bµi 5.Tuy có vòng lặp 1000 lần, nhưng chương trình Pascal nêu trong câu hỏi không thực

hiện bất kì một hoạt động nào. Tuy nhiên đây vẫn là câu lệnh hợp lệ.

1



1



1



1



Bµi 6.Thuật toán tính tổng A = 1.3 + 2.4 + 3.5 +....... n[ n +1]

Bước 1. Gán A ← 0, i ← 1.



58



Bước 2. A ←



1

.

i [i + 2]



Bước 3. i ← i + 1.

Bước 4. Nếu i ≤ n, quay lại bước 2.

Bước 5. Ghi kết quả A và kết thúc thuật toán.

Bµi 7.Trừ d], tất cả các câu lệnh đều không hợp lệ:

a] Giá trị đầu của biến đếm phải nhỏ hơn giá trị cuối của biến đếm;

b] Các giá trị đầu và giá trị cuối của biến đếm phải là số nguyên;

c] Thiếu dấu hai chấm khi gán giá trị đầu;

d] Thừa dấu chấm phẩy thứ nhất, nếu như ta muốn lặp lại câu lệnh writeln['A'] mười

lần, ngược lại câu lệnh là hợp lệ;

e] Biến x đã được khai báo như là biến có dữ liệu kiểu số thực và vì thế không thể

dùng để xác định giá trị đầu và giá trị cuối trong câu lệnh lặp.

Bµi 8.Thuật toán:

Bước 1. Nhập các số n và x.

Bước 2. A ← 1, i ← 0 [A là biến lưu luỹ thừa bậc n của x].

Bước 3. i←i + 1, A ← A.x.

Bước 4. Nếu i < n, quay lại bước 3.

Bước 5. Thông báo kết quả A là luỹ thừa bậc n của x và kết thúc thuật toán.

Chương trình Pascal có thể như sau:

var n,i,x: integer; a: longint;

begin

write['Nhap x=']; readln[x];

write['Nhap n=']; readln[n];

A:=1;

for i:=1 to n do A:=A*X;

writeln[x,' mu ',n,' bang ',A];

end.

Bµi 9.Thuật toán:

Bước 1. Nhập số n.

Bước 2. A← −32768 [gán số nhỏ nhất có thể trong các số kiểu nguyên cho A], i ←1.

Bước 3. Nhập số thứ i và gán giá trị đó vào biến A.

Bước 4. Nếu Max < A, Max ← A.

Bước 5. i ←i + 1.

Bước 6. Nếu i ≤ n, quay lại bước 3.

Bước 7. Thông báo kết quả Max là số lớn nhất và kết thúc thuật toán.

Chương trình Pascal có thể như sau:

uses crt;

var n,i,Max,A: integer;

59



begin

clrscr;

write['Nhap N=']; readln[n];

Max:=-32768;

for i:=1 to n do

begin write['Nhap so thu ',i,':']; readln[A];

if Max
writeln['So lon nhat: ',Max];

end.

Lưu ý. Trong chương trình trên chúng ta chỉ sử dụng hai biến A và Max để giải bài

toán. Một cách tự nhiên, để nhập n số chúng ta cần tới n biến. Tuy nhiên, ở đây việc

xử lí các giá trị trong dãy số có thể thực hiện bằng cách chỉ cần so sánh các giá trị đã

được nhập vào, do đó chúng ta chỉ cần một biến để lưu lần lượt các giá trị nhập vào

là đủ. Một cách giải quyết khác là sử dụng biến mảng [xem bài tập 6, bài 9].

Bµi 10. Lời giải bài này tương tự như lời giải của bài 9 ở trên [xem thuật toán trong lời giải

bài tập 5a, bài 5]. Chương trình Pascal có thể như sau:

uses crt;

var n,i,SoDuong,A: integer;

begin

clrscr;

write['Nhap N=']; readln[n];

if n>0 then

begin

SoDuong:=0;

for i:=1 to n do

begin write['Nhap so thu ',i,':']; readln[A];

if A>0 then SoDuong:=SoDuong+1 end;

writeln['So cac so duong = ',SoDuong]

end

else writeln['n phai > 0!'];

end.

Bài thực hành 5. Sử dụng lệnh lặp For...do

1. Mục đích, yêu cầu

• Viết được chương trình có sử dụng vòng lặp for...do;

• Sử dụng được câu lệnh ghép;

• Rèn luyện kĩ năng đọc hiểu chương trình có sử dụng vòng lặp for...do.



60



2. Những điểm cần lưu ý và gợi ý dạy học

Trước khi tiến hành các bài của bài thực hành 5, để tạo hứng thú cho HS, GV có thể

dành thời gian để HS gõ và chạy một hoặc hai chương trình các em đã viết trong giờ học lí

thuyết. Như đã nói, việc thực hành và được quan sát trực quan kết quả chạy chương trình đã

học ở tiết lí thuyết là cần thiết, hữu ích để HS ôn lại lí thuyết, gắn kết lí thuyết-thực hành và

tạo niềm tin trong học tập. Chương trình thực hiện chào hỏi các bạn trong lớp [hoặc trong

nhóm] có thể như sau:

Program Chao_hoi;

uses crt;

var Ten: string;

Begin

For i:= 1 to 3 do

Begin

write['Nhap ten cua ban']; Readln[Ten];

write['Chao ban ', Ten];

end;

readln;

End.

Lưu ý: để tránh mất thời gian thử chương trình, yêu cầu HS cho giá trị cuối nhỏ. Nếu

HS đã lỡ để giá trị cuối quá lớn, chương trình lặp lại nhiều lần gây mất thời gian, GV có thể

nhấn tổ hợp phím Ctrl+Break để ngắt chương trình.

Yêu cầu HS thay đổi giá trị cuối và nhận xét về số lần nhập tên và hiển thị lời chào

hỏi. HS cần giải thích được sự thay đổi này để hiểu về hoạt động của câu lệnh for...do. Số

lần lặp bằng Giá trị cuối - Giá trị đầu + 1.

Sau ví dụ này, HS về cơ bản đã hiểu rõ, giải thích được hoạt động của câu lệnh

for...do, hiểu và sử dụng được câu lệnh ghép.

Với bài 1 của bài thực hành này, HS cần tập trung tìm hiểu câu lệnh:

for i:=1 to 10 do writeln[N,' x ',i:2,' = ',N*i:3];

Đặc biệt HS cần phải nhận thấy được sự thay đổi của biến đếm i và các tham số của

câu lệnh write để viết ra bảng cửu chương. Các tham số :2, :3 chỉ có ý nghĩa trong việc quy

định quy cách trình bày bảng cửu chương trên màn hình, lưu ý học sinh không cần quan tâm

đến quy cách trình bày, chỉ cần quan tâm đến sự thay đổi của biến đếm i, thông tin được

lệnh writeln[] viết ra màn hình.

Có thể cho HS thảo luận theo nhóm để hoàn thành một bảng tiến trình thực hiện của

câu lệnh trên như sau:

Giả sử với N=3

Bướ

c



i



i≤

10 ?



writeln[N,'.',i,' = ',N*i]



1



1



Đúng



3.1 = 3



2



2



Đúng



3.2 = 6



3



3



Đúng



3.3 = 9



4



4



Đúng



3.4 = 12

61



5



5



Đúng



3.5 = 15



6



6



Đúng



3.6 = 18



7



7



Đúng



3.7 = 21



8



8



Đúng



3.8 = 24



9



9



Đúng



3.9 = 27



10



10



Đúng



3.10 = 30



11



11



Sai



Không thực hiện lệnh writeln[].

Kết thúc vòng lặp



Bài 2, cung cấp cho HS một câu lệnh mới là thủ tục đưa con trỏ tới một ví trị mong

muốn trên màn hình [màn hình soạn thảo văn bản] GotoXY[]. Giới thiệu cùng với thủ tục

GotoXY là các hàm lấy vị trí cột WhereX, vị trí dòng WhereY hiện thời của con trỏ. Việc

giới thiệu thủ tục này nhằm cung cấp cho HS một công cụ để trình bày màn hình. Hơn thế

nữa, việc giới thiệu hàm, thủ tục ở đây còn nhằm mục đích hướng dẫn HS tìm hiểu về thư

viện chương trình, sử dụng, khai thác hàm, thủ tục có sẵn trong Pascal. Tuy nhiên, đây

không phải là yêu cầu bắt buộc trong Chuẩn kiến thức, kĩ năng cho nên GV có thể cho thực

hành bài này trên lớp hoặc giao cho học sinh tự nghiên cứu. Không cần đi sâu vào việc sử

dụng các thủ tục này để trình bày màn hình.

Bài 3, giới thiệu về việc sử dụng hai vòng for...do lồng nhau. GV có thể sử dụng bài 3

này hoặc lấy một ví dụ khác để giới thiệu về vòng for...do lồng nhau. Có một ví dụ vui, hay

được sử dụng để minh hoạ cho việc sử dụng vòng lặp for...do lồng nhau đó là bài toán cổ:

Vừa gà vừa chó

Bó lại cho tròn

Ba mươi sáu con

Một trăm chân chẵn.

Bài toán dân gian này có thể sẽ làm HS hứng thú hơn. Lưu ý, HS lớp 8 chưa được học

giải phương trình bậc nhất hai ẩn số.

Chương trình giải bài toán này có thể như sau:

Var ga, cho : byte;

Begin

for ga:=1 to 35 do

for cho:=1 to 35 do

if [ga*2 + cho*4 = 100] and [ga + cho = 36] then

writeln['So ga la: ', ga, '; So cho la: ', cho];

Readln;

End.

GV có thể giới thiệu chương trình trước rồi yêu cầu HS tìm hiểu, giải thích tại sao

chương trình này cho phép giải bài toán đặt ra.

Thuật toán này rất đơn giản, ý tưởng cơ bản là xét tất cả các trường hợp và kiểm tra

xem trường hợp nào thảo mãn: ga + cho= 36 và ga*2 + cho*4 = 100 thì đó là một đáp số

của bài toán.



62



Qua bài toán này cũng có thể nêu cho HS thấy ưu điểm nổi bật của máy tính trong việc

tính toán nhờ tốc độ xử lý rất cao. Với cách giải như trên máy tính tìm ra kết quả trong nháy

mắt, nhưng nếu để con người thực hiện thì sẽ lâu hơn rất nhiều.

Nhưng nhược điểm của máy tính lại là chỉ biết làm việc theo sự điều khiển của con

người mà không hề có tư duy sáng tạo. Trong quá trình tính toán tìm ra kết quả, con người

còn có khả năng phán đoán, dự đoán xu hướng để có thể bỏ qua một số công đoạn tính toán

nhằm đi đến kết quả nhanh hơn. Do đó, con người cần lựa chọn, xây dựng thuật toán sao

cho có thể nâng cao hiệu quả làm việc của máy tính.

GV có thể yêu cầu học sinh cải tiến để có chương trình hiệu quả hơn.

var ga, cho:byte;

Begin

For cho:= 1 to 24 do

Begin

ga:= 36 - cho;

if [2*ga + 4*cho = 100] then

writeln['Ga: ', ga, ', Cho: ',cho];

end;

readln;

End.

GV có thể phân tích, hướng dẫn để HS nhận thấy số lượng các phép tính ở chương

trình sau ít hơn với chương trình ban đầu. Điều đó cũng có nghĩa là thuật toán ở

chương trình sau hiệu quả hơn. Việc xây dựng, lựa chọn thuật toán hiệu quả có vai trò

quan trọng trong lập trình, nhất là với những bài toán có khối tượng tính toán lớn.

Luôn cần có ý thức xây dựng, lựa chọn thuật toán hiệu quả nhất khi giải bài toán trên

máy tính.

Việc phân tích về số lượng phép toán có thể gây quá tải đối với HS. Do vậy, GV căn

cứ vào mức độ tiếp thu của HS để có thể tiến hành giới thiệu hoặc không giới thiệu nội

dung về số lượng phép toán, so sánh tính hiệu quả giữa các thuật toán.

Bài 8. Lặp với số lần chưa biết trước

1. Mục đích, yêu cầu

• Biết nhu cầu cần có cấu trúc lặp với số lần chưa biết trước trong ngôn ngữ lập

trình;

• Biết ngôn ngữ lập trình dùng cấu trúc lặp với số lần chưa biết trước để chỉ dẫn máy

tính thực hiện lặp đi lặp lại công việc đến khi một điều kiện nào đó được thoả mãn;

• Hiểu hoạt động của câu lệnh lặp với số lần chưa biết trước while...do trong Pascal.

2. Những điểm cần lưu ý và gợi ý dạy học

Giống với bài 7, ở phần đầu của bài này GV cần nêu một số ví dụ về hoạt động lặp với

số lần chưa biết trước. Ví dụ 1 trong SGK là một hoạt động trong đời sống. Ví dụ 2 trong

SGK là một bài toán khoa học.

Trong ví dụ 2, sau khi giới thiệu thuật toán, SGK khái quát, đưa ra sơ đồ hoạt động của

cấu trúc lặp với số lần chưa biết trước. Sau đó, SGK giới thiệu câu lệnh while...do của

63



Pascal như một ví dụ minh hoạ. HS được làm quen với các ví dụ sử dụng lệnh while...do

qua các ví dụ.

Dưới đây gợi ý một cách tiến hành khác để GV tham khảo. Cách tiếp cận này được

thực hiện theo phương án đi từ câu lệnh lặp cụ thể while...do trong Pascal, sau đó khái quát

thành kiến thức chung ở các ngôn ngữ lập trình.

Sau khi đã giới thiệu ví dụ 1 trong SGK, nếu đã giới thiệu ví dụ viết chương trình chào

hỏi ở bài trước, GV có thể đặt tình huống chưa biết trước số bạn trong nhóm thì phải viết

chương trình như thế nào? Điểm thuận lợi khi sử dụng ví dụ này là HS đã hiểu yêu cầu của

bài toán này từ các tiết học trước. Do vậy, không phải mất nhiều thời gian vào tìm hiểu ý

nghĩa của bài toán. Điều đó tạo điều kiện thuận lợi cho việc làm nổi bật vấn đề, tình huống

mới cần giải quyết. Hơn nữa, sử dụng những bài toán gắn liền với thực tế là một cách tốt để

HS nhận thức rõ khái niệm bài toán trong Tin học không chỉ là những bài toán trong lĩnh

vực toán học.

Nói chung HS chưa đưa ra được phương án giải quyết cho vấn đề này. GV nên chủ

động đưa ra một chương trình Pascal như sau:

Program Chao_hoi;

uses crt;

var Tieptuc: char;

Ten: string;

Begin

Tieptuc:='c';

while tieptuc = 'c' do

Begin

write['Nhap ten cua ban']; Readln[Ten];

writeln['Chao ban ', Ten];

write['Tiep tuc ? c/k']; readln[Tieptuc];

end;

readln;

End.

Dựa trên chương trình này, GV giới thiệu về cú pháp, sơ đồ hoạt động của câu lệnh

while...do.

Trong Pascal, cú pháp câu lệnh lặp với số lần chưa xác định trước có dạng:

while do ;

trong đó:

-



điều kiện thường là một phép so sánh;



-



câu lệnh có thể là câu lệnh đơn giản hay câu lệnh ghép.



Câu lệnh lặp này được thực hiện như sau:

1. Kiểm tra điều kiện.

2. Nếu điều kiện SAI, câu lệnh sẽ bị bỏ qua và chuyển sang câu lệnh tiếp theo trong

chương trình. Nếu điều kiện đúNG, thực hiện câu lệnh và quay lại bước 1.



64



Video liên quan

Chủ Đề