Sinh viên: Lê Ngọc Bảo

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 43 - 56)

Lớp: Tin 4B

Bài tập: Phương pháp giải bài tập Tin Học

Bài 3.17(trang)

Bước 1:

-Input: Nhập vào 4 đỉnh có tọa độ Ăx1, y1), B(x2, y2), C(x3, y3), D(x4, y4). -Output: Tính và đưa ra độ dài hai đường chéo AC và BD

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

-Nhập vào theo theo tự 4 đỉnh Ăx1, y1), B(x2, y2), C(x3, y3), D(x4, y4) sao cho 4 đỉnh đó tạo thành 4 đỉnh của một tứ giác lồi ABCD

-Tính độ dài hai đường chéo theo công thức Ăx, y), U(u, v) d(AU)=sqrt(sqr(x-u)+ sqr(y-v))

Sơ đồ khối:

Begin

d1:= sqrt(sqr(x1-x3)+sqr(y1-y3)) d2:= sqrt(sqr(x2-x4)+sqr(y2-y4))

NhậpĂx1, y1), B(x2, y), C(x3, y3) D(x4, y4)

IN d1, d2

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

Var x1, x2, x3, x4, y1, y2, y3, y4: byte; d1, d2: real;

Begin

Write(‘Nhap vao toa do dinh A’); readln(x1, y1); Write(‘Nhap vao toa do dinh B’); readln(x2, y2); Write(‘Nhap vao toa do dinh C’); readln(x3, y3); Write(‘Nhap vao toa do dinh D’); readln(x4, y4); d1:= sqrt(sqr(x1-x3)+sqr(y1-y3));

d1:= sqrt(sqr(x2-x4)+sqr(y2-y4)); writeln(‘Do dai duong cheo AC la :’, d1); writeln(‘Do dai duong cheo BD la :’, d2); readln; End. Bước 4: Test A B C D AC BD (-2;2) (2;4) (2;-3) (-2;-2) 6.4 7.21 (-5;2) (-4;5) (4;0) (-1;-3) 9.22 8.54 (-7;5) (-5;7) (2;6) -4;-2) 9.05 9.05 (-1;1) (2;3) (4;1) (2;-2) 5 5 • Mở rộng bài toán

Xây dựng giải thuật nhập vào tọa độ đỉnh của 2 vectơ sau đó tính độ dài của 2 vectơ đó

Bài 4.38(trang)

Bước 1:

- Input: Nhập vào tọa độ điểm m(x, y)

- Output: in ra đường đi từđiểm O(0, 0) đi đến điểm M dao cho đi đủ tất cả các hướng: S, N, E , W

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

- Gán giá trj xâu S:=’’

- Duyệt theo hai giá trị x và y từ 1 đến y+1 và x+1

- Mỗi lần duyêt ta công vào xâu S một giá trị: S, W, E, N tương ứng theo các hướng -

Bước 3: Chương trình

Var x, y, i:byte; S:string; Begin

Write(‘Nhap vao toa do cua diem M’); readln(x, y); S:=’’; (adsbygoogle = window.adsbygoogle || []).push({});

If y>0 then Begin

for i:=1 to y+1 do S:=S+’N’;

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

If x>0 then

for i:=1 to abs(x)+1 do begin S:=S+’E’; End; S:=S+’S’; S:=S+’W’ else

for i:=1 to abs(x)+1 do begin S:=S+’W’; End; S:=S+’S’; S:=S+’E’; End Else Begin

for i:=1 to abs(y)+1 do S:=S+’S’;

If x>0 then

for i:=1 to abs(x)+1 do begin S:=S+’E’; End; S:=S+’N’; S:=S+’W’ else

for i:=1 to abs(x)+1 do begin S:=S+’W’; end; S:=S+’N’; S:=S+’E’; End

Writeln(‘duong di tu diem O den diem M la’, s); end.

Bước 4: Test

Điểm M Đường đi

(4;5) NNNNNNEEEEESW

