Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Lựa chọn câu để xem lời giải nhanh hơn

  • Khởi động
  • Hoạt động 1
  • ? mục 1
  • Hoạt động 2
  • ? mục 2
  • Luyện tập
  • Vận dụng

Khởi động

Trả lời câu hỏi mở đầu trang 105 SGK Tin học 10

Em có thể gặp những trường hợp cần thực hiện một số công việc lặp đi lặp lại nhiều lần. Ví dụ, để kể tên tất cả các bạn trong lớp có 30 học sinh, em cần lần lượt đọc tên từng bạn; để đếm số lượng các số chia hết cho 3 trong khoảng từ 1 đến 50, em có thể kiểm tra lần lượt các số từ 1 đến 50 và ghi ra các số chia hết cho 3 (chẳng hạn, 3, 6, 9,...) rồi đếm các số đó. Ngôn ngữ lập trình bậc cao có các câu lệnh cho phép viết một cách ngắn gọn các bước cần thực hiện lặp đi lặp lại để tạo thành một cấu trúc lập trình được gọi là cấu trúc lặp.

Em có thể xác định được trong mỗi ví dụ trên công việc nào cần phải lặp và được lặp lại bao nhiêu lần không?

Phương pháp giải:

Dựa vào thông tin trong ví dụ để xác định

Lời giải chi tiết:

Kể tên tất cả các bạn trong lớp có 30 học sinh: lặp 30 lần

Đếm số lượng các số chia hết cho 3 trong khoảng từ 1 đến 50: lặp 50 lần

Hoạt động 1

Trả lời câu hỏi Hoạt động 1 trang 105 SGK Tin học 10

Thực hiện đoạn chương trình sau trong chế độ gõ lệnh trực tiếp của Python để tính tổng 0 + 1 + … + 9. Tổng này có giá trị bao nhiêu? Giải thích kết quả.

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Phương pháp giải:

Lệnh range(n) trả lại vùng giá trị gồm n số từ 0 đến n-1

Lệnh for là lệnh lặp với số lần biết trước. 

Lời giải chi tiết:

Tổng có giá trị bằng 45. 

Trong đoạn chương trình trên, lệnh range (10) trả lại một vùng giá trị gồm 10 số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Lệnh for sẽ thực hiện 10 lần lặp, mỗi lần lặp ứng với một giá trị k trong vùng giá trị trên. Sau lệnh lặp for trên, biến S sẽ có giá trị là tổng 0 + 1 + ... + 9 = 45.

Hoạt động 2

Trả lời câu hỏi Hoạt động 2 trang 106 SGK Tin học 10 

Quan sát các lệnh for sau và so sánh kết quả in ra để biết vùng giá trị được xác định bởi lệnh range(). Lưu ý, lệnh print() có thêm tham số để in bộ dữ liệu theo hàng ngang

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Phương pháp giải:

Quan sát các lệnh 

Lời giải chi tiết:

range(3,10): 3, 4, 5, 6, 7, 8, 9

range(0,15): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14

D. Hoạt động vận dụng

Hãy viết chương trình sử dụng lệnh lặp FOR để tính tổng các số tự nhiên từ 1 đến 10


Uses crt;

Var   S, i: integer;

Begin

        clrscr;

        S : = 0;

        for i:=1 to 10 do S := S + i;

        writeln (S);

        readln;

end.


Viết chương trình pascal tính tổng S=1+ 2+3 +... +n?

a,Bằng lệnh for...do

b,Bằng lệnh while...do

Giải Bài Tập Tin Học 11 – Bài 10: Cấu trúc lặp giúp HS giải bài tập, giúp cho các em hình thành và phát triển năng lực sử dụng công nghệ thông tin và truyền thông:

  • Sách Giáo Viên Tin Học Lớp 11

1. Lặp

Với a là số nguyên và a>2, xét các bài toán sau đây:

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Với cả hai bài toán, cách để tính tổng S có các điểm tương đồng .

   + Xuất phát, S được gán giá trị 1/a

   + Sau mỗi lần lặp giá trị tổng S được cộng thêm một giá trị 1/(a+N) N=1,2,3,..

Việc cộng này sẽ được lặp lại một số lần.

Đối với bài toán 1, số lần lặp sẽ là 100. Bài toán sẽ dừng sau khi thực hiện việc cộng 100 lần.

Đối với bài toán 2, số lần lặp sẽ chưa biết trước nhưng việc cộng vào sẽ kết thúc khi:

1/(a+N)<0.0001

Nói chung, trong một số thuật toán có những thoa tác phải lặp lại một số lần. Một trong các đặc trưng của máy tính là có khả năng thực hiện hiệu quả các thao tác lặp. Cấu trúc lặp mô tả thao tác lặp và có 2 dạng là :

+ Lặp với số lần biết trước.

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

2. Lặp với số lần biết trước và câu lệnh for-do.

Có 2 thuật toán để giải bài toán 1 như sau:

Cách 1:

Bước 1: Gán cho S:=1/a ; gán cho N=0;

Bước 2: Tăng giá trị N lên 1. N:=N+1;

Bước 3: Nếu N > 100 thì chuyển đến bước 5;

Bước 4: S:=S+1/(a+N); quay lại bước 2 (Thao tác lặp ở đây).

Bước 5: Đưa S ra màn hình rồi kết thúc.

Cách 2:

Bước 1: Gán cho S:=1/a ; gán cho N=101;

Bước 2: Giảm giá trị N xuống 1. N:=N-1;

Bước 3: Nếu N<1 thì chuyển đến bước 5;

