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:=’’;
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.
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
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
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)
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