Bài tập PasCal - Pdf 40

Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Bài tập chơng 1

Sử dụng câu lệnh If then ..Else:
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 .

Bài 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 )
Bài giải:
Var
Tong , So : Real ;

Max := a ;
If Max < b Then Max := b ;
If Max < c Then Max := c ;
If Max < d Then Max := d ;
Writeln (' Gia tri lon nhat la : ', Max ) ;
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 .
Bài 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 ') ;
2 : Writeln (' Thu Ba ') ;
3 : Writeln (' Thu Tu ') ;
4 : Writeln (' Thu Nam ') ;

Clrscr ;
Writeln (' Phieu Bao Diem ') ;
Writeln (' So bao danh : ', SBD ) ;
Writeln (' Diem van : ', Van ) ;
Writeln (' Diem toan : ', Toan ) ;
Writeln (' Diem ngoai ngu : ', Ngoaingu) ;
Writeln (' Tong diem : ', Tongdiem) ;
If Tongdiem >= 15 Then
Writeln(' Ban da trung tuyen ')
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 .
Bài giải:
Uses Crt ;
Var
a , b , T : Real ;
Pt : Char ;
3
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
BEGIN
Clrscr ;
Write (' a = ') ; Readln( a ) ;

Writeln(' Phuong trinh co nghiem kep X= ', -( m - 2 ) / 2 )
Else
Begin
Writeln(' Phuong trinh co 2 nghiem : ') ;
Writeln (' X1 = ', ( -(m-2) + sqrt(delta) ) / 2 ) ;
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.
Bài 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 ! ') ;
4
Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Readln ;
END .
5
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Bài tập chơng 2


End;
Writeln (' So lan xuat hien cac ki tu la :') ;
For ch :='A' to 'Z' do (* Kiểm tra bộ đếm từ 'A' tới 'Z' *)
If a[ch] > 0 Then (* Nếu Ch có xuất hiện *)
Writeln (ch , a[ch] : 4 , ' lan . ') ; (* Viết ra màn hình kí tự và
số lần xuất hiện *)
Readln ;
END .
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/2
2
+ 1/3
2
+ + 1/n
2

b. b. 1 + 1/2! + 1/3! + + 1/n!
Bài giải:
a)
Var n , i : Word ;
S : Real ;
BEGIN
Write (' Nhap n : ') ; Readln (n) ;
6
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
S := 0 ;
For i := 1 To n Do
S := S + 1 / sqr(i) ;
Writeln (' S = ', S:0:2) ;

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 .
Sử dụng lệnh While
Bài 5 :
Lập trình tính tổng :
A = 1 + 1/2 + 1/3 + + 1/n
ở đây n là số tự nhiên đợc nhập vào từ bàn phím .
Bài giải:
Uses Crt ;
Var i , n : Integer ;
tong: Real ;
BEGIN
Clrscr ;
Write (' Cho so tu nhien n : ') ; Readln (n) ;
tong :=0 ;
i :=1 ;
7
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
While i <= n Do
Begin
tong := tong + 1/i ;
i := i + 1 ;
End ;
Writeln (' Tong can tim la : ', tong:12:6 ) ;

BEGIN
Clrscr ;
Write(' Do dai cua day so N = ') ; Readln (N) ;
For I := 1 To N Do
Begin
Write ('A[', i , ']= ') ; Readln ( A[i] ) ;
End ;
Writeln (' Cac so khac nhau la : ') ; Writeln ( A[1] ) ;
i := 2 ;
While i <= N Do
Begin
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 :
8
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
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 .
Bài 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 : ') ;

Var b : Array[1..100] Of Real;
a : Real ;
n , i : Byte ;
BEGIN
Clrscr ;
Write ('Nhap do dai cua day so : ') ; Readln(n) ;
Writeln (' Nhap cac phan tu cua day : ') ;
For i := 1 To n Do
Begin
Write (' b[', i ,'] = ') ; Readln( b[i] ) ;
End ;
Write (' Nhap so thuc a : ') ; Readln(a) ;
Writeln (' Cac phan tu lon hon a cua day : ') ;
i:=1;
9
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
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 .
Bài giải:
Uses crt ;
Var a , b : Array[1..50] Of Integer ;
n , m , i , j , k : Byte ;
trung : Boolean ;
BEGIN

If trung Then
Begin
If j < m Then
For k := j To m - 1 Do b[k] := b[k + 1] ;
m := m - 1 ;
dec ( j ) ;
End ;
inc ( j ) ;
Until j > m ;
inc ( i ) ;
10
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
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
Bài 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) ;

d := a[i] ;
a[i] := a[ i+1 ] mod a[i] ;
a[i+1] := d ;
Until a[i] = 0 ;
Writeln (' USCLN cua ', N ,' so la : ', a[n] ) ;
Readln ;
11
Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
END .
12
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Bài tập chơng 3Bài 1 :
Dùng thủ tục chuyển một số tự nhiên n cho trớc sang hệ cơ số 2 .
Bài 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 lu ở 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 ;

