MÔN PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC Họ và tên: Trần Thị Lan

Một phần của tài liệu phương pháp giải bài tập tin học lớp 11 (Trang 156 - 171)

- Viết chương trình: Program In_min;

MÔN PHƯƠNG PHÁP GIẢI BÀI TẬP TIN HỌC Họ và tên: Trần Thị Lan

Họ và tên: Trần Thị Lan

Lớp : Tin 4B

Đề bài:

Câu 1: (3.37 – SBT Tin học 11)

Trên thế giới chỉ có một quốc gia có quốc kì không phải là hình chữ nhật. Ở các nước còn lại, trong đó có có Việt Nam, quốc kì có hình chữ nhật. Hình chức nhật của lá quốc kì phải là hình chữ nhật cân đối nhất. Độ dài các cạnh lá quốc kì phải tuân thủ quy tắc thiết diện vàng. Nếu gọi x là chiều dài và y là chiều rộng của quốc kì, thì ta có: y =

5 1

2 x

.

Người ta may N (2≤N≤10) lá quốc kì, chiều dài lá quốc kì thứ i bằng độ cao lá quốc kì thứ i – 1, i =

2, 3,. . .,N.

Cho biết chiều rộng y của lá quốc kì thứ K trong số N lá quốc kì đã được may (1≤K≤N). Viết đoạn

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Câu 2: (5.10 SBT Tin học 11)

Cho một tệp văn bản ORD1.DAT và ORD2.DAT mỗi dòng của tệp chứa một số nguyên có giá trị tuyệt đối không vượt quá 2 147 483 647. Trong mỗi tệp, các số đã được sắp xếp theo thứ tự không giảm. Hãy lập trình hợp nhất hai tệp này thành văn bản ORD.DAT mỗi dòng chứa một số nguyên, sao cho các số vẫn giữ nguyên thứ tự không giảm.

Bài làm: Câu 1:

Bước 1: Tìm hiểu đề bài

Xác định yếu tố kiến thức được cung cấp May N lá quốc kì (2≤N≤10).

Nếu chiều rộng lá quốc kì là x thì chiều dài lá quốc kì là y = 5 1

2 x

Chiều dài lá quốc kì thứ i bằng độ cao lá quốc kì thứ i -1, i = 2, 3, . . ., N Cho biết chiều rộng y của lá quốc kì thứ K (1≤K≤N).

Xác định các yêu cầu cần giải quyết Viết đoạn chương trình tính:

- Chiều rộng, chiều dài lá quốc kì lớn nhất. - Chiếu rộng, chiều dài lá quốc kì nhỏ nhất. Bước 2: Xây dựng ý tưởng giải thuật

Các kiến thức liên quan

Tìm Max, Min của một dãy số.

Sử dụng cấu trúc lặp để nhập N, K theo điều kiện: (2≤N≤10), (1≤K≤N).

Biết y từ đó suy ra x = 2*y/(sqrt(5) – 1) Định hướng xây dựng giải thuật

Vì N, K đề bài đã cho nên ta sử dụng vòng lặp để tính chiều rộng, chiều dài của hình chữ nhật lớn nhất và nhỏ nhất.

Chiều dài lá quốc kì thứ i bằng độ cao lá quốc kì thứ i -1, mà biết chiều rộng lá quốc kì thứ K. Do đó, để tìm Max chiều rộng, Max chiều dài của lá quốc kì ta duyệt từ lá quốc kì thứ K-1 về lá quốc kì thứ 1. Để tìm Min chiều rộng, Min chiều dài của lá quốc kì ta duyệt từ lá quốc kì thứ K+1 tới lá quốc kì thứ N.

Thể hiện giải thuật B1: Nhập chiều rộng ỵ (adsbygoogle = window.adsbygoogle || []).push({});

B2: Nếu y <= 0 thì quay lại B1. B3: Nhập N (số lá quốc kì cần may)

B4: Nếu (N < 2) or (N > 10) thì quay lại B3.

B5: Nhập K (là lá quốc kì thứ K trong N lá quốc kì cần may) B6: Nếu (K < 1) or (K > N) thì quay lại B5.

B7: Gán: tgy : = y; t : = sqrt(5) – 1; x: = 2*y/t; tgx : = x; B8: Nếu i > K – 1 thì chuyển tới B12.

B9: - Thực hiện gán: tgy : = tgx; tgx : = 2*tgy/ t; i: = K - 1; i: = K - 2 ;

Chuyển đến B12.

B10: In ra giá trị tgy, tgx.

B11: - Thực hiện: tgx : = tgy; tgy : = t*tgx / 2; i: = K + 1 i: = K + 2;

Chuyển đến B12. B12: Kết thúc.

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Trình bày lời giải Program LAQUOCKI; Uses crt; Var k, n, i: integer; t, x, y, tgy, tgx : real; Begin clrscr; y:=0; While y <= 0 do Begin

