VinaOnline.net

Bài tập làm việc với dãy số : Phân tích chương trình chi tiết

Bai-tap-lam-viec-voi-day-so

Bài tập làm việc với dãy số là áp dụng kiến thức về dãy số để giải quyết bài toán. . Giúp bạn nhớ lại lý thuyết và có kỹ năng phân tích mấu chốt của bài toán. Hy vọng bài tập với dãy số sẽ giúp bạn giải quyết được những chương trình liên quan đến dãy số.

Bài viết liên quan: 

I. Tính tổng và trung bình của dãy số

Cách 1:

Program T_TB1;

Uses Crt;

Var a:array[1..50] of Integer;

i,n,Tong: Integer;

Trungbinh:Real;

Begin

ClrScr;

Write(‘Day so bao nhieu phan tu: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘So thu ‘,i,’ :’); Readln(a[i]);

End;

Tong:=0;

For i:=1 to n do

Tong:=Tong+a[i];

Trungbinh:=Tong/n;

Writeln(‘Tong cua day: ‘,Tong);

Writeln(‘Trung binh cua day: ‘,Trungbinh:2:1);

Readln;

End.

Cách 2:

Program T_TB1;

Uses Crt;

Var a:array[1..50] of Integer;

i,n,Tong: Integer;

Trungbinh:Real;

Begin

ClrScr;

Write(‘Day so bao nhieu phan tu: ‘); Readln(n);

Tong≔0;

For i:=1 to n do

Begin

Write(‘So thu ‘,i,’ :’); Readln(a[i]);

Tong≔Tong+a[i]);

End;

Trungbinh:=Tong/n;

Writeln(‘Tong cua day: ‘,Tong);

Writeln(‘Trung binh cua day: ‘,Trungbinh:2:1);

Readln;

End.

II. Đếm số âm và số dương

Program T_TB;

Uses Crt;

Var a:array[1..50] of Integer;

i,n,So_Am,So_Duong: Integer;  // Gia su nhap cac phan tu <> 0

Begin

ClrScr;

Write(‘Day so bao nhieu phan tu: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘So thu ‘,i,’ :’); Readln(a[i]);

End;

So_Am:=0;

So_Duong:=0;

For i:=1 to n do

If a[i]>0 Then

So_Duong:=So_Duong+1

Else

So_Am:=So_Am+1;

Writeln(‘Tong so Am: ‘,So_Am);

Writeln(‘Tong so Duong: ‘,So_Duong);

Readln;

End.

III. In dãy ngược

Program InNguocDay;

Uses Crt;

Var a:array[1..50] of Integer;

i,n:Integer;

Begin

ClrScr;

Write(‘Day so bao nhieu phan tu: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘So thu ‘,i,’ :’); Readln(a[i]);

End;

For i:=n downto 1 do

Write(a[i],’ ‘);

Readln;

End.

Chú ý:

– Trong chương trình trên sử dụng vòng lặp và câu lệnh:

For i:=n downto 1 do   // duyệt các phần tử từ lớn đến nhỏ, sử dụng downto.

                                         // chương trình lớp 8 không có, được học lớp 11.

Write(a[i],’ ‘);

– Nếu muốn sử dụng For i:=1 to n do thì lệnh Write được viết như sau:

Write(a[n+1-i],’ ‘);

– Lệnh trên sẽ in các phần tử ngược:

+ Khi i=1  => Write(a[n]);

+ Khi i=2  => Write(a[n-1]);

+ …..

+ Khi i=n  => Write(a[1]);

Kết luận

Viết chương trình làm việc với dãy số không khó, chỉ dài và phải tổng hợp nhiều kiến thức của các phần trước (khai báo, cấu trúc rẽ nhánh, vòng lặp For,…). Bạn có thể bám vào cấu trúc này để làm “khung” phát triển cho các chương trình làm việc với dãy số tiếp theo.

Làm việc với dãy số: Phân tích chi tiết từng thành phần

Làm việc với dãy số là thực hiện trên nhiều phần tử có thuộc tính (kiểu dữ liệu) giống nhau. Điều này rất hữu ích nếu bạn muốn tính toán đồng loạt cho tất cả các phần tử. Hôm nay, Vinaonline.net cùng bạn tìm hiểu làm việc với dãy số trong ngôn ngữ lập trình Pascal.

Các bài viết liên quan:

Cấu trúc chương trình của dãy số gồm 3 hoặc 4 phần như sau:

Phần khai báo

– Khai báo dãy số.

Phần thân

– Nhập dãy số.

– Xử lý các phần tử trên dãy số (nếu có).

– In toàn bộ hoặc một số phần tử của dãy số.

I. Khai báo

Để sử dụng được dãy số, trước hết bạn phải khai báo đúng (số lượng phần tử trong dãy số, kiểu dữ liệu cho mỗi phần tử). Nếu không thực hiện chính xác công đoạn này, chương trình của bạn thực hiện không được (ngay từ khâu nhập dữ liệu) hoặc xử lý không thành công.

Cấu trúc khai báo như sau:

Var  <Tên dãy số>: array[<Chỉ số đầu>…<Chỉ số cuối>] of <Kiểu dữ liệu>;

Ví dụ: Var a: array[1..50] of Integer;

Tên dãy số: Bạn có thể đặt tên bất kỳ sao cho phù hợp với cách đặt tên trong Pascal.

Ví dụ: a, so, SoChan, DiemThi,…

[1..50]: Là số phần tử của dãy số. Bạn chỉ sử dụng được tối đa 50 phần tử, nếu muốn nhiều hơn thì tăng chỉ số cuối.

Cũng có thể khai báo [20..100] hoặc [100…200],…

Chú ý: Chỉ số đầu nhỏ nhất là 1.

