Chủ Nhật, 21 tháng 2, 2016

BÀI TẬP KHỐI 11



Chương 1
MỘT SỐ KHÁI NIỆM VỀ LẬP TRÌNH VÀ NGÔN NGỮ LẬP TRÌNH
Bµi tËp
1. Người ta phải xây dựng ngôn ngữ lập trình bậc cao vì:
 - Ngôn ngữ lập trình bậc cao gần gủi với tự nhiên hơn, thuận tiện cho đông đảo người lập trình
- Ngôn ngữ lập trình bậc cao nói chung không phụ thuộc vào loại máy, cùng một chương trình có thể thực hiện trên nhiều máy khác nhau
- Chương trình viết bằng ngôn ngữ bậc cao dễ hiểu, dễ hiệu chỉnh và dễ nâng cấp hơn
- Ngôn ngữ lập trình bậc cao cho phép làm việc với nhiều kiểu dữ liệu và cách tổ chức dữ liệu đa dạng, thuận tiện cho một thuật toán.
2. Chương trình dịch là chương trình đặc biệt, có chức năng chuyển đổi chương trình được viết trên ngôn ngữ lập trình bậc cao thành chương trình thực hiện được trên máy tính.
3.
- Biên dịch: duyệt, kiểm tra, phát hiện lỗi, xác định chương trình nguồn có dịch được không. Dịch toàn bộ chương trình nguồn thành một chương trình đích có thể thực hiện trên máy và có thể lưu trữ lại để sử dụng về sau khi cần thiết
- Thông dịch: lần lượt dịch từng câu lệnh ra ngôn ngữ máy rồi thực hiện ngay câu lệnh vừa dịch được hoặc thông báo lỗi nếu không dịch được
4. Các điểm khác nhau giữa tên dành riêng và tên chuẩn: tên dành riêng không được dùng khác với ý nghĩa xác định, tên chuẩn có thể dùng với ý nghia khác.
5. Đúng: tamgiac, bai5a, xemxonxiu_ngu...
6. C: 6,23® 6.23
E: A20 tên chưa có giá trị
G: 6 4 + H: ‘C ® ‘C’I: ‘TRUE’ “true” là hng logic.
Chương 2:
CHƯƠNG TRÌNH ĐƠN GIẢN
Bµi Thùc Hµnh Sè 1
----------------- -----------------***** ***** *****----------------- -----------------
1. Sự khác nhau giữa hằng có đặt tên và tên biến: Giá trị của hằng có đặt tên không thay đổi khi thực hiện chương trình còn giá trị của biến có thể thay đổi tại từng thời điểm thực hiện chương trình.
2. Khai báo biến nhằm những mục đích sau:
- Xác định kiểu của biến. Trình dịch sẽ biết cách tổ chức ô nhớ chứa giá trị của biến.
- Đưa tên biến vào danh sách các đối tượng được chương trình quản lí.
- Trình dịch biết cách truy cập giá trị của biến và áp dụng thao tác thích hợp cho biến.
3. integer, real, extended, longint.
4. D
5. C
6. (1+z)*(x+y/z)/(a-1/(1+x*x*x*x))
Bài 7. a)                 b)                         c)                           d)
Bài 8. a)
program bai8a;
uses cr crt;
var x,y:real;
kt:boolean;
begin
clrscr;
write('Nhap x:’);readln(x);
write('Nhap y:');readln(y);
kt:=false;
if ((y<1) or (y=1)) and ((y>abs(x)) or (y=abs(x)))
then kt:=true;
if kt then write('Diem vua nhap thuoc phan gach cheo')
else write('Khong thuoc');
readln
end.
b)
program bai8;
uses crt;
var x,y:real;
kt:boolean;
begin
clrscr;
write('Nhap x: ');readln(x);
write('Nhap y: ');readln(y);
kt:=false;
if (abs(y)<=1) and (abs(x)<=1) then   kt:=true;
if kt then write('Diem vua nhap thuoc phan gach cheo')
else write('Khong thuoc');
readln
end.
Bài 9.
Program bai9;
uses crt;
const pi= 3.1416;
var a,s:real;
begin
clrscr;
repeat
write('Nhap ban kinh duong tron: ');
readln(a);
if a<0 then writeln('Nhap lai!');
until a>0;
s:=(a*a*pi)/2;
write('Dien tich phan gach cheo: ',s:8:3);
readln
end.
Bài 10.
program bai10;
uses crt;
const g= 9.8;
var v, h:real;
begin
clrscr;
repeat
write('Nhap do cao: '); readln(h);
if h<0 then writeln('Nhap lai!');
until h>0;
v:=sqrt(2*g*h);
write('Van toc: ',v:8:3);
readln
end.