Write('Nhap vao gia tri chieu rong y:'); Readln(y); If (y = 0) then Writeln('Moi ban nhap laí);

End; Repeat

Write('Nhap vao gia tri n:'); Readln(n);

If ( n<2) and ( n>10 )then Writeln('Moi ban nhap lai gia tri n'); Until ( n>=2) and ( n<=10 ) ;

k:=0; Repeat

Write('Nhap vao gia tri k:'); Readln(k);

If ( k<1) and ( k>n )then Writeln('Moi ban nhap lai k'); Until ( k>=1) and ( k<=n) ;

tgy:=y; t:= sqrt(5)-1; x:=2*y/t; tgx:=x; For i:=k -1 downto 1 do

Begin tgy:=tgx; tgx:=2*tgy/t; End;

Writeln('Chieu dai va chieu rong lon nhat cua la quoc ki:'); Writeln(tgx:6:2,' ',tgy:6:2); Readln;

tgy:=y; tgx:=x; For i:=k+1 to n do Begin tgx:=tgy; tgy:=t*tgx/2; End;

Writeln('Chieu dai va chieu rong be nhat cua la quoc ki:'); Writeln(tgx:6:2,' ',tgy:6:2); Readln;

End.

Bước 4: Nghiên cứu về lời giải

Xây dựng bộ Test: Cho N = 6, K = 2, y = 4 Câu 2:

Bước 1: Tìm hiểu đề bài

Xác định yếu tố kiến thức được cung cấp

Cho hai tệp ORD1.DAT và ORD2.DAT mỗi dòng chứa 1 số nguyên (trị tuyệt đối của n < 2 147 483 647)

Các số được sắp xếp không giảm (tăng) Xác định các yêu cầu cần giải quyết (adsbygoogle = window.adsbygoogle || []).push({});

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Hợp 2 tệp thành tệp ORD.DAT sao cho mỗi dòng chứa 1 số nguyên theo chiều tăng. Bước 2: Xây dựng ý tưởng giải thuật

Các kiến thức liên quan

Các thủ tục thao tác với tệp: Mở tệp, Đọc tệp, Ghi tệp, Đóng tệp. Các hàm xử lý tệp

Sắp xếp các số trong tệp. Định hướng xây dựng giải thuật

Mở hai tệp ORD1.DAT và ORD2.DAT

Khi mà cả hai tệp còn chưa Eof(f) thì so sánh giá trị của hai tệp f1, f2. Gía trị nào nhỏ hơn thì ghi vào tệp f. Sau đó, tiếp tục so sánh giá trị còn lại với giá trị tiếp theo của tệp kiạ

Thể hiện giải thuật

B1: Mở tệp: - assign ( f, ‘ORD.DAT ); rewrite (f ); - assign (f1, ‘ORD1.DAT’); reset (f1); - assign (f2, ‘ORD2.DAT’); reset (f2); B2: Khi not eof (f1) and not eof (f2) thì:

- Khởi tạo i:= 0; j:= 0; k:= 0;

Di chuyển con trỏ file về vị trí thứ i, đọc dữ liệu từ tệp f1. Di chuyển con trỏ file về vị trí thứ j, đọc dữ liệu từ tệp f2. Nếu a <= b thì :

+ Đưa trỏ tệp về vị trí thứ k của tệp f + Ghi giá trị a vào tệp f

+ i:= i+1;

- Nguợc lại

+ Đưa trỏ tệp về vị trí thứ k của tệp f + Ghi giá trị b vào tệp f

+ j:= j+1; - k:= k+1; B3: Đóng các tệp lạị KT. Bước 3: Trình bày lời giải Program Hop_haitep; Uses CRT; Var f, f1, f2: text; a, b: real; i, j, k: integer; Begin

Assign (f,'D:\ORD.DAT'); Rewrite(f); Assign (f1,'D:\ORD1.DAT'); Reset(f1); Assign (f2,'D:\ORD2.DAT'); Reset(f2); i:=0; j:=0; k:=0;

While not eof(f1) or not eof(f2) do Begin Seek(f1,i); Read(f1, a); Seek(f2, j); Read(f2, b); If a<=b then Begin Seek(f, k);

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com Write(f, a); i:=i+1; End Else Begin Seek(f, k); Write(f, b); j:=j+1; End; k:=k+1; End;

If not eof(f1) then write(f, a); If not eof(f2) then write(f, b); Close(f1);

Close(f2); Close(f); End.

Bước 4: Nghiên cứu về lời giải Xây dựng bộ TEST:

ORD1.DAT (1, 3, 5) ORD2.DAT (3, 4, 6, 8)

Khi chạy chương trình ta được kết quả là tệp ORD.DAT chứa các giá trị sau: ORD( 1, 3, 3, 4, 5, 6, 8)

Bài 4.16) a)