Write('x1,2=',-b/(2*a):8:2);
End
Else
Begin
13
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
x1:=(-b+sqrt(Delta))/(2*a);
x2:=(-b-sqrt(Delta))/(2*a);
Writeln('Phuong trinh co 2 nghiem phan biet la :');
Writeln('X1=',x1:8:2, 'X2=',x2:8:2);
End;
End;
(*================================*)
BEGIN (* CT chính *)
Clrscr;
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 ý .
Bài 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

14
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Input(b, 'b');
Input(c, 'c');
End; (* kết thúc thủ tục nhập *)
(*================================*)
Procedure Kiemtra(a, b, c: Real);
Begin
If (a<b+c) and (b<a+c) and (c<a+b) then
Writeln(a:0:2, ', ', b:0:2, ' va ', c:0:2,
' lap thanh ba canh cua tam giac ')
Else Writeln('Khong lap thanh ba canh cua tam giac') ;
End;
(*===============================*)
Procedure Trung_tuyen (a, b, c: Real);
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;
(*================================*)
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;

Uses Crt;
Var N, a, b, c, X, Y, Z, i: Integer;
Begin
Clrscr;
Write(' N, a, b, c = '); Readln(N, a, b,c);
If (a+b+c-3<N) then
Begin
Writeln('Phuong trinh vo nghiem'); Readln;
Exit;
End
Else
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...');

Clrscr;
Writeln('Nhap 2 xau S1 va S2 :');
Write('S1: '); Readln(xau1);
Write('S2: '); Readln(xau2);
Compare(xau1, xau2, xau);
If xau<>'' then Writeln('Xau chung la: ',xau)
Else Writeln('Khong co ki tu nao trong ca hai xau ');
Write('Nhan ENTER de ket thuc...');
Readln;
END .
Bài 8 :
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 .
Bài 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]);

Begin
If max<d(S[i],S[j]) then max:=d(S[i],S[j]);
If min>d(S[i],S[j]) then min:=d(S[i],S[j]);
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. Nhập dữ liệu ( nhập số tự nhiên n ) .
1. 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ố ) .
2. Thoát khỏi chơng trình .
Bài 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

Else dem:=0;
Viet;
End;
(*==============================*)
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 .
19
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Bài tập chơng 4

L#m viƯc víi d# liƯu kiĩ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

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 .
Bài giải:
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 .
20
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
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 .
Bài giải:
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);

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;
21
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
a[2] :=1;

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 .
Bài giải:
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;
ba:=ba+1;
until not d;
a[i,j]:=ba-1;
end;
for i:=1 to n do
for j:=1 to n do write(a[i,j]:8);

a. Viết chơng trình nhập dữ liệu từ dãy đối xứng vào mảng một chiều .
b. Viết chơng trình nhập dữ liệu là ma trận đối xứng vào mảng hai chiều .
Bài giải:
a)
Var a: array [1..100] of integer;
n, i: byte;
Begin
Write('Nhap so phan tu cua day doi xung:');
Readln(n);
Writeln('Nhap cac phan tu cua day:');
For i:=1 to (n+1) div 2 do
Begin
Write('a[', i:2, ']='); Readln(a[i]);
a[n-i+1] := a[i];
End;
Readln ;
END ;
b)
Var a: array [1..100, 1..100] of integer;
n, i, j: integer;
BEGIN
Write('Nhap kich thuoc cua mang doi xung: ');
Readln(n);
Write('Nhap cac phan tu cua mang:');
For i:=1 to n do
For j:=1 to i do
Begin
Write('a[', i:2, ',', j:2, ']='); Readln(a[i, j]);
23
Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ

END .
Bài 2 :
Cho số tự nhiên n và xâu có độ dài n . Hãy biến đổi xâu đã cho bằng cách thay đổi trong đó :
a. Tất cả các dấu ! bằng dấu chấm .
b. Mỗi một nhóm các dấu chấm liền nhau bằng một dấu chấm .
c. Một nhóm các dấu chấm đứng liền nhau bằng dấu ba chấm .
Bài giải:
a )
Var S: string;
i: byte;
BEGIN
Write(' Cho mot xau ki tu S = '); Readln(S);
For i:=1 to length(S) do
If S[i] = '!' then S[i]:= '.';
Write( ' Chuoi sau khi da bien doi la : ', S);
Readln;
END .

b )
Uses crt;
Var S : string;
i : byte;
BEGIN
Clrscr;
Write(' Cho mot xau ki tu S = '); Readln(S);
i:=1;
While i< length(S) do
If (S[i]='.')and(S[i+1]='.') then Delete(S,i,1)
25


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status