(-3;2) SSSWWWWNE

(-4;3) NNNNWWWWWSE

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

Lê Thanh Phú – Tin 4B. Bài 3.48:

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

Input : N ( 1< N ≤ 1000), a, b ( a<b), F(x) Output : d của F(x)

Bước 2: Xây dựng giải thuật. B1. Nhập N, a, b B2. Tính h b a N − = Max =0 Min =+∞ i = 0; B3. Nếu i<N thì tính: + x = a + i*h; + F(x) = 5*x*x*x*x + 6*x*x*x – 4*x*x + 3*x -8 + Nếu F(x)> Max thì gán Max : = f(x)

+ Nếu F(x) < Min thì gán Min : = F(x) + tăng i lên 1

+ Quay lại bước 3 B4. Tính d = Max – min

Thông báo kết quả. Bước 3: Chương trình.

Program 3.48;

var Max, min, Fx, h: real; i, a, b, n :integer; Begin write('Nhap a: '); readln(a); write('Nhap b: '); readln(b); write('Nhap N: '); readln(N); h:=(b-a)/N;

i:=0; Max:=0; Min:=100000; while i<=N do

begin x:=a+i*h;

Fx:=6*sqr(x)*sqr(x) + 5*sqr(x)*x - 4*sqr(x) + 3*x -8; if fx>max then max:=fx;

if fx<min then min:=fx; i:=i+1; end; d:=max-min; write(d:8:4); readln; end. (adsbygoogle = window.adsbygoogle || []).push({});

Bước4: xây dựng bộ test.

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

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

- Output: n!

Bước 2: Xây dựng giải thuật B1: Nếu n = 0 thì o Gán Tmp:=1; o Sang bước 4. B2: Gán i:=0; Tmp:=1; B3: Khi i <= n thì làm: - Tăng i lên 1. - Gán Tmp := Tmp*i; - Quay lại bước 3. B4: Fact : = Tmp và kết thúc.

Bước 3: Chương trình.

Function Fact(n : byte):integer; Var i, tmp : integer; Begin If n=0 then tmp:=1 Else Begin i:=0; Tmp:=1; While i < n do Begin i := i+1; Tmp := tmp * i; End; End; Fact : = tmp; End;

Bước 4: Xây dựng bộ test. N = 4; i tmp 0 1 1 1 2 2 3 2*3 4 2*3*4

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

Họ và tên :Lê Thị Chung Lớp:Tin 4b

Câu 3.22

Hãy viết chương trình nhập toạ độ hai đỉnh đối trên trái và dưới phải của một tứ giác lồi có cạnh song song với trục toạ độ và có các toạ độ các đỉnh là nguyên. Kiểm tra xem tứ giác này có phải là hình vuông hay không? Nếu đúng thì đưa ra thông báo ‘HÌNH VUÔNG’ và diện tích của đường tròn nội tiếp. Trong trường hợp ngược lại đưa ra thông báo ‘CHỮ NHẬT’ và diện tích của hình tròn ngoại tiếp.

Giải: Bước 1:

- Input: Cho 2 đỉnh đối diện trên trái và dưới phải của tứ giác lồi có toạ độ là Ăx1, y1), B(x2, y2)

-Output: Đưa ra thông báo Bước 2:

- Ý tưởng:

Gọi toạ độ đỉnh trên trái là (x1, y1) và toạ độ đỉnh dưới phải là(x2, y2).

Điều kiện để tứ giác là hình vuông là :|x2-x1|=|y2-y1|.Bán kính đường tròn cần tính bằng một nửa cạnh hình vuông.Nếu không thoả mản điều kiện trên thì là hình chữ nhật có bán kính bằng một nữa độ dài đường chéọ

-Giải thuật

B1: Nhập 2 điểm (x1, y1) và (x2, y2) B2 : S1 :=sqr((x1-x2)/2)*3.14 ;

S2= :(sqr(x1-x2)+sqr(y1-y2))*3.14; B3 : +Nếu abs(x1-x2)=abs(y1-y2) thì