Bước 1: - Input: Bảng số nguyên A kích thước 5x5 ( Nhập vào mảng 2 chiều) - Output: Tổng các phần tử trên đường chéo chính

Bước 2: + Ý tưởng giải thuật:

Họ và tên: Lê Thị Minh Tâm Lớp: Tin 4b

Môn : Phân tích chương trình phổ thông

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com (adsbygoogle = window.adsbygoogle || []).push({});

Nhập vào mảng hai chiều kích thước 5x5. Lúc đầu tổng được gán bằng 0. Sau đó cho một vòng for duyệt từ 1 đến 5 thì tổng sẽ được gán bằng tổng lúc đầu cộng với phần tử ở dòng i và cột ị

+ Sơ đồ thuật toán:

Bước 3: Viết chương trình: Program tongcc; Var i,j: Integer; Begin For i:=1 to 5 do For j:=1 to 5 do Begin Write(‘a[‘,i,’,’,j,’] =’); Readln(a[i,j]); End; S:=0;

For i:=1 to 5 do s:=s+a[i,i];

Writeln(‘Tong cac phan tu tren duong cheo chinh la:’,s); Readln;

End. Bước 4:

Chạy minh hoạ:

end Nhập mảng s:=0; i:=0; i<=5 s:=s+ a[i,i]; i:=i+1; Begin In s F T

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com 5 3 8 2 1 4 2 6 1 0 2 3 4 5 6 9 8 7 6 5 1 3 5 7 9 b)

Bước 1: - Input: Bảng số nguyên A kích thước 5x5 ( Nhập vào mảng 2 chiều) - Output: Tổng các phần tử trên đường chéo chính và phụ.

Bước 2:

+ Ý tưởng giải thuật:

Nhập mảng hai chiều kích thước 5x5. Để tính tổng các phần tử trên đường chéo chính và phụ thì ta lấy tổng các phần tử trên đường chéo chính cộng với tổng các phần tử trên đường chéo phụ rồi trừ đi phần tử ở dòng 3 và cột 3 ( Vì phần tử này được cộng 2 lần).

+ Sơ đồ thuật toán:

S a[i,i] i 0 5 7 11 17 26 5 2 4 6 9 1 2 3 4 5 F s:=s+ a[i,i]; s1:=s1+a[i,j]; i:=i+1; j:=j-1; Begin i<=5;j>=1 Nhập mảng s:=0; i:=1;j:=5; s1:=0; i:=0; In s+s1-a[3,3]] T

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Viết chương trình: Program caub; Var i,j,s,s1:integer; Begin For i:=1 to 5 do For j:=1 to 5 do Begin Write(‘a[‘,i,’,’,j,’] =’);Readln(a[i,j]); End; s:=0;s1:=0;

For i:=1 to 5 do s:=s+a[i,i]; i:=1;j:=5;

While (i<=5) and(j>=1) do .

Begin

s1:=s1+a[i,j]; i:=i+1;j:=j-1; End;

Writeln(‘tong cac phan tu tren duong cheo chinh va phu la:’,s+s1-a[3,3]); Readln

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

End.

Bước 4: Chạy minh hoạ:

5 3 8 2 14 2 6 1 0 4 2 6 1 0 2 3 4 5 6 9 8 7 6 5 1 3 5 7 9 Tong:= s+s1-a[3,3]= 26+15-4=27 6.18) a) Bước 1:

+ Input: cho khai báo kiểu dữ liệu về mảng hai chiều:

TYPE MT=array[1..50,1..50] of integer; biến B thuộc kiểu MT, có m dòng và n cột + Output: Viết thủ tục Swapline để đổi chỗ 2 dòng i và j của B.

Bước 2: Ý tưởng giải thuật:

- Viết thủ tục đổi chỗ 2 số a và b (adsbygoogle = window.adsbygoogle || []).push({});

- Thủ tục đổi chỗ 2 dòng i và j của B được viết bằng cách ta khai báo 1 biến k, cho 1 vòng For duyệt từ k=1 đến m, sau đó dùng thủ tục đổi chỗ 2 số để đổi chỗ 2 dòng i và j của B.

S a[i,j] i j 0 1 2 6 14 15 1 1 4 8 1 1 2 3 4 5 5 4 3 2 1

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Bước 3: Sơ đồ thuật toán:

Bước 4:

Procedure doicho(var a,b:integer); Var tg:integer;

Begin tg:=a;a:=b;b:=tg; End;

Procedure Swaplin( var B:MT,m,n,i,j:integer); Var k:integer; Begin For k:=1 to m do doicho(B[i,k],B[j,k]); End; b) Bước 1:

+ Input: cho khai báo kiểu dữ liệu về mảng hai chiều:

TYPE MT=array[1..50,1..50] of integer; biến B thuộc kiểu MT, có m dòng và n cột + Output: Viết thủ tục Swapcol để đổi chỗ 2 cột p và q của B.

Bước 2: Ý tưởng giải thuật:

Nhap mang B,k,i,j

F T k<=m k:=1 doicho(B[i,k],B[j,k]); k:=k+1; Begin end

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

- Viết thủ tục đổi chỗ 2 số a và b

- Thủ tục đổi chỗ 2 cột p và q của B được viết bằng cách ta khai báo 1 biến k, cho 1 vòng For duyệt từ k=1 đến n, sau đó dùng thủ tục đổi chỗ 2 số để đổi chỗ 2 cột p và q của B.

Bước 3: Sơ đồ thuật toán:

Bước 4:

Procedure doicho(var a,b:integer); Var tg:integer;

Begin tg:=a;a:=b;b:=tg; End;

Procedure Swapcol( var B:MT,m,n,p,q:integer); Var k:integer;

Begin

For k:=1 to m do doicho(B[k,p],B[k,q]); End;

Nhap mang B,k,i,j

F T k<=n k:=1 doicho(B[k,p],B[k,q]) k:=k+1; Begin end

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Họ tên : Chu Thị Phương Thủy Lớp Tin 4B

BÀI 4.26Bước 1: Bước 1:

Input: Nhập n, tọa độ đỉnh (xi,yi)

Lớp 11 Phương pháp giải bài tập Tin học – Upload by CodePascal.Blogspot.com (adsbygoogle = window.adsbygoogle || []).push({});

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

I<=n Nhap a[i].x,a[i].y, I:=i+1; I:=1; maxx:=minx:=a[1].x; Maxy:=miny:=a[1].y; T FF F F F T T T T

I<n; In toa do end

Maxx<a[i].x Maxy<a[i].y Minx>a[i].xx Miny>a[i].y Maxx:=a[i].x Mixx:=a[i].x Maxy:=a[i].y Miny:=a[i].y n Nhap n I:=1; I:=i+1 F F

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com Bước 3: Chương trình Type Diem=record x,y: real; End;

Var mang=array[1…40] of integer; Repeat

Begin

Write(‘ nhâp n:’);readln(n);

Write(‘ nhâp hoành độ:’);readln(a[i].x); Write(‘ nhâp tung độ:’);readln(a[i].y); End;

Until n<0;

For i:=1 to n do Begin

If maxx <a[i].x then maxx:=a[i].x; If minx >a[i].x then minx:=a[i].x; If maxy <a[i].y then maxy:=a[i].y; If miny >a[i].xythen miny:=a[i].y; End;

Writeln(‘toa do tren trai la:’,minx’,’maxy); Writeln(‘toa do duoi phai la:’,maxx’,’miny); Readln;

End.

BÀI 7.13Bước 1: Bước 1:

Input: nhập kí tự thuộc tập {C,F,K}, Số thực T

Output: Đưa ra màn hình 2 thang nhiệt độ còn lại

Bước 2:

Bước 1:Nhập vào một kí tự thuộc tập {C,F,K}, số thực T

Bước 2: Nếu kí tự là C thì tính Nhiệt độ K và F và in ra màn hình TF:=(9*TC)/5+32;

TK:=(TF+459.67)*5/9;

Bước 3: Nếu kí tự là F thì tính nhiệt độ C va K và in ra màn hình TC:=(5*TF+160)/9;

TK:=(TF+459.67)*5/9;

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com TC:=(5*TF+160)/9; TF:=(5*TK+160)/9; Bước 5: Dừng Bước 3: Chương trình Var ch:char; T,TC,TK,TF:real; Begin Write(‘nhap ki tu:’);readln(ch); Write(‘ nhap so thuc T:’);readln(T); End;

If ch=’C’ then Begin

TF:=(9*TC)/5+32; TK:=(TF+459.67)*5/9;

Write(‘nhiet do F khi biet nhiet do C:’,TF); Write(‘nhiet do K khi biet nhiet do C:’,TK); End;

If ch=’F’ then Begin

TC:=(5*TF+160)/9; TK:=(TF+459.67)*5/9;

Write(‘nhiet do C khi biet nhiet do F:’,TC); Write(‘nhiet do K khi biet nhiet do F:’,TK); End; (adsbygoogle = window.adsbygoogle || []).push({});

If ch=’K’ then Begin

TC:=(5*TF+160)/9; TF:=(5*TK+160)/9;

Write(‘nhiet do C khi biet nhiet do K:’,TC); Write(‘nhiet do F khi biet nhiet do K:’,TF); End;

Học Pascal online, bài tập Pascal cơ bản nâng cao: Codepascal.blogspot.com

Sinh viên: Lê Hữu Hùng Lớp: Tin 4B

Một phần của tài liệu phương pháp giải bài tập tin học lớp 11 (Trang 156 - 171)