Kiểu dữ liệu: Là kiểu chung của dãy nên tất cả các phần tử cũng phải có kiểu giống nhau.

Hai biến hỗ trợ thực hiện dãy số.

i,n: Integer;

* i có giá trị từ <Chỉ số đầu> đến <Chỉ số cuối>), a[i] chỉ phần tử thứ i . Ví dụ: a[1] là phần tử thứ nhất; a[5] là phần tử thứ 5,…

* n dùng để xác định số phần tử (<= chỉ số cuối) khi nhập từ bàn phím.

II. Nhập dãy số

Bạn chỉ biết được số phần tử tối đa của dãy là 50 nếu khai báo [1..50]. Bạn có thể sử dụng số phần tử ít hơn 50. Vì vậy công việc tiếp theo là phải xác định số phần tử của dãy và nhập dữ liệu cho các phần tử. Đoạn code thực hiện công việc này như sau:

Write(‘Nhap so phan tu cua day: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘Phan tu thu ‘,i,’ ‘); Readln(a[i]);

End;

III. Xử lý

Đoạn này rất ít khi thực hiện trong bài toán dãy số. Nếu có, sẽ kết hợp với đoạn cuối (hiển thị kết quả) để chương trình đơn giản hơn.

IV. Hiển thị kết quả

Đoạn này là kết quả cuối cùng để kiểm tra tính đúng đắn của chương trình. Những bài toán đơn giản (không có xử lý) thì đoạn code được viết như sau:

Writeln(‘Cac phan tu cua mang:’);

For i:=1 to n do

Write(a[i]);

hoặc Writeln(a[i]);

V. Ví dụ áp dụng làm việc với dãy số

Ví dụ 1:

Viết chương trình nhập 1 dãy số nguyên gồm n phần tử (từ 5 đến 10). Hiển thị kết quả (tất cả các phần tử) lên màn hình.

Program vidu1;

Uses Crt;

Var a:array[1..50] of Integer;

i,n: Integer;

Begin

Write(‘Nhap so phan tu cua day: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘Phan tu thu ‘,i,’ ‘); Readln(a[i]);

End;

For i:=1 to n do

Write(a[i],’ ‘);

Readln;

End.

Làm việc với dãy số: Minh họa ví dụ 1

Làm việc với dãy số: Minh họa Ví dụ 1

Ví dụ 2:

Viết chương trình nhập 1 dãy số (số nguyên) gồm n phần tử (từ 5 đến 10). Hiển thị kết quả (các phần tử có chỉ số chẵn) lên màn hình.

Program vidu2;

Uses Crt;

Var a:array[1..50] of Integer;

i,n: Integer;

Begin

Write(‘Nhap so phan tu cua day: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘Phan tu thu ‘,i); Readln(a[i]);

End;

Writeln(‘Cac phan tu co chi so chan: ‘);

For i:=1 to n do

If (i mod 2 = 0) Then

Write (a[i],’ ‘);

Readln;

End.

Chú ý: Các phần tử có chỉ số chẵn là các phần tử a[2], a[4], a[6],…

Làm việc với dãy số: Minh họa ví dụ 2

Làm việc với dãy số: Minh họa ví dụ 2

Ví dụ 3:

Viết chương trình nhập 1 dãy số (số nguyên) gồm n phần tử (từ 5 đến 10). Hiển thị kết quả (các phần tử chẵn) lên màn hình.

Program vidu3;

Uses Crt;

Var a:array[1..50] of Integer;

i,n: Integer;

Begin

Write(‘Nhap so phan tu cua day: ‘); Readln(n);

For i:=1 to n do

Begin

Write(‘Phan tu thu ‘,i,’ ‘); Readln(a[i]);

End;

Writeln(‘Cac phan tu chan: ‘);

For i:=1 to n do

If (a[i] mod 2 = 0) Then

Write(a[i],’ ‘);

Readln;

End.

Làm việc với dãy số: Minh họa ví dụ 3

Làm việc với dãy số: Minh họa ví dụ 3

Kết luận

Viết chương trình làm việc với dãy số không khó, chỉ dài và phải tổng hợp nhiều kiến thức của các phần trước (khai báo, cấu trúc rẽ nhánh, vòng lặp For,…). Bạn có thể bám vào cấu trúc này để làm “khung” phát triển cho các chương trình làm việc với dãy số tiếp theo.

Bài tập số lần lặp không xác định : Minh họa chi tiết

Bài tập số lần lặp không xác định nhằm củng cố kiến thức vòng lặp While … do. Bạn nên tham khảo các bài viết trước để có kiến thức về lặp trình pascal. Bài tập số lần lặp không xác định sẽ bổ sung hai bài toán được ứng dụng trong vòng lặp While … do.

I. Bài tập số lần lặp không xác định : Tìm ước số chung lớn nhất

Ý tưởng thực hiện

– Nếu a=b thì UCLN(a,b) = a

– Khi a <> b

* Nếu a>b thì a = a-b

* Ngược lại, thì b = b-a

Ví dụ

– a = 5, b = 10

=> UCLN(5,10) = UCLN(5,5) = 5

– a = 5, b = 13

=> UCLN(a,b) = UCLN(5,8) = UCLN(5,3) = UCLN(2,3) = UCLN(2,1) = UCLN(1,1) = 1

 Program ucln;

Uses crt;

Var a,b:integer;

BEGIN

ClrScr;

Write(‘Nhap a: ‘);Readln(a);

Write(‘Nhap b: ‘);Readln(b);

While a<>b do

If a>b Then

a:=a-b

Else

b:=b-a;

Write(‘Uoc chung lon nhat cua a va b: ‘,a);

Readln;

END.

II. Bài tập số lần lặp không xác định : Đổi số thập phân thành nhị phân

Bài tập số lần lặp không xác định : Đổi số thập phân thành nhị phân