Bước 4: S:=S+1/(a+N); quay lại bước 2 (Thao tác lặp ở đây).

Bước 5: Đưa S ra màn hình rồi kết thúc.

Ở cách 1 ta thực hiện cộng xuôi:

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Dù cách nào thì cũng vẫn phải lặp 100 lần.

Trong Pascal câu lệnh dùng để mô tả lặp với số lần biết trước là câu lệnh lặp for-do với hai dạng tiến và lùi.

-Dạng tiến:

      for:= to do ;

-Dạng lùi:

      for:= downto do ;

Trong đó:

– Biến đếm: Là biến đơn, thường có kiểu nguyên.

– Giá trị đầu, Giá trị cuối: là các biểu thức cùng kiểu với biến đếm và giá trị đầu phải nhỏ hơn hoặc bằng giá trị cuối. Nếu giá trị đầu lớn hơn giá trị cuối thì vòng lặp không thực hiện.

Cơ chế hoạt động của câu lệnh for-do:

– Ở dạng lặp tiến, câu lệnh viết sau từ khóa do được thực hiện tuần tự, mỗi lần thực hiện thì biến đếm nhận giá trị tăng liên tiếp từ giá trị đầu đến giá trị cuối.

– Ở dạng lặp lùi, câu lệnh viết sau từ khóa do được thực hiện tuần tự, mỗi lần thực hiện thì biến đếm nhận giá trị giảm liên tiếp từ giá trị đầu đến giá trị cuối.

Ví dụ:

Chương trình tính bài toán 1 dưới dạng tiến.

program Tongtien; uses crt; var S:real; a,n: integer; begin clrscr; writeln('hay nhap gia tri cua a '); readln(a); S:=1.0/a; for N:=1 to 100 do S:=S+1.0/(a+N); writeln('Tong S la:',S:8:4); readln; end.

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Chương trình tính bài toán 1 dưới dạng lùi.

program Tonglui; uses crt; var S:real; a,n: integer; begin clrscr; writeln('hay nhap gia tri cua a '); readln(a); S:=1.0/a; for N:=100 downto 1 do S:=S+1/(a+N); writeln('Tinh tong lui-Tong S la:',S:8:4); readln; end.

Kết quả:

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Ví dụ 2: Viết chương tình thực hiện việc nhập từ bàn phím hai số nguyên dương M và N (M

Phân tích: Thực hiện việc lặp tiến hoặc lùi trong khoảng M và N. Giả sử ta có biến đếm I sẽ nhận giá trị lần lượt từ M đến N (trong đếm tiến) và từ N giảm dần về M (trong đếm lùi). Với mỗi giá trị của I ta sẽ kiểm tra nếu I chia hết cho 3 hoặc I chia hết cho 5 thì ta sẽ cộng nó vào tổng (Tổng ban đầu được gán là 0). Cuối cùng ta in ra tổng rồi kết thúc bài toán.

Code:

program tongchiahet3va5; uses crt; var S:integer; M,N,i: integer; begin clrscr; writeln('hay nhap gia tri cua M va N '); readln(M,N); S:=0; for i:=M to N do if(i mod 3=0) or (i mod 5=0) then S:=S+i; writeln('Tong cua cac so chia het cho 3 hoac 5 trong doan M N la ',S); readln; end.

Kết quả:

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

3. Lặp với số lần chưa biết.

Sử dụng phương pháp lặp với số lần chưa biết ta có thể xây dựng cách giải bài toán 2 như sau:

Bước 1: S:=1/a; N:=0;

Bước 2: Nếu 1/(a+N)<0.0001 thì chuyển đến bước 5;

Bước 3: Tăng giá trị N lên 1. N:=N+1;

Bước 4: S:=S+1/(a+N); rồi quay lại bước 2.

Bước 5: Đưa S ra màn hình rồi kết thúc.

Như vậy việc lặp không biết trước sẽ chỉ kết thúc khi mọt điều kiện cho trước không được thỏa mãn.

Trong Pascal mô tả cấu trúc lặp với số lần chưa biết trước như sau:

While<điều kiện> do;

Trong đó:

– Điều kiện là biểu thức logic.

– Câu lệnh là một câu lệnh đơn hoặc ghép.

Chương trình tính bai toán 2:

program baitoan2; uses crt; var S:integer; a,N: integer; begin clrscr; writeln('hay nhap gia tri cua a '); readln(a); S:=0; S:=S+1.0/a; N:=0; while not (1/(a+N)<0.0001) do begin N:=N+1; S:=S+1.0/(a+N); end; writeln('Tong S la ',S:8:4); readln; end.

Kết quả:

Viết phương trình sử dụng câu trúc lặp tính S 1 2 3 4 5 6 7 8 9 10

Ví dụ 2: Tìm ước chung lớn nhất của hai số nguyên dương M và N.

Có nhiều giải thuật tìm ước chung lớn nhất của 2 số. Sau đây là một thuật toán.

Bước 1: Nhập M,N;

Bước 2: Nếu M=N thì lấy giá trị chung này làm ước chung lớn nhất rối chuyển đến bước 5.

Bước 3: Nếu M>N thì M:=M-N ngược lại N:=N-M;

Bước 4: Quay lại bước 2.

Bước 5: Đưa ra kết quả ước chung lớn nhất rồi kết thúc.

Chương trình:

program ucln; uses crt; var M,N:integer; begin clrscr; writeln('Nhap gia tri M va N :'); readln(M,N); while M<>N do if M>N then M:=M-N else N:=N-M; writeln('uoc chung lon nhat la ',M); readln; end.