Các chương trình pascal sử dụng lệnh for to do

Trong bài này chúng ta sẽ tìm hiểu về vòng lặp For .. Do trong Pascal, đây là vòng lặp cơ bản và được sử dụng nhiều nhất trong lập trình Pascal.

Các chương trình pascal sử dụng lệnh for to do

Các chương trình pascal sử dụng lệnh for to do

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong pascal hiện có va vòng lặp chính, thứ nhất là for, thứ hai là vòng lặp while và cuối cùng là repeat. Mỗi loại có cú pháp khác nhau và tính chất khác nhau. Sau đây ta sẽ nói đến for trước.

1. Vòng lặp For .. do trong Pascal

Vòng lặp for .. do là một cấu trúc điều khiển cho phép bạn viết một chương trình có tính lặp đi lặp lại với số lần cụ thể. Cú pháp của nó như sau:

for <variable-name> := <initial_value> 
   to <down_to> <final_value> do 
        S;

Trong đó:

  • variable-name là tên biến điều khiển vòng lặp
  • initial_value là lần lặp đầu tiên
  • final_value là lần lặp cuối, tổng số lần lặp được tính từ initial_value đến final_value
  • S là những lệnh sẽ được chạy trong vòng lặp. Nếu có nhiều lệnh thì phải đặt trong khối BEGIN ... END

Các chương trình pascal sử dụng lệnh for to do

HÌnh: internet

Giả sử bạn muốn in ra các số từ 1 đến 5 thì có thể viết theo cách thông thường như sau:

Bài viết này được đăng tại [free tuts .net]

program forLoop;
begin
      writeln('1');
      writeln('2');
      writeln('3');
      writeln('4');
      writeln('5');
end.

Nhưng nếu mình muốn in ra từ 1 đến 1000, thậm chí là 1.000.000 lần thì phải làm sao? Nếu viết thủ công như vậy thì là điều rất khó, mất khá nhiều thời gian.

Áp dụng cấu trúc vòng lặp for thì mình sẽ viết lại bài này như sau:

program forLoop;
var
   a: integer;

begin
   for a := 1  to 5 do
   begin
      writeln('Gia tri cua a la: ', a);
   end;
end.

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

  • Bước 1: Lặp lần thứ nhất, a bắt đầu từ 1, vì nó nằm trong khoảng từ 1 đến 5 nên khối lệnh bên trong được thực hiện.
  • Bước 2, 3, 4, 5: Tương tự, a sẽ có giá trị lần lượt là 2, 3, 4, 5 và nó nằm trong khoảng 1 - 5 nên vẫn thực hiện.
  • Bước 6: Lúc này a = 6, nằm ngoài phạm vi lặp nên vòng lặp hết thúc.

Kết quả in ra màn hình các số từ 1 đến 5.

Gia tri cua a la: 1
Gia tri cua a la: 2
Gia tri cua a la: 3
Gia tri cua a la: 4
Gia tri cua a la: 5

2. Vòng lặp for .. do lồng nhau

Trong pascal bạn có thể đặt vòng lặp for này nằm trong vòng lặp for khác để tạo ra cấu trúc lồng nhau. Lúc này tổng số lần lặp sẽ là cấp số nhân giữa vòng lặp ngoài (cha) và vòng lặp trong (con).

Ví dụ vòng lặp cha lặp từ 1 đến 5, vòng lặp con lặp từ 1 đến 10 thì tổng số lần lặp là 5 x 10 = 50.

Cấu trúc cú pháp cơ bản như sau:

for a := 1  to 5 do
begin
   for b := 1 to 10 do
   begin
      ...
   end;
end;

Trong đó các số điều khiển vòng lặp có thể thay đổi theo yêu cầu của bài toán bạn cần lập trình.

Ví dụ: Mình cần in ra bảng cửu chương thì có thể viết như sau:

program IfThenPascal;
var 
    a: integer;
    b: integer;
begin
    for a := 2  to 9 do
    begin
        for b := 1 to 9 do
	begin
            writeln(a, ' x ', b, ' = ', (a * b));
	end;
    end;
    readln;
end.

Chạy chương trình này bạn sẽ thu được kết quả như sau:

Trên là kiến thức cơ bản của vòng lặp for trong Pascal. Đây là một vòng lặp rất quan trọng không chỉ ở Pascal mà ở bất kì một ngôn ngữ khác, vì vậy bạn cần phải hiểu ý nghĩa của nó để áp dụng, cũng như sau này sẽ phân biệt với các vòng lặp while và repeat.

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

