Bài tập ngôn ngữ lập trình PasCal

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’ ) .

Bài giải:

Uses Crt;

Var St : string;

dx : Boolean;

i, len: byte;

 

pdf55 trang | Chia sẻ: rimokato | Lượt xem: 2313 | Lượt tải: 2download
Bạn đang xem trước 20 trang mẫu tài liệu Bài tập ngôn ngữ lập trình PasCal, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
===============*) 
 Procedure phantich(N1:longint); 
 Begin 
 If N1>1 then 
 Begin 
 u:=2; 
 dem:=0; 
18
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
 Repeat 
 If (N1 mod u=0) then 
 Begin 
 inc(dem); 
 a[dem]:=u; 
 N1:=N1 div u; 
 End 
 Else inc(u); 
 Until N1=1; 
 End 
 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 :
a11x + a12y = c1
a21x + a22y = c2
Bài giải:
 Uses Crt; 
 Var a: array[1..2, 1..2] of real; 
 c: array[1..2] of real; 
 d, dx, dy, x, y: real; 
 BEGIN
 Clrscr; 
 Writeln('Giai he phuong tring tuyen tinh hai an:');
 Writeln(' a11x+a12y=c1'); 
 Writeln(' a21x+a22y=c2'); 
 Writeln('Nhap cac he so cua he phuong trinh'); 
 Write('a11='); Readln(a[1,1]); 
 Write('a12='); Readln(a[1,2]); 
 Write('c1='); Readln(c[1]); 
 Write('a21='); Readln(a[2,1]); 
 Write('a22='); Readln(a[2,2]); 
 Write('c2='); Readln(c[2]);
 d:=a[1,1]*a[2,2] - a[2,1] * a[1,2];
 dx:=c[1]*a[2,2] - c[2] * a[1,2];
 dy:=a[1,1]*c[2] - a[2,1] * c[1];
 If d=0 then Writeln(' He vo nghiem hoac vo so nghiem')
 Else
 Begin
 x:=dx/d; y:=dy/d;
 Writeln('He co nghiem duy nhat :');
 Writeln('x=', x:0:2, ' ; y=', y:0:2);
 End ;
 Readln;
 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); 
 If m > n Then (* đỗi chỗ để m <= n *) 
 Begin 
 k := m ; m := n ; n := k ; 
 End ; 
 s := 0 ; 
 For k := m To n do s := s + sqr(k) ; 
 tb := s / (n - m + 1) ; 
 Writeln ('Trung binh cong bimh phuong cac so ' 
 + 'nguyen tu m den n la: ', tb:12:2); 
 Readln ; 
 END . 
Bài 4 :
Viết chơng trình nhập từ bàn phím các phần tử của một mảng hai chiều . Kích thớc của mảng đợc nhập trớc từ 
bàn phím .
Bài giải:
 Var m , n , i , j : Byte ; 
 a : Array[1..100, 1..100] Of Real; 
 BEGIN
 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 : ') ; 
 For i := 1 To m Do 
 For j := 1 To n Do 
 Begin 
 Write ('a[', i:2, ', ' , j:2 ,']=') ; Readln(a[i, j]) ;
 End ; 
 Readln ;
 END .
Bài 5 :
Dãy số sau đợc gọi là dãy Fibonaci :
a1 = 1
a2 = 1
a3 = 2
a4 = 3
. . .
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ử .
 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; 
 For i:=3 to 20 do a[i]:=a[i-1]+a[i-2] ; 
 END .
Bài 6 :
Dãy số an đợc định nghĩa nh sau : 
a1 = 1
a2 = 2
. . .
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 .
Bài giải:
 Var a : Array [1..100] Of Word ;
 i, N : Byte ; 
 S : Real ; 
 BEGIN
 Write (' Nhap so N>=2 : ') ; Readln(n) ;
 a[1] := 1 ;
 a[2] := 2 ;
 For i := 3 To N Do a[i] := 2*a[i-1]+a[i-2] ;
 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);
 readln;
 END .
Bài 8 :
22
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 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ố .
Bài giải:
 Uses Crt;
 Var
 a : array[1..3, 1..3] of integer ;
 i, j: byte ;
 BEGIN
 Clrscr;
 Writeln('Nhap mot bang so nguyen kich thuoc 3x3:');
 Gotoxy(10, 4); Write(1);
 Gotoxy(19, 4); Write(2);
 Gotoxy(28, 4); Write(3);
 Gotoxy(5, 6); Write(1);
 Gotoxy(5, 8); Write(2);
 Gotoxy(5,10); Write(3);
 For i:=1 to 3 do
 For j:=1 to 3 do
 Begin
 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 .
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à
 a[j,i]:=a[i,j];
 End;
 Readln ;
 END ;
