Bài 2 :Viết chương trình đếm số lần xuất hiện của các kí tự thuộc bảng chữ cái trong 50 lần gõ kí tự bằng bàn phím không phân biệt a với A, b với B …, dùng hàm Upcase để chuyển đổi chữ t
Trang 1BÀ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
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 )
Trang 2End ;
Writeln (' So cac so >10 va <20 la : ', Dem ) ;
Writeln (' Tong cua chung la :', Tong ) ;
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 ') ;
Trang 32 : Writeln (' Thu Ba ') ;
3 : Writeln (' Thu Tu ') ;
4 : Writeln (' Thu Nam ') ;
5 : Writeln (' Thu Sau ') ;
6 : Writeln (' Thu Bay ') ;
Nhâp số báo danh
Nhập điểm văn , toán , ngoại ngữ
In ra màn hình dưới dạng :
_ Tổng số điểm :
Bạn đã trúng tuyển ( hoặc Bạn đã không trúng tuyển ) với điều kiện Tổng số điểm >= 15 hay ngược lại
GIẢI
Uses Crt ; Var SBD : Integer;
Van , Toan , Ngoaingu , Tongdiem : Real ;
BEGIN
Clrscr ;
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) ;
If Tongdiem >= 15 Then
Writeln(' Ban da trung tuyen ')
Trang 4Nế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
Trang 5If ( (N + M) mod 2 = 0 ) Then Writeln(' Dung ! ')
Else Writeln(' Sai ! ') ;
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 ) ;
Readln ; END
Bài 2 :Viết chương trình đếm số lần xuất hiện của các kí tự thuộc bảng chữ cái trong 50 lần gõ kí tự bằng bàn phím (không phân biệt a với A, b với B …, dùng hàm Upcase để chuyển đổi chữ thường với chữ hoa)
GIẢI
Trang 6Uses Crt ; Var a : Array[ 'A' 'Z' ] of integer; (* mảng bộ đếm *)
ch : char ; (* biến nhập kí tựù *)
i : byte ; (* chỉ số của lần gõ phím *)
BEGIN
Clrscr ;
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 *)
Trang 8Write (' Cho so a : ') ; Readln(a) ;
Write (' Cho so mu n : ') ; Readln(n) ;
Trang 9While ( j < i ) and ( A[j] <> A[i] ) Do inc(j) ;
If j = i Then Writeln( A[i] ) ;
Write(' Do dai cua day so N = ') ; Readln (N) ;
Writeln (' Nhap day so : ') ;
Trang 10Write ('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 : ') ;
Trang 11n , 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 : ') ;
Trang 12writeln (' 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 ') ;
Writeln (' Tim USCLN cua N so :') ;
Write (' Nhap so N : ') ; Readln(n) ;
Writeln ('Nhap ', N ,' so : ') ;
For i := 1 To n Do
Trang 13Procedure 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 *)
Trang 14Procedure Insert ( St1 : String ; Var St2 : String ;Vt : Byte ) ;
(* chèn xâu St1 vào St2 bắt đầu từ vị trí Vt *)
Trang 15End ;
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
_ Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ? _ Viết thủ tục tính diện tích của tam giác
_ 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
GIẢI
Uses Crt;
Var a, b, c: real ;
(*================================*)
Procedure Nhap(Var a, b, c: real);
Procedure input (Var a: real; tenbien: Char);
' 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;
Trang 16Procedure Dientich (a, b, c: real); Var p, S: real;
Writeln('Giai phuong trinh X+Y+Z=12 trong pham vi '
+ 'so nguyen khong am voi dieu kien x<4');
Trang 18Viế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
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
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 :
Trang 19Viế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
Writeln(#7,'Co ',n,' xau ki tu nen khong the '
+ 'so sanh duoc');
Trang 20For i:=1 to n-1 do
For j:=i+1 to n do
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]);
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
Writeln('So ',N,' khong the phan tich thanh '
+ 'tich cua cac so nguyen to')
Trang 22Writeln('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 ;
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
Trang 23Writeln ('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 : ') ;
Trang 24an = 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
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
Var a : Array [1 100] Of Word ;
Trang 25if 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 26Gotoxy(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
Trang 27Bài 9 :
a 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 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 28Write('Nhap kich thuoc cua mang doi xung: ');
Write(' Cho mot xau ki tu : '); Readln(s);
For ch:= 'A' to 'Z' do A[ch]:=0;
For i:=1 to length(s) do
Trang 29Writeln('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 a Tất cả các dấu ! bằng dấu chấm
b 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 c Một nhóm các dấu chấm đứng liền nhau bằng dấu ba chấm
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);
Trang 30Clrscr;
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)
Trang 31i: integer;
BEGIN
Write(' Cho mot xau ki tu : '); Readln(S);
i:= pos('aa', S); {tìm vò trí xaâu con 'aa' trong S}
Trang 32If 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
a )
Var S: string;
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.');
Uses Crt;
Var St : string;
dx : Boolean;
Trang 33If dx then Write(' St la xau doi xung ')
Else Write(' St khong phai la xau doi xung ') ;
For j:=1 to i-1 do if (S[j]=S[i]) then t:=true;
If not t then dem:= dem+1;
Trang 34Write('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);
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
While (S[length(S)] = #32) do Delete(S,length(S),1);
Write('Chuoi sau khi da bien doi la: ', S);
Trang 35Function Card(S: Tap): byte;
Var i,n: byte;
Trang 37Lua 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 38Write('Lua chon cua ban: ');
Trang 39Until not(ch in ['a' 'z']);
Writeln('Cac phan tu cua tap hop la:');
Until not(ch in ['a' 'z']);
Writeln('Cac phan tu con lai cua tap hop la:');
For ch:='a' to 'z' do
Trang 40If ch in tap then Write(ch,' ');
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
(* Nhập danh sách học sinh từ bàn phím *)
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);
Trang 41Write('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
(* Doc tu mot file ban ghi *)
Trang 42 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
(* Doi kieu ban ghi *)
Trang 44END
Bài 4 :
Một file bản ghi chứa một danh sách học sinh PTTH , thông tin về mỗi học sinh ngoài các trường Họđệm , Tên , Tuổi , Lớp giống như các bài trên còn có thêm trường Điểm chứa điểm trung bình của học sinh trong năm học Hãy lập chương trình :
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
(* Khen thuong va len lop *)
max10:=0; max11:=0; max12:=0;
For i:=1 to n do With ds[i] do
Trang 45Begin
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]);