1.2. Nội dung

a. Ôn tập kiến thức

Cú pháp:

For < biến đếm >:= < giá trị đầu > to < giá trị cuối > do

       < câu lệnh >;

Trong đó:

  • FOR, TO, DO: là từ khóa.
  • Biến đếm: thuộc kiểu dữ liệu số nguyên.
  • Giá trị đầu, giá trị cuối: là giá trị nguyên.
  • Câu lệnh: có thể là câu lệnh đơn hay câu lệnh ghép.

Ý nghĩa:

Khi thực hiện, biến đếm sẽ nhận giá trị là giá trị đầu, sau mỗi vòng lặp, biến đếm sẽ tự động tăng thêm một đơn vị cho đến khi bằng giá trị cuối thì dừng lại.

b. Thực hành

Bài 1. Viết chương trình in ra màn hình bảng nhân của một số từ 1 đến 9, số được nhập từ bàn phím và dừng màn hình để có thể quan sát kết quả.

a. Khởi động Pascal. Gõ chương trình sau và tìm hiểu ý nghĩa của từng câu lệnh trong chương trình;

uses crt;

var N,i:integer;

begin

     clrscr;

     write('Nhap so N=');

     readln(N);

     writeln;

     writeln('Bang nhan ',N);

     writeln;

     for i:=1 to 10 do

            writeln(N,' x ', i:2,' = ',N*i:3);

     readln;

end.

b. Lưu chương trình với tên BANGNHAN.PAS;

c. Dịch và chỉnh sửa các lỗi gõ, nếu có;

d. Chạy chương trình với các giá trị nhập vào lần lượt bằng 1, 2, …,10. Quan sát kết quả nhận được trên màn hình.

Gợi ý làm bài:

Kết quả in ra màn hình:

Các chương trình pascal sử dụng lệnh for to do

Hình 1. Kết quả in ra màn hình bảng nhân 6

Nhận xét kết quả trên: 

  • Các hàng kết quả sát nhau khó đọc;
  • Các hàng kết quả không được cân đối với hàng tiêu đề.
Bài 2. Chỉnh sửa chương trình để làm đẹp kết quả trên màn hình như hình dưới đây:

Các chương trình pascal sử dụng lệnh for to do

Hình 2. Kết quả in ra màn hình bảng nhân 7

Gợi ý làm bài:

Chương trình:

uses crt;

var N,i:integer;

begin

  clrscr;

  write('Nhap so N='); readln(N);

  writeln;

  writeln('Bang nhan ',N);

  writeln;

  for i:=1 to 10 do

  begin

  GotoXY(5,WhereY);

  writeln(N,' x ',i:2,' = ',N*i:3);

  writeln;

  end; 

  readln

end.

Các câu lệnh được thêm vào:

  • Writeln; => Tạo một hàng trống tại vị trí con trỏ.
  • GotoXY(a,b); => Đưa con trỏ về cột a hàng b.
  • Lệnh GotoXY(5, whereY); => Đưa con trỏ về vị trí cột 5 của hàng hiện tại.
  • WhereY =>  Cho biết thứ tự của hàng đang có con trỏ.

Lưu ý: Chỉ sử dụng được các lệnh GotoXY(a,b), WhereX, WhereY sau khi đã khai báo thư viện crt; của Pascal.

Bài 3. Cũng như câu lệnh if, có thể dùng câu lệnh for lồng trong một câu lệnh for khác khi thực hiện lặp. Sử dụng các câu lệnh for…do lồng nhau để in ra màn hình các số từ 0 đến 99 theo dạng bảng như hình sau:

Các chương trình pascal sử dụng lệnh for to do

Hình 3. Kết quả in ra màn hình các số từ 0 đến 99

Gợi ý làm bài:

Chương trình:

Program Tao_bang;

Uses Crt;

Var

  i: byte;  {chi so cua hang}

  j: byte;  {chi so cua cot}

Begin

  Clrscr; {xoa man hinh}

  For i:=0 to 9 do  {viet theo tung hang}

  begin

  For j:=0 to 9 do   {viet theo tung cot tren moi hang}

  write(10*i+j:4); {viet cac so ij ra man hinh}

  writeln;  {xuong hang moi}

  end;  {xong hang thu i}

  readln;  {dung chuong trinh de xem ket qua}

end.