Chương 3
CẤU TRÚC RẼ NHÀNH VÀ LẶP
Bµi Thùc Hµnh Sè 2
----------------- -----------------***** ***** *****----------------- -----------------
1. Giống nhau: cùng là câu lệnh cấu trúc rẽ nhánh, khi gặp một điều kiện nào đó thì chọn thực hiện thao tác thích hợp
Khác nhau: trong câu lệnh if-then dạng thiếu, nếu điều kiện không đúng thì thoát khỏi cấu trúc rẽ nhánh, thực hiện câu lệnh tiếp theo của chương trình, còn trong câu lệnh if-then dạng đủ, nếu điều kiện không đúng thì thực hiện công việc 2, sau đó mới thoát khỏi cấu trúc rẽ nhánh, thực hiện câu lệnh tiếp theo của chương trình.
2. Câu lệnh ghép là mt câu lệnh được hợp thành từ nhiều câu lệnh thành phần. Câu lệnh ghép nhằm thực hiện thao tác gồm nhiều thao tác thành phần. Mi thao tác thành phần tương ứng với một câu lệnh đơn hoặc một câu lệnh ghép khác. Câu lệnh ghép là một trong các yếu tố cần thiết để xây dựng chương trình có cấu trúc.
Bài 3.
Program tong1a;
Uses crt;
Var S: real;
a, N: integer;
begin
clrscr;
write('Nhap a: ');readln(a);
S:=1.0/a;
N:=1;
While n<=100 do
Begin
S:=S+1.0/(a+N);
N:=N+1;
End;
Writeln('Tong S la: ',S:8:4);
Readln
End.
Bài 4.
a) program bai4a;
uses crt;
var x, y, z:real;
begin
clrscr;
write('nhap hai so x va y: '); readln(x,y);
if x*x+y*y<=1 then
begin
z:=(x*x+y*y);
writeln('tong can tim: ',z:9);
end;
if (x*x+y*y>1) and (y>=x) then
begin
z:=(x+y);
writeln('tong can tim: ',z:9);
end;
if (x*x+y*y>1) and (y<x) then
begin
z:=0.5;
writeln('tong can tim: ',z);
end;
readln
end.
b) program bai4b;
uses crt;
var x,y,z,a,b,r:real;
begin
clrscr;
write('Nhap x: ');readln(x);
write('Nhap y: ');readln(y);
write('Nhap toa do tam hinh tron: ');
readln(a,b);
write('Nhap ban kinh r: ');readln(r);
if sqrt(sqr(x-a)+sqr(x-b))<r then
begin
z:=abs(x)+abs(y);
writeln('Z= ',z:3:3);
end
else
begin
z:=x+y;
writeln('Z= ',z:3:1);
end;
readln
end.
Bài 5.
a)Program bai5a;
Uses crt;
Const n=50;
Var i: integer;
Y:real;
Begin
Clrscr;
for i:=1 to n do
Y:=i/(i+1);
Write('Tong Y: ',y:9:3);
Readln
End.
b)program bai5b;
uses crt;
var n:longint;
e,sh:real;
begin
clrscr;
sh:=1/2;  n:=2;
e:=2+sh;
while sh>=2*1e-16 do
begin
n:=n+1;
sh:=sh*(1/n);
e:=e+sh;
end;
writeln('Gia tri e(n) la: ',e:10:4);
readln
end.
Bài 6.
program Bai6;
uses crt;
var x, y:byte;
begin
clrscr;
for x:=1 to 36 do
for y:=0 to 20 do
if (x+y=36) and (2*x+4*y=100) then
begin
writeln('Co ',x,' con Ga');
write('Co ',y,' con Cho');
end;
readln
end.
Bài 7.
program Bai7;
uses crt;
var b, c, n:byte;
bein
clrscr;
repeat
write('Nhap tuoi cha: ');readln(b);
write('Nhap tuoi con: ');readln(c);
if (b-c<25) or (b<2*c) then
writeln('Du lieu khong hop le, nhap lai.');
until (b-c>=25) and (b>=2*c);
if b=2*c then
writeln('Hien nay tuoi cha gap hai lan tuoi con.')
else
if b>2*c then
writeln('Sau ',b-2*c,' nam tuoi cha se gap doi tuoi con');
readln
end.
Bài 8.
program Bai8;
uses crt;
var A, B, St, Luu :real; n:byte;
begin
clrscr;
write('Nhap so tien gui: ');readln(a);
write('Nhap so tien nhan: ');readln(b);
luu:=A; n:=0; st:=a;
while St<=B do
begin
St:=St+luu*0.003;
n:=n+1;
end;
writeln('So thang can la: ',n);
readln
end.
Chương 4:
KIỂU DỮ LIỆU CÓ CẤU TRÚC
Bµi Thùc Hµnh Sè 3
-- ----------------- --------------- ---------------***** ***** *****----------------- -----------------
Bài 1.
program sum1;
uses crt;
const nmax=100;
type Myarray=array[1..nmax] of integer;
var A:myarray;
s,n,i,k,posi,neg:integer;
begin
clrscr; randomize;
write('Nhap n: ');readln(n);
for i:=1 to n do A[i]:=random(300)-random(300);
for i:=1 to n do write(A[i]:5); writeln;
for i:=1 to n do
if A[i]>0 then posi:=posi+1
else if A[i]<0 then
neg:=neg+1;
writeln('Co ',posi,' so duong va ',neg,' so am trong mang');
write('Nhap k: ');readln(k);
s:=0;
for i:=1 to n do
if A[i] mod k = 0 then s:=s+A[i];
writeln('Tong can tinh la: ',s);
readln
end.
Bài này cho kết quả ngẫu nhiên nên kết quả của các bạn có thể khác.
Bài 2.
program mang2;
uses crt;
var A:array[1..100] of integer;
n,i,j,max:integer;
begin
clrscr;
write('Nhap so luong phan tu: ');readln(n);
for i:=1 to n do
begin
write('Nhap phan tu thu ',i,': '); readln(a[i]);
end;
max:=a[1];
for i:=2 to n do
if a[i]>a[i-1] then max:=A[i];
for j:=1 to n do if a[j]=max then
writeln('chi so phan tu lon nhat: ',j);
readln
end.
Chú ý: Các bạn sửa lại chương trình để đưa ra kết quả hợp lí, các chỉ số ca phần tử lớn nhất cùng nằm trên mt dòng.