Ý tưởng thực hiện

Thực hiện phép chia số thập phân cho 2.

– Thu được kết quả của phép chia (phần nguyên). Nếu kết quả chưa bằng 0 thì tiếp tục lấy kết quả chia cho 2.

– Số dư của phép chia chính là dãy nhị phân cần tìm (lấy ngược từ cuối về đầu)

Giải thích hình minh họa

13 chia 2 được 6, dư 1

6 chia 2 được 3, dư 0

3 chia 2 được 1, dư 1

1 chia 2 được 0, dư 1

Hàm / phép tính sử dụng trong chương trình

mod: Lấy phần dư của phép chia.

Ví dụ:

(6 mod 2) = 0; (6 mod 4) = 2

div: Lấy phần nguyên của phép chia.

Ví dụ:

(6 div 2) = 3; (6 div 4) = 1

STR(number, s): Đổi số number thành chuỗi và gán vào s.

Ví dụ:

STR(10,s): Đổi số 10 thành chuỗi ’10’ và gán vào biến s; s lúc này chứa giá trị ’10’.

– CONCAT(s1,s2): Ghép hai chuỗi.

Ví dụ:

s1=’ab’

s2=’CD’

CONCAT(s1,s2) = ‘abCD’

CONCAT(s2,s1) = ‘CDab’

Chú ý:

– Bạn nên quan tâm thứ tự chuỗi trong hàm CONCAT. CONCAT(s1,s2) <> CONCAT(s2,s1).

Program NhiPhan;

Uses Crt;

Var n: Byte;

t,s: String;

BEGIN

ClrScr;

Write(‘Nhap so: ‘); Readln(n);

s:=”;

While n>0 do

Begin

STR((n mod 2),t);    // Đổi số dư thành chuỗi và gán vào biến

s:=CONCAT(t,s);    // Gán biến t vào s (tương đương s:= t+s; chú ý t đứng trước s)

n:= (n div 2);      // Tiếp tục thực hiện phép chia.

End;

Writeln(‘Day nhi phan: ‘,s);

Readln;

END.

Chú ý:

– Phần dư của phép chia sẽ đổi thành chuỗi để thực hiện ghép chuỗi. Nếu không thực hiện công việc này sẽ xảy ra: 1 + 0 = 1; 1 + 1 = 2.

Lời kết

Khi bạn có nền tảng về lập trình pascal thì bài viết này nhằm nhấn mạnh sự khác biệt giữa hai vòng lặp While … do và For. Chúc bạn trở thành cao thủ lập trình.

Cấu trúc lặp với số lần chưa biết trước : Chi tiết vòng lặp While … do

Cấu trúc lặp với số lần chưa biết trước là thực hiện vòng lặp While … do trong ngôn ngữ lập trình Pascal. Cấu trúc lặp với số lần chưa biết trước thực hiện khá giống vòng lặp For nhưng khác biệt lớn nhất là xét điều kiện trước khi thực hiện câu lệnh (nhiều câu lệnh).

I. Cấu trúc lặp với số lần chưa biết trước : Công dụng

Thực hiện lặp với số lần chưa xác định. Số lần này được thực hiện trong chương trình đến khi nó thỏa điều kiện (do bạn đặt ra).

II. Cấu trúc lặp với số lần chưa biết trước : Cú pháp

 Cấu trúc lặp với số lần chưa biết trước : Mẫu vòng lặp While ... do

Cấu trúc lặp với số lần chưa biết trước : Mẫu vòng lặp While … do

While <Điều kiện> do

<Câu lệnh>

Điều kiệnmột biểu thức so sánh. Có thể sử dụng điều kiện ghép (kết hợp AND hoặc OR).

Câu lệnh là thực hiện một công việc nào đó. Nếu thực hiện nhiều câu lệnh sau While … do thì phải bao bởi cặp Begin … End. Thông thường, sau While … do thực hiện ít nhất 2 câu lệnh:

+ Một hoặc nhiều câu lệnh thực hiện theo yêu cầu người lập trình.

+ Một câu lệnh tác động đến vòng lặp (dùng để dừng (thoát) vòng lặp While … do).

III. Cấu trúc lặp với số lần chưa biết trước : Ví dụ

1. Ví dụ 1

Tính tổng S=1+2+3+4+5

– Thực hiện bởi vòng For

For i:=1 to 5 do

s:=s+i;

– Thực hiện bởi vòng While … do

Program tong_vd1;

Uses Crt;

Var i, n: Integer;

s: Integer;

Begin

s:=0;

i:=1;

While i<=5 do

Begin

       s:=s+i;

i:=i+1;

End;

Writeln(‘Tong cua day’, s);

Readln;

End.

– Phân tích:

+ Xét về mặt hình thức, chương trình viết bằng While … do dài hơn viết bằn For (tham khảo phần in đậm).

+ Phải khởi tạo giá trị tham gia điều kiện (i:=1).

+ Tăng giá trị để thoát vòng lặp (i:=i+1), biến i không tự động tăng như For.

2. Ví dụ 2

Tính tổng S=1+1/2+1/3+…+1/n khi 1/n<=0.1

Phân tích:

– n bằng bao nhiêu khi thực hiện chương trình này?

– Trong vòng lặp For, bạn biết n (đặt trong For hoặc nhập từ bàn phím). Tuy nhiên trong trường hợp này, bạn không xác định được. Vì vậy, phải thực hiện While … do.

Program tong_vd2;

Uses Crt;

Var i, n: Integer;

s: Real;

Begin

s:=0;

i:=1;

While 1/i<=0.1 do

Begin

       s:=s+1/i;

i:=i+1;

End;

Writeln(‘Tong cua day’, s:2:1);

Readln;

End.

3. Ví dụ 3