24
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 5
Bài 1 :
Lập trình đếm số lần xuất hiện ở mỗi loại kí tự thuộc bảng chữ cái tiếng Anh trong một xâu kí tự Str . 
Bài giải:
 Var A: array [ 'A'..'Z'] of integer;
 S: string; 
 ch: char; 
 i: integer; 
 BEGIN
 Write(' Cho mot xau ki tu : '); Readln(s); 
 For ch:= 'A' to 'Z' do A[ch]:=0; 
 For i:=1 to length(s) do 
 Begin 
 If Upcase(S[i]) in (['A'..'Z']) then 
 Begin 
 S[i]:= Upcase(S[i]); 
 A[S[i]]:= A[S[i]]+1; 
 End; 
 End; 
 For ch:= 'A' to 'Z' do 
 Writeln('So lan xuat hien cua ',ch,' trong xau la: ', A[ch]:4) ; 
 Readln ; 
 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
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
 Else inc(i); 
 Write('Chuoi sau khi da bien doi la: ' ,S); 
 Readln; 
 END .
 c )
 Uses crt; 
 Var S: string; 
 i, j: byte; 
 BEGIN
 Clrscr; 
 Write('Nhap xau S='); Readln(S); 
 i:=1; 
 While i<=Length(S) do 
 Begin 
 If S[i]='.' then 
 Begin 
 j:=i; 
 While (S[i]='.')and(i<=length(S)) do inc(i); 
 dec(i); 
 If (i-j)=1 then insert('.',S,i) 
 Else 
 If (i-j)>2 then 
 Begin 
 Delete(S,j+2,i-j-2); i:=j+1; 
 End; 
 End ;
 Inc(i); 
 End; 
 Write('Chuoi sau khi bien doi la: ',S); 
 Readln; 
 END . 
Bài 3 :
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 i0 then Writeln(' Ton tai "aa" tai vi tri ', i) 
 Else Writeln(' Khong ton tai .') ; 
 Readln; 
 END .
Bài 4 :
Cho số tự nhiên n và dãy các kí tự S1 , S2 , , S… n . Biết rằng trong dãy có ít nhất một dấu phẩy . Hãy tìm số tự 
nhiên i sao cho :
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; 
26
Bà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); 
 Readln; 
 END .
b )
 Var S: string; 
 i: integer; 
 BEGIN
 Write('Cho mot xau S co dau ",": '); Readln(S); 
 i:= length(S); 
 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’ ) .
Bài giải:
 Uses Crt; 
 Var St : string; 
 dx : Boolean; 
 i, len: byte; 
 BEGIN 
 Clrscr; 
 Write(' Nhap xau St = '); Readln(St); 
 dx:= True; 
 i:=1; 
 len:= Length(St); 
 While dx and (i<=(len div 2)) do 
 Begin 
 dx:=(St[i] = St[len - i+1]); 
 inc(i); 
 End; 
 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 .
Bài giải:
 Var S: string; 
 i, j, dem: integer; 
 t: boolean; 
 BEGIN
27
Bà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; 
 End; 
 Write('So ki tu khac nhau cua xau S la: ', Dem); 
 Readln; 
 END .
Bài 7 :
Viết chơng trình nhập một xâu kí tự và biến đổi chúng thành toàn chữ in hoa .
Bài giải:
 Var S : string; 
 i : integer; 
 BEGIN
 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 .
Bài giải:
 Uses crt; 
 Const Chu=['a'..'z']; 
 Var Hoten: string; 
 i,len: byte; 
 BEGIN
 Clrscr; 
 Write('Ho ten='); Readln(Hoten); 
 Len:=length(Hoten); 
 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 
 Hoten[i]:=Upcase(Hoten[i]); 
 Write('Ho ten sau khi dieu chinh la: ', Hoten); 
 Readln; 
 END . 