Bµi Thùc Hµnh Sè 4
----------------- -----------------***** ***** *****----------------- -----------------
Bài 1.
uses crt;
var A:array[1..250] of integer;
n,i,j,y,dem,t:integer;
begin
clrscr;
randomize;
write('Nhap n: ');readln(n);
for i:=1 to n do A[i]:=random(300)-random(300);
for i:=1 to n do write(A[i]:5);
writeln; dem:=1;
for j:=n downto 2 do
for i:=1 to j-1 do
if A[i]>A[i+1] then
begin
t:=a[i];
a[i]:=a[i+1];
A[i+1]:=t;
dem:=dem+1;
end;
write('Sau khi dao ',dem,' lan');
for i:=1 to n do
write(A[i]:7); writeln;
readln
end.
Bài này cho kêt quả  là ngẫu nhiên.

Bµi Thùc Hµnh Sè 5
----------------- -----------------***** ***** *****----------------- -----------------
Bài 1.
program xau;
uses crt;
var i, x:byte;
S: string;
kt:boolean;
begin
clrscr;
write('Nhap xau: ');readln(s);
x:=length(S);
kt:=false;
for i:=1 to x div 2 do
if S[i]=S [x-i+1] then kt:=true;
if kt then write('Xau la palindrome')
else write('Xau khong la palindrome');
readln
end.
Bài 2.
program Bai2;
uses crt;
var S:string;
i,n,dem:integer; ch:char;
begin
clrscr;
write('Nhap xau: ');readln(S);
for i:=1 to length(S) do
s[i]:=upcase(s[i]);
for ch:='A' to 'Z' do
begin
dem:=0;
for i:=1 to length(s) do
if s[i]=ch then dem:=dem+1;
if dem>0 then
writeln('Trong xau co ',dem,' chu ',ch);
end;
readln
end.
Bài 3.
program anhem;
uses crt;
var S:string;
i,n:integer;
begin
clrscr;
write('Nhap xau: ');readln(s);
while pos('anh',s)<> 0 do
begin
n:=pos('anh',s);
delete(S,n,3);
insert('em',s,n);
end;
write('Xau moi: ',s);
readln
end.
Bài tập chương 4
1. Mảng là kiểu dữ liệu có cấu trúc bởi vì mảng là kiểu có cấu trúc được đề cập tới sớm nhất trong các ngôn ngữ lập trình. Nó được xây dựng từ những kiu dữ liệu đã có theo quy tắc khuôn dạng do ngôn ngữ lập trình cung cấp. Nó được dùng để chỉ định một nhóm đối tượng cùng một tính chất nào đó.
2. Chúng ta phải khai báo kích thước của mảng bởi vì để cách đánh số các phần tử của nó.
3. real, boolean, integer, longint.
4. Tham chiếu đến phần tử của mảng một chiều được xác định bởi tên mảng cùng với chỉ số, được viết trong cp ngoặc [..] (Ví dụ: A[1]). Còn tham chiếu đến phần tử của mảng 2 chiều được xác định bởi tên mảng cùng với 2 chỉ số được phân cách bởi dấu phẩy và viết trong cặp ngoặc [..] (ví dụ: A[1,2]).
Bài 5.
uses crt;
var a:array[1..100] of integer;
n,i,d:integer;csc:boolean;
begin
clrscr;
write('Nhap n: ');readln(n);
for i:=1 to n do
begin
repeat
write('Nhap phan tu thu ',i,': ');
readln(a[i]);
if abs(a[i])>1000 then writeln('Nhap so nho hon 1000');
until abs(a[i])<=1000;
end;
csc:=false;
d:=a[2]-a[1];
for i:=2 to n do
if a[i+1]-a[i]=d then csc:=true;
if csc then writeln('Day la cap so cong') else
write('Day khong la cap so cong');
readln
end.
Bài 6.
program bai6;
uses crt;
var A:array[1..100] of integer;
i,n,dem,u,d:integer;
begin
clrscr;
write('Nhap so luong phan tu: ');readln(n);
for i:=1 to n do
begin
repeat
write('Nhap phan tu thu ',i,': ');
readln(a[i]);
if abs(A[i])>1000 then write('Nhap so <1000 OK');
until abs(A[i])<1000;
end;
dem:=0;
for i:=1 to n do
begin
if a[i] mod 2= 0 then dem:=dem+1;
end;
writeln('So luong so le: ',n-dem);
writeln('So luong so chan: ',dem);
for i:=1 to n do
if a[i]>1 then
begin
u:=2;
while (u<=sqrt(A[i])) and (A[i] mod u <> 0) do
u:=u+1;
if u>sqrt(A[i]) then d:=d+1;
end;
write('So luong so nguyen to: ',d);
readln
end.
Bài 7.
program bai7;
uses crt;
var n, i:word; f, f1,f2:word;
begin
clrscr;
repeat
write('Nhap N: ');readln(n);
if n<2 then writeln('Nhap N>2 OK!');
until n>=2;
f1:=1;
f2:=2;
for i:=3 to n do
begin
f:=f1+f2;
f1:=f2;
f2:=f;
end;
write('So fibonaxi thu ',n,' la ' ,f);
readln
end.
Chương trình thực hiện đến Nmax=10001.
Bài 8.Chương trình thực hiện việc hoán đổi vị trí dòng thứ i với dòng thứ N-i+1, nghĩa là hoán đổi vtrí dòng đầu tiên với dòng cuối cùng của mng hai chiều, dòng thứ hai từ trên xuống với dòng thứ hai từ dưới lên,… Việc hoán đổi vị trí dòng thứ i với dòng đối xứng với nó được thực hiện khi i nhn giá trị từ 1 đến N, làm cho mỗi dòng được hoán đổi vị trí 2 lần. Vì vậy mng A sau khi hoán đổi không thay đổi so với ban đầu.