Tính giai thừa của một số lớn nhất, với kết quả S<=1000

Phân tích:

– n bằng bao nhiêu khi thực hiện chương trình này?

– Điều kiện trong chương trình này không phải là n mà là S. Nhưng n vẫn được sử dụng (biến i đại diện cho n).

Program tong_vd3;

Uses Crt;

Var i, n: Integer;

s: Integer;

Begin

s:=1;

i:=1;

While s<=1000 do

Begin

       s:=s*i;

i:=i+1;

End;

Writeln(‘Tong cua day’, s);

Readln;

End.

– Chương trình này vẫn có giá trị khởi tạo (s:=1) và giá trị để thoát vòng lặp (s:=s*i).

IV. Cấu trúc lặp với số lần chưa biết trước : Một số lưu ý

– Những chương trình viết được bằng For thì viết được bằng While … do.

– Giá trị để thoát vòng lặp While .. do không nhất thiết phải tăng. Giảm vẫn được tùy theo điều kiện.

– Biến i trong vòng lặp While … do không nhất thiết tăng / giảm 1 đơn vị mà có thể tăng / giảm nhiều đơn vị. Ví dụ: i:=i+2 hoặc i:=i+5,…

– Sử dụng vòng lặp While … do phải luôn luôn ghi nhớ: Giá trị khởi tạo và Tăng / Giảm giá trị tham gia điều kiện để thoát vòng lặp.

Lời kết

Cấu trúc lặp với số lần chưa biết trước là dạng cấu trúc thứ hai so với Cấu trúc lặp với số lần biết trước. Nếu bạn sử dụng tốt vòng lặp For thì cấu trúc lặp với số lần chưa biết trước hay còn gọi vòng lặp While … do sẽ thực hiện tương tự. Vinaonline.net chúc bạn lập trình tốt với cấu trúc này.

Thực hành nâng cao vòng lặp For trong Pascal : Chi tiết, dễ hiểu

Thực hành nâng cao vòng lặp For trong Pascal tiếp tục mở rộng các dạng thực hành cơ bản vòng lặp For trong Pascal. Một số bài có thể kết hợp với cấu trúc rẽ nhánh để xác định điều kiện thực hiện. VinaOnline.net cùng bạn tiếp tục thực hành nâng cao vòng lặp For trong pascal nhé.

I. Thực hành nâng cao vòng lặp For trong Pascal : In bảng cửu chương

Viết chương trình in bảng cửu chương (với n nhập từ bàn phím. Ví dụ: n=2 thì in bảng cửu chương 2,…)

Program For_CuuChuong;

Uses Crt;

Var i,n: Integer;

Begin

ClrScr;

Write(‘Ban muon in cuu chuong may: ‘); Readln(n);

For i:=1 to 10 do

Writeln(n,’ x ‘ ,i,’ = ‘, n*i);

Readln;

End.

Kết quả

Ban muon in cuu chuong may: 2 (Bạn nhập 2 chẳng hạn)

2 x 1 = 2

2 x 2 = 4

Dựa vào kết quả, biến i trong vòng lặp For (i có giá trị từ 1 đến 10 (phần in đậm)).

Bạn cần xây dựng dòng lệnh Writeln(n,’ x ‘ ,i,’ = ‘, n*i) đúng là đạt yêu cầu.

II. Thực hành nâng cao vòng lặp For trong Pascal : Sử dụng For lồng nhau

Mở rộng chương trình: In ra màn hình từ cửu chương 2 đến cửu chương 9.

Program For_CuuChuong;

Uses Crt;

Var i,j: Integer;

Begin

ClrScr;

For i:=2 to 9 do

Begin

For j:=1 to 10 do

Writeln(i,’ x ‘ ,j,’ = ‘, i*j);

Writeln;

Readln;

End;

Readln;

End.

Kết quả

2 x 1 = 2

2 x 2 = 4

….

Enter sẽ hiển thị cửu chương 3, 4, …

– Chương trình này không sử dụng n.

+ i = 2.

+ j = 1-10.

Begin … End (in đậm) của chương trình chính.

– Begin … End (bên trong) là của vòng lặp For i vì bằng 2 chẳng hạn (giá trị đầu tiên) thì bên trong vòng lặp (For i) sẽ thực hiện 12 dòng lệnh (10 lần Writeln(i,’ x ‘ ,j,’ = ‘, i*j)) và một lần Writeln (viết ra khoảng trắng) và một lần Readln (dừng màn hình).

– Nến không có lệnh Readln (bên trong) chương trình sẽ in ra từ cửu chương 2 đến cửu chương 9. Nhưng hiển thị từ cửu chương 7 đến cửu chương 9 mà thôi vì bị che khuất phần đầu.

III. Thực hành nâng cao vòng lặp For trong Pascal : Kết hợp cấu trúc rẽ nhánh

Viết chương trình tính tổng các số chẵn  tổng các số lẻ của dãy số.

Program Tong_chan_le;

Uses Crt;

Var i,n: Integer;

Tong_chan, Tong_le: Integer;

Begin

ClrScr;

Write(‘Day co bao nhieu so: ‘); Readln(n);

Tong_chan:=0;

Tong_le:=0;

For i:=1 to n do

If (i mod 2 = 0) Then

Tong_chan:=Tong_chan+i

Else

Tong_le:=Tong_le+i;

Writeln(‘Tong chan: ‘,Tong_chan);

Writeln(‘Tong_le: ‘,Tong_le);

Readln;

End.

Kết quả

Day co bao nhieu so: 4 (Bạn nhập vào 4), dãy số là 1+2+3+4

Tong_chan: 6

Tong_le: 4

– Điều kiện (i mod 2 = 0) có thể thay thế bằng Not(ODD(i)). Hàm ODD(i) trả về true nếu i lẻ, do đó Not(ODD(i)) sẽ trả về true nếu i chẵn (không lẻ).