Bài 9 :
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” .
Bài giải:
 Var S: String; 
 BEGIN
 Write('Cho mot xau ky tu: '); Readln(S); 
 While S[1] = #32 do Delete(S,1,1); 
 While (S[length(S)] = #32) do Delete(S,length(S),1); 
 Write('Chuoi sau khi da bien doi la: ', S); 
28
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
 Readln; 
 END . 
29
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 6
Bài 1 :
Bạn hãy viết hàm Card(A) đếm số phần tử của tập hợp A cho trớc có kiểu Set Of 0 .. 99 .
Bài giải:
 (* hàm đếm số phần tử của tập hợp *)
 Uses Crt;
 Type Tap=set of 0..99;
 Const inp='Number.dat';
 Var S : Tap;
 i : byte;
 Procedure Nhap;
 Var a: byte; f: text;
 Begin
 S:=[];
 Assign(f,inp); Reset(f);
 While not SeekEoF(f) do
 begin
 Readln(f,a); If (a>=0)and(a<=99) then S:=S+[a];
 End;
 Close(f);
 End;
 Function Card(S: Tap): byte;
 Var i,n: byte;
 Begin
 n:=0;
 For i:=0 to 99 do If i in S then Inc(n);
 Card:=n;
 End;
 BEGIN
 Nhap;
 Clrscr;
 Write('Tap S co ',Card(S),' phan tu.');
 Readln;
 END.
Bài 2 :
Bạn hãy lập chơng trình tạo một tập hợp các số nguyên chẵn kiểu Byte và loại khỏi nó các số chia hết cho 3 . 
Kết quả thể hiện trên màn hình . 
Bài giải:
 Uses Crt;
 Const n=5;
 Type 
 Danhsach=record
 holot: string[25];
 ten: string[10];
 tuoi: 0..99;
 lop: string[3];
 End ;
 Var ds: array [1..20] of Danhsach;
 i,j: byte;
30
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
 f: file of Danhsach;
 Procedure Doi(i,j: byte);
 Var tg: Danhsach;
 Begin
 tg:=ds[i];
 ds[i]:=ds[j];
 ds[j]:=tg;
 End;
 BEGIN
 ClrScr;
 Writeln('Nhap danh sach hoc sinh tu file data.dat : ');
 Writeln;
 Assign(f,'data.dat'); Reset(f);
 For i:=1 to n do Read(f,ds[i]);
 Close(f);
 For i:=1 to n-1 do
 For j:=i+1 to n do
 begin
 If (ds[i].ten>ds[j].ten) then Doi(i,j)
 Else
 If (ds[i].ten=ds[j].ten)and(ds[i].holot>ds[j].holot) then Doi(i,j);
 end;
 Writeln('Danh sach hoc sinh:');
 For i:=1 to n do
 With ds[i] do Writeln(holot:20,ten:11,tuoi:4,lop:5);
 Writeln;
 Write('Bam Enter de ket thuc...');
 Readln;
 END.
Bài 3 :
Xét chơng trình sau :
Program B4 ;
Var
 Thoat : Set Of Char = [‘e’ , ’E’] ;
BEGIN
 Write (‘ Hay go E de ket thuc : ‘) ;
 Repeat
 Ch := Readkey ;
 Until Ch in thoat ;
END .
Hãy tìm và sửa lỗi trong chơng trình đó .
Bài giải:
 Uses Crt;
 Const
 thoat: set of char=['e','E'];
 Var 
 ch: char;
 BEGIN
 Write('Hay go E de thoat khoi chuong trinh: ');
 Repeat 
 ch:=readkey; 
 Until ch in thoat;
31
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
 END .
Bài 4 :
Bạn hãy lập chơng trình hiển thị một menu dạng sau trên màn hình
1. Xem
2. 2. Sua chua
3. 3. Loai bo
4. 4. Nhap them
5. 5. Thoat
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 .
Bài giải:
 (* Hiển thị menu *)
 Uses Crt;
 Const 
 menu: set of char = ['1'..'5','X','S','L','N','T'];
 Var
 ch: char;
 BEGIN
 Clrscr;
 Writeln(' 1. Xem ');
 Writeln(' 2. Sua chua ');
 Writeln(' 3. Loai bo ');
 Writeln(' 4. Nhap them');
 Writeln(' 5. Thoat ');
 Write('Lua chon cua ban: ');
 Repeat
 ch:=readkey; ch:=Upcase(ch);
 Until ch in menu;
 Writeln;
 Write('Ban da chon:');
 Case ch of
 '1','X': Writeln(' 1. Xem ');
 '2','S': Writeln(' 2. Sua chua ');
 '3','L': Writeln(' 3. Loai bo ');
 '4','N': Writeln(' 4. Nhap them');
 '5','T': Writeln(' 5. Thoat ');
 End;
 Readln;
 END.
Bài 5 :
Hãy lập chơng trình nhập vào một xâu nhị phân . Các kí tự nhập vào không hợp lệ bị bỏ qua .
Bài giải:
 (* nhập một xâu nhị phân *)
 Uses Crt;
 Const bit : set of char= ['0','1'];
 Var ch: char;
 st: string;
 BEGIN
 Clrscr;
 st:='';
32
Bà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 : ');
 Repeat
 ch:= Readkey;
 If ch in bit then
 begin
 st:=st+ch; Write(ch);
 end
 Else If ch#13 then Write(#7);
 Until ch=#13;
 Readln;
 END.
Bài 6 :
Hãy lập chơng trình nhập vào một xâu kí tự từ bàn phím . Yêu cầu các kí tự nhập vào phải là các chữ cái thuộc 
bảng chữ cái tiếng Anh , bỏ qua các phím khác . 
Bài giải:
 (* Nhập một xâu toàn các chữ cái *)
 Uses Crt;
 Const A:set of char=['a'..'z','A'..'Z'];
 Var ch: char;
 st: string;
 BEGIN
 Clrscr;
 st:='';
 Writeln('Nhap vao mot xau toan cac chu cai:');
 Repeat
 ch:=Readkey;
 If ch in A then
 begin
 st:=st+ch; write(ch);
 End
 Else if ch#13 then Write(#7);
 If ch=#0 then ch:=Readkey;
 Until ch = #13;
 END .
Bài 7 :
Viết chơng trình có chức năng thêm phần tử vào tập hợp trực tiếp từ bàn phím và loại bớt phần tử khỏi tập hợp 
cũng trực tiếp từ bàn phím .
Bài giải:
 (* loai bo cac phan tu khoi tap hop *)
 Uses Crt;
 Var tap: set of char;
 ch: char;
 BEGIN
 tap:=[];
 Writeln('Nhap cac phan tu cho mot tap hop cac ki tu: ');
 Repeat
 ch:=ReadKey;
 tap:=tap+[ch];
 Writeln(ch);
 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,' ');