Bài 9.
program bai9;
uses crt;
var A:array[1..15,1..15] of integer;
N, i, j, max, ind, vsp:integer;
begin
clrscr;
write('Nhap N: ');readln(n);
for i:=1 to n do
for j:=1 to n do
begin
write('Nhap A[',i,',',j,']: ');
readln(A[i,j]);
end;
for i:=1 to n do
begin
max:=A[1,i];ind:=1;
for j:=2 to n do
if A[j,i] > max then
begin
max:=A[j,i];
ind:=j;
end;
vsp:=A[i,i];
A[i,i]:=max;
A[ind,i]:=vsp;
end;
for i:=1 to n do
begin
writeln;
for j:=1 to n do write(A[i,j]:3);
end;
writeln;
readln
end.
Bài 10.
program bai10;
uses crt;
var S:string;
i,dem,n:integer;
begin
clrscr;
write('Nhap xau: ');readln(S);
n:=length(S);
dem:=0;
for i:=1 to n do
if (s[i]>='0') and (s[i]<='9') then dem:=dem+1;
write('Co ',dem,' chu so trong xau vua nhap');
readln
end.
Bài 11.
program bai11;
uses crt;
const max=60;
type Hocsinh = record
hoten:string[30];
ngaysinh:string[10];
diachi:string[50];
toan, van:real;
xeploai:char;
end;
var lop:array[1..max] of hocsinh;
N, i:byte;
begin
clrscr;
write('Nhap so luong hoc sinh: ');readln(n);
for i:=1 to n do
with lop[i] do {Chú ý câu lệnh này}
begin
writeln('Nhap so lieu hoc sinh thu ',i,':');
write('Ho va ten: ');readln(hoten);
write('Ngay sinh: ');readln(ngaysinh);
write('Dia chi : ');readln(diachi);
write('Diem toan: ');readln(toan);
write('Diem van : ');readln(van);
if toan+van>=18 then xeploai:='A';
if (toan+van>=14) and (toan+van<18) then xeploai:='B';
if (toan+van>=10) and (toan+van<14) then xeploai:='C';
if (toan+van<10) then xeploai:='D';
end;
clrscr;
writeln('Danh sach hoc sinh:');
for i:=1 to n do
with lop[i] do
writeln(hoten:30,'- xep loai: ',xeploai);
writeln('Danh sach hoc sinh loai A:');
for i:=1 to n do
with lop[i] do
if xeploai='A' then
writeln(hoten:30);
readln
end.
Chương 5:
THAO TÁC VỚI TỆP
Bµi tËp chư¬ng
1. Một số trường hợp phải dùng tệp: luu trữ lượng thông tin lớn, dùng lâu dài, ít thay đổi như tên người trong một cơ quan, hồ sơ của sinh viên, lương cán bộ,....
2. Trong sơ đồ thao tác với tệp, khi cần nhập dữ liệu từ tệp phải dùng những thao tác như gắn tên tệp, mở tệp để ghi, ghi dữ liệu vào tệp, đóng tệp để hoàn tất việc ghi dữ liệu
Assign(f,f1);
Rewrite(f);
Write(f,x,’  ‘,y,’  ‘,z); {ghi giá trị các biến , y, z vào tệp}
Close(f);
3. Phải mở tệp trước khi đọc tệp vì trước khi sử dng tệp phải có câu lệnh mở tệp để trình dịch biết thực hiện mc đích mở tệp để đọc hay ghi, đồng thời đặt con trỏ, tệp vào vị trí thích hợp
4. Phải dùng lệnh đóng tệp sau khi đã kết thúc ghi dữ liệu vào tệp để hệ thống hoàn tất việc ghi dữ liệu ra tệp. Không có câu lệnh đóng tệp thì chương trình sẽ không thghi được dữ liệu vào tp.