Lời kết

Thực hành nâng cao vòng lặp For trong Pascal vẫn còn nhiều chương trình cần minh họa. Nhưng bao nhiêu là đủ? Vấn đề chính là bạn phải tìm hiểu hướng giải quyết những bài toán cụ thể, bằng cách ghép những câu lệnh hoặc cấu trúc lại với nhau. Chúc bạn thực hành nâng cao vòng lặp For trong Pascal thật tốt.

Thực hành cơ bản vòng lặp For trong Pascal : Chi tiết, dễ hiểu

Thực hành cơ bản vòng lặp For trong Pascal nhằm củng cố lý thuyết chi tiết vòng lặp For chưa liệt kê hết. Mỗi chương trình trong bài viết này là một trường hợp cụ thể áp dụng vòng lặp For. Vì vậy, VinaOnline.net cùng bạn khảo sát chi tiết thực hành cơ bản vòng lặp For trong Pascal nhé.

I. Thực hành cơ bản vòng lặp For trong Pascal : Số lần lặp do bạn nhập từ bàn phím

Viết chương trình hiển thị n dòng “Chao ban!”. Với n được nhập từ bàn phím

Program For_1;

Uses Crt;

Var i, n: Integer;

Begin

ClrScr;

Write(‘Hien thi bao nhieu dong “Chao ban!” ’); Readln(n);

For i≔1 to n do

Writeln(‘Chao ban!’);

Readln;

End.

Kết quả

Hien thi bao nhieu dong “Chao ban!” 5 (Bạn gõ vào 5 chẳng hạn), sẽ xuất hiện

Chao ban! (5 dòng như thế)

II. Thực hành cơ bản vòng lặp For trong Pascal : Tổng của một dãy số

Viết chương trình nhập vào một dãy số: 1+2+3+…+n (với n nhập từ bàn phím). Hãy cho biết tổng của dãy số đó.

Program For_2;

Uses Crt;

Var i, n: Integer;

Tong: Integer; // Bien nay dung de luu gia tri cua tong day so

Begin

ClrScr;

Write(‘Day so co bao nhieu so: ’); Readln(n);

Tong≔0;

For i≔1 to n do

Tong≔Tong+i;

        Writeln(‘Tong cua day so la:’, Tong);

Readln;

End.

Kết quả

Day so co bao nhieu so: 5 (Bạn gõ vào 5 chẳng hạn), sẽ xuất hiện

Tong cua day so la: 15

Chú ý:

– Biến Tong≔0 là giá trị khởi tạo ban đầu. Biến này phải được khởi tạo trước vòng lặp For (dòng nào cũng được nhưng phải sau Begin).

– Khi bạn nhập vào 5 thì i có giá trị 1, 2, 3, 4, 5. Vì vậy, cộng dãy số tức là cộng các giá trị của i trong vòng lặp.

­– Bạn không cần tăng giá trị của i vì vòng lặp For tự làm việc này.

III. Thực hành cơ bản vòng lặp For trong Pascal : Mở rộng một số trường hợp

1. Mở rộng thứ nhất

Bạn có thể mở rộng chương trình For_2 bằng cách tính tích của dãy (Đây còn gọi là bài toán tính giai thừa (n!))

Tính 1.2.3.4…n

Để giải bài toán này, bạn cần sửa lại chương trình For_2 như sau:

– Đổi biến Tong thành Tich.

– Dòng lệnh khởi tạo: Tich : = 1.

– Dòng lệnh tính tích: Tich : = Tich*i.

2. Mở rộng thứ hai

Tính 1+1/2+1/3+…+1/n

Để giải bài toán này, bạn cần sửa lại chương trình For_2 như sau:

– Đổi biến Tong : Interger thành Tong : Real vì kết quả là một số thực (số lẻ).

Chương trình được viết lại như sau

Program For_2_2a;

Uses Crt;

Var i, n: Integer;

       Tong: Real; // Bien nay dung de luu gia tri cua tong day so

Begin

ClrScr;

Write(‘Day so co bao nhieu so: ’); Readln(n);

Tong≔0;

For i≔1 to n do

TongTong+1/i;

Writeln(‘Tong cua day so la:’, Tong);

Readln;

End.

Hoặc cải tiến thêm nữa

Program For_2_2b;

Uses Crt;

Var i, n: Integer;

       Tong: Real; // Bien nay dung de luu gia tri cua tong day so

Begin

ClrScr;

Write(‘Day so co bao nhieu so: ’); Readln(n);

Tong1;

For i2 to n do

TongTong+1/i;

Writeln(‘Tong cua day so la:’, Tong);

Readln;

End.

Phân tích cho bạn thấy, nhưng mình vẫn muốn sử dụng chương trình For_2_2a để làm khung cho mọi bài toán thuộc dạng này.

Lời kết

Thực hành cơ bản vòng lặp For trong Pascal giới thiệu bạn một số chương trình để áp dụng cụ thể vào vòng lặp For, chứ chưa khai thác hết đâu? Hai hay nhiều bài viết tiếp theo VinaOnline.net tiếp tục hướng dẫn bạn một số dạng “chuyên sâu” hơn. Các bài viết này hỗ trợ phần mảng rất nhiều. Chúc các bạn học tốt.

Cấu trúc lặp với số lần biết trước : Chi tiết vòng lặp For

Cấu trúc lặp với số lần biết trước thường xuyên xuất hiện trong lập trình Pascal. Cấu trúc này giải quyết được một loại các phần tử có thuộc tính giống nhau. Để hiểu rõ hơn cấu trúc lặp với số lần biết trước, VinaOnline.net cùng bạn khảo sát qua một số chương trình minh họa nhé.

