Bài tập 16: Chương trình nhập danh sách học sinh gồm Họ tên, tuổi, lớp.. 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
Trang 1Bài tập pascal 11
Bài tập 1:Nhập ba số bất kỳ kiểm tra ba số vừa nhập có phải là ba cạnh của tam giác hay không?
Var
a , b , c : Real ;
BEGIN
Writeln (' Nhap do dai 3 so bat ky : ') ;
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 tập 2: Nhập vào N số cho trước đếm có bao nhiêu phần tử nằm trong khoảng 10 đến 20
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
Begin
Write (' So = ') ; Readln ( So ) ;
If ( So > 10 ) and ( So < 20 ) Then
Begin
Tong := Tong + So ;
Dem := Dem + 1 ;
End ;
End ;
Writeln (' So cac so >10 va <20 la : ', Dem ) ;
Writeln (' Tong cua chung la :', Tong ) ;
Readln ;
END
Bài tập 3: Tìm giá trị lớn nhất, nhỏ nhất trong 4 số nhập từ bàn phím
Var
Max , a , b , c , d : Real ;
BEGIN
Writeln (' Nhap gia tri cua 4 so : ') ;
Write (' a = ') ; Readln ( a ) ;
Write (' b = ') ; Readln ( b ) ;
Write (' c = ') ; Readln ( c ) ;
Write (' d = ') ; Readln ( d ) ;
If Max < b Then Max := b ;
If Max < c Then Max := c ;
Trang 2If Max < d Then Max := d ;
Min:=a;
If Min > b Then Min := b ;
Writeln (' Gia tri lon nhat la : ', Max ) ;
Writeln (' Gia tri nho nhat la : ', Min ) ;
Readln ;
END
Bài tập 4: Nhập ngày tháng bất kỳ chương trình tìm ngày trong tuần của ngày vừa nhập
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 ('Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Chu Nhat ') ;
1 : Writeln (''Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Thu Hai ') ;
2 : Writeln (''Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Thu Ba ') ;
3 : Writeln (' 'Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Thu Tu ') ;
4 : Writeln (' 'Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Thu Nam ') ;
5 : Writeln (' 'Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Thu Sau ') ;
6 : Writeln (' 'Ngay ‘,Ngay, ‘thang’, thang, ‘nam’ ,nam,‘la ngay Thu Bay ') ;
End ;
Readln ;
END
Bài tập 5: chương trình nhập điểm văn, toán, ngoại nữ của học sinh, chương trình in ra màn hình
giấy báo nếu tổng điểm lớn hơn 15 thì trúng tuyển, nếu không thì ghi không trúng tuyển
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 ;
Trang 3Writeln (' 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 tập 6: Nhập hai số a,b cho trước, nhập phép tính cuẩ và b,các phép tính cộng, trừ, nhân,chia
Hiển thị lên màn hình kết quả của phép tính đó
Uses Crt ;
Var
a , b , T : Real ;
Pt : Char ;
BEGIN
Clrscr ;
Write (' a = ') ; Readln( a ) ;
Write (' b = ') ; Readln( b ) ;
Write (' Phep tinh thuc hien la (+ - * /) : ') ;
Readln( Pt ) ;
Write ( a , pt , b , ' = ', T ) ;
Readln ;
END
Bài tập 7: Chương trình giải phương trình bậc 2
Uses Crt;
Var
m , Delta : Real ;
BEGIN
Clrscr;
Write (' m = ') ; Readln( m ) ;
Delta := sqr( m-2 ) - 4 ;
If Delta < 0 Then
Writeln(' Phuong trinh vo nghiem ')
Else
Begin
If Delta = 0 Then
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 ;
Trang 4End ;
Readln ;
END
Bài tập 8: Chương trình nhập từ bàn phím các ký tự chương trình đếm số lần xuất hiện của mỗi ký
tự
Uses Crt ;
Var a : Array[ 'A' 'Z' ] of integer;
ch : char ;
i : byte ;
BEGIN
Clrscr ;
For ch :='A' to 'Z' Do a[ch] := 0 ;
Writeln (' Go phim 50 lan ') ;
For i := 1 To 50 Do
Begin
ch :=Readkey ;
ch := Upcase(ch) ;
a[ch] := a[ch] + 1 ;
End;
Writeln (' So lan xuat hien cac ki tu la :') ;
For ch :='A' to 'Z' do
If a[ch] > 0 Then
Writeln (ch , a[ch] : 4 , ' lan ');
Readln ;
END
Bài tập 9: Chương tình tính tổng S:=1+1/1+1/2+1/3+1/4+1/5+….1/n
Uses Crt ;
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 tập 10: Bài toán tính a mũ n
Uses Crt ;
Var i , n : Integer ;
a , giatri : Real ;
BEGIN
Clrscr ;
Write (' Cho so a : ') ; Readln(a) ;
Write (' Cho so mu n : ') ; Readln(n) ;
Trang 5i := 1 ;
giatri := 1 ;
While i <= n Do
Begin
giatri := giatri * a ;
i:= i+1 ;
End ;
Writeln(' a mu n bang : ', giatri ) ;
Readln ;
END
Bài tập 11 : Sắp xếp các phần tử trong mảng cho trước
uses crt;
var a: array[1 100] of integer;
var i,n,j, tg,max, vt : integer;
begin
clrscr;
write(' nhap so phan tu cua mang ');
readln(n);
writeln(' moi nhap cac phan tu cua mang ');
for i:= 1 to n do begin
write('A', i,']= ');
readln(a[i]);
end;
Max:=a[1]; vt:=1;
For i:=1 to n do begin
If A[i]>max then Begin
Max:=a[i]; vt:=i;
End;
end;
Writeln('gia tri lon nhat la ', max, ' nam o vi tri thu ' ,vt);
for i:= 1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then begin
tg:=a[i];
a[i]:=a[j];
a[j]:=tg;
end;
writeln(' day sau khi sap xep la ');
for i:=1 to n do write(' ', a[i]);
readln;
end
Bài tập 12: Nhập xâu cho trước kiểm tra có phải xâu đối xứng hay không?
Uses Crt;
Var St : string;
dx : Boolean;
i, len: byte;
Trang 6BEGIN
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 tập 13: Chương trình nhập vào họ tên của một người sau đó xóa hết ký tự trắng dư thừa
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 tập 14: Chương trình nhập tệp tin và tính số phần tử tệp vừa nhậ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;
Trang 7Var 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 tập 15: Chương trình nhập danh sách học sinh gồm Họ tên, tuổi, lớp của học sinh,in ra danh sách
vừa nhập
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 tập 16: Chương trình nhập danh sách học sinh gồm Họ tên, tuổi, lớp Chương trình in ra danh
sách sau khi sắp xếp theo thứ tự tăng dần
Uses Crt;
Const n=5;
Type
Danhsach=record
holot: string[25];
Trang 8ten: string[10];
tuoi: 0 99;
lop: string[3];
End ;
Var ds: array [1 20] of Danhsach;
i,j: byte;
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 tập 17: 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
Uses Crt;
Const n=5;
Type Danhsach=record
holot: string[25];
ten: string[10];
tuoi: 0 99;
lop: string[3];
end;
Var ds: Danhsach;
Trang 9i: 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 tập 18: 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
Uses Crt;
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 Danhsach2;
c : integer;
BEGIN
ClrScr;
Writeln('Ghi tu file bai3.dat sang bai3n.dat:');
Writeln;
Assign(f1,'bai3.dat'); Reset(f1);
Assign(f2,'bai3n.dat'); Rewrite(f2);
While not Eof(f1) do
Begin
Read(f1,ds1);
Trang 10With ds1 do
Begin
ds2.hoten:=holot+ten;
val(copy(lop,1,2),ds2.khoi,c);
ds2.tuoi:=tuoi;
ds2.lop:=UpCase(lop[3]);
Write(f2,ds2);
End;
End;
Close(f1); Close(f2);
Writeln;
Writeln('Bam Enter de ket thuc!');
Readln;
END
Bài tập 19:
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 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 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 Uses Crt;
Type Danhsach=record
holot: string[25];
ten: string[10];
tuoi: 0 99;
lop: string[3];
diem: real;
End;
Var ds: array [1 100] of Danhsach;
f: file of Danhsach;
n: integer;
Procedure Nhap;
Begin
Assign(f,'bai4.dat'); Reset(f);
n:=0;
While not Eof(f) do
Begin
n:=n+1; Read(f,ds[n]);
End;
Close(f);
End;
Procedure Timgioi;
Var i: integer;
max10,max11,max12: real;
l: string;
Begin
max10:=0; max11:=0; max12:=0;
Trang 11For 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 (copy(lop,1,2)='12')and(diem>=max12) then
Writeln(holot:20,ten:10,tuoi:4,lop:5,diem:5:1);
End;
Procedure Lenlop;
Var i: integer;
l: string;
f: file of Danhsach;
Begin
For i:=1 to n do With ds[i] do
Begin
l:=copy(lop,1,2);
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]);
Close(f);
End;
BEGIN
ClrScr;
Nhap;
Timgioi;
Lenlop;
Write('Bam ENTER de ket thuc ');
Readln;
END
Bài tập 20: Cho file bản ghi f chứa dữ liệu về kho sách , dữ liệu về mỗi cuốn sách được chứa
trong một bản ghi gồm 3 trường mang thông tin về :
Họ tên tác giả : một xâu 26 kí tự
Tên sách : một xâu 40 kí tự
Năm xuất bản : một số nguyên 4 chữ số