33
Bài tập ngôn ngữ lập trình PasCal Biên soạn: Hoàng Đức Hà
 Writeln;
 Writeln('Ban muon bo cac phan tu nao khoi tap hop:');
 Repeat
 ch:=ReadKey;
 tap:=tap-[ch];
 Writeln(ch);
 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 .
34
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 7
Cấu trúc dữ liệu kiểu Record:
Bài 1 :
Thông tin về mỗi học sinh gồm :
• Họ đệm : một xâu 25 kí tự .
• Tên : một xâu 10 kí tự .
• 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 .
Bài giải:
 (* Nhập danh sách học sinh từ bàn phím *)
 Uses Crt;
 Const n=15;
 Type Danhsach=record
 holot: string[25];
 ten: string[10];
 tuoi: 0..99;
 lop: string[3];
 End;
 Var ds: array [1..n] of Danhsach;
 i : byte;
 BEGIN
 ClrScr;
 Writeln('Hay nhap danh sach hoc sinh : ');
 Writeln;
 For i:=1 to n do
 Begin
 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);
 Writeln;
 End;
 Writeln('Danh sach hoc sinh :');
 For i:=1 to n do
 With ds[i] do Writeln(holot:20,ten:10,tuoi:4,lop:5);
 Writeln;
 Write('Bam Enter de ket thuc...');
 Readln;
 END.
Bài 2 :
Thông tin về mỗi học sinh là một bản ghi gồm các trờng :
• Họđệm : một xâu 25 kí tự .
• Tên : một xâu 10 kí tự .
• 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:
35
Bà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 *)
 Uses Crt;
 Const n=5;
 Type Danhsach=record
 holot: string[25];
 ten: string[10];
 tuoi: 0..99;
 lop: string[3];
 end;
 Var ds: Danhsach;
 i: byte;
 f: file of Danhsach;
 BEGIN
 ClrScr;
 Writeln('Danh sach hoc sinh tu file bai2.dat');
 Writeln;
 Assign(f,'bai2.dat'); Reset(f);
 For i:=1 to n do
 Begin
 Read(f,ds);
 With ds do Writeln(holot:20,ten:11,tuoi:4,lop:5);
 End;
 Close(f);
 Writeln;
 Write('Bam Enter de ket thuc...');
 Readln;
 END .
Bài 3 :
Một file bản ghi chứa một danh sách học sinh , thông tin về mỗi học sinh giống nh bài trên . Hãy lập chơng 
trình tạo một file bản ghi khác chứa danh sách đó , mỗi bản ghi gồm các trờng :
• Họtên : một xâu 35 kí tự .
• 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
Bài giải:
 (* Doi kieu ban ghi *)
 Uses Crt;
 Type Danhsach1=record
 holot: string[25];
 ten: string[10];
 tuoi: 0..99;
 lop: string[3];
 End;
 Danhsach2=record
 hoten: string[35];
 tuoi: byte;
 khoi: byte;
 lop: char;
 End;
 Var ds1 : Danhsach1;
 ds2 : Danhsach2;
 f1 : file of Danhsach1;
 f2 : file of

File đính kèm:

  • pdfTai lieu boi duong Tin hoc 8.pdf