Bài viết tương tự: Cấu trúc lặp với số lần chưa biết

Cấu trúc lặp với số lần biết trước : Ảnh minh họa

Minh họa  Cấu trúc lặp với số lần biết trước

I. Cấu trúc lặp với số lần biết trước : Cú pháp

Cú pháp cấu trúc lặp với số lần biết trước như sau:

For <biến đếm>  <Giá trị đầu> to <Giá trị cuối> do <Câu lệnh>;

II. Cấu trúc lặp với số lần biết trước : Giải thích cú pháp

Giải thích một số thuật ngữ trong cú pháp như sau:

– Biến đếm: Là một biến kiểu số nguyên (Byte hoặc Integer) phải được khai báo trước khi sử dụng trong vòng lặp.

– Giá trị đầu: Là giá trị khởi tạo (kiểu số nguyên). Thông thường là 1, nhưng bạn cũng có thể cho giá trị tùy ý. Ví dụ: 2, 5, 10,…

– Giá trị cuối: Là giá trị kết thúc (kiểu số nguyên), lớn hơn hoặc bằng Giá trị đầu.

– Câu lệnh: Sau vòng lặp For phải có ít nhất một câu lệnh. Nếu thực hiện nhiều câu lệnh sau vòng lặp For thì phải bao bởi cặp Begin End.

Thông thường câu lệnh được viết xuống hàng để làm nổi bật vòng lặp For và cũng dễ kiểm soát nếu có lỗi trong vòng lặp.

III. Cấu trúc lặp với số lần biết trước : Chương trình áp dụng

Viết chương trình hiển thị 10 dòng “Chao ban!”

Program For_vidu_1;

Uses Crt;

Var i: integer;

Begin

ClrScr;

For i:=1 to 10 do

Writeln(‘Chao ban!’);

Readln;

End.

=> Kết quả chương trình

Chao ban! (Xuất hiện 10 lần như thế)

Mở rộng ví dụ 1: Thêm dòng Writeln(‘Toi la Free Pascal’); sau dòng Writeln(‘Chao ban!’);

Program For_vidu_MR_1;

Uses Crt;

Var i: integer;

Begin

ClrScr;

For i:=1 to 10 do

Writeln(‘Chao ban!’);

Writeln(‘Toi la Free Pascal’);

Readln;

End.

=> Kết quả chương trình

Chao ban! (Xuất hiện 10 lần như thế)

Toi la Free Pascal (Xuất hiện 1 lần)

Giải thích:

– Sau vòng lặp For chỉ thực hiện một câu lệnh mà thôi; Vì vậy, dòng lệnh Writeln(‘Toi la Free Pascal’); ngoài tầm kiểm soát của vòng lặp For.

– Để vòng lặp For in luôn dòng lệnh được in đậm thì bạn nên bao bởi cặp Begin End giống với cấu trúc rẻ nhánh IF.

Chương trình được viết lại (sau For) như sau:

For i:=1 to 10 do

Begin

Writeln(‘Chao ban!’);

       Writeln(‘Toi la Free Pascal’);

End;

=> Kết quả chương trình

Chao ban!

Toi la Free Pascal

(Xuất hiện 10 lần hai câu như thế!)

IV. Cấu trúc lặp với số lần biết trước : Một số lưu ý

– Số lần thực hiện của vòng lặp For = Giá trị cuối – Giá trị đầu + 1.

Ví dụ:

For i≔1 to 10 do

Số lần thực hiện = 10 – 1 + 1 = 10 lần.

For i≔3 to 20 do

Số lần thực hiện = 20 – 3 + 1 = 18 lần.

– Đối với một số bài toán phức tạp, bạn có thể thực hiện hai hay nhiều vòng lặp For lồng nhau.

– Để hạn chế việc thực hiện vòng lặp For, bạn dùng cấu trúc rẽ nhánh IF sau For.

Bạn có thể tham khảo Thực hành cơ bản vòng lặp For trong Pascal.

Lời kết 

Cấu trúc lặp với số lần biết trước (hay gọi ngắn gọn vòng lặp For) là cấu trúc khá quan trọng không những trong ngôn ngữ lập trình Pascal mà các ngôn ngữ lập trình khác cũng khác ứng dụng rất nhiều. Nếu bạn muốn giải quyết những bài toán phức tạp, nhanh gọn thì phải sử dụng cấu trúc này. Chúc bạn vận dụng tốt vòng lặp For.

Ôn tập sử dụng kiểu dữ liệu và khai báo biến

Ôn tập sử dụng kiểu dữ liệu và khai báo biến là hệ thống kiến thức đã học trong bài Sử dụng kiểu dữ liệu và khai báo biến trong Pascal. Bạn nên vận dụng Ôn tập sử dụng kiểu dữ liệu và khai báo biến vào lập trình để kết hợp lý thuyết và thực hành cho nhuần nhuyễn.

1. Phạm vi giá trị nào sao đây là phạm vi giá trị của kiểu dữ liệu số nguyên (integer)?

A. 215 đến 215-1;                      B. -215 đến 215- 1        C. -215 đến 215 -1;           D. -215 đến 215

2. Trong ngôn ngữ lập trình Pascal, câu lệnh khai báo nào sau đây đúng?

A. Var a, b : integer;              B. Var x = real;             C. const x := 5;                D. Var thong bao : string;

3. Trong Pascal, giả sử x là biến kiểu số nguyên. Phép gán nào sau đây là hợp lệ?

A. x := 15/2;                             B. x := 50;                   C. x := 2,4;                      D. x := 83000

4. x có kiểu dữ liệu là số nguyên, để khai báo biến x ta có thể khai báo như:

A. Var x: integer;                   B. Var x: real;                C. Var x: char;                 D. Var x: string;

