Tải bản đầy đủ (.doc) (14 trang)

BT kiểu mảng 1 chiều, câu lệnh lặp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (127.92 KB, 14 trang )

1
TÓM TẮT LÝ THUYẾT PASCAL
1. Khai báo:
a. Thư viện màn hình, âm thanh…: USES CRT; (Để dùng các lệnh: CLRSCR;
READKEY…)
b. Hằng: CONST biến = giá trị (vd: CONST m=10). Thường dùng khi làm bài tập
với mảng.
c. Biến: VAR biến : kiểu dữ liệu. Ví dụ: (xem bảng bên dưới)
Số nguyên
Thực:
Kí tự
Chuỗi
Logic
Mảng
Tập hợp
I: Integer
X: Real Ch: Char S: String Ktra: Boolean
A: array[1..10] of
hoa Set of
integer
char
2. Một số câu lệnh và lưu ý:
a. IF <Điều kiện> THEN <Lệnh > hoặc IF <Điều kiện> THEN <Lệnh 1> ELSE
<Lệnh 2>;
b. CASE <biến> OF
giá trị 1: lệnh 1;
giá trị 2: lệnh 2;
……
giá trị n: lệnh n;
ELSE lệnh 0;
END; (lưu ý phải có END-kết thúc lệnh CASE, nếu khơng chương trình báo lỗi em sẽ khó phát


hiện được)

c. FOR biến := giá trị đầu TO/DOWN TO giá trị cuối DO <câu lệnh>
Lưu ý: Đối với TO giá trị đầu =< giá trị cuối, đối với DOWN TO giá trị đầu >= giá
trị cuối; nhiều câu lệnh thì phải dùng BEGIN…END.
d. REPEAT <các lệnh> UNTIL <điều kiện đúng>
e. WHILE <Điều kiện đúng> DO <câu lệnh>
Lưu ý: Nhiều câu lệnh thì phải dùng BEGIN…END.
* Đối với các câu lệnh lặp phải có điều kiện thốt, nếu khơng chương trình
sẽ bị treo. Khi giải tốn có câu lệnh lặp nên lưu tập tin trước khi chạy
chương trình.
3. Một số hàm, thủ tục
a. Kiểu nguyên:

Phép toán: MOD : Chia lấy phần dư (10 mod 3 = 1);
DIV: Chia lấy phần nguyên (10 div 3 =3)

Hàm: INC(X,N), DEC(X,N), ….
b. Kiểu Thực:

Hàm TRUNC(X): Lấy phần nguyên của X không lấy phần lẻ
(TRUNC(32,456)=32).
c. Kiểu kí tự:

