Tải bản đầy đủ (.docx) (49 trang)

Đề cương ôn tập môn: Tin học đại cương

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (259.93 KB, 49 trang )

Góc học tập khoa CNTT - ĐHXD

Phần A: Lý thuyết
Câu 1: Các bộ phận chức năng của máy tính ?
a)

b)

c)

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


+ 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.

RAM
+ 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 :
1. Lập công thức cho bài toán
2. Chọn ra phương pháp giải tốt nhất
3. Lập sơ đồ thuật toán
4. Viết chương trình bằng ngôn ngữ lập trình
1
/>

Góc học tập khoa CNTT - ĐHXD
5.

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
1. Tiêu đề của chương trình
Program tenchuongtrinh;
2. Khai báo
Uses
Lable
Const
Var
Type
Function
Procedure
3. 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.
2
/>

Góc học tập khoa CNTT - ĐHXD

Câu 6 : Viết biểu thức bằng ngôn ngữ lập trình pascal
Ví dụ :
Y=sin(α)+arctg(β)+
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 :
1. For <biến điều kiện> := <Giá trị đầu> to <Giá trị cuối> do <việc>
2. For <biến điều kiện> := < Giá trị cuối > downto < Giá trị đầu > do
<việc>
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à while…do…? Cho ví dụ
-

Giống nhau : Đều là vòng lặp không xác định
Khác nhau :
Repeat…until…
Repeat
<công việc>;

While…do…
While <biểu thức Boolean> do
Begin

3
/>


Góc học tập khoa CNTT - ĐHXD
Until <biểu thức Boolean>;
+ 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.

<công việc>;
End;
+ 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.

BD

BD

Công việc

Biểu thức boolean

S
KT

Đ

Biểu thức boolean
Đ
Công việc

S
KT

-

Ví dụ : tính tổng các số từ 1->N
Repeat…until…
S:=0;i:=1;
While (i<=N) do
Begin
S:=S+i;
i:=i+1;
end;

-

While…do…
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
4
/>

Góc học tập khoa CNTT - ĐHXD
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
1. 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
1. Gián tiếp
Type PT:array[1..5] of real;
Var MPT:array[1..3] of PT;
2. Trực tiếp
Var MPT:array[1..3,1..5] of real;
2.

-


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;
5
/>

Góc học tập khoa CNTT - ĐHXD
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ụ
1.

2.

3.

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ụ
1.

2.
3.

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’);
6
/>

Góc học tập khoa CNTT - ĐHXD
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 ?
1.

2.

3.

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 ?
1.

2.

3.

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

1.

Phép gán
7
/>

Góc học tập khoa CNTT - ĐHXD
2.
3.
4.

5.
6.

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
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.
+ 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.

Function
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.

+ 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
Procedure dientich(r:real;var dt:real);
Begin

Function
Function dt(r:real):real;
Begin

8
/>

Góc học tập khoa CNTT - ĐHXD
dt:=3.14*r*r;
end;

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 + là tham số hình thức trong phần tiêu
đề của chương trình con không đặt sau đề của chương trình con được đặt sau
từ khóa var.
từ khóa var.
9
/>

Góc học tập khoa CNTT - ĐHXD
+ 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ị.


+ 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 + là các biến được khai báo trong
chương trình chính, chúng có thể dung chương trình con và nó chỉ có tác dụng
ở mọi nơi trong chương trình.
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 đó

10
/>

Góc học tập khoa CNTT - ĐHXD

Phần B: Bài tập
Bài 1 : Cho dãy x1,x2…xn. 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,x2…xn. 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 :');
11
/>

Góc học tập khoa CNTT - ĐHXD
for i:=1 to l do
writeln('z[',i,'] = ',z[i]:4:1);
readln;
end.

Bài 3 : Cho dãy x1,x2…xn. 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,x2…xn. 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
12
/>


Góc học tập khoa CNTT - ĐHXD
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,x2…xn. 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 iy[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: ');
13
/>

Góc học tập khoa CNTT - ĐHXD
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
1

Điểm
…..

1..n
1.
2.
3.

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
14
/>
m


Góc học tập khoa CNTT - ĐHXD
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
15
/>

Góc học tập khoa CNTT - ĐHXD
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]);
16
/>

Góc học tập khoa CNTT - ĐHXD
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.

17
/>

Góc học tập khoa CNTT - ĐHXD
Bài 10: Cho ma trận
giá trị lớn nhất đó.

Anxm tìm giá trị lớn nhất của ma trận, xóa cột đầu tiên chứa

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
18
/>

Góc học tập khoa CNTT - ĐHXD
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 jy[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;
19
/>

Góc học tập khoa CNTT - ĐHXD
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 iy[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
20
/>

Góc học tập khoa CNTT - ĐHXD
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.
21

/>

Góc học tập khoa CNTT - ĐHXD
Bài 14 : Kiểu bản ghi - Cho bảng sau :
STT

Họ tên
1

Điểm danh
…..

m

1…n
1.
2.

Đế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;
22
/>

Góc học tập khoa CNTT - ĐHXD

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 để
1.
2.
3.

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;
23
/>

Góc học tập khoa CNTT - ĐHXD
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;
24
/>

Góc học tập khoa CNTT - ĐHXD
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.

25
/>

×