5. Trong Pascal, giả sử x được khai báo với kiểu dữ liệu số thực. Phép gán nào hợp lệ:

A. x = 9.5;                                B. x:= 9.5;                   C. x : 9.5;                          D. Các câu trên đều đúng

6: Tính giá trị cuối cùng của c, biết rằng: a:= 3;  b:= 5; a:= a  + b; c:= a+b;

A. c= 8;                                   B.  c=3;                          C.  c= 5;                            D.  c=  13

7: Hãy cho biết giá trị của biến x bằng bao nhiêu sau khi thực hiện câu lệnh 

if  (45 mod 3 ) = 0  then x :=x+2; ( Biết rằng trước đó giá trị của biến x = 5)

A.5                                           B. 9                                   C. 7                                   D. 11

8: Để khai báo biến x kiểu số nguyên; a, b kiểu số thực thì ta khai báo:

A. Var x, a, b: Integer, real;                                             B. Var x: Integer; a, b: real;

Var x, a, b: Integer of real                                             D. Var a, b: Integer; x: real;

9: x là một số thực, để khai báo biến x ta có thể khai báo như sau:

A. Var x: integer;                     B. Var x: Real;               C.  Var  x: String;             D. Var x: char;

10. Khai báo sau có ý nghĩa gì? Var a: integer; b: Char;

A. Biến a thuộc kiểu dữ liệu số thực và biến b thuộc kiểu dữ liệu kí tự

B. Biến a thuộc kiểu dữ liệu số nguyên và biến b thuộc kiểu dữ liệu xâu kí tự

C. Biến a thuộc kiểu dữ liệu số nguyên và biến b thuộc kiểu dữ liệu kí tự

D. Các câu trên đều sai.

11. Biến là gì?

A. Là đại lượng có giá trị không thay đổi trong quá trình thực hiện chương trình.

B. Là đại lượng có giá trị luôn thay đổi trong quá trình thực hiện chương trình.

C. Là đại lượng dùng để tính toán.

D. Là đại lượng dùng để khai báo tên chương trình.

12: Hãy chọn khai báo sai  trong các khai báo sau đây:

A. Var x, y : integer;                B. Var y: real;                   C. Const m: integer;      D. Const  n = 8;

13. Giả sử b được khai báo là biến với dữ liệu số nguyên, y là biến có kiểu dữ liệu xâu kí tự. Phép gán nào sau đây KHÔNG hợp lệ?

A. y = ‘Tin hoc’;                       B. y:= ‘6789’;                    C. b:= 2009;                           D. b:= “ Anh van”;

Bài tập cấu trúc chương trình Pascal

Bài tập cấu trúc chương trình Pascal nhằm ôn lại những kiến thức bạn đã đạt được trong bài Cấu trúc chương trình Pascal. Qua các bài tập cấu trúc chương trình Pascal, bạn có thể tự xây dựng những dạng bài tập tương tự để củng cố kiến thức tốt hơn.

Bài tập cấu trúc chương trình Pascal

Cấu trúc chương trình Pascal

1. Cấu trúc chương trình Pascal gồm mấy phần

A. 1 phần

B. 2 phần

C. 3 phần

D. 4 phần

2. Uses Crt được đặt …

A. Trong phần thân chương trình

B. Trong phần khai báo

C. Đặt tùy ý

D. Câu A & B đúng

3. Sắp xếp dòng trong chương trình cho hợp lý

Begin

Writeln(‘Toi la Free Pascal’);

End.

Program CT_1;

ClrScr;

Readln;

Writeln(‘Chao ban’);

Uses Crt;

—————-

Program CT_1;

Uses Crt;

Begin

ClrScr;

Writeln(‘Chao ban’);

Writeln(‘Toi la Free Pascal’);

Readln;

End.

4. Để hiển thị thông tin ra màn hình, sử dụng lệnh

A. Readln

B. Write

C. ClrScr

D. Delay

5. Cuối câu lệnh trong Pascal, sử dụng dấu

A. Phẩy (,)

B. Dấu hai chấm (:)

C. Dấu chấm phẩy (;)

D. Không cần dấu

6. Sau chữ “End” cuối chương trình, sử dụng dấu

A. Phẩy (,)

B. Dấu hai chấm (:)

C. Dấu chấm phẩy (;)

D. Dấu chấm (.)

7. Để sử dụng được lệnh ClrScr, bạn khai báo thư viện Crt bằng từ khóa

A. Var

B. Const

C. Uses

D. Program

8. Từ khóa Program được đặt

A. Dòng đầu tiên trong chương trình

B. Trong phần thân chương trình

C. Trước dòng Begin là được

D. Bất kỳ dòng nào trong chương trình

9. Cặp từ khóa Begin … End đặt

A. Trong phần thân chương trình

B. Trong phần khai báo

C. Đặt tùy ý

D. Câu A & B đúng

10. Lệnh Readln đặt kế trước End là

A. Câu lệnh sai (thiếu)

B. Dùng để nhập dữ liệu từ bàn phím

C. Dùng để hiển thị dữ liệu ra màn hình

D. Dừng màn hình để xem kết quả.

Ôn tập cấu trúc rẽ nhánh trong lập trình Pascal : Giải thích chi tiết, dễ hiểu

Ôn tập cấu trúc rẽ nhánh trong lập trình Pascal nhằm củng cố kiến thức đã học. Trọng tâm là các dạng cấu trúc rẽ nhánh. Vinaonline.net hy vọng ôn tập cấu trúc rẽ nhánh trong lập trình Pascal sẽ giúp bạn có kỹ năng phân tích quy trình lập trình Pascal.

Bài 1: Hoàn đổi hai số

Nhập vào hai số nguyên, sau đó in ra hai số nguyên trước và sau khi hoán đổi.

Program hoan_doi;

Uses Crt;