Hàm CHR(x): Trả về giá trị là kí tự trong mã ASCII ứng với số thứ tự x.
(CHR(65)=’A’; hoặc #65=’A’).

Hàm ORD(ch): Trả về giá trị là số thứ tự của ký tự ch trong bảng mã ASCII.
(ORD(‘a’)=97.
Vị trí của một số ký tự trong bảng mã ASCII (phải học thuộc lịng):

Phím cách trống 32, phím Enter: 13, phím ESC: 27, A : 65 , a: 97,

Hàm READKEY(Ch:=Readkey): Nhận một ký tự từ bàn phím (gán cho Ch)
nhưng khơng hiện ký tự này. (Dùng cho bài mật khẩu…).


2
Hàm KEYPRESSED; cho giá trị true nếu có 1 phím được bấm, ngược lại cho
gía trị false.
d. Kiểu chuổi:

Hàm LENGTH(S): Trả về giá trị là độ dài của chuổi S

Hàm COPY(S,P,N): Lấy chuổi S tại vị trí P, lấy N kí tự.

Hàm POS(S1,S): Trả về giá trị là vị trí của S1 trong S, nếu khơng thấy thì
bằng 0.

Thủ tục DELETE(S,P,N): Xố chuổi S từ vị trí P, xố đi N kí tự.

Thủ tục INSERT(S1,S,P): Chèn chuổi S1 vào chuổi S tại vị trí P.

Thủ tục STR(X,S): Biếu đổi số X ra thành chuổi S.

Thủ tục VAL(S,X,C): Biến đổi chuổi S thành số X nếu đúng thì C=0, nếu
khơng C sẽ nhận giá trị tại vị trí khơng biến đổi được.(VD: Val(‘128b7,x,c)
c=4 – không biến đổi được).


*Mảng 1 chiều:

1-Khai báo biết mảng:
Var tênmảng: array[m1..m2] of kiểuphầntử;
Giải thích: Ở đây m1, m2 là hai hằng xác định phạm vi của chỉ số đầu (m1) và chỉ
số cuối (m2), chúng có chung một kiểu dữ liệu.
Ví dụ: var a:array[1..100] of integer;
2-Nhập giá trị cho các biến mảng:
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
3-Xuất giá trị của các biến mảng:
for i:=1 to n do
write(a[i],' ');
e. Kiểu mảng:
Giải thuật sắp xếp mảng: (Phải nắm vững)
Giải thuật tìm kiếm (tìm xem x có trong mảng
For i:=1 to n-1 do
không)
For j:=i+1 to n do
For i:=1 to n do
If a[i]<a[j] (hoặc a[i]>a[j]) then
If a[i]=x then
Begin
Begin vt:=i; break; end;
Tam:=a[i];
If vt>0 then write(‘Da tim thay tai’,vt)
a[i]:=a[j];
Else write(‘Khong thay’);
a[j]:=tam;

End;

1.Viết chương trình nhập dãy số, in dãy số đó ra màn hình
program nhap_inds;


3
var a:array[1..100] of integer;
i,n:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
write(a[i],' ');
readln;
end.
2.Viết chương trình nhập dãy số, in dãy số đó ra màn hình, tính tổng của các phần
tử trong danh sách.
program tong_ds;
var a:array[1..100] of integer;
i,n,s:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');

readln(a[i]);
end;
for i:=1 to n do
write(a[i],' ');
s:=0;
for i:=1 to n do
s:=s+a[i];
write('tong',n:3,' so trong mang la',s:4);
readln;
end.
3.Viết chương trình nhập dãy số, in các số lẻ ra màn hình, tính tổng của các số lẻ
có trong danh sách.
program tong_ds;
var a:array[1..100] of integer;
i,n,s:integer;
begin


4
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
if a[i] mod 2<>0 then
write(a[i],' ');
s:=0;
for i:=1 to n do

if a[i] mod 2<>0 then
s:=s+a[i];
write('tong cac so le trong mang la',s:4);
readln;
end.
4.Viết chương trình nhập dãy số, in các số chẳn ra màn hình, tính tổng của các số
chẳn có trong danh sách.
program tong_ds;
var a:array[1..100] of integer;
i,n,s:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
if a[i] mod 2=0 then
write(a[i],' ');
s:=0;
for i:=1 to n do
if a[i] mod 2=0 then
s:=s+a[i];
write('tong cac so chan trong mang la',s:4);
readln;
end.
1. Viết chương trình nhập dãy số, in dãy số ra màn hình, tìm số nhỏ nhất có
trong danh sách.
program tong_ds;



5
var a:array[1..100] of integer;
i,n,min:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
write(a[i],' ');
min:=a[1];
for i:=1 to n do
if a[i]write('so nho nhat trong mang la',min:4);
readln;
end.
2. Viết chương trình nhập dãy số, in dãy số ra màn hình, tìm số lớn nhất có
trong danh sách.
program tong_ds;
var a:array[1..100] of integer;
i,n,max:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');

readln(a[i]);
end;
for i:=1 to n do
write(a[i],' ');
max:=a[1];
for i:=1 to n do
if a[i]>max then max:=a[i];
write('so lon nhat trong mang la',max:4);
readln;
end.
3. Viết chương trình nhập dãy số, in ra màn hình số nhỏ nhất, lớn nhất và tính
giá trị trung bình của các ptử trong danh sách.
program ln_nn_tb;


6
var a:array[1..100] of integer;
i,n,s,max,min:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
s:=0;
max:=a[1];
min:=a[1];
for i:=1 to n do
begin

if a[i]>max then max:=a[i];
if a[i]s:=s+a[i];
end;
writeln('gia tri nho nhat la', min:4);
writeln('gia tri lon nhat la', max:4);
writeln('gia tri tb la',s/n:5:1);
readln;
end.
4. Viết chương trình nhập dãy số, in ra màn hình dãy số đó, sắp xếp dãy số đó
theo thứ tự giảm dần.
program ds;
var a:array[1..100] of integer;
i,n,sau,vt,tg
:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
write('day so chua sap xep: ');
for i:=1 to n do
write(a[i],' ');
write('day so sap xep giam dan:');
for vt:=1 to n-1 do
for sau:=vt+1 to n do



7
if a[vt]begin
tg:=a[vt];
a[vt]:=a[sau];
a[sau]:=tg;
end;
for i:=1 to n do
write(a[i],' ');
readln;
end.
readln;
end.
5. Viết chương trình nhập dãy số, in ra màn hình dãy số đó, sắp xếp dãy số đó
theo thứ tự giảm dần.
program ds;
var a:array[1..100] of integer;
i,n,sau,vt,tg
:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
write('day so sap xep tang dan:');
for vt:=1 to n-1 do
for sau:=vt+1 to n do
if a[vt]>a[sau] then

begin
tg:=a[vt];
a[vt]:=a[sau];
a[sau]:=tg;
end;
for i:=1 to n do
write(a[i],' ');
readln;
end.
readln;
end.


8
6. Viết chương trình nhập dãy số, chèn thêm 1 số mới vào vị trí đầu dãy số.
program ds;
var a:array[1..100] of integer;
i,n,x:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
write(a[i],' ');
write('nhap so bat ki: ');readln(x);
n:=n+1;
for i:=0 to n-2 do a[n-i]:=a[n-i-1];

a[1]:=x;
for i:=1 to n do
write(a[i],' ');
readln;
end.
7. Viết chương trình nhập dãy số, chèn thêm 1 số mới vào vị trí cuối dãy số.
program ds;
var a:array[1..100] of integer;
i,n,x:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for i:=1 to n do
write(a[i],' ');
write('nhap so bat ki: ');readln(x);
n:=n+1;
a[n]:=x;
for i:=1 to n do
write(a[i],' ');
readln;
end.


9
8. Viết chương trình nhập dãy số, nhập thêm 1 ptử mới và đếm số lần xuất hiện
của nó trong dsố.

program ds;
var a:array[1..100] of integer;
i,n,x,dem:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
write('nhap so bat ki: ');readln(x);
dem:=0;
for i:=1 to n do
if a[i]=x then dem:=dem+1;
write('so lan xhien cua',x:3,'la', dem:3);
readln;
end
9. Viết chương trình nhập dãy số, chèn thêm 1 ptử mới vào dsố mà thứ tự trong
dsố k thay đổi.
program ds;
var a:array[1..100] of integer;
i,n,x,j,vt,sau,tg:integer;
begin
write('nhap n: ');readln(n);
for i:=1 to n do
begin
write('nhap so thu ',i,':');
readln(a[i]);
end;
for vt:=1 to n-1 do

for sau:=vt+1 to n do
if a[vt]>a[sau] then
begin
tg:=a[vt];
a[vt]:=a[sau];
a[sau]:=tg;
end;
for i:=1 to n do


10
write(a[i],' ');
write('nhap so bat ki: ');readln(x);
i:=0;
while (a[i+1]<=x) and (ifor j:=n+1 downto i+1 do a[j]:=a[j-1];
a[i+1]:=x;
for i:=1 to n+1 do
write(a[i],' ');
readln;
end.

Ơn tập:
Bài 1: Viết chương trình tính tổng bình phương T = 12 + 22 + . . . + n2,
với n là số nguyên dương được nhập từ bàn phím.
Bài 2: Viết chương trình tính tổng A = 1 +

1 1
1
  ... , với n là số tự nhiên được

2 3
n

nhập từ bàn phím.
Bài 3: Viết chương trình tính giá trị của biểu thức sau:
1 + 1/22 + 1/32 + … + 1/n2
Bài 4: Viết chương trình nhập một số nguyên n, tìm tất cả các ước của số n.
Bài 5:
Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n (Với n được nhập từ
bàn phím).
Bài 6:
Viết chương trình in ra tổng các số lẻ nhỏ hơn hoặc bằng n (Với n được nhập).
Bài 7: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n.
Bài làm:

Bài 1: Viết chương trình tính tổng bình phương T = 12 + 22 + . . . + n2,
với n là số nguyên dương được nhập từ bàn phím.
Var I: integer;
T:longint;
Begin
Write(‘nhap n: ’); readln(n);
For i:= 1 to n do T:= t + i*i ;
Write(‘ Tong binh phuong’,n,’ so tu nhien dau tien T = ‘, t);
Readln
End.
Bài 2: viết chương trình tính tổng A = 1 +
nhập từ bàn phím.

1 1
1

  ... , với n là số tự nhiên được
2 3
n


11
Var I,n: integer; A: real;
Begin
Write(‘nhap n: ’); readln(n);
For i:= 1 to n do A:= A + 1/i;
Write(‘Tong A = ’, A:5:1);
Readln
End.
Bài 3: Viết chương trình tính giá trị của biểu thức sau:
1 + 1/22 + 1/32 + … + 1/n2
Var n , i : Word ;
S : Real ;
BEGIN
Write (' Nhap n : ') ; Readln (n) ;
S := 0 ;
For i := 1 To n Do
S := S + 1 / sqr(i) ;
Writeln (' S = ', S:0:2) ;
Readln ;
END .
Bài 4: viết chương trình nhập một số nguyên n, tìm tất cả các ước của số n.
Var I,n: integer;
Begin
Write(‘nhap n: ’); readln(n);
Write(‘ uoc cua ’, n, ‘ la: ‘);

For i:= 1 to n do if n mod I = 0 then Write(i:4);
Readln
End.

Bài tập 5:
Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng n (Với n được nhập từ
bàn phím).
a. Hướng dẫn:
- Cho biến i chạy từ 1 đến n.
- Nếu i chẵn ( i chia 2 dư 0) thì in ra số n.
b. Mã chương trình:
Program In_So_Le;
Uses crt;
var i,n: integer;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);


12
For i:=1 to n do if i mod 2 =1 then
Write(i:3,',');
readln
end.

Bài 6:
Viết chương trình in ra tổng các số lẻ nhỏ hơn hoặc bằng n ( Với n được nhập).
a. Hướng dẫn:
- Cho S = 0.
- Cho biến i chạy từ 1 đến n.

- Nếu i chẵn ( i chia 2 <> 0) thì cộng thêm i vào S.
- In ra S.
b. Mã chương trình:
Program In_So_Le;
Uses crt;
var S,i,n: integer;
Begin
Clrscr;
Write('Nhap so n ='); readln(n);
S:= 0;
For i:=1 to n do if i mod 2 =1 then S:= S+i;
Writeln('Tong cac so le nho hon ',n,' la: ',S);
readln
end.

c. Nhận xét: Ta dùng biến S để cộng dồn nên nó được khởi tạo giá trị đầu bằng 0.
Bài 7: Viết chương trình in ra các số lẻ nhỏ hơn hoặc bằng số nguyên dương n.
var i,n:integer;
begin
write(‘nhap n:’);readln(n);
i:=1;
while i<=n do
begin
write(i:3,', ');
i:=i+2;
end;
readln
end.

Bài 5: viết chương trinh tính giá trị của biểu thức sau:

1 + 1/2! + 1/3! + … + 1/n!


13
Bài 3: Cho số tự nhiên n, hãy lập trình để tính các tổng sau:
a. a. 1 + 1/22 + 1/32 + … + 1/n2
b. b. 1 + 1/2! + 1/3! + … + 1/n!
GIAÛI
a)
Var n , i : Word ;
S : Real ;
BEGIN
Write (' Nhap n : ') ; Readln (n) ;
S := 0 ;
For i := 1 To n Do
S := S + 1 / sqr(i) ;
Writeln (' S = ', S:0:2) ;
Readln ;
END .
b)
Var n , i , j , p : Word ;
S : Real ;
BEGIN
Write (' Nhap n : ') ; Readln(n) ;
p := 1 ;
s := 0 ;
For i :=1 To n Do
Begin
p := p * i ;
(* tính i *)

S := S + 1 / p ;
End ;
Writeln (' S = ', S:0:2) ;
Readln ; END .
*Bài 4 :
Tính giá trị của biểu thức sau:
( 1 + 1/12 ) ( 1 + 1/22 ) … ( 1 + 1/n2 )
GIAÛI
Var i , n : Byte ;
p : Real ;
Begin
Write(' Nhap n : ') ; Readln (n) ;
p := 1 ;
For i := 1 To n Do p := p * ( 1 + 1/sqr(i) ) ;
Writeln(' p = ', p:10:5 ) ;
Readln ; End


14



×