Chương 6:
CHƯƠNG TRÌNH CON VÀ LẬP TRÌNH CÓ CẤU TRÚC
Bµi Thùc Hµnh Sè 6
----------------- -----------------***** ***** *****----------------- -----------------
Chuong trình
program thuchanh6;
uses crt;
type str = string[79];
var S1, S2:str;
dong:byte; dung:boolean;
procedure catdan(s1:str; var s2: str);
begin
s2:=copy(s1,2,length(s1)-1)+S1[1];
end;
procedure cangiua(var s:str);
var n, i:integer;
begin
n:=length(s);
n:=(80-n) div 2;
for i:=1 to n do s:=' '+s;
end;
procedure chuchay(s1:str; dong:byte);
var s2:str;
dung:boolean;
begin
clrscr;
cangiua(s1);
clrscr;
dung:=false;
while not(dung) do
begin
gotoxy(1,dong);
write(s1);
delay(100);
catdan(s1,s2);
s1:=s2;
dung:=keypressed;
end;
end;
begin
clrscr;
write('Nhap xau :’);readln(s1);
write('Nhap dong: ');readln(dong);
chuchay(s1,dong);
readln
end.

Bµi Thùc Hµnh Sè 7
----------------- -----------------***** ***** *****----------------- -----------------
program tamgiac;
uses crt;
const eps=1.0e-6;
type diem=record
x, y:real;
end;
tamgiac=record
a, b, c:diem;
end;
var T:tamgiac;
d, cn, v: boolean;
n, i, deu, can, vuong:word;
f,g:text;
function khcach(P, Q: Diem):real;
begin
khcach:=sqrt((P.x -Q.x)*(p.x -q.x)+(p.y-Q.y)*(p.y-Q.y));
end;
procedure daicanh(var R:tamgiac; var a, b, c:real);
begin
a:=khcach(R.B, R.C);
b:=khcach(R.A, R.C);
c:=khcach(R.A, R.B);
end;
procedure tinhchat(var R: tamgiac; var deu,can,vuong:boolean);
var a, b, c:real;
begin
deu:=false; can:=false; vuong:=false;
daicanh(R,a,b,c);
if (abs(a-b)<eps) and (abs(a-c)<eps) then  deu:=true
else
if (abs(a-b)<eps) or (abs(a-c)<eps) or (abs(b-c)<eps) then
can:=true;
if (abs(a*a+b*b-c*c)<eps) or (abs(a*a+c*c -b*b)<eps) or (abs(b*b+c*c-a*a)<eps) then
vuong:=true;
end;
begin
deu:=0;
can:=0;
vuong:=0;
assign(f,'tamgiac.dat');
reset(f);
readln(f,n);
assign(g,'tamgiac.out');
rewrite(g);
for i:=1 to n do
begin
readln(f, T.A.x, T.A.y, T.B.x, T.B.y, T.C.x, T.C.y);
tinhchat(T,D,cn,v);
if d then deu:=deu+1 else
begin
if cn then can:=can+1;
if v then vuong:=vuong+1;
end;
end;
writeln(g,'co ',deu,' tam giac deu');
writeln(g,'co ',can,' tam giac can');
writeln(g,'co ',vuong,' tam giac vuong');
close(f);close(g);
end.
Ví dụ
Tệp văn bản chứa tọa độ các đỉnh của các tam giác
Vào file-new rồi nhập dữ liệu như dưới đây, nhấn f2 để lưu lại với tên tamgiac.dat
3
5  10  20  10  20  50
2  30  15  20  15  40
5  30  15  20  15  35
Vào file-new, rồi nhấn f2 lưu lại với tên tamgiac.out
Nhấn . f6 chuyển sang cửa sổ chương trình và chạy chương trình. Chạy xong nhấn yes, nhấn f6 cho đến khi xuất hiện cửa sổ văn bản tamgiac.out xem kết quả.
Tệp văn bản chứa kết quả sau khi thực hiện chương trình
Co 0 tam giac deu
Co 1 tam giac can
Co 1 tam giac vuong

Bµi tËp chư¬ng 6
1. SGK
2. Chương trình con không có tham s
Procedure ve;
Begin
Writeln(‘****************’);
Writeln(‘*I love you ok!*’);
Writeln(‘****************’);
End;
3. Chương trình con cho nhiều hơn mt kết quả:
Procedure hoandoi(var x, y:integer);
Var tg:integer;
Begin
Tg:=x;
X:=y;
Y:=tg;
End;
4.
program bai4;
uses crt;
var x, y:integer;
function ucln(a, b:integer): integer;
var r:integer;
begin
while b>0 do
begin
r:=a mod b;
a:=b; b:=r;
end;
ucln:=a;
end;
function bcnn(a, b:integer): integer;
begin
bcnn:=a*b div ucln(a,b);
end;
begin
clrscr;
write('Nhap x: ');readln(x);
write('Nhap y: ');readln(y);
write('Boi chung nho nhat: ',bcnn(x,y));
readln
end.