Tổng số bài gửi : 426 Điểm :
841 Reputation : 3 Birthday : 20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Mời các bạn giải bài tập Tin Học 11
14/3/2010, 8:07 am
Nhằm để giữ lại tài liệu và tiện lợi cho các bạn sau này đi thực tập ,ai có bài nào làm được thì đưa lên nhé,thanks sau đây là những bài mà nhóm mình vừa làm được hihihi Bai 4.36 type kA= array[1..100] of integer; var i,k,n:integer;A: kA; BEGIN Write(' Nhap n:');readln(n) ; for i:=1 to n do begin write(' A[',i,']='); readln(A[i]); end; write('
cac cuc dai dia phuong: '); for i:=1 to n do if (((i=1) and (a[1]>a[2])) or ((a[i]>a[i-1])and(a[i]>a[i+1])) or ((i=n) and (a[n]>a[n-1]))) then write(a[i],' '); readln; END. Bai 4.10
Code:
type kA= array[1..100] of integer; kB= array[1..100] of integer; vf kC= array[1..100] of integer; var i,k,n:integer;A: kA;B:KB;C:KC; BEGIN Write(' Nhap n:');readln(n) ; for i:=1 to n do begin write('
A[',i,']='); readln(A[i]); end; for i:=1 to n do begin write(' B[',i,']=');readln(B[i]); end; For i:=1 to n do c[2*i-1]:=a[i] ; For i:=1 to n do c[2*i]:=b[i]; writeln('DAy A'); for i:=1 to n do write(A[i],' '); writeln; writeln('DAy B'); for i:=1 to n do write(B[i],' '); writeln; writeln('DAy C'); for i:=1 to 2*n do write(C[i],' '); writeln; readln; END.
_________________ Nguyễn Đình
Lý 093.20.4.1988 Y!ahoo tinhonline204
Được sửa bởi tinhonline204 ngày 18/3/2010, 6:40 am; sửa lần 5.
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
15/3/2010, 10:34 am
Bài 4.11
Code:
type kA= array[1..100] of integer; kB= array[1..100] of integer; kC= array[1..100] of integer; var i,j,k,n:integer;A: kA;B:KB;C:KC; BEGIN Write(' Nhap n:');readln(n) ; for i:=1 to n do repeat write(' A[',i,']=');
readln(A[i]); until (a[i] <= 32000); for i:=1 to n do repeat write(' B[',i,']=');readln(B[i]); until( b[i] <= 32000); j:=1;k:=1; a[n+1]:=32001;b[n+1]:=32001; for i:=1 to 2*n do if (A[j] else begin c[i]:=b[k]; inc(k); end; writeln('DAy A'); for i:=1 to n do write(A[i],' '); writeln; writeln('DAy B'); for i:=1 to n do write(B[i],' '); writeln; writeln('DAy C'); for i:=1 to 2*n do write(C[i],' '); writeln; readln; END.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
15/3/2010, 10:36 am
Bài 4.12
Code:
type kA= array[1..100] of integer; var i,max,min,tg,vtmax,vtmin,n:integer;A: kA; BEGIN Write(' Nhap n:');readln(n) ; for i:=1 to n do begin write(' A[',i,']='); readln(A[i]); end;
vtmin:=1;vtmin:=n; max:=a[n];min:=a[1]; for i:=1 to n do if (a[i]<=min) then begin min:=a[i]; vtmin:=i; end; for i:=n downto 1 do if (a[i]>=max) then begin max:=a[i];vtmax:=i; end; write(' vi tri max',vtmax,'vi tri min',vtmin); writeln('DAy truoc'); for i:=1 to n do
write(a[i],' '); writeln; tg:=a[vtmin]; a[vtmin]:=a[vtmax]; a[vtmax]:=tg; writeln('DAy sau '); for i:=1 to n do write(a[i],' '); writeln; readln;
END.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
15/3/2010, 10:36 am
Bài 4.37
Code:
var thang,p:string;i:integer; BEGIN write(' nhap thang ');readln(thang); write( ' mua la: '); for i:=1 to length(thang) do thang[i]:=upcase(thang[i]); p:='GIENGHAIBATUNAMSAUBAYTAMCHINMUOIMOTCHAP'; { ham kiem tra xau thang co xuat hien trong xau p khong, neu co thi tra ve vi tri xuat hien dau tien cua xua
"thang"} case pos(thang,p) of 1,6,9: write(' mua xuan ') ; 11,13,16: write(' mua he'); 19,22,25: write(' mua thu'); 29,33,36: write(' mua dong'); end; readln; END.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 6:32 am
BÀI TẬP 4.39
4.39 Hãy lập trình:
- Nhập một xâu S chỉ chứa các ký tự La tinh in thường và các ký tự số từ 0 đến 9.
- Đếm và đưa ra màn hình số ký tự khác nhau trong xâu S.
BƯỚC
1.
- Input: Xâu S.
- Output: Số ký tự khac nhau và các ký tự đó trong xâu S.
BƯỚC 2.
B1: Nhập xâu s.
B2: i:=1; : n:=length
B3: k:=i+1;
nếu (s[i]=s[k] thì
delete(s,k,1);
k:=k+1;
k>n sang b3
B4: i:=i+1; nếu i<=n thì quay lại bước 3 ngược lại sang bước 5;
B5: n:=length(s);
Thông báo kết quả: số ký tự khác nhau là: n. các ký tự đó là s.
BƯỚC
3. Cài đặt
var s:string;
i,j,k,n:integer;
begin
write('nhap xau=');readln(s);
i:=1;
n:=length(s);
while (i<=n) do
begin
for k:=i+1 to n do if (s[i]=s[k]) then delete(s,k,1);
i:=i+1;
end;
n:=length(s);
writeln(' so ky tu khac nhau la:',n,' cac ky tu khac nhau la:',s);
readln;
end.
BƯỚC 4.
- Xây dựng bộ test: aabbccc
- Mở rộng bài toán: bài toán thưc hiện trên mảng số nguyên.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
Được sửa bởi tinhonline204 ngày 18/3/2010, 6:49 am; sửa lần 3.
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 6:33 am
BÀI TẬP 4.40
Đề bài: lập trình
- Nhập 1 xâu bất kì từ bàn phím
- Chuẩn hóa các xâu theo quy tắc sau
+ xóa các dấu cách đầu xâu nếu có
+ xóa các dấu cách cuối xâu nếu có
+ thay dãy nhiều dấu cách lien tiếp bằng 1 dấu cách
- Đưa kết quả đã chuẩn hoá ra màn hình.
-
BƯỚC 1:
Input: nhập xâu bất kỳ từ bàn phím
Output: đưa kết quả xâu đã chuẩn hóa ra màn hình
BƯỚC
2:
B1: Nhập xâu
B2: Nếu st[1]= #32 thì delete (st,1,1); Quay lại B2.
Còn không thì qua B3
B3: Nếu st[ length(st)]= #32 thì delete (st, length(st),1).Quay lại B3
Còn không thì qua B4
B4: Nếu pos (#32#32,st) <> 0 thì delete
(st,pos(#32#32 ,st),1);
Quay lại B4.
Còn không thì qua B5.
B5: In ra xâu sau khi chuẩn hóa.Kết thúc
BƯỚC 3:
Program xau;
Var st: string ;
i: byte;
Begin
Write (‘ nhap xau:’ ) ;readln (st);
While st[1]= #32 do delete (st,1,1);
While st[ length(st)] = #32 do delete (st, length(st),1);
While pos (#32#32,st) <> 0 do delete (st,pos(#32#32 ,st),1);
Writeln (‘xau sau khi chuan hoa la:’, st);
Readln ;
END.
BƯỚC 4:
- Xây dựng bộ text
Nhập xâu Lê văn hoàng
Xâu đã chuẩn hóa là: Lê văn hoàng
- Mở rộng bài toán
Đếm số từ có trong xâu
_________________ Nguyễn
Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 6:34 am
Bài tập 4.42
Bước 1 :
Input: Nhập n và xâu chứa màu sắc các viên đá.
Output : Vị trí mắc khóa.
Bước 2 :
B1: Nhập xâu
B2 : i:=1;n:=length(s);
B3 : Nếu i<=n thì
Xâu S1 được gán bằng xâu con từ S[1] đến S[i-1] từ xâu S
Xâu S2 được gán bằng xâu con copy S[i] đến S[n-i+1] từ xâu S
Xâu S3 được gán bằng xâu S1 được gán vào sau xâu S2
Kiểm tra đối xứng của xâu S3
Đúng thì thong báo vị trí khóa i
i= i+1
Quay lại B3
Còn không thì kết thúc.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 6:34 am
BÀI TẬP 4.43
Bước 1:
- Input: nhập n
Nhập dãy gồm n số nguyên
-
Output: Thông báo số lượng số lẻ
Bước 2:
Ý tưởng thuật toán
B1: Nhập n
Nhập dãy n số nguyên
B2: dem:=0; i:=1;
B3: nếu i<= n thì
Nếu a[i] mod 2=0 thì write(a[i]), dem:=dem +1
i:=i+1; quay lại B3.
Còn không thì qua B4.
B4: in ra số lượng số lẻ: dem. Kết thúc.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 6:35 am
BÀI TẬP 4.41
BƯỚC
1:
-input: xâu s
- output:số từ của xâu
BƯỚC 2
: ý tưởng thuật toán
B1: nhập xâu s
B2: xóa các kí tự trắng dư thừa trong xâu
B2.1: Nếu s[1]= #32 thì delete (s,1,1); Quay lại B2.1.
Còn không thì qua B2.2
B2.2.Nếu s[ length(s)]= #32 thì delete (s, length(s),1).Quay lại B2.2
Còn không thì qua B2.3
B2.3.Nếu pos (#32#32,s) <> 0 thì delete (s,pos(#32#32 ,s),1); Quay lại B2.3.
Còn không thì qua B2.4.
B2.4. Nếu pos(‘ .’,s)<>0 thì delete(s,pos(‘ .’,s),1);Quay lại B2.4.
Còn không thì qua B2.5.
B2.5. . Nếu pos(‘ ,’,s)<>0 thì delete(s,pos(‘ ,’,s),1);Quay lại B2.4.
Còn không thì kết thúc.
B3: dem:=0; st:=s
B4: nếu pos (#32,st) <> 0 thì dem:=dem+1
Xóa trong xâu st 1 kí tự kể từ vị trí tìm thấy kí tự trắng.
Quay lại B4
Còn không thì qua B5.
B5: đưa kết quả ra
màn hình: số từ trong xâu là dem+1.kết thúc.
BƯỚC 3
: Cài đặt
var st,S:string;
dem:byte;
procedure xoa(var st1:string);
begin
while st1[1]=#32 do
delete(st1,1,1);
while st1[length(st1)]=#32 do
delete(st1,length(st1),1);
while pos(#32#32,st1)>0 do
delete(st1,pos(#32#32,st1),1);
while pos(‘ .’,st1)>0 do
delete(st1,pos(‘ .’,st1),1);
while pos(‘ ,’,st1)>0 do
delete(st1,pos(‘ ,’,st1),1);
end;
BEGIN
write('nhap xau s=');readln(s);
xoa(s);
st:=s;
while pos(#32,st)<>0
do
begin
dem:=dem+1;
delete(st,pos(#32,st),1);
end;
writeln('so tu co trong xau la:', dem+1);
readln;
END.
BƯỚC 4
:
- Text: nhập xâu :”lop tin 3a”. Số từ trong xâu là: 3.
- Mở rộng bài toán: in ra từ đầu tiên của xâu.
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:45 am
chu nhan cua nhung bai nay thong cam cho minh nghe. minh chi post len cho cac thanh vien khac tham khao thoi. hehehehehe... nhung bai nay khong dung hoan toan, ai cop ve xem thi nho chinh sua lai cho chuan rui day nghe Bài tập 4.44, trang 47, sách bài tập tin học lớp 11.
Hãy lập trình:
· Nhập từ bàn phím dãy số nguyên khác 0. Dấu hiệu kết thúc nhập là số 0.
· Đưa ra màn hình:
+ Số lượng các số đã nhập (không kể số 0 – dấu hiệu kết thúc);
+ Số lượng các số chia hết cho 3, nếu không có thì đưa ra số 0;
+ Số lượng các số âm chẵn,
nếu không có thì đưa ra số 0.
Bài làm:
Bước 1. Xác định bài toán.
· Input: Dãy số nguyên khác 0.
· Output: + Số lượng các số đã nhập (dem).
+ Số lượng các số chia hết cho
3 (dem1).
+ Số lượng các số âm chẵn (dem2).
Bước 2. Ý tưởng giải thuật.
Liệt kê các bước.
· Bước 1) Nhập dãy số nguyên khác 0 lưu vào mảng a (dấu hiệu kết thúc nhập là số 0);
· Bước 2)
i:=1; dem:=0; dem1:=0; dem2:=0;
· Bước 3) * Nếu a = 0 thì qua Bước 5;
* Ngược lại:
+ Inc(dem);
+ Nếu ((a[j]>0) and (a[j] mod 3=0)) thì Inc(dem1);
+ Nếu ((a[j]<0) and (abs(a[j]) mod 2=0)) thì Inc(dem2);
· Bước 4) Inc(i), rồi quay lại Bước 3;
· Bước 5) In ra màn hình giá trị của các biến dem, dem1, dem2.
· Bước 6) Dừng.
Bước 3[i]. Chương trình.
program dem_so_phan_tu_trong_mang;
var i, j, dem, dem1, dems2: integer;
a: array [1..100] of integer;
begin
i:=0;
repeat
i:=i+1;
write(' moi nhap so nguyen thu ', i ,': ');
readln(a[i]);
until (a[i]=0);
dem1:=0;
dem2:=0;
dem:=0;
j:=1;
while (a[j]<>0) do
begin
dem:=dem+1;
if (a[j] mod 3=0) then
dem1:=dem1+1;
if ((a[j]<0) and (a[j] mod 2=0)) then
dem2:=dem2+1;
j:=j+1;
end;
writeln;
writeln('so luong cac so da nhap la: ', dem);
writeln('so cac so chia het cho 3 la: ', dem1);
writeln('so cac so am chan la: ', dem2);
readln;
end.
Bước
4. Kiểm thử và mở rộng bài toán.
+ Mở rộng bài toán.
* Bài toán 1. Hãy lập trình:
Nhập từ bàn phím dãy số nguyên khác 0. Dấu hiệu kết thúc nhập là số 0.
Đưa ra màn hình: + Các số chia hết cho 3.
+ Các số âm chẵn.
* Bài
toán 2. Hãy lập trình:
Nhập từ bàn phím dãy số nguyên khác 0. Dấu hiệu kết thúc nhập là số 0.
Đưa ra màn hình: Các số nguyên tố và tổng bình phương của chúng.
* Bài toán 3. Hãy lập trình:
Nhập từ bàn phím dãy số nguyên khác 0. Dấu hiệu kết thúc nhập là số 0.
Đưa ra màn hình: +
Dãy con tăng có số phần tử lớn nhất
* Bài toán 4. Hãy lập trình:
Nhập từ bàn phím dãy số nguyên khác 0. Dấu hiệu kết thúc nhập là số 0.
Đưa ra màn hình: + Các số nguyên tố trong dãy và tổng bình phương của chúng.
* Bài toán 5. Hãy lập trình:
Nhập từ bàn phím dãy số nguyên
khác 0. Dấu hiệu kết thúc nhập là số 0.
Đưa ra màn hình: + + Xác định xem dãy có phải cấp số cộng không.
+ Xác định xem dãy có phải cấp số nhân không.
_________________ Binladen & bus doi ban cung
tien
num: 01682686189 school: DHSP Hue
Được sửa bởi thanhluan_audio ngày 18/3/2010, 8:55 am; sửa lần 1.
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:46 am
Bài 4.45 – SBT tin học 11.
Bước 1:
Input: k, dãy số an ( gồm a1,a2,...,an).
Output: - Số lượng các phần tử a < k.
- Tổng các phần tử a[i] < k.
Bước 2: Xây dựng ý tưởng.
B1: Nhập dãy số an và giá trị k
B2: d:= 0; s:= 0;i=1;
B3: Nếu a[i]=0 thì qua B4, ngược lại thì
+ Kiểm tra a[i] < k đúng thì : +d := d+1;
+S := s+a[i];
+
i:= i+1 quay lại B3;
B4: Thông báo có d số và tổng s;
B5: Dừng.
Bước 3: Cài đặt
[i]
Program DEM_TONG;
Var i,d,k,s : integer;
a :array[1..200] of integer;
Begin
Write('nhap day so:');n:=0;
Repeat
Write('a[',i,']=');
Readln(a[i]);
n:=n+1;
Until(a[i]= 0);
Write ('nhap vao
gia tri k=');
Readln(k);
d:= 0; s:= 0;
for i:= 1 to n do
if a[i] < k then
begin
d:= d+1;
s:= s+ a[i];
end;
if d = 0 then write ('khong co phan tu nao nho hon k' )
else
begin
writeln(‘co’,d,’phan tu nho hon k’);
writeln(‘tong cua chung la: ’,s);
end;
readln;
End.
Bước 4: Xây dựng bộ test.
An : 1,3,7,2,8 (n=5); k= 5;
i=1: a[1]=1i=2: a[2]=3i=3: a[3]=7>k=5 nên d=2 và s=4; i=3+1;i=4: a[4]=2i=5: a[5]=8>k=5 nên d=3; s=6; i=5+1>n,Dừng.
_________________ Binladen & bus doi ban cung
tien
num: 01682686189 school: DHSP Hue
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:48 am
Bài 4.46(tr47-bttinhoc11)
B1: Tìm hiểu nội dung đề bài.
+ Input: Số nguyên N(1 20) và dãy số thực B1, B2,...Bn.+ Output: - Số nguyên K(số lượng số trong dãy có giá trị nhỏ hơn số bên
trái cạnh nó).- Số thứ tự i và số thực Bi nhỏ hơn số bên trái cạnh nó.
B2: Hình thành ý tưởng, giải thuật.
B1: Nhập số nguyên N và dãy số thực B1, B2,...Bn. B2: i:=2; K:=0; B3: Nếu iN thì+ Nếu B[i-1]>B thì K:=K+1, hiển thị giá trị i và B[i] .+ i:=i+1 quay lại B2. B4: Thông báo có K số có giá trị nhỏ hơn số bên trái cạnh nó.B5: Dừng.
B3: Cài đặt.
[i]
Program dayso;
var K,N,i: integer;
B: array[1..20] of real;
BEGIN
write('nhap n= '); readln(n);
for i:=1 to n do
begin
write('nhap B[',i,']= '); readln(B[i]);
end;
k:=0;
for i:=2 to n do
if B[i-1]>B[i] then
begin
k:=k+1;
writeln(i,' ',B[i]);
end;
writeln('co tat ca ',k,' so thoa man');
readln;
END.
B4: Xây dựng bộ text và mở rộng
+ Mở rộng bài toán
Bài toán 1: Nhập vào số nguyên N và dãy N số thực. Cho biết có bao nhiêu số chia hết cho số bên trái cạnh nó trong dãy.Bài toán 2: Nhập vào N số thực. Cho biết trong dãy vừa nhập vào có bao nhiêu dãy con tăng(giảm). Hãy đưa ra màn hình các dãy đó (mỗi số cách nhau một dấu cách, mỗi dãy một dòng).
_________________ Binladen & bus doi ban cung
tien
num: 01682686189 school: DHSP Hue
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:48 am
Bài 4.47
B1. Input, output.
Input: Cho khai báo kiểu mảng của các bản ghi, với các bản ghi có các trường:
hocsinh= record
hoten:string[30];
ngaysinh:string[10];
gioitinh:Boolean;
Tin,Toan,Li,Hoa,Su,Dia,Van:real;
End;
Var lop:array[1..60] of hocsinh;
Output: Khai báo lại dưới dạng mảng.
B2.Ý
tưởng phương pháp.
- Tách các trường riêng rẽ mỗi trường là một mảng, có thể gộp các trường cùng kiểu dữ liệu chuẩn trong một khai báo.
Cách 1:
+ ngaysinh, hoten:array[1..60] of string;
+ gioitinh:array[1..60] of boolean;
+ toan,li,hoa,tin,van,su,dia:array[1..60] of real;
Cách 2:
+ ngaysinh, hoten:array[1..60] of string;
+ gioitinh:array[1..60] of boolean;
+ diem:array[1..60,1..7]
B3. Giải thuật minh họa
Ta có thể lấy ví dụ sau làm minh họa cho cách 1 khai báo trên.
Program quanlilophoc;
Var ngaysinh,hoten:array[1..60] of string;
Gioitinh:array[1..60] of boolean;
Toan,li,hoa:array[1..60] of integer;
I, N:integer;
Begin
Write(‘ Nhập vào số học
sinh:’);readln(n);
For i:=1 to n do
Begin
Writeln(‘ Họ tên hoc sinh thứ : ’,i);readln(hoten);
Write(‘ gioi tinh la:’);readln(gioitinh[i]);
Write(‘diem toan la:’); readln(toan[i]);
Write(‘ diem li la:’);
readln(li[i]);
Write(‘diem hoa la:’);readln(hoa[i]);
End;
Readln;
End.
B4. Mở rộng.
Khi làm các bài toán có dạng như trên giúp học sinh thấy được sự tối ưu của kiểu bản ghi so với kiêu
mảng.
Bài 4.48
Có thể thay thế mảng 1 chiều N phần tử, mỗi phần tử là một bản ghi có 2 trường bằng mảng 2 chiều có N hàng và 2 cột không?
Trả lời:
Bước 1:
Input: mảng 1 chiều n phần tử, mỗi phần tử là 1 bản ghi co trường,
Mảng 2 chiều
Output: Yes /No Kết luận thay thế mảng.
Bước 2: Ý tưởng
B1: Xét mảng 1 chiều có n phần tử;
+ Mảng 1 chiều các phần tử phải có cùng một kiểu dữ liệu
B2: Bản ghi;
+ Các trường của bản ghi có
kiểu dữ liệu có thể khác nhau .
Kết luận: Không thể thay thế.
_________________ Binladen & bus doi ban cung tien
num: 01682686189 school: DHSP
Hue
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:49 am
Bài 4.29:
Bước 1
:
- Input: Ngôn ngữ khởi tạo hằng nguyên bao gồm 4 câu lệnh ( Plush2, Minus1, Inc, Dup ), số nguyên N
- Output: Dãy câu lệnh cho kết quả thực hiện là số nguyên N
Bước 2:
- Ý tưởng: + Với N > 0, khởi tạo Plush2, trong khi kết quả thực hiên vẫn còn < N thì tiếp tục nhân đôi ( Dup ), sau đó dùng Inc để được kết quả cần có
+ Với N < 0, khởi
tạo Minus1, các bước còn lại tương tự
- Diễn tả thuật toán:
Liệt kê các bước:
B1
: Nhập N;
B2
: Nếu N > 0 thì qua B3
Còn không: qua B6
B3
: i:=1, viết ‘ Plush2 ’;
B4
: Nếu 2*I <= N thì: i:=2*i và viết ‘ Dup ’ → Quay lại B4;
If (iEnd;EndElse If (n<0)
then Begini:=-1;Writeln(‘Minus1’);While ( 2*i >= n ) doBegini:= 2*i;writeln(‘ Dup’);If (iEnd;End;End.
Bước 4
: - Xây dựng bộ test:Với n = 4 ta có:
Plush2
Dup
Dup
Với N = -3 ta có:
Minus1
Dup
Dup
Inc
- Mở rộng bài toán:
_________________ Binladen & bus doi ban cung
tien
num: 01682686189 school: DHSP Hue
Được sửa bởi thanhluan_audio ngày 18/3/2010, 8:51 am; sửa lần 1.
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:50 am
Bài 4.30:
Bước 1
: Xác định Input, output
- Input: Bộ 8 số biểu diễn tọa độ các điểm trên trái,dưới phải của 2 cửa sổ.
- Output: Số
điểm chung của 2 cửa sổ.
Bước 2
: Thuật toán
- B1: nhập tọa độ các đỉnh của 2 cửa sổ
- B2: Hoán đổi cách lưu cửa sổ sao cho cửa sổ thứ nhất quy ước là nằm bên trái.
-
B3: Nếu (x2>=x3 ) and (y3<=y2) thì số giao điểm là (x2-x3+1)*(y2-y3+1)
Nếu không thì số giao điểm là 0.
- B4: Nếu x2Sơ đồ khối của thuật toán:
Bước 3:
Chương
trình:program sogiaodiem;uses crt;var x1,y1,x2,y2,x3,y3,x4,y4:integer;procedure swap(var x1,y1,x2,y2:integer);var tx,ty:integer;begin tx:=x1; x1:=x2; x2:=tx;
ty:=y1; y1:=y2; y2:=ty;end;begin clrscr; write('Nhap toa do chocac dinh cua hinh chu nhat thu nhat: '); readln(x1,y1,x2,y2); write('Nhap toa do cho cac dinh cua hinh chu nhat thu 2: ');
readln(x3,y3,x4,y4); {hoan doi cach luu 2 hinh neu hinh 2 nam ben trai hinh 1} {dieu nay dam bao cho viec hinh 1 luon luon nam ben trai hinh 2} if(x1>x3) then begin {hoan vi cach luu 2 hinh} swap(x1,y1,x3,y3); swap(x2,y2,x4,y4); end; {tim dien tich hinh chu nhat chung} if (x2>=x3) and (y3<=y2) then write('So diem chung cua 2 cua so la:',(x2-x3+1)*(y2-y3+1)) else write('so giao diem la 0'); if(x2 readln;end.
_________________ Binladen & bus doi ban cung tien
num: 01682686189 school: DHSP Hue
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:52 am
Bài 4.31
Bước 1: xác định input và output
- input: số nguyên N (11,A2,...,An trong đó có ít nhất 2 số 0.
- output: tổng
của dãy số nằm giữa 2 số 0 đầu tiên.
Bước 2:
- b1: nhập N và dãy N số nguyên
- b2: tìm vị trí số 0 đầu tiên lưu vào i, vị trí số 0 thứ 2 lưu vào j
- b3: tính tổng của dãy số nằm giữa i và j
- nếu i = j thì
tong = 0
- b4: thông báo tổng tính được ra màn hình
- b5: dừng
Bước 3: viết chương trình
Program tinh_tong;
Var N, i, j, S,b : integer;
A:
array[1..60] of integer;
Begin
Writre (‘ nhập N=’); readln(N);
For b:= 1 to N do
Begin
Write (‘nhập dãy AN’);
Write (‘A[‘,b,’]=’); readln(A);
End;
While b<= N do
Begin
If A[b]=0 then if i=0 then i:=b
else
begin
j:= b;
end;
if j <> 0 then break
else b:= b+1;
end ;
S:= 0
if i <> j then
for b:= i+ 1 to j – 1 do
S:= S+ A[b];
Write (‘ tổng cần tìm là:’,S);
Readln;
End.
[b]Bước 4:
-Xây dựng bộ test:
+ n = 3, dãy : 0 1 0 → tổng:
1
+ n =5, dãy: 1 0 4 5 0 2→tổng: 9
+ n=2, dãy: 3 4→tổng: 7
_________________ Binladen & bus doi ban cung tien
num:
01682686189 school: DHSP Hue
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:52 am
Bài 4.32
Bước 1
: Xác định input,output
- Input: 2 số m,n và 2 dãy a[n] và b[m].
- Output : dãy D[m+1] là dãy thỏa mãn:
+ d[0]= số các phần tử trong a[n] <=b[1];
+ d[i]= số các phần tử trong a[n] sao cho a[k]>=b[i] và a[k]<=b[i+1]
+ d[m]= số các phần tử trong dãy a[n] >=b[m]
Bước 2
: Giải thuật
+B1 : Nhập vào 2 số m,nn và 2 dãy
a[n],b[m];
+ B2: Tính d[0]: Duyệt từ đầu a[n] đến cuối mảng khi gặp phần tử thỏa a[i]<=b[1] thì gán d[0]:=d[0]+1;
+ B3: Tính các d[i] (i=1,..m-1): Duyệt từ b[1] đến b[m-1] tìm các phần tử trong dãy a[n] sao cho phần tử đó có giá trị nằm giữa 2 phần tử của dãy b đang xét tới. Mỗi lần tìm được tăng biến đếm lên 1.
+
B4: Tính d[m].
+B5: In kết quả.
Bước 3
: Chương trình:
program bai432 ;
var m,n,i,j,l,k,z,t:integer;
a:array[1..100] of integer;
b:array[1..100] of
integer;
d:array[0..101] of integer;
begin
write('nhap 2 so m va n:');
readln(m,n);
writeln('Nhap day a:');
for i:=1 to n do
begin
writeln('nhap a[',i,']=');
readln(a[i]);
end;
writeln('Nhap day b:');
for j:=1 to m do
begin
writeln('nhap b[',j,']=');
readln(a[j]);
end;
{dem so luong trong day a nho hon b1}
d[0]:=0;
for k:=1 to n do
if(a[k] for l:=1 to n do if(a[l]>=b[m]) then d[m+1]:=d[m+1]+1; for z:=1 to m-1 do for t:=1 to n do if(a[t]>=b[z]) and (a[t]<=b[z+1]) then
d[z]:=d[z]+1; writeln('Ket qua :'); for i:=1 to n do write(d[i]:5);end.
_________________ Binladen & bus doi ban cung
tien
num: 01682686189 school: DHSP Hue
thanhluan_audio Địa chủ
Tổng số bài gửi : 106 Điểm : 249 Reputation : 0 Birthday :
03/02/1988 Join date : 22/10/2009 Age : 34 Đến từ : Đông Hà - Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 8:53 am
Bài 4.33:
Bước 1: Tìm hiểu nội dung đề bài
Input D, M, Y ( ngày, tháng, năm)
Output Dtruoc, Dsau, Mtruoc, Msau
Bước 2: Hình thành giải thuật
* Giảm ngày
:
B1: Dtruoc:= D-1; Mtruoc:= M;
B2: Nếu Dtruoc = 0 Thì
Dtruoc:= SNTT( Mtruoc -1 );
Mtruoc:= Mtruoc – 1;
Nếu Mtruoc = 0 thì Mtruoc:= 12
* Tăng ngày:
B1: Dsau: = D + 1;
Msau:= M;
B2: Nếu Dsau > SNTT( Msau, Y) Thì
Dsau:= 1;
Msau:= M+1;
Nếu Msau > 12 Thì Msau:= 1;
Bước 3: Cài đặt
Program Timngay;
Var
Function SNTT( M,Y:integer):integer;
Var
Begin
Case M of
1,3,5,7,8,10,12: SNTT:= 31;
4,6,9,11: SNTT:= 30;
Else If (Ymod 400 = 0) or (Y mod 4 =0) and (Y mod 100<>0))
Then
SNTT:=29
Else SNTT:= 28;
End;
End;
Begin
{* Tang ngay *}
Dsau:= D +1;
Msau:= M;
If Dsau > SNTT(Msau, Y) Then
Begin
Dsau:= 1;
Msau:= M+1;
If Msau >12 Then Msau:=1;
End;
(* Giam ngay *}
Dtruoc:= D-1;
Mtruoc:= M;
If Dtruoc:= 0 Then
Begin
Dtruoc:=SNTT(Mtruoc – 1, Y);
Mtruoc:=Mtruoc – 1;
If Mtruoc:= 0 Then Mtruoc:=12;
End;
End.
_________________ Binladen & bus doi ban cung tien
num: 01682686189 school: DHSP Hue
nguyenanhtuan Tá điền
Tổng số bài gửi : 97 Điểm : 176 Reputation : 1 Birthday :
25/02/1988 Join date : 28/11/2009 Age : 34 Đến từ : Quảng Trị
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
18/3/2010, 9:23 pm
Khi xem xong bài 4.39 thì mình thấy bài này mình có thể giảm độ phức tạp xuống 1 tí cho chạy nhanh hơn, tức là làm mịn 1 tí thôi. Theo như thuật toán thì vòng For thứ 2 sẽ chạy đến n mặc dù có thể nó chạy như vậy là không cần thiết, vì sau khi xóa các kí tự dư thừa thì độ dài của xâu không còn là n mà là n'Hết.
_________________
trunghai Tập sự
Tổng số bài gửi : 1 Điểm : 1 Reputation : 0 Birthday : 08/02/1994 Join date : 04/11/2010 Age : 28
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
4/11/2010, 12:04 pm
Co ai co bai 4.51 vs 4.53 ko????? post len dum minh vs minh dang can gap!!!!!Cam on nhiu nhen!!!!
Kanee=914 Tập sự
Tổng số bài gửi : 1 Điểm : 1 Reputation : 0 Birthday : 18/03/1994 Join date : 08/11/2010 Age : 28
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
8/11/2010, 11:24 pm
cho xin code bài 4.42 với
cực gấp:((
thuybeot42_spttn Tập sự
Tổng số bài gửi : 2 Điểm : 2 Reputation : 0 Birthday : 12/10/1990 Join date : 26/11/2010 Age : 31
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
26/11/2010, 11:21 pm
CÁI NHÀ NÀY AI CŨNG THÍCH KHOE CƠ THỂ
thuybeot42_spttn Tập sự
Tổng số bài gửi : 2 Điểm : 2 Reputation : 0 Birthday : 12/10/1990 Join date : 26/11/2010 Age : 31
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
26/11/2010, 11:25 pm
CÁI NHÀ NÀY AI CŨNG THÍCH KHOE CƠ THỂ
tinhonline204 Tỷ phú
Tổng số bài gửi : 426 Điểm : 841 Reputation : 3 Birthday :
20/04/1988 Join date : 22/10/2009 Age : 34 Đến từ : Hà Nội
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
22/4/2011, 9:55 pm
thanks tất cả
_________________ Nguyễn Đình Lý 093.20.4.1988 Y!ahoo tinhonline204
Thu Hồng Tập sự
Tổng số bài gửi : 1 Điểm : 1 Reputation : 0 Birthday : 12/03/1989 Join date : 09/04/2014 Age : 33
Tiêu đề: Re: Mời các bạn giải bài tập Tin Học 11
9/4/2014, 11:16 pm
có bạn nào giải đc bài 4.25 chưa? up hộ code lên m xem với.