Bài 23: Cho danh sách các chủ hộ sử dụng điện, mỗi chủ hộ biết các thông tin : Mã số, họ tên, địa chỉ, điện thoại, loại hợp đồng (SH:sinh hoạt, SX:sản xuất, KD: kinh doanh), ngày ký hợp đồng. Hãy lập thuật toán và viết chương trình bằng ngôn ngữ lập trình pascal (dùng cấu trúc bản ghi) để thực hiện các yêu cầu sau đây :
- Nhập dữ liệu đã cho vào máy từ bàn phím
- Tìm số hộ của mỗi loại hợp đồng và tách danh sách trên thành ba danh sách tương ứng với mỗi loại hợp đồng : SH, SX và KD.
- Đưa kết quả tìm được ra màn hình.
49 trang |
Chia sẻ: nguyenlam99 | Lượt xem: 884 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Tin học văn phòng - Câu hỏi ôn tập, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Phần A: Lý thuyết
Câu 1: Các bộ phận chức năng của máy tính ?
CPU
Là khối xử lý trung tâm, là bộ chỉ huy của máy tính. Nó có nhiệm vụ thực hiện các phép tính số học và logic đồng thời điều khiển các quá trình thực hiện lệnh.
Có 3 bộ phận chính :
Khối tính toán số học ALU : Thực hiện hầu hết các thao tác, phép tính quan trọng của hệ thống.
Khối điều khiển CU : quy định dãy thao tác cần làm đối với hệ thống bằng cách tạo ra tín hiệu điều khiển mọi việc.
Các thanh ghi : lưu trữ thông tin tạm thời trong quá trình làm việc của CPU
Bộ nhớ
Chia ra làm 2 loại :
Bộ nhớ trong : ROM, RAM
Bộ nhớ ngoài : ổ cứng, USB, CD, VCD
Các thiết bị vào ra
Các thiết bị vào : chuột, bàn phím
Thiết bị ra : màn hình, máy in
Câu 2 : So sánh ROM và RAM
ROM
RAM
+ Chỉ có thể đọc thông tin ra
+ Do nhà sản xuất ghi vào, lưu trữ chương trình cố định.
+ Dữ liệu không bị mất đi khi tắt máy.
+ Có thể ghi vào, đọc ra một các dễ dàng.
+ Được dung để lưu trữ chương trình tạm thời khi chúng đang chạy và dữ liệu được chương trình sử dụng.
+ Khi tắt máy dữ liệu bị mất đi.
Câu 3 : Nguyên tắc giải một bài toán bằng máy tính điện tử ?
Gồm 5 bước :
Lập công thức cho bài toán
Chọn ra phương pháp giải tốt nhất
Lập sơ đồ thuật toán
Viết chương trình bằng ngôn ngữ lập trình
Thực hiện chương trình trên máy
Câu 4 : Chuyển đổi giữa các hệ đếm và các phép tính ở hệ cơ số 2
Ví dụ :
(571)8=5.82+7.81+1.80=(377)10
(F5)16=15.161+5.160=(245)10
(FA5C)16=15.163+10.162+5.161+12.160=(64092)10
+ Ngoài ra còn có các dạng chuyển từ cơ số 10 sang cơ số 2, từ cơ số 10 sang cơ số 8 và các hệ đếm khác
+ Dạng thứ 2 là thực hiện các phép tính ở hệ cơ số 2 :cộng, trừ, nhân, chia.
Câu 5 : Cấu trúc của một chương trình pascal ? cho ví dụ ?
Gồm 3 phần
Tiêu đề của chương trình
Program tenchuongtrinh;
Khai báo
Uses
Lable
Const
Var
Type
Function
Procedure
Thân chương trình
Begin
{.}
End.
Ví dụ : viết chương trình tính diện tích hình tròn bán kính R
Program VD;
Const PI=3.14;
Var R,S :real;
Begin
Write(‘Nhap ban kinh : ‘);readln(R);
S:=PI*R*R;
Writeln(‘Dien tich hinh tron la : ‘,S:6:1);
Readln;
End.
Câu 6 : Viết biểu thức bằng ngôn ngữ lập trình pascal
Ví dụ :
Y=sin(α)+arctg(β)+1A2+1+A2+1+B2+A2
Viết lại thành :
Y:=sin(alpha)+arctan(beta)+1/sqrt(sqr(A)+sqrt(1+sqr(A)+sqrt(1+sqr(B)+sqr(A))))
Câu 7 : Nêu các vòng lặp xác định mà em đã biết ? cho ví dụ ?
Có 2 vòng lặp xác định :
For := to do
For := downto do
Ví dụ 1 : Viết ra màn hình các số từ 50->24, mỗi số nằm trên 1 dòng
Var i:integer;
Begin
For i:=50 downto 24 do
Writeln(i);
Readln;
End.
Ví dụ 2 : Viết ra màn hình các chữ cái từ ‘a’->’z’ mỗi chữ cái cách nhau một dấu cách.
Var i:char;
Begin
For i:=’a’ to ‘z’ do
Write(I,’ ‘);
Readln;
End.
Câu 8 : So sánh repeat until và whiledo? Cho ví dụ
Giống nhau : Đều là vòng lặp không xác định
Khác nhau :
Repeatuntil
Whiledo
Repeat
;
Until ;
While do
Begin
;
End;
+ Thực hiện công việc cho đến khi biểu thức Boolean có giá trị TRUE.
+ Thực hiện công việc trước và thử điều kiện Boolean sau.
+ Chừng nào biểu thức boolean có giá trị TRUE thì thực hiện công việc.
+ Kiểm tra điều kiện Boolean trước sau đó mới thực hiện công việc.
S
Đ
KT
Biểu thức boolean
Công việc
BD
BD
Biểu thức boolean
S
Đ
Công việc
KT
Ví dụ : tính tổng các số từ 1->N
Repeatuntil
Whiledo
S:=0;i:=1;
While (i<=N) do
Begin
S:=S+i;
i:=i+1;
end;
S:=0;i:=1;
Repeat
S:=S+i;
i:=i+1;
Until i>N;
Chú ý :
+ Ngoài ra còn có các câu so sánh giữa vòng lặp for và while, giữa for và repeat.
+ Nêu các vòng lặp không các định
+ Cho một đoạn chương trình viết bằng vòng lặp for,while,repeat sau đó viết lại đoạn chương trình trên bằng vòng lặp khác. Ví dụ từ repeat viết lại bằng while
+ Dạng tiếp theo cho sơ đồ thuật toán và viết lại bằng vòng lặp
Câu 9 : Cách khai báo một mảng ? cho ví dụ
Mảng một chiều : có 2 cách khai báo
Gián tiếp
Type KieumangT=array[Kiểu chỉ dẫn] of kieuphantu;
Var A:KieumangT;
Ví dụ :
Type A=array[-3..7] of integer;
Var B:A;
Trực tiếp
Var A:array[Kiểu chỉ dẫn] of kiểu phần tử;
Ví dụ :
Var B:array[-3..7] of integer;
Mảng nhiều chiều (ở đây chỉ xét đến mảng 2 chiều) : Cách khai báo tương tự mảng 1 chiều
Gián tiếp
Type PT:array[1..5] of real;
Var MPT:array[1..3] of PT;
Trực tiếp
Var MPT:array[1..3,1..5] of real;
Câu 10 : Cách khai báo bản ghi ? cho ví dụ
Khai báo :
Type tenkieubanghi=record
S1:T1;
S2:T2;
..
Sn:Tn;
End;
Var bien:tenkieubanghi;
Trong đó : T1,T2,...Tn là các mô tả kiểu tương ứng
S1,S2,Sn là danh sách các trường
Ví dụ :
Type sinhvien=record
Ht:string[30];
Dt:array[1..20] of real;
DTB:real;
End;
Var sv:array[1..50] of sinhvien;
Câu 11 : Đưa ra các thủ tục để ghi dữ liệu cho tệp ? cho ví dụ
Mở tệp để ghi
Assign(bientep,tentep);
Rewrite(bientep);
Ghi các giá trị vào tệp
Write(Bientep,item1,item2,,itemN);
Đóng tệp
Close(bientep);
Ví dụ : Tạo một tệp chứa các số nguyên từ 1->100 ghi dưới dạng nguyen.dat
Var f:file of integer;
i:integer;
Begin
Assign(f,’nguyen.dat’);
Rewrite(f);
For i:=1 to n do
Write(f,i);
Close(f);
End.
Câu 12 : Đưa ra các thủ tục để đọc dữ liệu cho tệp ? cho ví dụ
Mở tệp để đọc
Assign(bientep,tentep);
Reset(bientep);
Đọc dữ liệu từ tệp
Read(bientep,var1,var2,,varN);
Đóng tệp
Close(bientep);
Ví dụ : Cho tệp nguyen.dat chứa các số nguyên. Đọc phần tử thứ nhất và phần từ thứ 3 gán vào 2 biến a và b
Var f:file of integer;
a,b:integer;
Begin
Assign(f,’nguyen.dat’);
Reset(f);
While not eof(f) do
Begin
Read(f,a,b,b);
End;
Close(f);
End.
Câu 13 : Đưa ra các thủ tục để ghi dữ liệu cho tệp văn bản ?
Mở tệp để ghi
Assign(bientep,tentep);
Rewrite(bientep);
Ghi các giá trị vào tệp
Write(bientep,item1,item2,,itemN);
Writeln(bientep,item1,item2,,itemN);
Writeln(bientep);
Đóng tệp
Close(bientep);
Câu 14 : Đưa ra các thủ tục để đọc dữ liệu cho tệp văn bản ?
Mở tệp để đọc
Assign(bientep,tentep);
Reset(bientep);
Đọc dữ liệu từ tệp
Read(bientep,var1,var2,,varN);
Readln(bientep,var1,var2,,varN);
Readln(bientep);
Đóng tệp
Close(bientep);
Câu 15 : Nêu các phép toán trong tập hợp ? cho ví dụ
Ví dụ : cho 2 tập
A:=[1..10,15..25];
B:=[8..17,24..31];
Có 6 phép toán trong tập hợp
Phép gán
Phép giao
C:=A*B=[8..10,15..17,24..25];
Phép hợp
C:=A+B=[1..31];
Phép hiệu
C:=A-B=[1..7,18..23];
C:=B-A=[11..14,26..31];
Phép thử thuộc về
4 in A = TRUE
Phép so sánh : >,,=
Không có phép so sánh >= hoặc <=
Ví dụ : A:=[3,4,5]; B:=[3,4,5] è A=B
Chú ý : Dạng đề bài cho 2 tập hợp A=[] và B=[] và bắt tìm tập C bằng các phép toán trên tập hợp thì chỉ có 3 phép toán : Hợp, giao, hiệu. Riêng đối với phép hiệu thì có hiệu của A cho B và hiệu của B cho A
C:=A*B
C:=A+B
C:=A-B
C:=B-A
Câu 16 : Trình bày cấu trúc chung (hoặc so sánh) của chương trình con dạng hàm và thủ tục ? cho ví dụ
Procedure
Function
Procedure tenthutuc(Khai bao cac tham so hinh thuc neu co);
{Khai báo các hằng, biến}
Begin
{Thân chương trình con}
End.
Function tenham(Khai bao cac tham so hinh thuc neu co):kiểu giá trị hàm;
{Khai báo các hằng, biến}
Begin
{Thân chương trình con}
End.
+ Không trả lại kết quả thông qua tên của nó.
+ Không thể viết trong các biểu thức.
+ Trả lại cho một giá trị kết quả vô hướng thông qua tên của nó.
+ Được sử dụng trong các biểu thức.
Ví dụ :
Procedure
Function
Procedure dientich(r:real;var dt:real);
Begin
dt:=3.14*r*r;
end;
Function dt(r:real):real;
Begin
dt:=3.14*r*r;
End;
+ Ngoài ra còn có các dạng bài tập như : viết chương trình tính chu vi và diện tích của một hình nào đó vd : hình chữ nhật, tam giác. Đối với bài tập dạng này nên viết chương trình con dạng hàm hoặc thủ tục có tham số.
Câu 17 : Phân biệt giữa tham biến và tham trị ? cho ví dụ
Ví dụ : Cho đoạn chương trình sau
Var bk,S,P:real;
Procedure dientich(r:real; var dt,cv:real);
Const PI=3.14;
Begin
dt:=PI*r*r;
cv:=PI*r*2;
End;
Begin
Write(‘Nhap ban kinh : ‘);readln(bk);
Dientich(bk,S,P);
Writeln(‘Dien tich la : ‘,S:6:1,’ Chu vi la : ‘,P:6:1);
End.
Trong đó : r là tham trị
Dt,cv là các tham biến
Cả r,dt,cv đều là các tham số hình thức
Cả bk,S,P đều là các tham số thực
Tham trị
Tham biến
+ là tham số hình thức trong phần tiêu đề của chương trình con không đặt sau từ khóa var.
+ Các tham số thực có thể là một biểu thức. Chúng có thể thay đổi trong chương trình con và khi ra khỏi chương trình con đó chúng không thay đổi giá trị.
+ là tham số hình thức trong phần tiêu đề của chương trình con được đặt sau từ khóa var.
+ Các tham số thực phải là các biến, không được phép là giá trị. Chúng có thể thay đổi trong chương trình con và khi ra khỏi chương trình con chúng giữ nguyên giá trị thay đổi đó.
+ Ngoài ra còn có dạng cho chương trình con xong sau đó đưa ra các trường hợp bỏ từ khóa var thì kết quả sẽ như thế nào
Câu 18 : Phân biệt biến toàn cục và biến địa phương ? cho ví dụ
Biến toàn cục
Biến địa phương
+ là các biến được khai báo trong chương trình chính, chúng có thể dung ở mọi nơi trong chương trình.
+ là các biến được khai báo trong chương trình con và nó chỉ có tác dụng trong phạm vi chương trình con đó. Khi chương trình con kết thúc thì biến này mất tác dụng.
+ Dạng tiếp theo là cho đoạn chương trình sau đó tìm kết quả khi chạy đoạn chương trình đó
Phần B: Bài tập
Bài 1 : Cho dãy x1,x2xn. Tính giá trị trung bình của dãy
var i,n : integer;
x:array[1..100] of real;
tong : real;
begin
write('n = ');readln(n);
for i:=1 to n do
begin
write('x[',i,']= ');
readln(x[i]);
end;
for i:=1 to n do
tong:=tong+x[i];
writeln('TB = ',tong/n);
readln;
end.
Bài 2 : Cho dãy x1,x2xn. Tác dãy trên thành 2 dãy : 1 dãy gồm các phần tử >=0, 1 dãy gồm các phần tử <0
var i,n,k,l : integer;
x,y,z : array[1..100] of real;
begin
write('Nhap n : ');readln(n);
for i:=1 to n do
begin
write('x[',i,'] = ');
readln(x[i]);
end;
for i:=1 to n do
if x[i]>=0 then
begin
k:=k+1;
y[k]:=x[i];
end
else
begin
l:=l+1;
z[l]:=x[i];
end;
Writeln('Day ca phan tu >=0 la :');
for i:=1 to k do
writeln('y[',i,'] = ',y[i]:4:1);
Writeln('Day ca phan tu <0 la :');
for i:=1 to l do
writeln('z[',i,'] = ',z[i]:4:1);
readln;
end.
Bài 3 : Cho dãy x1,x2xn. Sắp xếp dãy số sao cho phần tử >=0 về đầu, phần tử <0 về cuối, trật tự các phần tử không thay đổi
var i,n,k : integer;
x,y : array[1..100] of real;
begin
write('Nhap n : ');readln(n);
for i:=1 to n do
begin
write('x[',i,'] = ');
readln(x[i]);
end;
for i:=1 to n do
if x[i]>=0 then
begin
k:=k+1;
y[k]:=x[i];
end;
for i:=1 to n do
if x[i]<0 then
begin
k:=k+1;
y[k]:=x[i];
end;
for i:=1 to k do
writeln('y[',i,'] = ',y[i]:4:1);
readln;
end.
Bài 4 : Cho dãy x1,x2xn. Xóa phần tử xk
var i,n,k : integer;
x,y : array[1..100] of real;
begin
write('Nhap n : ');readln(n);
for i:=1 to n do
begin
write('x[',i,'] = ');
readln(x[i]);
end;
write('Nhap vi tri k :');readln(k);
for i:=k to n-1 do
x[i]:=x[i+1];
for i:=1 to n-1 do
writeln('x[',i,']= ',x[i]:4:1);
readln;
end.
Bài 5 : Cho dãy x1,x2xn. Chèn M vào vị trí k
Cách 1 :
var i,n,k,m : integer;
x,y : array[1..100] of real;
begin
write('Nhap n : ');readln(n);
for i:=1 to n do
begin
write('x[',i,'] = ');
readln(x[i]);
end;
write('Nhap vi tri k :');readln(k);
write('Nhap so can chen M :');readln(m);
for i:=1 to n+1 do
if i<k then
y[i]:=x[i]
else if i=k then
y[i]:=m
else
y[i]:=x[i-1];
for i:=1 to n+1 do
writeln('y[',i,']= ',y[i]:4:1);
readln;
end.
Cách 2 : Dino
uses crt;
var i,k,m,n:integer;
a:array[1..100] of integer;
Begin
clrscr;
write('Nhap so phan tu day: ');
readln(n);
For i:=1 to n do
begin
write('A[',i,']= ');
readln(a[i]);
end;
write('Nhap vi tri k: ');
readln(k);
write('Nhap so m: ');
readln(m);
for i:=n downto k do a[i+1]:=a[i];
a[k]:=m;
writeln('Day sau khi chen la: ');
for i:=1 to n+1 do write(a[i]:4);
readln;
End.
Bài 6 : Kiểu mảng - Cho bảng sau :
STT
Họ tên
Điểm
1
..
m
1..n
Tính điểm trung bình của từng sinh viên
Tìm ra những sinh viên có điểm trung bình cao nhất
Sắp xếp lại bảng trên theo trật tự tăng dần của điểm trung bình
Giải :
var n,m,i,j,k :integer;
ht:array[1..20] of string[20];
diem:array[1..20,1..10] of real;
tong,tb:array[1..20] of real;
tg,tg2,s,max:real;
tg1:string[20];
begin
write('Nhap n : ');readln(n);
write('Nhap m : ');readln(m);
for i:=1 to n do
begin
write('HTSV ',i,' la ');
readln(ht[i]);
for j:=1 to m do
begin
write('DT mon ',j,' la ');
readln(diem[i,j]);
end;
end;
for i:=1 to n do
begin
tong[i]:=0;
for j:=1 to m do
tong[i]:=tong[i]+diem[i,j];
tb[i]:=tong[i]/m;
end;
max:=tb[1];
for i:=1 to n do
if tb[i]>max then
max:=tb[i];
write('Danh sach cac hoc sinh co TB max bang ',max:6:1,' la :');
for i:=1 to n do
if tb[i]=max then
write(ht[i],', ');
for i:=1 to n-1 do
for k:=i+1 to n do
if tb[i]>tb[k] then
begin
tg:=tb[i];
tb[i]:=tb[k];
tb[k]:=tg;
tg1:=ht[i];
ht[i]:=ht[k];
ht[k]:=tg1;
for j:=1 to m do
begin
tg2:=diem[i,j];
diem[i,j]:=diem[k,j];
diem[k,j]:=tg2;
end;
end;
writeln('Danh sach sau khi sap xep la :');
for i:=1 to n do
begin
writeln;
write(ht[i]);
for j:=1 to m do
write(' ',diem[i,j]:4:1,' ');
end;
readln;
end.
Bài 7 : Cho ma trận Anxm, tính tổng từng hàng, từng cột của ma trận
var i,m,n,j : integer;
a:array[1..10,1..10] of real;
b1:array[1..10] of real;
b2:array[1..10] of real;
begin
write('Nhap so hang : ');readln(n);
write('Nhap so cot : ');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
for i:=1 to n do
b1[i]:=0;
for i:=1 to m do
b2[i]:=0;
for i:=1 to n do
for j:=1 to m do
begin
b1[i]:=b1[i]+a[i,j];
b2[j]:=b2[j]+a[i,j];
end;
for i:=1 to n do
begin
writeln;
for j:=1 to m do
write(a[i,j]:4:1,' ');
end;
writeln;
writeln('Tong tung hang la : ');
for i:=1 to n do
writeln('Hang ',i,'= ',b1[i]:4:1);
writeln('Tong tung cot la : ');
for j:=1 to m do
writeln('Cot ',j,'= ',b2[j]:4:1);
readln;
end.
Bài 8 : Cho ma trận Anxm, xóa hàng thứ k của ma trận.
var i,m,n,k,j:integer;
a:array[1..100,1..100] of real;
begin
write('Nhap so hang :');readln(n);
write('Nhap so cot :');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
write('Nhap hang can xoa :');readln(k);
for j:=1 to m do
for i:=k to n-1 do
a[i,j]:=a[i+1,j];
for i:=1 to n-1 do
for j:=1 to m do
writeln('a[',i,',',j,']= ',a[i,j]:4:1);
readln;
end.
Bài 9 : Cho ma trận Anxm tìm giá trị lớn nhất của ma trận, xóa hàng đầu tiên chứa giá trị lớn nhất đó.
var n,m,i,j,max,k : integer;
x:array[1..10,1..10] of integer;
begin
write('Nhap n : ');readln(n);
write('Nhap m : ');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('x[',i,',',j,']= ');
readln(x[i,j]);
end;
k:=1; max:=x[1,1];
for i:=1 to n do
for j:=1 to m do
if x[i,j]>max then
begin
max:=x[i,j];
k:=i;
end;
for j:=1 to m do
for i:=k to n-1 do
x[i,j]:=x[i+1,j];
for i:=1 to n-1 do
begin
writeln;
for j:=1 to m do
write(x[i,j],' ') ;
end;
readln;
end.
Bài 10: Cho ma trận Anxm tìm giá trị lớn nhất của ma trận, xóa cột đầu tiên chứa giá trị lớn nhất đó.
var i,j,m,n,k,max:integer;
a:array[1..10,1..10] of integer;
begin
write('Nhap n : ');readln(n);
write('Nhap m : ');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
k:=1; max:=a[1,1];
for j:=1 to m do
for i:=1 to n do
if a[i,j]>max then
begin
max:=a[i,j];
k:=j;
end;
for i:=1 to n do
for j:=k to m-1 do
a[i,j]:=a[i,j+1];
for i:=1 to n do
begin
writeln;
for j:=1 to m-1 do
write(a[i,j],' ');
end;
readln;
end.
Bài 11: Cho ma trận Anxm và vecto B[b1,b2,,bn] (có n phần tử) tìm giá trị nhỏ nhất của ma trận, chèn vecto B vào cột cuối cùng chứa giá trị nhỏ nhất đó
var i,j,k,n,m:integer;
a : array[1..50,1..50] of real;
y : array[1..50,1..50] of real;
b:array[1..100] of real;
min:real;
begin
write('Nhap so hang: ');readln(n);
write('Nhap so cot : ');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
min:=a[1,1];
for i:=1 to n do
for j:=1 to m do
if min>a[i,j] then
min:=a[i,j];
writeln('Gia tri nho nhat la : ',min:4:1);
for j:=1 to m do
for i:=1 to n do
if min=a[i,j] then
k:=j;
writeln('vi tri cuoi cung o cot :',k);
writeln('Nhap ma tran vecto B');
for i:=1 to n do
begin
write('b[',i,']= ');
readln(b[i]);
end;
for i:=1 to n do
for j:=1 to m+1 do
if j<k+1 then
y[i,j]:=a[i,j]
else if j=k+1 then
y[i,j]:=b[i]
else
y[i,j]:=a[i,j-1];
for i:=1 to n do
begin
writeln;
for j:=1 to m+1 do
write(y[i,j]:4:1,' ');
end;
readln;
end.
Bài 12: Cho ma trận Anxm và vecto B[b1,b2,,bm] (có m phần tử). Chèn vecto B vào hàng thứ k
var i,j,k,n,m:integer;
a : array[1..50,1..50] of real;
y : array[1..50,1..50] of real;
b:array[1..100] of real;
begin
write('Nhap so hang: ');readln(n);
write('Nhap so cot : ');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
write('Nhap vi tri hang can chen : ');
readln(k);
If (1<=k) and (k<=n+1) then
begin
writeln('Nhap ma tran vecto B');
for i:=1 to m do
begin
write('b[',i,']= ');
readln(b[i]);
end;
for j:=1 to m do
for i:=1 to n+1 do
if i<k then
y[i,j]:=a[i,j]
else if i=k then
y[i,j]:=b[j]
else
y[i,j]:=a[i-1,j];
for i:=1 to n+1 do
begin
writeln;
for j:=1 to m do
write(y[i,j]:4:1,' ');
end;
end
else
writeln('K ko co thuoc hang can chen ');
readln;
end.
Bài 13: Cho ma trận Anxm tìm tổng phần tử dương trong tam giác trên và tích các phần tử âm trong tam giác dưới. So sánh tổng và tích
var i,j,n,k:integer;
a:array[1..50,1..50] of real;
tong,tich:real;
begin
write('Nhap so hang ma tran NxN : ');
readln(n);
for i:=1 to n do
for j:=1 to n do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
tong:=0;
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i,j]>=0 then
tong:=tong+a[i,j];
tich:=1;
for i:=2 to n do
for j:=1 to i-1 do
if a[i,j]<0 then
k:=k+1;
if k=0 then
tich:=0
else
for i:=2 to n do
for j:=1 to i-1 do
if a[i,j]<0 then
tich:=tich*a[i,j];
for i:=1 to n do
begin
writeln;
for j:=1 to n do
write(a[i,j]:4:1,' ');
end;
writeln;
writeln('tich cac pt am tam giac duoi la : ',tich:4:1);
writeln('tong cac pt tam giac tren la : ',tong:4:1);
if tong>tich then
writeln(' Tong lon hon tich')
else if tong=tich then
writeln(' Tong bang tich ')
else
writeln('Tong be hon tich');
readln;
end.
Bài 14 : Kiểu bản ghi - Cho bảng sau :
STT
Họ tên
Điểm danh
1
..
m
1n
Đếm số buổi đi học, nghỉ học có phép, nghỉ học không phép
Đưa ra những sinh viên không được thi biết điều kiện không được thi là số buổi nghỉ học không phép >= 20%m
Giải : (Dino)
uses crt;
type sinhvien=record
ten:string[20];
dd:array[1..20] of char;
dh,cp,kp:integer;
tt:string[15];
end;
var m,n,i,j:integer;
sv:array[1..100] of sinhvien;
Begin
clrscr;
write('Nhap so hoc sinh: ');
readln(n);
write('Nhap so buoi hoc: ');
readln(m);
writeln('Nhap thong tin di hoc cua tung sinh vien:');
for i:=1 to n do
with sv[i] do
begin
writeln('Hoc sinh thu ',i);
write('Ho ten: ');
readln(ten);
dh:=0;
kp:=0;
cp:=0;
for j:=1 to m do
begin
write('Buoi ',j,': ');
readln(dd[j]);
if dd[j]='k' then kp:=kp+1
else if dd[j]='p' then cp:=cp+1
else dh:=dh+1;
end;
end;
writeln('Danh sach thong tin di hoc cua sinh vien la: ');
writeln('STT':4,'Ho ten':20,'Di hoc':8,'Khong phep':12,'Co phep':9,'Trang thai':18);
for i:=1 to n do
with sv[i] do
begin
write(i:4,ten:20,dh:8,kp:12,cp:9);
if kp/m>0.2 then write('Khong duoc thi':18)
else write('Duoc thi':18);
writeln;
end;
readln;
End.
Bài 15 : Cho trước tệp văn bản TEN.TXT ghi họ tên sinh viên của một lớp, trong đó họ tên mỗi người chiếm 1 dòng và tệp văn bản DIEMDANH.TXT ghi kết quả điểm danh của mỗi người theo quy tắc :
+ Có mặt đánh dấu “c”; vắng có lý do “v”; vắng không lý do “k”
+ Đánh dấu điểm danh của mỗi sinh viên được ghi liên tiếp trên 1 dòng
Vẽ sơ đồ thuật toán và viết chương trình pascal để
Thống kê số buổi đi học, số buổi vắng (có và không lý do) đối với từng sinh viên.
Lập danh sách những sinh viên đi học chăm chỉ nhất (có số buổi có mặt cao nhất) và hãy cho biết co bao nhiêu sinh viên như thế.
Kết quả ghi vào tệp ketqua.txt theo quy cách sau
Mỗi sinh viên chiếm 1 dòng gồm các thông tin
STT(2 dấu cách)họ tên sv(2 dấu cách)số buổi có mặt(2 dấu cách)số buổi vắng mặt có lý do(2 dấu cách)số buổi vắng mặt không lý do
Các dòng tiếp theo : Họ tên sinh viên chăm chỉ nhất (họ tên mỗi sinh viên viết trên 1 dòng)
Dòng cuối cùng : số sinh viên đi học chăm chỉ nhất
Giải :
type sinhvien=record
ht:string[30];
diemdanh:array[1..10] of char;
dh:integer;
nh:integer;
cp:integer;
end;
var sv:array[1..20] of sinhvien;
sv1:array[1..20] of sinhvien;
i,j,m,n,k,t,max:integer;
f1,f2,f3:Text;
begin
assign(f1,'ten.txt');
reset(f1);
i:=0;
while not eof(f1) do
begin
i:=i+1;
readln(f1,sv[i].ht);
end;
n:=i;
close(f1);
assign(f2,'diemdanh.txt');
reset(f2);
i:=0;
while not eof(f2) do
begin
i:=i+1;
j:=0;
while not eoln(f2) do
begin
j:=j+1;
read(f2,sv[i].diemdanh[j]);
end;
readln(f2);
end;
m:=j;
close(f2);
for i:=1 to n do
begin
sv[i].dh:=0;
sv[i].cp:=0;
sv[i].nh:=0;
for j:=1 to m do
if sv[i].diemdanh[j]='c' then
sv[i].dh:=sv[i].dh+1
else if sv[i].diemdanh[j]='v' then
sv[i].cp:=sv[i].cp+1
else
sv[i].nh:=sv[i].nh+1;
end;
max:=sv[1].dh;
for i:=1 to n do
if sv[i].dh>max then
max:=sv[i].dh;
for i:=1 to n do
if sv[i].dh=max then
begin
t:=t+1;
sv1[t]:=sv[i];
end;
write('Thong ke so buoi di hoc cua sinh vien');
for i:=1 to n do
begin
writeln;
write(i,' ',sv[i].ht:10,' ');
for j:=1 to m do
write(sv[i].diemdanh[j],' ');
write(sv[i].dh,' ',sv[i].nh,' ',sv[i].cp);
end;
writeln;
write('Co ',t,' sinh vien di hoc cham chi nhat : ');
for i:=1 to t do
begin
writeln;
write(i,' ',sv1[i].ht:10);
end;
assign(f3,'ketqua.txt');
rewrite(f3);
for i:=1 to n do
begin
write(f3,i,' ',sv[i].ht:10,' ');
write(f3,sv[i].dh:1,' ',sv[i].cp:1,' ',sv[i].nh:1);
writeln(f3);
end;
for k:=1 to t do
writeln(f3,sv1[k].ht);
write(f3,'so sv di hoc cham chi nhat la : ',t);
close(f3);
readln;
end.
Bài 16 : Cho trước tệp văn bản TEN.TXT ghi họ tên các chủ hộ của một phường, trong đó mỗi dòng ghi họ tên của một chủ hộ và tệp văn bản SODIEN.TXT ghi số lượng điện các hộ tiêu thụ trong tháng, trong đó số lượng điện tiêu thụ của mỗi hộ ghi trên 1 dòng, số lượng điện các tháng ghi cách nhau 1 dấu cách
Vẽ sơ đồ thuật toán và viết chương trình pascal để :
Tính số lượng điện trung bình hàng tháng của mỗi hộ
Lập danh sách các hộ trong phường có số điện tiêu thụ trung bình hàng tháng là ít nhất
Kết quả ghi vào tệp văn bản KETQUA.TXT theo quy cách sau :
Mỗi hộ gia đình chiếm 1 dòng gồm các thông tin sau:
STT(2 dấu cách)Họ tên chủ hộ(2 dấu cách)Số lượng điện trung bình hàng tháng của hộ
Dòng tiếp theo : Số điện tiêu thụ trung bình ít nhất trong phường
Các dòng tiếp theo : Họ tên các chủ hộ có số lượng điện tiêu thụ trung bình hàng tháng ít nhất, họ tên mỗi chủ hộ viết trên 1 dòng
Giải :
type chuho=record
ht:string[30];
sodien:array[1..12] of real;
tb:real;
end;
var ch:array[1..50] of chuho;
ch1:array[1..50] of chuho;
i,j,m,n,t,k:integer;
min,tong:real;
f1,f2,f3:text;
begin
assign(f1,'ten.txt');
reset(f1);
i:=0;
while not eof(f1) do
begin
i:=i+1;
readln(f1,ch[i].ht);
end;
n:=i;
close(f1);
assign(f2,'sodien.txt');
reset(f2);
i:=0;
while not eof(f2) do
begin
i:=i+1;
j:=0;
while not eoln(f2) do
begin
j:=j+1;
read(f2,ch[i].sodien[j]);
end;
readln(f2);
end;
m:=j;
close(f2);
for i:=1 to n do
begin
tong:=0;
for j:=1 to m do
tong:=tong+ch[i].sodien[j];
ch[i].tb:=tong/m;
end;
min:=ch[1].tb;
for i:=1 to n do
if ch[i].tb<min then
min:=ch[i].tb;
t:=0;
for i:=1 to n do
if ch[i].tb=min then
begin
t:=t+1;
ch1[t]:=ch[i];
end;
assign(f3,'ketquatiendien.txt');
rewrite(f3);
for i:=1 to n do
begin
write(f3,i,' ',ch[i].ht:10,' ');
write(f3,ch[i].tb:3:1);
writeln(f3);
end;
writeln(f3,'so dien tieu thu it nhat trong phuong la : ',min:3:1);
writeln(f3,'Ten cac chu ho co luong dien tieu thu it nhat la :');
for k:=1 to t do
writeln(f3,k,' ',ch1[k].ht:10);
close(f3);
readln;
end.
Bài 17 : Vẽ sơ đồ thuật toán và viết chương trình Pascal thực hiện các công việc cho bài toán sau :
Cho một danh sách lớp :
TT
Họ tên
Kết quả học tập
Phân loại
Một chương trình con nhập danh sách, chỉ nhập tt, kết quả học tập, còn phân loại tính theo công thức :
Phân loại bằng A nếu kết quả học tập >=8
Phân loại bằng B nếu kết quả học tập >=6
Phân loại bằng C nếu kết quả học tập >=5
Phân loại bằng D nếu kết quả học tập >=4
Phân loại bằng E nếu kết quả học tập < 4
Ghi danh sách ra tệp
Mở tệp, đọc dữ liệu vào bộ nhớ trong
Một chương trình con sắp xếp lại danh sách tăng dần theo cột phân loại
Hiện lại danh sách sau khi sắp xếp
Giải :
program bailam;
uses crt;
type sinhVien=record
hoTen: string[50];
ketQua: real;
loai: char;
end;
var sv: array[1..100] of sinhVien;
n: integer;
procedure nhap;
var i,m: integer;
f: file of sinhVien;
ds: array[1..100] of sinhVien;
begin
{= Nhap danh sach sinh vien =}
write('Nhap so sinh vien: ');
readln(m);
writeln('Nhap thong tin sinh vien:');
for i:=1 to m do
with ds[i] do
begin
writeln('* Sinh vien thu ',i);
write('Ho ten: ');
readln(hoTen);
write('Ket qua hoc tap: ');
readln(ketQua);
if ketQua>=8 then loai:='A'
else if ketQua>=6 then loai:='B'
else if ketQua>=5 then loai:='C'
else if ketQua>=4 then loai:='D'
else loai:='E';
end;
{= Ghi danh sach ra tep DANHSACH.INP =}
assign(f,'DANHSACH.inp');
rewrite(f);
for i:=1 to m do
write(f,ds[i]);
close(f);
end;
procedure doc;
var i: integer;
f: file of sinhVien;
begin
{= Doc du lieu tu tep DANHSACH.INP =}
assign(f,'DANHSACH.inp');
reset(f);
i:=0;
while not eof(f) do
begin
i:=i+1;
read(f,sv[i]);
end;
n:=i;
end;
procedure sapXep;
var i,j: integer;
tg: sinhVien;
begin
{= Sap xep danh sach =}
for i:=1 to n-1 do
for j:=i+1 to n do
if sv[i].loai > sv[j].loai then
begin
tg:=sv[i];
sv[i]:=sv[j];
sv[j]:=tg;
end;
end;
procedure hienThi;
var i: integer;
begin
for i:=1 to n do
with sv[i] do
writeln(i,' ',hoTen:30,' ',ketQua:6:2,' ',loai:3);
end;
begin
clrscr;
nhap;
doc;
sapXep;
hienThi;
readln
end.
Bài 18: Cho ma trận Anxm, vẽ sơ đồ thuật toán và viết chương trình có sử dụng chương trình con để thực hiện :
Một chương trình con nhập mảng A, ghi ra tệp
Mở lại tệp, đọc dữ liệu vào bộ nhớ trong
Một chương trình con sắp xếp từng hàng của ma trận A theo thứ tự tăng dần
Một chương trình con hiện ma trận đã sắp xếp ra màn hình và ghi ra tệp.
Giải :
var a,b:array[1..10,1..10] of real;
i,j,m,n,k,t,l:integer;
f1,f2,f3:text;
tg:real;
procedure nhap;
begin
write('Nhap n : ');readln(n);
write('Nhap m : ');readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('a[',i,',',j,']= ');
readln(a[i,j]);
end;
assign(f1,'abc.txt');
rewrite(f1);
for i:=1 to n do
begin
for j:=1 to m do
if j<m then
write(f1,a[i,j]:4:1,' ')
else
write(f1,a[i,j]:4:1);
writeln(f1);
end;
close(f1);
writeln('Ma tran ghi ra la ');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4:1,' ');
writeln;
end;
end;
procedure doc;
begin
assign(f2,'abc.txt');
reset(f2);
i:=0;
while not eof(f2) do
begin
i:=i+1;
j:=0;
while not eoln(f2) do
begin
j:=j+1;
read(f2,b[i,j])
end;
readln(f2)
end;
t:=i;k:=j;
close(f2);
writeln;
write('Ma tran doc vao la ');
for i:=1 to t do
begin
writeln;
for j:=1 to k do
write(b[i,j]:4:1,' ');
end;
end;
procedure sapxep;
begin
for i:=1 to t do
for j:=1 to k-1 do
for l:=j+1 to k do
if b[i,j]>b[i,l] then
begin
tg:=b[i,j];
b[i,j]:=b[i,l];
b[i,l]:=tg;
end;
end;
procedure hienra;
begin
writeln;
writeln('Ma tran sau khi sap xep la :');
for i:=1 to t do
begin
for j:=1 to k do
write(b[i,j]:4:1);
writeln;
end;
assign(f3,'Kq.txt');
rewrite(f3);
for i:=1 to t do
begin
for j:=1 to k do
write(f3,b[i,j]:4:1);
writeln(f3);
end;
close(f3);
end;
begin
nhap;
doc;
sapxep;
hienra;
readln;
end.
Bài 19: Kết quả thi học kỳ của một lớp sinh viên được cho trong 2 tệp văn bản: một tệp hoten.txt chứa họ và tên của các sinh viên của một lớp trong đó họ tên mỗi sinh viên chiếm một dòng và tệp văn bản diem.txt ghi điểm trung bình (DTB) của mỗi sinh viên, trong đó điểm của mỗi sinh viên ghi trên một dòng.
Viết chương trình để:
Tìm xếp loại của từng sinh viên biết
Nếu DTB>=9, sinh viên sẽ xếp loại “xuat sac”
Nếu 8<=DTB<9, sinh viên sẽ xếp loại “Gioi”
Nếu 7<=DTB<8, sinh viên sẽ xếp loại “Kha”
Nếu DTB<7, sinh viên sẽ xếp loại “Trung binh”
Tìm học bổng của từng sinh viên biết
Nếu DTB>=9, sinh viên sẽ được học bổng 240000
Nếu 8<=DTB<9, sinh viên sẽ được học bổng 180000
Nếu 7<=DTB<8, sinh viên sẽ được học bổng 120000
Nếu DTB<7, sinh viên sẽ không được học bổng
Sắp xếp lại bảng trên theo trật tự giảm dần của điểm trung bình. Đưa kết quả ra màn hình và ra file ketqua.txt dưới dạng sau
+ dòng 1 : KẾT QUẢ THI HỌC KỲ CỦA LỚP
+ dòng 2 trở đi mỗi dòng ghi: STT, 2 dấu cách, Họ tên, 2 dấu cách, điểm trung bình, 2 dấu cách, Xếp loại, 2 dấu cách, Học bổng của từng sinh viên
Giải:
program bailam;
uses crt;
type sinhvien=record
ht: string[50];
dtb: real;
xepLoai: string[20];
hocBong: longint;
end;
var sv: array[0..100] of sinhvien;
tg: sinhvien;
d, i, j, m, n: integer;
f: text;
begin
clrscr;
{===Lay du lieu tu tep====}
assign(f,'hoten.txt');
reset(f);
n:=0;
while (not eof(f)) do
begin
inc(n);
readln(f,sv[n].ht);
end;
close(f);
assign(f,'diem.txt');
reset(f);
for i:=1 to n do
readln(f,sv[i].dtb);
close(f);
{=== Xep Loai va Tinh Hoc Bong ===}
for i:=1 to n do
with sv[i] do
if dtb>=9 then
begin
xepLoai:='Xuat Sac';
hocBong:=240000;
end
else if dtb>=8 then
begin
xepLoai:='Gioi';
hocBong:=180000;
end
else if dtb>=7 then
begin
xepLoai:='Kha';
hocBong:=120000;
end
else
begin
xepLoai:='Trung Binh';
hocBong:=0;
end;
{=== Sap Xep ===}
for i:=1 to n-1 do
for j:=i+1 to n do
if sv[i].dtb<sv[j].dtb then
begin
tg:=sv[i];
sv[i]:=sv[j];
sv[j]:=tg;
end;
{=== In Ket Qua Ra File ===}
assign(f,'ketqua.txt');
rewrite(f);
writeln(f,'KET QUA THI HOC KY CUA LOP:');
for i:=1 to n do
with sv[i] do
writeln(f,i:3,' ',ht:20,' ',dtb:6:1,xepLoai:15,' ',hocBong);
close(f);
{===Dua ket qua ra man hinh===}
writeln('KET QUA THI HOC KY CUA LOP:');
for i:=1 to n do
with sv[i] do
writeln(i:3,' ',ht:20,' ',dtb:6:1,xepLoai:15,' ',hocBong);
readln
end.
Bài 20: Viết chương trình con tính chu vi, diện tích của đường tròn, hình chữ nhật, tam giác
var r,s,cv,dai,rong,s1,cv1,s2,cv2,t1,t2,t3:real;
procedure tamgiac(x1,x2,x3:real;var CVtg,Stg:real);
begin
CVtg:=x1+x2+x3;
Stg:=sqrt(CVtg/2*(CVtg/2-x1)*(CVtg/2-x2)*(CVtg/2-x3));
writeln('Chu vi tam giac la : ',CVtg:6:1);
writeln('Dien tich tam giac la : ',Stg:6:1);
end;
procedure hcn(a:real;b:real;var Scn,CVcn:real);
begin
Scn:=a*b;
CVcn:=a+b;
writeln('Dien tich chu nhat la : ',Scn:6:1);
writeln('Chu vi chu nhat la : ',CVcn:6:1);
end;
procedure DT(bk:real;var DT,Chv:real);
begin
Chv:=3.14*bk*2;
dt:=3.14*bk*bk;
writeln('Chu vi duong tron la : ',Chv:6:1);
writeln('Dien tich duong tron la : ',DT:6:1);
end;
begin
write('Nhap ban kinh duong tron : ');readln(r);
DT(r,s,cv);
write('Nhap chieu rong hcn : ');readln(rong);
write('Nhap chieu dai hcn : ');readln(dai);
hcn(dai,rong,s1,cv1);
write('Nhap canh thu 1 : ');readln(t1);
write('Nhap canh thu 2 : ');readln(t2);
write('Nhap canh thu 3 : ');readln(t3);
tamgiac(t1,t2,t3,cv2,s2);
readln;
end.
Bài 21: Ngân hàng muốn được cung cấp một phần mềm mô phỏng hoạt động của máy ATM, các thông tin cần quản lý như sau : Số PIN, số tài khoản, họ và tên, CMTND, ngày làm thẻ, số dư. Hãy khai báo kiểu bản ghi (Record) chứa các thành phần nêu trên. Lập sơ đồ thuật toán và viết chương trình bằng ngôn ngữ lập trình pascal thực hiện các yêu cầu sau :
Chương trình điều khiển (Chương trình chính)
Một chương trình con để nhập dữ liệu thông tin khách hàng từ bàn phím vào máy
Một chương trình con lấy thông tin số dư tài khoản hiển thị kết quả lên màn hình với số PIN được nhập từ bàn phím
Một chương trình con để rút tiền ra từ tài khoản theo quy trình :
Yêu cầu nhập số PIN
Nếu đúng số PIN, thì yêu cầu nhập số tiền cần rút. Nếu số tiền cần rút nhỏ hơn hoặc bằng số dư thì trừ tiền trong số dư đúng bằng số tiền cần rút.
Thông báo giao dịch thành công
Giải :
type atm=record
sopin:integer;
sotk:integer;
hoten:string[20];
cmtnd:string[10];
ngaylamthe:string[20];
sodu:real;
end;
var kh:array[1..50] of atm;
i,j,n,PIN,k,PIN1,t,dem,dem1:integer;
sotien:real;
procedure nhap;
begin
write('Nhap so khach hang : ');readln(n);
for i:=1 to n do
begin
write('Nhap so pin cua KH thu ',i,' : ');readln(kh[i].sopin);
write('Nhap so tai khoan cua KH thu ',i,' : ');readln(kh[i].sotk);
write('Nhap ho ten cua khach hang thu ',i,' : ');readln(kh[i].hoten);
write('Nhap so cmtnd cua KH thu ',i,' : ');readln(kh[i].cmtnd);
write('Nhap ngay lam the cua KH thu ',i,' : ');readln(kh[i].ngaylamthe);
write('Nhap so du tai khoan cua KH thu ',i,' : ');readln(kh[i].sodu);
end;
end;
procedure laythongtin;
begin
writeln;
writeln('Chuong trinh con lay tong tin khach hang tu so PIN');
write('Nhap so pin tai khoan : ');readln(PIN);
dem:=0;
for i:=1 to n do
if PIN=kh[i].sopin then
begin
k:=i;
dem:=dem+1;
end;
if dem0 then
writeln('So du cua tai khoan la : ',kh[k].sodu:8:1)
else
writeln('Khong co tai khoan nao co so PIN nhu vay');
end;
procedure ruttien;
begin
writeln('Chuong trinh con rut tien');
write('Nhap so pin tai khoan : ');readln(PIN1);
dem1:=0;
for i:=1 to n do
if PIN1=kh[i].sopin then
begin
t:=i;
dem1:=dem1+1;
end;
if dem10 then
begin
write('Nhap so tien can rut : ');readln(sotien);
if sotien<=kh[t].sodu then
begin
kh[t].sodu:=kh[t].sodu-sotien;
writeln('So tien con lai cua quy khach la : ',kh[t].sodu:8:1);
writeln('Giao dich thanh cong');
end
else
writeln('So tien lon hon so du trong tai khoan');
writeln('Giao dich ko thanh cong');
end
else
writeln('Khong co so PIN nay');
end;
begin
nhap;
laythongtin;
ruttien;
readln;
end.
Bài 22: Lập sơ đồ thuật toán và viết chương trình bằng ngôn ngữ lập trình Pascal để tính tổng mảng hai chiều số thực bằng cách viết các chương trình con sau :
Nhập số liệu cho mảng hai chiều từ bàn phím
Xuất kết quả mảng hai chiều ra màn hình theo dạng ma trận
Tính tổng mảng hai chiều
Nội dung chương trình chính gồm :
Nhập số liệu cho mảng thứ nhất rồi nhập số liệu cho mảng thứ hai
Xuất kết quả mảng thứ nhất rồi xuất kết quả mảng thứ hai (ra màn hình)
Tính tổng 2 mảng trên rồi xuất kết quả ra màn hình
Giải : (Dino)
uses crt;
type mang=array[1..100,1..100] of integer;
var a,b,t:mang;
i,j,m,n,m1,n1:integer;
Procedure nhap(var c:mang);
Begin
for i:=1 to m do
for j:=1 to n do
begin
write('PT[',i,',',j,']= ');
readln(c[i,j]);
end;
end;
Procedure xuat(var c:mang);
Begin
for i:=1 to m do
begin
for j:=1 to n do write(c[i,j]:4);
writeln;
end;
end;
Procedure tong;
Begin
for i:=1 to m do
for j:=1 to n do
t[i,j]:=a[i,j]+b[i,j];
End;
Begin
clrscr;
write('Nhap so hang ma tran: ');
readln(m);
write('Nhap so cot ma tran: ');
readln(n);
writeln('Nhap ma tran thu nhat: ');
nhap(a);
writeln('Nhap ma tran thu hai: ');
nhap(b);
writeln('Ma tran thu nhat la: ');
xuat(a);
writeln('Ma tran thu hai la: ');
xuat(b);
tong;
writeln('Tong cua hai ma tran la: ');
xuat(t);
readln;
End.
Bài 23: Cho danh sách các chủ hộ sử dụng điện, mỗi chủ hộ biết các thông tin : Mã số, họ tên, địa chỉ, điện thoại, loại hợp đồng (SH:sinh hoạt, SX:sản xuất, KD: kinh doanh), ngày ký hợp đồng. Hãy lập thuật toán và viết chương trình bằng ngôn ngữ lập trình pascal (dùng cấu trúc bản ghi) để thực hiện các yêu cầu sau đây :
Nhập dữ liệu đã cho vào máy từ bàn phím
Tìm số hộ của mỗi loại hợp đồng và tách danh sách trên thành ba danh sách tương ứng với mỗi loại hợp đồng : SH, SX và KD.
Đưa kết quả tìm được ra màn hình.
Giải : (Dino)
uses crt;
type hodan=record
maso:string[15];
ten,diachi:string[20];
dt,hd,ngay:string[15];
end;
var ho:array[1..100] of hodan;
m,i,demsh,demsx,demkd:integer;
Begin
Clrscr;
write('Nhap so ho dan: ');
readln(m);
writeln('Nhap thong tin cac ho dan: ');
demsh:=0; demsx:=0; demkd:=0;
for i:=1 to m do
with ho[i] do
begin
writeln('Ho thu ',i);
write('Ma so: ');
readln(maso);
write('Ho ten: ');
readln(ten);
write('Dia chi');
readln(diachi);
write('Dien thoai: ');
readln(dt);
write('Loai hop dong: ');
readln(hd);
write('Ngay dang ky: ');
readln(ngay);
if hd='kd' then demkd:=demkd+1
else
if hd='sx' then demsx:=demsx+1
else
if hd='sh' then demsh:=demsh+1;
end;
writeln('So ho hop dong kinh doanh la: ',demkd);
writeln('So ho hop dong san xuat la: ',demsx);
writeln('So ho hop dong sinh hoat la: ',demsh);
writeln('Hop dong':10,'Ten chu ho':20,'Dia chi':20,'SDT':12);
write('Sinh hoat':10);
for i:=1 to m do
with ho[i] do
if hd='sh' then
begin
write(ten:20,diachi:20,dt:12);
writeln;
end;
writeln('______________________________________________________________');
write('Kinh doanh':10);
for i:=1 to m do
with ho[i] do
if hd='kd' then
begin
write(ten:20,diachi:20,dt:12);
writeln;
end;
writeln('______________________________________________________________');
write('San xuat':10);
for i:=1 to m do
with ho[i] do
if hd='sx' then
begin
write(ten:20,diachi:20,dt:12);
writeln;
end;
readln;
End.
Bài 24: Cho bảng N môn học
TT
Tên môn học
Lý thuyết
Bài tập
Tổng số
Vẽ sơ đồ thuật toán và viết chương trình pascal có sử dụng kiểu mảng các bản ghi để thực hiện :
Nhập mảng (TT, tên môn học, giờ lý thuyết, giờ bài tập) từ bàn phím, tính tổng số giờ bằng số tiết lý thuyết cộng số tiết bài tập, ghi nội dung bảng ra tệp
Mở lại tệp, đọc dữ liệu vào bộ nhớ trong
Tính tổng cột giờ lý thuyết, tổng cột giờ bài tập, tổng cột giờ tổng số
Tính phần trăm của tổng số giờ bài tập, tổng số giờ lý thuyết so với tổng toàn bộ số giờ
Hiện các kết quả ra màn hình và đưa ra tệp
Giải : (Dino)
uses crt;
type monhoc = record
stt:integer;
ten:string[30];
lt:integer;
th:integer;
ts:integer;
end;
var mon:array[1..100] of monhoc;
m,i, tonglt,tongth,tong:integer;
f1:file of monhoc;
f2:text;
ptlt,ptth:real;
Begin
Clrscr;
write('Nhap so mon hoc: ');
readln(m);
writeln('Nhap thong tin tung mon hoc: ');
assign(f1,'dulieu1.txt');
rewrite(f1);
for i:=1 to m do
begin
with mon[i] do
begin
writeln('Mon thu: ',i);
write('Ten mon hoc: ');
readln(ten);
write('So gio ly thuyet: ');
readln(lt);
write('So gio thuc hanh: ');
readln(th);
ts:=lt+th;
end;
write(f1,mon[i]);
end;
Reset(f1);
for i:=1 to m do read(f1,mon[i]);
tonglt:=0 ;
tongth:=0;
For i:=1 to m do
begin
tonglt:=tonglt+mon[i].lt;
tongth:=tongth+mon[i].th;
end;
tong:=tonglt+tongth;
ptlt:=(tonglt/tong)*100 ;
ptth:=(tongth/tong)*100;
assign(f2,'dulieu2.txt');
rewrite(f2);
writeln('Tong cot so gio ly thuyet la: ',tonglt:3);
writeln('Tong cot so gio thuc hanh la: ',tongth:3);
writeln('Tong cot gio tong so la: ',tong:3);
writeln('So phan tram ly thuyet:',ptlt:3:1,'%');
writeln('So phan tram thuc hanh:',ptth:3:1,'%');
writeln(f2,'Tong cot so gio ly thuyet la: ',tonglt:3);
writeln(f2,'Tong cot so gio thuc hanh la: ',tongth:3);
writeln(f2,'Tong cot gio tong so la: ',tong:3);
writeln(f2,'So phan tram ly thuyet:',ptlt:3:1,'%');
writeln(f2,'So phan tram thuc hanh:',ptth:3:1,'%');
close(f1); close(f2);
readln;
End.
Bài 25: Một cửa hàng sách quản lý sách với các thông tin sau :
Mã sách, tên sách, tên tác giả, thể loại, năm xuất bản, số lượng. Hãy khai báo kiểu bản ghi các thành phần nêu trên. Lập sơ đồ thuật toán và viết chương trình bằng ngôn ngữ lập trình pascal thực hiện các công việc sau :
Nhập dữ liệu thông tin n quyển sách từ bàn phím vào máy với n nhập từ bàn phím.
In ra danh sách những quyến sách có số lượng nhỏ hơn m với m nhập từ bàn phím
Ghi lên file SACH.TXT danh sách toàn bộ số sách của cửa hàng theo thứ tự giảm dần về số lượng
Giải : (Dino)
uses crt;
type quyensach = record
masach:string[20];
ten:string[30];
tacgia:string[25];
theloai:string[20];
namxb,sl:integer;
end;
var sach:array[1..100] of quyensach;
m,n,i,j,dem:integer;
temp:quyensach;
f:text;
Begin
clrscr;
Write('Nhap so quyen sach: ');
readln(n);
writeln('Nhap thong tin tung quyen sach: ');
For i:=1 to n do
with sach[i] do
begin
writeln('Sach thu ',i);
write('Ma sach: ');
readln(masach);
write('Ten sach: ');
readln(ten);
write('Tac gia: ');
readln(tacgia);
write('Nam xuat ban: ');
readln(namxb);
write('So luong: ');
readln(sl);
end;
write('Nhap so m: ');
readln(m);
writeln('Danh sach nhung quyen sach co so luong be hon ',m);
writeln('STT':4,'Ten sach':20);
for i:=1 to n do
if sach[i].sl<m then writeln(i:4,sach[i].ten:20);
assign(f,'sach.txt');
rewrite(f);
for i:=1 to n-1 do
for j:=i+1 to n do
if sach[i].sl<sach[j].sl then
begin
temp:=sach[i];
sach[i]:=sach[j];
sach[j]:=temp;
end;
writeln(f,'STT':4,'Ten sach':20,'So luong':10);
For i:=1 to n do
with sach[i] do
writeln(f,i:4,ten:20,sl:10);
readln;
close(f);
End.
Bài 26: Hồ sơ thông tin sinh viên gồm nhưng thành phần sau :
Mã sinh viên, họ và tên, năm sinh, quê quán, giới tính. Hãy khai báo kiểu bản ghi chứa các thành phần nêu trên. Lập sơ đồ thuật toán và viết chương trình bằng ngôn ngữ lập trình pascal thực hiện các yêu cầu sau :
Một chương trình điều khiển (chương trình chính)
Một chương trình con để nhập dữ liệu thông tin sinh viên từ bàn phím vào máy
Một chương trình con để tìm kiếm đưa ra thông tin của sinh viên có mã sinh viên được nhập từ bàn phím
Một chương trình con tạo một file lưu thông tin hồ sơ sinh viên theo thứ tự giảm dần của năm sinh
Giải :
uses crt;
type sinhvien=record
msv:string[10];
ten,que:string[25];
ns:integer;
gt:string[5];
end;
var sv:array[1..100] of sinhvien;
m,i,j:integer;
f:text;
temp:sinhvien;
procedure nhap;
begin
Clrscr;
write('Nhap so sinh vien: ');
readln(m);
writeln('Nhap thong tin sinh vien');
for i:=1 to m do
with sv[i] do
begin
writeln('Sinh vien thu ',i);
write('Ma SV: ');
readln(msv);
write('Ho ten: ');
readln(ten);
write('Nam sinh: ');
readln(ns);
write('Que quan: ');
readln(que);
write('Gioi tinh: ');
readln(gt);
end;
end;
Procedure tracuu;
var kt:boolean;
temp1:string[10];
x:integer;
begin
write('Nhap Ma sv can tra cuu: ');
readln(temp1);
kt:=false;
for i:=1 to m do
if sv[i].msv=temp1 then
begin
kt:=true;
x:=i;
end;
if kt=true then
with sv[x] do
begin
writeln('Thong tin hoc sinh co ma sv la ',temp1);
writeln('Ho ten: ',ten);
writeln('Nam sinh: ',ns);
writeln('Gioi tinh: ',gt);
writeln('Que quan: ',que);
end
else writeln('Ma sv ban vua nhap khong co');
end;
procedure ghitep;
begin
assign(f,'abc.txt');
rewrite(f);
for i:=1 to m-1 do
for j:=i+1 to m do
if sv[i].ns>sv[j].ns then
begin
temp:=sv[i];
sv[i]:=sv[j];
sv[j]:=temp;
end;
writeln(f,'STT':4,'Ho ten':25,'Nam sinh':10);
{Minh chi hien thi tung nay,ai thich hien thi them thi them vao nhe}
for i:=1 to m do
with sv[i] do
writeln(f,i:4,ten:25,ns:10);
close(f);
end;
Begin
Nhap;
tracuu;
ghitep;
readln;
End.
Bài 27: Cho trước danh sách tên các đội bóng tham gia mùa giải và kết quả thi đấu giữa các đội. Kết quả thi đấu giữa các đội được ghi trong ma trận vuông gồm kết quả thắng (3 điểm), hòa (1 điểm), thua (0 điểm) được tổ chức như sau : Các phần tử thuộc đường chéo chính gán bằng 0, các phần tử aij khác có ý nghĩa :
aij= 3 đội i thắng đội j
aij= 1 đội i hòa đội j
aij= 0 đội i thua đội j
Hãy viết chương trình để thực hiện các yêu cầu sau :
Một chương trình con nhập dữ liệu từ bàn phím
Một chương trình con tính điểm của mỗi đội
Một chương trình con sắp xếp theo thứ tự của các đội sau mùa giải theo thứ tự giảm dần.
Một chương trình con ghi kết quả vào tệp và một chương trình con hiện ra màn hình theo định dạng sau :
Dòng 1 : KET QUA BONG DA
Dòng 2 : Số đội bóng tham gia mùa giải
Các dòng tiếp theo mỗi dòng ghi : STT, hai dấu cách, số điểm.
Một chương trình chính gọi các chương trình con
Giải :
Uses crt;
Var i,j,m,Temp1:integer;
f1:text;
Temp:string[25];
Doi:array[1..20] of string[25];
S:array[1..20] of integer;
A:array[1..20,1..20] of integer;
Procedure Nhap;
Begin
Write('Nhap so doi: ');
Readln(m);
For i:=1 to m do
Begin
Write('Ten doi ',i,': ');
Readln(Doi[i]);
End;
Writeln('Nhap ket qua tung tran dau theo ma tran vuong: ');
For i:=1 to m do
For j:=1 to m do
Begin
Write('A[',i,j,']= ');
Readln(A[i,j]);
End;
End;
Procedure Tinhdiem;
Begin
Fillchar(S,Sizeof(s),0); {Gan tat ca phan tu S = 0}
For i:=1 to m do
For j:=1 to m do
If ij then {Khong tinh duong cheo chinh}
Begin
If A[i,j]=3 then S[i]:=S[i]+3
Else
If A[i,j]=1 then
Begin
S[i]:=S[i]+1; {Vi 2 doi hoa nhau nen so diem ca 2 cung se tang len 1}
S[j]:=S[j]+1;
End
Else S[j]:=S[j]+3; {A[i,j]=0 --> Doi J duoc 3 diem, I dc 0 diem}
End;
End;
Procedure Sapxep;
Begin
For i:=1 to m-1 do
For j:=i+1 to m do
If S[i]<S[j] then
Begin
Temp:=Doi[i];
Doi[i]:=Doi[j];
Doi[j]:=Temp;
Temp1:=S[i];
S[i]:=S[j];
S[j]:=Temp1;
End;
End;
Procedure Ghitep;
Begin
Assign(f1,'Ketquathidau.txt');
Rewrite(f1);
Writeln(f1,'KET QUA THI DAU');
Writeln(f1,'STT':4,'TEN DOI BONG':25,'SO DIEM':10);
For i:=1 to m do
Begin
Write(f1,i:4,Doi[i]:25,S[i]:10);
Writeln(f1);
End;
Close(f1);
End;
Procedure Inra;
Begin
Writeln('KET QUA THI DAU');
Writeln('So doi bong tham gia: ',m);
Writeln('STT':4,'TEN DOI BONG':25,'SO DIEM':10);
For i:=1 to m do
Begin
Write(i:4,Doi[i]:25,S[i]:10);
Writeln;
End;
End;
BEGIN
Clrscr;
Nhap;
Tinhdiem;
Sapxep;
Ghitep;
Inra;
Readln;
END.
Các file đính kèm theo tài liệu này:
- _a_c_ng_tin_ha_c_a_i_c_ng_pm_1_1_2216.docx