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 tập ngôn ngữ lập trình PasCal Biê
Trang 1Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
and ( a > 0 ) and ( b > 0 ) and ( c > 0 ) Then
Writeln (' Thoa man : Day la 3 canh cua mot tam giac ')
Đế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 )
Writeln (' So cac so >10 va <20 la : ', Dem ) ;
Writeln (' Tong cua chung la :', Tong ) ;
Readln ;
Trang 2Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
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 ) ;
Write (' Doc Ngay Thang Nam : ') ;
Readln ( Ngay , Thang , Nam ) ;
Nam := 1900 + ( Nam mod 1900 ) ;
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 ') ;
5 : Writeln (' Thu Sau ') ;
6 : Writeln (' Thu Bay ') ;
End ;
Trang 3Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Write (' So bao danh : ') ; Readln( SBD ) ;
Write (' Diem toan : ') ; Readln( Toan ) ;
Write (' Diem ngoai ngu : ') ; Readln( Ngoaingu ) ;
Write (' Diem van : ') ; Readln ( Van ) ;
Tongdiem := Toan + Van + Ngoaingu ;
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) ;
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
Trang 4Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
If ( (N + M) mod 2 = 0 ) Then Writeln(' Dung ! ')
Else Writeln(' Sai ! ') ;
Trang 5Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Readln ;
END
Trang 6Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
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 *)
For ch :='A' to 'Z' Do a[ch] := 0 ; (* xả bộ đếm *)
Writeln (' Go phim 50 lan ') ;
For i := 1 To 50 Do (* thực hiện 100 lần *)
Begin
ch :=Readkey ; (* nhập kí tự vào Ch không cần gõ Enter *)
ch := Upcase(ch) ; (* Đỗi chữ thờng thành chữ hoa *)
a[ch] := a[ch] + 1 ;
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 ;
Trang 7Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Trang 8Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Write (' Cho so a : ') ; Readln(a) ;
Write (' Cho so mu n : ') ; Readln(n) ;
While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ;
If j = i Then Writeln( A[i] ) ;
Trang 9Bà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
Write(' Do dai cua day so N = ') ; Readln (N) ;
Writeln (' Nhap day so : ') ;
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;
Trang 10Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Write (' Nhap do dai cua day so nguyen : ') ; Readln(n) ;
Writeln (' Nhap cac phan tu cua day : ') ;
Trang 11Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
writeln (' Chuong trinh tinh thoi gian rut tien lai ') ;
write (' So tien lai muon rut ra : ') ; readln(x) ;
writeln (' Ban phai gui tien trong ', thang div 12 , ' nam ',
thang mod 12 ,' thang ') ;
writeln (' Khi do so tien ban rut ra duoc la ', tien:12:2 ,' dong ') ; readln ;
Writeln (' Tim USCLN cua N so :') ;
Write (' Nhap so N : ') ; Readln(n) ;
Trang 12Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
END
Trang 13Bµ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 3
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
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
Trang 14Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
_ ViÕt thñ tôc tÝnh c¸c trung tuyÕn cña tam gi¸c
_ ViÕt hoµn thiÖn ch¬ng tr×nh chÝnh
Bµi gi¶i:
Uses Crt;
Var a, b, c: real ;
(*================================*)
Procedure Nhap(Var a, b, c: real);
Procedure input (Var a: real; tenbien: Char);
Trang 15Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
' 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;
Writeln('Giai phuong trinh X+Y+Z=12 trong pham vi '
+ 'so nguyen khong am voi dieu kien x<4');
Trang 16Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Function kt(ch: char; st: string): boolean;
(* KiÓm tra xem kÝ tù Ch cã trong x©u St kh«ng NÕu cã th×
hµm tr¶ vÒ gi¸ trÞ True NÕu kh«ng th× hµm tr¶ vÒ gi¸ trÞ False *)
For i:=1 to length(s1) do
If (not kt(s1[i],kq)) and (kt(s1[i],s2)) then
Trang 17Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
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 ');
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
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
Writeln(#7,'Co ',n,' xau ki tu nen khong the '
+ 'so sanh duoc');
Trang 18Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
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]);
Writeln('So ',N,' khong the phan tich thanh '
+ 'tich cua cac so nguyen to')
Trang 19Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Trang 20Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Writeln('He co nghiem duy nhat :');
Writeln('x=', x:0:2, ' ; y=', y:0:2);
For j := 2 To 9 Do a[i, j] := i*j ;
Writeln(' Bang cuu chuong : ') ; Writeln ;
Trang 21Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Writeln ('Trung binh cong bimh phuong cac so '
+ 'nguyen tu m den n la: ', tb:12:2);
Write ('Nhap cac kich thuoc cua mang hai chieu : ') ;
Write (' So hang m = ') ; Readln(m) ;
Write (' So cot n = ') ; Readln(n) ;
Writeln (' Nhap cac phan tu cua mang : ') ;
an = an-1 + an-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ö
Trang 22Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
an = 2an-1 + an-2 ( n > 2 )H·y lËp ch¬ng tr×nh tÝnh vµ g¸n gi¸ trÞ cña d·y vµo biÕn m¶ng
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;
Trang 23Bà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 bảng số 3 x 3 với điều kiện các số đợc nhập sẽ hiện trên màn hình đúng tại vị trí của mình trên bảng số
Gotoxy(9*j-1, 2*i+4); Read(a[i, j]);
Gotoxy(9*j-1, 2*i+4); ClrEol; Write(a[i, j]:6);
End;
Readln;
END
Bài 9 :
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
Writeln('Nhap cac phan tu cua day:');
For i:=1 to (n+1) div 2 do
Trang 24Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
a[j,i]:=a[i,j];
End;
Readln ;
END ;
Trang 25Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Write(' Cho mot xau ki tu : '); Readln(s);
For ch:= 'A' to 'Z' do A[ch]:=0;
For i:=1 to length(s) do
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
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);
While i< length(S) do
If (S[i]='.')and(S[i+1]='.') then Delete(S,i,1)
Trang 26Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Cho số tự nhiên n và một dãy các kí tự S1 , S2 , , S… n Hãy tìm số tự nhiên I đầu tiên sao cho các kí tự Si , Si+1
đều là chữ cái a Nếu trong dãy không có những cặp nh vậy thì thông báo
Bài giải:
Var S: string;
i: integer;
BEGIN
Write(' Cho mot xau ki tu : '); Readln(S);
i:= pos('aa', S); {tìm vị trí xâu con 'aa' trong S}
If i<>0 then Writeln(' Ton tai "aa" tai vi tri ', i)
Else Writeln(' Khong ton tai ') ;
a a Si là dấu phẩy đầu tiên
b b Si là dấu phầy cuối cùng
Bài giải:
a )
Var S: string;
Trang 27Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
i: integer;
BEGIN
Write('Cho mot xau S co dau ",": '); Readln(S);
i:= pos(',', S); (* vị trí của dấu ',' trong S *)
If i<> 0 then Write(' Vi tri thoa man la: ', i);
While (i>=1)and(S[i] <> ',' ) do i:=i -1;
If i>=1 then Write('So thu tu thoa man la: ', i)
Else Write('Khong ton tai.');
Readln;
END
Bài 5 :
Viết chơng trình nhập một xâu kí tự , sau đó chỉ ra xem xâu đó có phải là xâu đối xứng không ( xâu đối xứng
là xâu có các kí tự giống nhau và đối xứng nhau qua điểm giữa xâu , ví dụ ‘ABBA’ hoặc ‘ABCBA’ )
If dx then Write(' St la xau doi xung ')
Else Write(' St khong phai la xau doi xung ') ;
Readln;
END
Bài 6 :
Cho một xâu kí tự S Hãy viết chơng trình tính xem trong S có bao nhiêu loại kí tự khác nhau ( phân biệt chữ
in hoa với chữ in thờng ) Ví dụ với S là “Pascal” ta có đáp số là 5
Trang 28Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Write('Cho mot xau ki tu S: '); Readln(S);
dem:=0;
For i:=1 to length(S) do
Begin
t:=false;
For j:=1 to i-1 do if (S[j]=S[i]) then t:=true;
If not t then dem:= dem+1;
Write('Cho mot xau ky tu: '); Readln(S);
For i:=1 to length(S) do
If S[i] in ['a' 'z'] then S[i]:= Upcase(S[i]);
Write('Chuoi sau khi da bien doi la: ', S);
Readln;
END
Bài 8 :
Họ tên một học sinh đợc nhập từ bàn phím Bạn hãy viết chơng trình điều chỉnh lại các kí tự đầu của các từ
đơn trong tên của học sinh ấy trở thành chữ in hhoa
If Hoten[1] in Chu then Hoten[1]:=Upcase(Hoten[1]);
For i:=2 to len do
If (Hoten[i-1]=#32)and(Hoten[i] in Chu) then
Viết chơng trình nhập xãu kí tự từ bàn phím , sau đó gọt xâu lại bằng cách cách xoá đi các kí tự trống ở hai
đầu của xâu Ví dụ nếu nhập xâu “ Ha noi “ , thì kết quả sẽ là “Ha noi”
While (S[length(S)] = #32) do Delete(S,length(S),1);
Write('Chuoi sau khi da bien doi la: ', S);
Trang 29Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Readln;
END
Trang 30Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Function Card(S: Tap): byte;
Var i,n: byte;
Trang 31Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Trang 32Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
Lua chon cua ban : _
Sau đó đợi gõ phím Chơng trình phải đợi cho tới khi phím gõ vào là một trong các chữ số 1 5 hoặc các chữ cái đầu của các tuỳ chọn thì thông báo phím gõ vào hợp lệ và kết thúc chơng trình Trong chơng trình phải dùng một tập hợp để kiểm tra việc nhập giá trị cho biến từ bàn phím
Trang 33Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Write('Nhap vao mot xau nhi phan : ');
Until not(ch in ['a' 'z']);
Writeln('Cac phan tu cua tap hop la:');
For ch:='a' to 'z' do
If ch in tap then Write(ch,' ');
Trang 34Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
Until not(ch in ['a' 'z']);
Writeln('Cac phan tu con lai cua tap hop la:');
For ch:='a' to 'z' do
If ch in tap then Write(ch,' ');
Readln;
END
Trang 35Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
• Tuổi : một số nguyên hai chữ số
• Lớp : một xâu hai chữ số và một chữ cái viết hoa
Hãy lập chơng trình nhập từ bàn phím danh sách một lớp 15 học sinh vào một mảng bản ghi Sau đó hiển thị danh sách lên màn hình , mỗi ngời một dòng
Writeln('Thong tin hoc sinh thu ',i);
Write('Cho ho lot : '); Readln(ds[i].holot);
Write('Cho ten : '); Readln(ds[i].ten);
Write('Cho tuoi : '); Readln(ds[i].tuoi);
Write('Cho lop : '); Readln(ds[i].lop);
• Tuổi : một số nguyên hai chữ số
• Lớp : một xâu hai chữ số và một chữ cái viết hoa
Một file bản ghi chứa một danh sách một lớp gồm 20 học sinh Hãy lập chơng trình hiển thị danh sách lên màn hình , mỗi ngời một dòng
Bài giải:
Trang 36Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
(* Doc tu mot file ban ghi *)
• Tuæi : mét sè nguyªn hai ch÷ sè
• Khèi : mét sè nguyªn hai ch÷ sè
• Líp : mét ch÷ c¸i viÕt hoa
Trang 37Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
a a Hiển thị lên màn hình danh sách những học sinh giỏi nhất của trờng là những bạn có điểm trung bình từ
8.0 trở lên và cao nhất trong khối
b b Lập danh sách học sinh trong năm học mới , biết một học sinh có điểm trung bình từ 5.0 trở lên thì đợc
lên lớp Chú ý : lớp 10A lên lớp 11A , lớp 11A lên 12A Kết quả chứa trong file
Trang 38Bµi tËp ng«n ng÷ lËp tr×nh PasCal Biªn so¹n: Hoµng §øc Hµ
max10:=0; max11:=0; max12:=0;
For i:=1 to n do With ds[i] do
Begin
l:=copy(lop,1,2);
If (l='10')and(diem>max10)and(diem>8.0) then max10:=diem
Else If (l='11')and(diem>max11)and(diem>8.0) then max11:=diem
Else If (l='12')and(diem>max12)and(diem>8.0) then max12:=diem; End;
Writeln('Hoc sinh gioi nhat khoi 10 : ');
For i:=1 to n do With ds[i] do
If (copy(lop,1,2)='10')and(diem>=max10) then
Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
Writeln('Hoc sinh gioi nhat khoi 11 : ');
For i:=1 to n do With ds[i] do
If (copy(lop,1,2)='11')and(diem>=max11) then
Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
Writeln('Hoc sinh gioi nhat khoi 12 : ');
For i:=1 to n do With ds[i] do
If (l='10')and(diem>=5.0) then lop:='11'+lop[3]
Else If (l='11')and(diem>=5.0) then lop:='12'+lop[3]
Else If (l='12')and(diem>=5.0) then lop:='DTN';
End;
Assign(f,'bai4n.dat'); Rewrite(f);
For i:=1 to n do With ds[i] do
If lop<>'DTN' then Write(f,ds[i]);