- Để tính tổng binh phương các chử số thì ta phải lấy ra được các chử số của số đó. - Cách lấy các chử số trong một số:kết hợp hai toán tử MOD và DIV ta sẽ lần lượt lấy được từng số dư [r]
(1)Ô
ÔNN TTẬẬPP 1111 V
VIIẾẾTT CCHHƯƯƠƠNNGG TTRRÌÌNNHH GGIIẢẢII BBÀÀII TTOOÁÁNN SSAAUU T
TRROONNGGSSÁÁCCHH BBÀÀII TTẬẬPP TTIINN 1111
PHẦN 1: LÝ THUYẾT
1. CẤU TRÚC RẼ NHÁNH
2. CẤU TRÚC LẶP
PHẦN 2: BÀI TẬP
Bài 1: Bài tập 3.34: SỐ FIBONAXI)
1 Tìm hiểu đề bài:
Dữ liệu vào: Khơng có
Dữ liệu ra: Tệp văn FIBO.DAT gồm 45 dòng Mỗi dòng số Fibonaccy Xây dựng ý tưởng giải thuật:
Sử dụng vòng lặp While… Do
Sơ đồ khối thuật toán:
Bài 2: Bài tập 5.9:
3 Tìm hiểu đề bài:
Dữ liệu vào: Số n số tháng mà đoàn thám hiểm quay lại đảo
Dữ liệu ra: Số thỏ đảo sau n tháng
4 Xây dựng ý tưởng giải thuật: Dựa vào tính chất dãy số Fibonacci
(2) Sơ đồ thuật toán:
(3)Bài 3: Bài 5.41: Tìm hiểu đề bài:
- Input: Tệp văn DUONGI.TXT
- Output: Khoảng cách nhóm so với trại
2 Ý tưởng giải thuật:
- Do cần biết khoảng cách nhóm so với trại nên ta gắn vào hướng nhóm theo hệ trục toạ độ: Gốc trại, chiều dương trục Ox hướng Đông, chiều dương trục Oy hướng Bắc
- Dùng biến tạm h để tính toạ độ nhóm với quy ước rẽ trái h giảm 1, rẽ phải
h tăng lên
1 ; 1
2 1;
3 ; 1
4 1;
x x y y x x y y h
x x y y x x y y
(4)Bài 4: Bài 319(sbt trang 21):
Cho ba số nguyên p, q, r(#0) Kiểm tra ba số này, theo thứ tự nhập vào có tạo thành cấp số nhân hay khơng Viết chương trình thực yêu cầu
Bước 1:
Input: bộ ba số p, q, r
Output: kiểm tra xem day p, q, r có cấp số nhân không Bước 2:
Sơđồ khối:
Bước 3:viết chương trình
program bai319_bt11; var p, q, r:integer; Begin
repeat
writeln('nhap ba so nguyen p, q, r de kiem tra'); readln(p, q, r);
until( q<>0) and( p<>0)and (r<>0);
if q/p=r/q then writeln(p, ' ', q, ' ', r, ': la cap so nhan')
else writeln(p, ' ', q, ' ', r, ': khong phai cap so nhan'); readln;
end
Bước
Mở rộng cho hs giải tốn tương tự kiểm tra cấp số cộng khơng, trường hợp lớn số làm nào? Xác định số hạng cấp số nhân (số cộng)
Bài 5: Bài 440(sbt trang 45):Hãy lập trình
-Nhập xâu từ bàn phím -Chuẩn hóa xâu theo quy tắc sau: +xóa dấu cách đầu xâu có; +xóa dấu cách cuối xâu có;
+thay dãy nhiêu dấu cách liên tiếp dấu cách -đưa kết chuẩn hóa hình
Begin
q/p=r/q
Thông báo phải Thông báo
(5)Bước 1:
Input: nhập xâu s
Output:Đưa xâu s chuẩn Bước 2:
B1.nhập xâu s;
B2 xóa xâu s kí tự có hai kí tự trắng liền B3 kiểm tra kí tự đầu cuối chúng kí tự trắng xóa B4.đưa lần lươt s[i] hình đến hết
B5 kết thúc
Bước 3:viết chương trình program chuanhoaxau;
var s:string; i:integer; Begin
writeln('nhap vao mot xau '); readln(s);
for i:=1 to length(s) write(s[i]);
while pos(' ', s)<>0 delete(s, pos(' ', s), 1); if s[1]=' 'then delete(s, 1, 1);
if s[length(s)]=' ' then delete(s, length(s), 1); writeln('xau sau duoc chuan hoa la '); for i:=1 to length(s)
write(s[i]); readln; end
Bước
(6)Bài 6: Bài 3.34:Tuổi cha B tuổi C (0<C<B, B, C số nguyên theo luật hôn
nhân gia đình B-C>=19) Viết chương trình kiểm tra xem tuổi cha có gấp đơi tuổi hay khơng, đưa hình câu thơng báo ‘HIEN NAY TUOI CHA GAP ĐOI TUOI CON’, trường hợp ngược lại, tính số năm N mà trước sau tuổi cha gấp đơi tuổi đưa câu thông báo dạng ‘N NĂM TRƯỚC ĐÂY TUỔI CHA GẤP ĐÔI TUỔI CON’ ‘SAU N NĂM TUỔI CHA SẼ GẤP ĐƠI TUỔI CON’
VÍ DU, với B=59, C=29 in câu thơng báo sẻ là: SAU NĂM NỮA TUÔI CHA SE GẤP ĐÔI TUỔI CON B1:input:nhập B, C;
Output: đưa hình câu thơng báo tuổi cha gấp đơi tuổi con, sau N năm tuổi cha gáp đôi tuổi trước N năm tuổi cha gấp đơi tuổi
var b, c, n, k:integer;
B2: Ý tưởng:sử dụng câu lệnh if , b=2*c thơng báo hình HIỆN NAY TUỎI CHA GẤP ĐƠI TUỔI CON, cịn b-2*c>0 thơng báo “SAU N=b-2*c TUỔI CHA SẺ GẤP ĐƠI TUỔI CON’, cịn b-2*c<0 thơng báo ‘N NĂM TRƯỚC ĐĨ TUỔI CHA GẤP ĐÔI TUỔI CON
B3:SƠ ĐỒ KHỐI:
Begin
NHAP B, C
B>C>0 B-C>19
B:=2*C B>2*C
N:=B-2*C
Sau N năm t ổi cha s ẻ g ấp đ ôi tuôi
N=2*C-B
Tr ớc đ ó N N ĂM TU ỔI CHA G ẤP ĐÔI TU ỔI CON
(7)B4:CHƯƠNG TRÌNH begin
repeat
writeln('nhap tuoi cha');readln(b); writeln('nhap tuoi con');readln(c); if(b-c<19) or(c<0) or (b<c) then writeln('ban phai nhap lai');
until(c>0) and (c<b) and (b-c>=19);
if b=2*c then writeln('hien tuoi cha gap doi tuoi con') else
if b>2*c then
writeln('sau', b-2*c, 'nam tuoi cha se gap doi tuoi') else
k:=2*c-b;
write(2*c-b, 'nam truoc day tuoi cha gap doi tuoi con'); readln;
end
Bài 7: Bài 3.21: Viết đoạn chương trình dùng câu lệnh IF tính:
x + y x > y > v:= x – y x > y <=
- x + y x <= y > - x - y x <1 y <=0
Bài giải:
Bước 1: Xác định Input, Output
- Input: x,y; - Output: v;
Bước 2:Ý tưởng thuật toán:
B1: Đọc giá trị x, y nhập vào B2: Xét giá trị x,y
- Tính v:
V := x + y x > y > Chuyển qua bước 3;
V := x – y x > y <= 1;Chuyển qua bước 3;
V := - x + y x <= y > 0;Chuyển qua bước 3;
V := - x - y x <1 y <=0;Chuyển qua bước 3; B3: In giá trị v
Bước 3: Chương trình
If (x > 1) and (y > 1) then v:=x + y
Else
If (x > 1) and (y <= 1) then v:=x - y
Else
If (x <= 1) and (y <=0 ) then v:=x + y
(8)Writeln(‘ Gia tri cua ham la ‘,v); Hoặc:
If (x > 1) and (y > 1) then v:=x + y ;
If (x > 1) and (y <= 1) then v:=x + y ;
If (x <= 1) and (y >0) then v:=x + y ;
If (x <= 1) and (y <=0) then v:=x + y ; Bước 4:Thiết kế tập tương tự:
Tính giá trị y x – x>=1;
Y= x+ (x>=0) (x<1) – x – (x<0)
Bài 8: Bài 3.18:
Bước 1: Xác định Input, Output
Input: m,n,k
Output: Nếu cấp số cộng gấp đơi giá trị số Nếu khơng giảm số đơn vị
Bước 2: Ý tưởng giải thuật
Kiểm tra điều kiện k+m=n*2?
Nếu điều kiện nhân đơi số, sai giảm số đơn vị
Sơ đồ khối:
Begin
Nhập m,n,k
m+k=n*2
m:=m*2; n:=n*2; k:=k*2;
m:=m-1; n:=n-1; k:=k-1;
In m,n,k
End
F T
Nhập m,n,k
(9)Bước 3: Chương trình
Var m,n,k:integer;
Begin
Write('Nhap so m,n,k'); Readln(m,n,k);
If m+k=n*2 then
Begin
m:=m*2; n:=n*2; k:=k*2;
End Else
Begin
m:=m-1; n:=n-1; k:=k-1; End;
Write('Gia tri m,n,k sau kiem trala:',m:3,n:3,k:3); Readln;
End
Bước 4:
Bộ test:
Giá trị m,n,k Kiểm tra Giá trị m,n,k sau kiểm tra 3, 6, Là cấp số cộng 6, 12, 18
3, 4, Không phải cấp số cộng 2, 3,
Bài tập tương tự: Nhập vào số a, b, c, kiểm tra xem có phải a, b, c tạo thành cấp số nhân khơng? Nếu cấp số cộng thơng báo đồng thời gấp đơi số Ngược lại giảm số đơn vị
Bài 9: Bài 4.20
Bước 1: Xác định Input, Output
Input: Nhập xâu Output: Chuẩn hóa xâu
Bước 2: Ý tưởng giải thuật
- Dùng lệnh while s[1]=' ' delete(s,1,1) để xóa kí tự trắng đầu xâu
- Dùng lệnh while s[length(s)]=' ' delete(s,length(s),1) để xóa kí tự trắng cuối xâu
(10)Sơ đồ khối:
Begin
Nhập xâu s
s[1]=#32
delete(s,1,1);
s[length(s)]=#32
delete(s,length(s),1);
Pos(‘ ‘,s)<>0
delete(s,pos(‘ ‘,s),1;
In xâu s
F
T
F
F T
T
(11)Bước 3: Chương trình Var s:string;
Begin
Writeln('Nhap xau bat ki:'); readln(s);
while s[1]=' ' do
delete(s,1,1);
while s[length(s)]=' ' do
delete(s,length(s),1);
while pos(' ',s)<>0 do
delete(s,pos(' ',s),1);
Writeln('xau sau chuan hoa: ',s); Readln;
End Bước 4:
- Bộ test:
Nhập xâu Xâu sau chuẩn hóa
Phan Thị Bình Phan Thị Bình
- Xây dựng tốn tương đương:
(12)Bài 10: Bài 3.40 Nhập vào bàn phím số nguyên dương N (0<N<2*109) Tính đưa hình tổng bình phương chử số N Ví dụ, với N=125, tổng bình phương chử số cảu 12
+22+52=30
Phân tích tốn Bước Tìm hiểu đề
- Input: N nguyên dương (0<N<2*109) - Output: tổng bình phương chử số N
- Tổng bình phương chử số tổng bình phương tất chử số có mặt số
Bước Xây dựng ý tưởng giải thật
- Để tính tổng binh phương chử số ta phải lấy chử số số - Cách lấy chử số số:kết hợp hai toán tử MOD DIV ta lấy số dư hàng đơn vị, chục, trăm, nghìn
- Bình phương chúng lên cộng dồn vào biến tổng cho ta kết cần tính - Sơ đồ khối
Bước Viết chương trình Var N:longint;
Tong:interger; Du:byte; Begin
Repeat
Write (‘ Nhap N= ‘); Readln (N);
If (N≤0) or(N≥2.exp(9*ln(10))) Then write(‘ Nhap lai N ’); Until (N>0) and (N<2.109)
Begin
Nhập N
Tong:=0
N>0 In tong End
(13)Tong:=0; White N>0 Begin
Du:= N mod 10;
Tong:=Tong + sqr(du); N:=N div 10;
End;
Writeln (‘ Tong binh phuong cac so cua ‘,N, ‘ la: ‘, Tong’); Readln;
End
Chú ý:
- Điều kiện ràng buộc đầu vào N (N>0) and (N<2.109)
- Điều kiện lặp N>0 khơng phải N≥0 Vì N=0 phải dừng lặp, câu lệnh khơng có ý nghĩa
- Kiểu liệu: N longint (vì 0<N<2*109)., Tong phải Interger; du byte (vì du nhận giá trị từ 9)
Bước Nghiên cứu lời giải - Xây dựng text
STT N du Tong
1 125 0
2 125 25
3 12 29
4 1 30
5
- Mở rộng tốn: thay vịng lặp While vòng lặp Repeat until - Lớp toán tương đương
+ Nhập số N nguyên dương cho biết N có chử số, tính tổng chử số đó?
(14)Bài 11: Bài 3.16 (Sách tập Tin Hoc 11)
Lập trình nhập từ bàn phím hai số ngun khác m n, thay số nhỏ hiệu số lớn với số bé, thay số lớn tổng hai số ban đầu Đưa giá trị m n hình
Giải:
* Tìm hiểu đề bài: In put: m,n
Out put: giá trị m,n * Ý tưởng giải thuật:
-Bước 1: Nhập vào m, n từ bàn phím -Bước 2: Nếu m>n
Tg:=m; m:=m+n; n:=tg-n; Nếu n>m thi Tg:=n; n:= n+m; m:=tg-m;
-Bước 3: Đưa hình giá trị m n -Bước 4: Kết thúc
Sơ đồ khối:
* Thuật toán: var m,n,tg:integer;
Be gin Nhập m,n
m>=n
Tg:=n; n:= m-n; m:=tg+m Tg:=m;
m:= n-m; n:=tg+n
In m, n
End
Đ
(15)begin
write('Nhap vao so m,n:');readln(m,n); if m>n then
begin tg:=n; n:=m-n; m:=tg+m; end
else begin tg:=m; m:=n-m; n:=tg+n; end;
writeln('gia tri moi cua m la:',m); writeln('gia tri moi cua n la:',n); readln;