thông báo ‘HÌNHVUÔNG’ và diện tích đường tròn nội tiếp là S1 ;

+Ngược lại thì thông báo ‘HÌNH CHỮ NHẬT ‘ và diện tích đường tròn ngoại tiếp là S2 B4 :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 : Viết chương trình var x1, x2, y1, y2:integer; s1, s2:real;

begin

write('nhap toa do diem A:'); readln(x1, y1);

write('nhap toa do diem B:'); readln(x2, y2); Begin Nhập(x1, y1), (x2, y2) abs(x2-x1) =abs(y2-y1) S1:=sqr((x1-x2)/2)*3.14 S2:=(sqr(x1-x2)+ sqr(y1-y2))*3.14 Thông báo’HCN” và S2 Thông báo ‘HV’ va S1 end Đ S

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

s1:=sqr((x1-x2)/2)*3.14;

s2:=(sqr(x1-x2)+sqr(y1-y2)))*3.14 ; if (abs(x1-x2)=abs(y1-y2)) then

write('HINH VUÔNG', 'có dien tich lá, s1) else

write('HINH CHƯ NHẬT', 'co dien tich lá, s2); readln

end.

Bước 4: Xây dựng bộ test

(x1, y1) (x2, y2) abs(x1-x2) abs(y1-y2) S1 S2 Kêt quả (-2, 4) (6, -4) 8 8 50, 24 Hinh vuong

(-4, 4) (4, -2) 8 6 314 Chu nhat

Câu 4.43 Hãy lập trình:

• Nhập từ bàn phím số nguyên dương N(1<=N<=20) và N số nguyên A1, A2, ..., AN

• Đưa ra màn hình số lượng Ai lẻ và bản thân các số Ai lẻ thep trình tự xuất hiện của chúng trong dãy đã nhập.Nếu trong dãy đã nhập không có số lẻ nào thì đưa ra màn hình kết quả là một số 0

Giải:

Bước 1: Xác định điều kiện bài toán

+Input:Số nguyên dương N(1<=N<=20), dãy giá trị A1, A2, ..., AN

+Output: Đưa ra màn hình các số Ai lẻ và số lượng các số lẻ Bước 2:

-Ý tưởng: Dùng một biến đếm để đếm các số lẻ. Dùng một vòng lặp duyệt lần lượt từ phần tử thứ 1 đến phần tử thư N.Nếu kiểm tra điều kiện:

A[i] mod 2=0 thì tăng biến đếm.Thoát khỏi vòng lặp thông báo đếm và các phần tử lẻ ra màn hình.

-Giải thuật

B1: Nhập vào phần tử N.Kiểm tra đk nhập Nếu (N<1) hoặc (N>20) thì yêu cầu nhập lai; B2:for i:=1 to N

Nhập A[i] B3: d:=0; For i:=1 to N do

+Nếu A[i] mod 2<>0 thi d:=d+1;

viết(a[i]);

+ngược lại:viết(‘0’); B3:kết thúc

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

-Sơ đồ giải thuật begin Nhap N (N>=1) and(N<=2 0)

Nhap A1., .AN d:=0;i:=1; (i<N) d:=d+1 viết(‘0’) Thông báo d và viết A[i] End i:=i+1 (A[i] mod 2<>0) Đ S Đ S Đ S

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 Var N, i, d:integer;

a:array[1..100] of integer; begin

repeat (adsbygoogle = window.adsbygoogle || []).push({});

write('nhap songuyen duong'); readln(N); until (N>=1) and (N<=20); for i:=1 to N do begin write('nhap a[i]'); readln(a[i]); end; d:=0; for i:=1 to N do if (a[i]mod 2<>0) then begin d:=d+1; write(a[i]); end; write('0'); readln end. Bước 4: Xây dựng bộ test N=9 i 1 2 3 4 5 6 7 8 9 A[i] 5 7 6 7 8 9 1 3 2 A[i] mod 2 1 1 0 1 0 1 1 1 0 d 1 2 2 3 3 4 5 6 6 Kết qủa:d=6;

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

Họ và Tên : Bùi Minh Phương Lớp: Tin 4B

Bài tâp. 4.8 ( sách bài tập tin hoc lớp 11)

Bước1: * Xác định intput của bài toán

- Dãy số thực q=(q1,q2,…,qn) ( 2 ≤n≤100), |qi| <104,i=1,…,n.)

-Chương trình sau thực hiện việc tìm phần tử lớn nhất và lớn thứ hai của dãyq. Program C4B8;

Var q:array[1..100] of real; a,b:real; n,i:integer; BEGIN write(‘ N= ‘ ); readln(n); For i:=1 to n do begin Write(‘q[‘,i:2,’]= ‘); readln(q[i]); end; a:=q[1]; for i:=1 to n do

if a<q[i] then a:= q[i]; b:=-1.0e4 ;

for i:= 1 to n do

if (q[i])<a ) and ( a[i]>b) then b:=q[i]; writeln(‘A= ‘,a:10:4,’B= ‘,b:10:4); END.