Var a,b:Integer;  // Dung de nhap tu ban phim

c: Integer;    // Luu tam gia tri cua a hoac cua b

Begin

ClrScr;

Write(‘Nhap a: ‘); Readln(a);

Write(‘Nhap b: ‘); Readln(b);

Writeln(‘Hai so chua hoan doi: ‘);

Writeln(‘a= ‘,a,’ b= ‘,b); // Gia su nhap a=2; b=5

c:=a;                             // c=2 (bang gia tri cua a)

a:=b;                            // a=5 (bang gia tri cua b)

b:=c;                            // b=2 (bang gia tri cua c)

Writeln(‘Hai so da hoan doi: ‘);

Write(‘a= ‘,a,’ b= ‘,b);

Readln;

End.

Chú ý:

– Ý nghĩa của việc hoán đổi này như sau: Bạn có hai cốc nước (giả sử màu xanh và màu vàng). Muốn hoán đổi thì phải nhờ một cốc khác (chưa có nước) để đổ nước màu xanh hoặc màu vàng vào cốc này.

– Bạn có thể tham khảo bài viết liên quan đến phép gán trong lập trình Pascal.

Bài 2: Tìm số lớn nhất của hai số

Nhập vào hai số. In ra màn hình số lớn hơn (lớn nhất).

Cách 1

Program so_lon_nhat1;

Uses Crt;

Var a,b: Integer;

Begin

ClrScr;

Write(‘Nhap a: ‘); Readln(a);

Write(‘Nhap b: ‘); Readln(b);

If a>=b Then

Writeln(‘So lon nhat la: ‘,a)

Else

Writeln(‘So lon nhat la: ‘,b);

Readln;

End.

Cách 2

Program so_lon_nhat2;

Uses Crt;

Var a,b: Integer;

max: Integer; // dung de luu gia tri lon nhat

Begin

ClrScr;

Write(‘Nhap a: ‘); Readln(a);

Write(‘Nhap b: ‘); Readln(b);

max:=a;

If max<b Then

max:=b;

Writeln(‘So lon nhat la: ‘,max);

Readln;

End.

Mở rộng với ba số

Program so_lon_nhat3;

Uses Crt;

Var a,b,c: Integer;

max: Integer; // dung de luu gia tri lon nhat

Begin

ClrScr;

Write(‘Nhap a: ‘); Readln(a);

Write(‘Nhap b: ‘); Readln(b);

Write(‘Nhap c: ‘); Readln(c);

max:=a;

If max<b Then

max:=b;

If max<c Then

max:=c;

Writeln(‘So lon nhat la: ‘,max);

Readln;

End.

Dùng khung này, bạn có thể tím số lớn nhất trong bốn số.

Bài 3: Kiểm tra và tính cv & dt tam giác

Nhập vào ba cạnh của một tam giác. Kiểm tra tam giác có hợp lệ không? Nếu hợp lệ, hãy tính chu vi và diện tích của tam giác đó.

Program cv_dt_tamgiac;

Uses Crt;

Var a,b,c: Real;

s: Real; // s: dien tich tam giac

p: Real; // p: nua chu vi

Begin

ClrScr;

Write(‘Nhap canh a: ‘); Readln(a);

Write(‘Nhap canh b: ‘); Readln(b);

Write(‘Nhap canh c: ‘); Readln(c);

If ((a>=b+c) or (b>=a+c) or (c>=a+b)) Then

Writeln(‘Tam giac khong hop le’)

Else

Begin

p:=(a+b+c)/2;

s:=SQRT(p*(p-a)*(p-b)*(p-c));

Writeln(‘Chu vi tam giac la: ‘,2*p:2:1);

Writeln(‘Dien tich tam giac la: ‘,s:2:1);

End;

Readln;

End.

Chú ý:

– Sau cấu trúc If, Else muốn thực hiện nhiều câu lệnh thì phải bao bởi cặp Begin End;

– Hàm SQRT tính căn bậc 2 của một số.

Ví dụ:

SQRT(4)=2

Bài 4: Tính toán dựa vào phép tính nhập từ bàn phím

Nhập vào hai số và một phép tính. Tính toán dựa vào phép tính được nhập từ bàn phím. Giả sử số thứ nhất là số đứng bên trái phép tính.

Program tinh_toan;

Uses Crt;

Var a,b: Integer;

phep_tinh: String;

ket_qua: Real;

Begin

ClrScr;

Write(‘Nhap a: ‘); Readln(a);

Write(‘Nhap b: ‘); Readln(b);

Write(‘Nhap phep tinh: ‘); Readln(phep_tinh);

If phep_tinh=’+’ Then

ket_qua:=a+b;

If phep_tinh=’-‘ Then

ket_qua:=a-b;

If phep_tinh=’*’ Then

ket_qua:=a*b;

If phep_tinh=’/’ Then

ket_qua:=a/b;

If phep_tinh=’mod’ Then

ket_qua:=a mod b;

If phep_tinh=’div’ Then

ket_qua:=a div b;

Writeln(‘Ket qua ‘,ket_qua:2:1);

Readln;

End.

Phân tích chương trình:

– Nếu chỉ sử dụng bốn phép tính +, -, *, / thì phần khai báo biến “phep_tinh” khai báo kiểu char (1 ký tự) là được, nhưng có moddiv nên phải khai báo “phep_tinh” kiểu string.

Lời kết

Ôn tập cấu trúc rẽ nhánh trong lập trình Pascal kết hợp với một số bài tập trong bài viết cấu trúc rẽ nhánh trong Pascal. Đủ nhiều để bạn phân tích những bài tập tương tự, hãy nhớ rằng phải phân tích chương trình dựa trên Quy trình lập trình Pascal. Vinaonline.net chúc bạn học ôn tập thật tốt.