Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
1
BÀI TẬP CHƯƠNG 1:CÂU LỆNH IF ….THEN…
* Bài 1 :
Nhập 3 số a , b , c bất kì . Hãy kiểm tra xem ba số đó có thể là độ dài ba cạnh của một tam giác
hay không ? Thông báo lên màn hình ‘ Thỏa mãn ‘, ‘ Không thỏa mãn trong từng trường hợp
tương ứng .
GIẢI
Var a , b , c : Real ;
BEGIN
Writeln (' Nhap do dai 3 canh cua tam giac : ') ;
Write (' a = ') ; Readln ( a ) ;
Write (' b = ') ; Readln ( b ) ;
Write (' c = ') ; Readln ( c ) ;
If ( a + b > c ) and ( b + c > a ) and ( c + a > b )
and ( a > 0 ) and ( b > 0 ) and ( c > 0 ) Then
Writeln (' Thoa man : Day la 3 canh cua mot tam giac ')
Else
Writeln (' Khong thoa man ! ') ;
Readln ; END .
* Bài 2 :
Nhập N số bất kì .
Đếm các số lớn hơn 10 và nhỏ hơn 20 và tính tổng của chúng . Sau đó , đưa ra màn hình :So
cac so >10 và <20 la : ( gia tri ) ;Tong cua chung la : ( gia tri )
GIẢI
Var Tong , So : Real ; I , N , Dem : Integer ;
BEGIN
Write (' Bao nhieu so : ') ; Readln ( N ) ;
Tong := 0 ; Dem := 0 ;
For I := 1 To N Do
Readln ;
END .
* Bài 4 :
Đọc ngày tháng năm , sau đó viết ra màn hình đó là ngày thứ mấy trong tuần .
GIẢI
Var Thu , Ngay , Thang : Byte ;
Nam : Integer ;
BEGIN
Write (' Doc Ngay Thang Nam : ') ;
Readln ( Ngay , Thang , Nam ) ;
Nam := 1900 + ( Nam mod 1900 ) ;
If Thang < 3 Then
Begin
Thang := Thang + 12 ;
Nam := Nam - 1 ;
End ;
Thu := Abs ( Ngay + Thang * 2 + ( Thang + 1 ) * 3
div 5 + Nam + Nam div 4 ) mod 7 ;
Case Thu Of
0 : Writeln (' Chu Nhat ') ;
1 : Writeln (' Thu Hai ') ;
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
3
2 : Writeln (' Thu Ba ') ;
3 : Writeln (' Thu Tu ') ;
4 : Writeln (' Thu Nam ') ;
5 : Writeln (' Thu Sau ') ;
6 : Writeln (' Thu Bay ') ;
End ;
Writeln (' Diem toan : ', Toan ) ;
Writeln (' Diem ngoai ngu : ', Ngoaingu) ;
Writeln (' Tong diem : ', Tongdiem) ;
If Tongdiem >= 15 Then
Writeln(' Ban da trung tuyen ')
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
4
Else
Writeln(' Ban khong trung tuyen ') ;
Readln ; END .
* Bài 6 :
Viết chương trình nhập hai số thực . Sau đó hỏi phép tính cần thực hiện và in kết quả của
phép tính đó .
Nếu là ‚+‛ , in kết quả của tổng lên màn hình .
Nếu là ‚-‛ , in kết quả của hiệu lên màn hình .
Nếu là ‚/‛ , in kết quả của thương lên màn hình .
Nếu là ‚*‛ , in kết quả của tích lên màn hình . Nếu là ‚+‛ , in kết quả của tổng lên màn hình
.
Nếu là ‚+‛ , in kết quả của tổng lên màn hình .
GIẢI
Uses Crt ; Var
a , b , kq : Real ; Pt : Char ;
BEGIN
Clrscr ;
Write (' a = ') ; Readln( a ) ;
Write (' b = ') ; Readln( b ) ;
Write (' Phep tinh thuc hien la (+ - * /) : ') ;
Readln( Pt ) ;
If Pt = '+’ Then kq := a + b ;
Writeln (' X2 = ', ( -(m-2) - sqrt(Delta) ) / 2 ) ;
End ;
End ; Readln ; END .
* Bài 8 :
Viết chương trình nhập hai số tự nhiên N, M và thông báo ‘Dung‘ nếu N , M cùng tính chẵn lẽ
, trong trường hợp ngược lại thì thông báo ‘Sai‘.
GIẢI
Uses Crt ;
Var
N , M : Integer ;
Begin
Clrscr ;
Write(' N , M = ') ; Readln( N , M ) ;
If ( (N + M) mod 2 = 0 ) Then Writeln(' Dung ! ')
Else Writeln(' Sai ! ') ;
Readln ;
END .
BÀI TẬP CHƯƠNG 2:VÒNG LẬP XĐ VÀ KHÔNG XÁC
ĐỊNH
Sử dụng lệnh For
* Bài 1 :
Lập trình tính tích các số tự nhiên từ 1 tới 10 .
GIẢI
Var i : Byte ; (* chỉ số chạy *)
p : word ; (* tích số *)
BEGIN
p := 1; (* cho giá trò ban đầu của tích *)
For i := 1 to 10 Do (* cho i chạy từ 1 tới 10 *)
p := p * i ; (* lần lượt nhân i với p *)
Write (' 1 * 2 * * 10 = ', p ) ;
+ 1/3
2
+ … + 1/n
2
b. b. 1 + 1/2! + 1/3! + … + 1/n!
GIẢI
a)
Var n , i : Word ;
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
7
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
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
8
Var i , n : Integer ;
tong: Real ;
BEGIN
Clrscr ;
Write (' Cho so tu nhien n : ') ; Readln (n) ;
tong :=0 ;
i :=1 ;
While i <= n Do
Begin
tong := tong + 1/i ;
i := i + 1 ;
End ;
Writeln (' Tong can tim la : ', tong:12:6 ) ;
Readln ; END .
* Bài 6 :
Tính hàm lũy thừa a
n
, ở đây a thực và n tự nhiên được nhập vào từ bàn phím .
GIẢI
Uses Crt ;
Var i , n : Integer ;
a , giatri : Real ;
BEGIN
Clrscr ;
Write (' Cho so a : ') ; Readln(a) ;
Write (' Cho so mu n : ') ; Readln(n) ;
i := 1 ;
j := 1 ;
While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ;
If j = i Then Writeln( A[i] ) ;
i :=i + 1 ;
End ; Readln ; END .
* Bài 8 :
Viết chương trình nhập một dãy số tối đa 100 số , sau đó sắp xếp lại theo thứ tự tăng dần .
GIẢI
Uses Crt;
Var A : Array [1 100] Of Integer ;
i , j , n , T : Integer ;
BEGIN
Clrscr ;
Write(' Do dai cua day so N = ') ; Readln (N) ;
Writeln (' Nhap day so : ') ;
For i := 1 To N Do
Begin
Write('A[', i ,'] = ') ; Readln ( A[i] ) ;
End ;
i := 1 ;
While (i <= n-1) Do
Begin
j := i+1;
While j<=n do
Begin
If A[j] < A[i] then
Begin
T := A[j];
Write (' Nhap so thuc a : ') ; Readln(a) ;
Writeln (' Cac phan tu lon hon a cua day : ') ;
i:=1;
Repeat
If ( b[i] > a ) Then Writeln (' b[', i ,'] = ', b[i]:8:2 ) ;
inc(i) ;
Until i > n ;
Readln ;
END .
Bài 10 :
Viết chương trình nhập một dãy số tối đa 50 số rồi in ra màn hình các số trùng nhau của dãy .
GIẢI
Uses crt ;
Var a , b : Array[1 50] Of Integer ;
Thầy gửi tài liệu này các em xem để học (0946873510-Hoàng Nam [email protected])
Bài tập Pascal có lời giải
11
n , m , i , j , k : Byte ;
trung : Boolean ;
BEGIN
Clrscr ;
Write (' Nhap do dai cua day so nguyen : ') ; Readln(n) ;
Writeln (' Nhap cac phan tu cua day : ') ;
For i := 1 To N do
Begin
Write (' a[', i ,'] = ') ; Readln( a[i] ) ;
End ;
i := 1 ; m := 0 ;
Repeat
Bài tập Pascal có lời giải
12
inc ( i ) ;
Until i > m ;
End ;
If m > 0 Then
For k := 1 To m Do Write ( b[k] : 4 ) ;
Readln ; END .
* Bài 11 :
Bạn có 1000 đ đem gửi ngân hàng với lãi suất 8%/tháng . Sau mỗi tháng tiền lãi được nhập
vào để tính lãi suất tháng sau . Bạn muốn để dành cho đến khi số tiền tăng lên là x . Vậy phải
để trong bao lâu
GIẢI
uses crt ;
var
thang : Byte ;
tien , lai , x : Real ;
BEGIN
clrscr ;
writeln (' Chuong trinh tinh thoi gian rut tien lai ') ;
write (' So tien lai muon rut ra : ') ; readln(x) ;
tien := 1000 ;
thang :=1 ;
repeat
lai := tien * 8 / 100 ;
tien := tien + lai ;
thang := thang + 1 ;
until tien >= x ;
writeln (' Ban phai gui tien trong ', thang div 12 , ' nam ',
BÀI TẬP CHƯƠNG 3:CHƯƠNG TRÌNH CON
Bài 1 :
Dùng thủ tục chuyển một số tự nhiên n cho trước sang hệ cơ số 2 .
GIẢI
Procedure Change ( n : integer ; Var St : String ) ;
(* thủ tục chuyển số tự nhiên n cho trước sang
hệ cơ số 2 và được lưu ở trong xâu St *)
Type
b : Array[0 1] Of Char = ('0' , '1') ;
Var
du , So : Integer ;
S : String ;
Begin
S := '' ; (* xâu rỗng *)
So := n ;
Repeat
Du := So mod 2 ;
So :=So div 2 ;
S := b[du] + s ;
Until So = 0 ;
St := S ; End ;
Bài 2 :Dùng thủ tục giải phương trình bậc hai ax
2
+ bx + c = 0
GIẢI
Uses Crt ;
Var a, b, c, x1, x2: real;
(*================================*)
Procedure Nhapabc(var aa,bb,cc: real);
Begin
Writeln(' Giai Phuong Trinh Bac Hai Voi Cac He So :');
Nhapabc(a,b,c);
If a<>0 then GPTB2
Else Writeln(' Khong phai phuong trinh bac hai ');
Readln ; END .
Bài 3 :
Hãy viết lại thủ tục Insert đối với một chuỗi kí tự cho trước tùy ý .
GIẢI
Procedure Insert ( St1 : String ; Var St2 : String ;Vt : Byte ) ;
(* chèn xâu St1 vào St2 bắt đầu từ vò trí Vt *)
Var i : Byte ;
S : String ;
Begin
If ( Vt > length(St2) Or ( Vt < 1 ) Then
Write(' Khong the chen ra ngoai xau ') ;
Else
Begin
S := '' ; (* xâu rỗng *)
For i := 1 To (Vt - 1) Do S := S + St2[i] ;
S := S + St1 ;
For i := Vt To length(St2) Do S := S + St2[i] ;
St2 := S ;
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
15
End ;
End ;
Bài 4 :
Viết chương trình thực hiện lần lượt các công việc sau :
_ Lập thủ tục nhập ba số thực dương a , b , c từ bàn phím .
Var ma, mb, mc: real;
Begin
ma:=sqrt((2*sqr(b)+2*sqr(c)-sqr(a))/4);
mb:=sqrt((2*sqr(a)+2*sqr(c)-sqr(b))/4);
mc:=sqrt((2*sqr(a)+2*sqr(b)-sqr(c))/4);
Writeln('Cac trung tuyen cua tam giac la : ') ;
Writeln('ma=', ma:0:2, ' mb=', mb:0:2, ' mc=', mc:0:2);
End;
(*================================*)
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
16
Procedure Dientich (a, b, c: real); Var p, S: real;
Begin
p:=(a+b+c)/2;
S:=sqrt(p*(p-a)*(p-b)*(p-c));
Writeln('Dien tich =', S:0:2);
End;
(*================================*)
BEGIN (* Chương trình chính *)
Clrscr;
Nhap(a, b, c);
Kiemtra(a, b, c);
Dientich(a, b, c);
Trung_tuyen(a, b, c);
Readln;
END .
Bài 5 :Giải phương trình x + y + z = 12 trong phạm vi số nguyên không âm với điều kiện x < 4
.
GIẢI
Begin
Writeln('Phuong trinh co nghiem la:');
Writeln('x': 10, 'y': 10, 'z':10);
i:=4;
For X:=0 to (a-1) do
For Y:=0 to (b-1) do
For Z:=0 to (c-1) do
If (X+Y+Z=N) then
Begin
Writeln(x: 10, y: 10, z: 10);
inc(i);
If i=24 then
Begin
Write('Nhan Enter de tiep tuc '); Readln;
i :=0;
End;
End ;
End ;
Write('Nhan Enter de ket thuc ');
Readln;
End.
Bài 7 :
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
18
Viết thủ tục Compare ( S1 , S2 : String ; Var Kq : String ) thực hiện công việc sau : so sánh
hai xâu S1 và S2 , tìm tất cả các kí tự có trong cả hai xâu trên . Xâu Kq sẽ chứa tất cả các kí
tự đó , mỗi kí tự chỉ được nhớ một lần .
GIẢI
END .
Bài 8 :
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
19
Viết hàm tính D (St1 , St2) , với U, V là hai xâu kí tự bất kì , là tổng số các kí tự không giống
nhau trong hai xâu trên , mỗi loại kí tự chỉ được nhớ một lần . Ví dụ D (‘aabba’ , ‘bcdd’) = 2 vì
chỉ có hai kí tự a và d là không giống nhau trong các xâu trên .
GIẢI
Uses Crt;
Const M=100;
Var S: array[1 M] of string;
max, min, i, j, n: byte;
(*===============================*)
Function D(U,V: string): byte;
(*Trả về tổng số loại kí tự không giống nhau
trong 2 xâu U và V *)
Var k, id: byte;
s, luu: string;
Begin
luu:=''; (* Xâu rỗng *)
For id:=1 to length(U) do
If (pos(U[id],V)=0) and (pos(U[id],luu)=0) then
luu:=concat(luu,U[id]);
For id:=1 to length(V) do
If(pos(V[id],U) = 0) and (pos(V[id],luu)=0) then
luu:= concat(luu,V[id]);
d:=length(luu);
End;
Write('Max(d(Si,Sj)=',max,' Min(d(Si,Sj)=',min);
Readln;
END .
Bài 9 :
Viết chương trình hoàn chỉnh thực hiện các công việc của thực đơn sau :
1. 1. Nhập dữ liệu ( nhập số tự nhiên n ) .
2. 2. Phân tích ra thừa số nguyên tố ( phân tích n thành tích các số nguyên tố ) .
3. 3. Thoát khỏi chương trình .
GIẢI
Uses Crt;
Type uoc_nguyen_to=array[1 50] of longint;
Var
u, N: longint;
i, dem: integer;
a: uoc_nguyen_to;
(*================================*)
Procedure nhap(Var NN:longint);
Begin
Repeat
Write('Nhap N='); Readln(NN);
Until NN>=0;
End;
(*=================================*)
Procedure viet;
Begin
If dem=0 then
Writeln('So ',N,' khong the phan tich thanh '
+ 'tich cua cac so nguyen to')
Else
If dem=1 then Writeln(N, '=', a[dem])
(*==============================*)
BEGIN (* Main Program *)
Clrscr;
Writeln('Phan tich so N thanh tich cua cac so nguyen to :');
nhap(N);
phantich(N);
Write('Nhan Enter de ket thuc ');
Readln;
END .
BÀI TẬP CHƯƠNG 4: CẤU TRÚC DỮ LIỆU MẢNG Bài 1 :
Giải hệ phương trình tuyến tính hai ẩn dùng ma trận :
a
11
x + a
12
y = c
1
a
21
x + a
22
y = c
2
GIẢI
Uses Crt;
END .
Bài 2 :
Lập phương trình tạo ra một mảng chứa bảng cửu chương .
Uses Crt ;
Var a : Array[1 10, 2 9] Of Byte ;
i, j : Byte ;
BEGIN
Clrscr ;
For i := 1 To 10 Do
For j := 2 To 9 Do a[i, j] := i*j ;
Writeln(' Bang cuu chuong : ') ; Writeln ;
For i := 1 To 10 Do
For j := 2 to 9 do Write ( j:4 , 'x' , i:2 , '=' , a[i , j]:2) ;
(* hết 80 cột tự động xuống hàng *)
Readln ;
END .
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
23
Bài 3 :
Viết chương trình nhập hai số nguyên dương m , n . Sau đó tính trung bình cộng bình phương
các số nguyên từ m đến n .
Var m , n , k , s : Word ;
tb : real ;
BEGIN
Writeln('Nhap 2 so nguyen duong m, n :') ;
Write (' m = ') ; Readln(m) ;
Write (' n = ') ; Readln(n);
If m > n Then (* đỗi chỗ để m <= n *)
END .
Bài 5 :
Dãy số sau được gọi là dãy Fibonaci :
a
1
= 1
a
2
= 1
a
3
= 2
a
4
= 3
. . .
a
n
= a
n-1
+ a
n-2
Viết chương trình tính 20 số Fibonaci đầu tiên và đưa ra kết quả vào một mảng 20 phần tử .
Var
a : Array[1 20] Of Byte ;
i : Byte ;
BEGIN
a[1] :=1;
For i := 3 To N Do a[i] := 2*a[i-1]+a[i-2] ;
Thầy gửi tài liệu này các em xem để học (0946873510-Hồng Nam [email protected])
Bài tập Pascal có lời giải
25
S := 0 ;
For i := 1 to N do S := S+1/sqr(a[i]) ;
Writeln (' S = ', S:12:6) ;
Readln ;
END .
Bài 7 :
Nhập số tự nhiên N và viết chương trình tạo mảng bao gồm N số nguyên tố đầu tiên .
var
a:array[1 100,1 100]of byte;
n,i,j,k,l,ba:byte;
d:boolean;
BEGIN
write(' Nhap kich thuoc cua mang hai chieu NxN. N = ');readln(n);
for i:=1 to n do
for j:=1 to n do
begin
ba:=0;
repeat
d:=FALSE;
if j>1 then for k:=1 to j-1 do
if a[i,k]=ba then d:=true;
if i>1 then for k:=1 to i-1 do
if a[k,j]=ba then d:=true;