*Xác định output

Sửa lại chương trình trên để đưa ra phần tử nhỏ nhất và phần tử nhỏ thứ hai khác phần tử nhỏ nhất .

Bước 2: Xây dựng ý tưởng giải thuật.

-Gán giá trị đầu tin của dãy bằng a a:= q[1];

-Duyệt với tất cả các phần tử còn lại và so sánh a với các phần tử còn lại để tìm ra phần tử nhỏ nhất trong dãỵ

-Gán b bằng một giá trị lớn nhất của dãy b:=+1.0e4;

-Duyệt với tất cả các phần tử còn lại của dãy và tìm ra phần tử nhỏ thứ hai

Bước 3: Chương trình:

Program C4B8;

Var q:array[1..100] of real; a,b:real; n,i:integer; BEGIN write(‘ N= ‘ ); readln(n); For i:=1 to n do begin

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

Write(‘q[‘,i:2,’]= ‘); readln(q[i]); end;

a:=q[1];

for i:=1 to n do

if a>q[i] then a:= q[i]; b:=+1.0e4 ;

for i:= 1 to n do

if (q[i])>a) and ( a[i]<b) then b:=q[i]; writeln(‘A= ‘,a:10:4,’B= ‘,b:10:4); END.

Bước 4: Mở rộng bài toán: Sửa lại chương trình trên để đưa ra phần tử nhỏ nhất và phần tử lớn nhất của dãy

Baì tập 6.12 ( sách bài tập tin học 11) (adsbygoogle = window.adsbygoogle || []).push({});

Bước 1: *Xác địng intput của bài toán

-Cho hàm SUMGDIT(n) trả về giá trị là tổng các chữ số của n -Cho số nguyên dương n với 0<n<2*109 và n∈Longint

-Chương trình kết thúc khi nhập vào số 0 hoặc số âm *Xác định output

Đưa tổng các chữ số của n ra màn hình? Bước 2: Xây dựng ý tưởng giải thuật

-Gán giá trị ban đầu S:=0;

-Chừng nào n >0 thì còn tiếp tục còn làm

+Gán s bằng s cộng với phần dư của n mod 10 +Gán n bằng phần nguyên của n div 10

- Trả về giá trị cho hàm bằng S.S=SUMGDIT(n); *Sơ đồ khối Bước 3 : Chương trình Progam C6B12; Var n: longint;

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

FUNCTION SUMDIGIT(n:longint): integer; Var s:longint; Begin S:=0; While n>0 do Begin S: =S+n mod 10; n:=n div 10; End; BEGIN n:=1; while n>0 do begin

wite (‘ nhap gia tri n= ‘); readln(n); if>0 then wite( SUMDIGIT(n)); ed; Readln; END. Bước 4: Bộ text n S 11 0 1 1 0 2

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

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 43 - 56)