Tài liệu tập huấn tin học

Chia sẻ bởi Lê Nho Duyệt | Ngày 24/10/2018 | 62

Chia sẻ tài liệu: Tài liệu tập huấn tin học thuộc Tin học 8

Nội dung tài liệu:

TẬP HUẤN GIÁO VIÊN DẠY BỒI DƯỠNG MÔN TIN HỌC
Quế Sơn, ngày 10/12/2010
Các câu lệnh lặp
Nội dung tập huấn:
Các chuyên đề bồi dưỡng học sinh giỏi môn tin học cấp THCS. (Thầy Trần Ngọc Chánh).
Một số vấn đề về phương pháp bồi dưỡng các nội dung. (Thầy Trần Ngọc Phúc).
Thống nhất nội dung dạy bồi dưỡng môn tin học tại các trường (Lê Nho Duyệt).
Nội dung dạy bồi dưỡng môn Tin học lớp 8:
I. Làm quen với chương trình Pascal – Khai báo, sử dụng biến – Các thủ tục vào ra, Các kiểu dữ liệu cơ bản…
II. Cấu trúc lựa chọn: if … then … else
Case ... of ...
III. Cấu trúc lặp với số lần lặp đã biết: For … to … do
IV. Cấu trúc lặp với số lần lặp chưa biết.
V. Dữ liệu kiểu mảng (một chiều).
VI. Chương trình con.
VII. Chuyên đề: Tính chia hết- Số nguyên tố.
VIII. Chuyên đề: Dãy con.
IX. Chuyên đề: Chữ số - hệ cơ số.
X. Chuyên đề: Đa thức.
I. Làm quen với chương trình Pascal – Khai báo, sử dụng biến – Các thủ tục vào ra, Các kiểu dữ liệu cơ bản…
Bài tập 1.9
Viết chương trình cho phép đổi giá trị của hai biến cho nhau mà chỉ mà không được dùng thêm biến (tạm).
a. Hướng dẫn:
- Cộng thêm b vào a. (Giá trị hai biến sau lệnh này là: a+b, b)
- Gán b bằng tổng trừ đi b (Sau lệnh này b có giá trị bằng a);
- Gán giá trị a bằng tổng trừ đi b mới (Sau lệnh này a có giá trị bằng b).
Program Doi_Gia_Tri;
uses crt;
var a, b:real;
Begin
clrscr;
write(`nhap a: `); readln(a);
write(`nhap b: `); readln(b);
writeln(`Truoc khi doi a =`,a,` va b= `,b);
readln;
a:=a+b;
b:=a-b;
a:=a-b;
writeln(`Sau khi doi a =`,a,` va b= `,b);
readln
end.
II. Cấu trúc lựa chọn: if … then … else
Case ... of ...
Bài tập 2.3:
Viết chương trình in ra số lớn nhất trong bốn số nhập từ bàn phím với điều kiện chỉ được dùng hai biến.
a. Hướng dẫn:
Sử dụng một biến max và một biến a để chứa số vừa nhập. Cho max bằng số đầu tiên. Sau khi nhập một số thực hiện so sánh nếu số vừa nhập lớn hơn max thì lưu số vừa nhập vào max. Sau khi nhập xong ta có max là số lớn nhất
(Giải thuật này gọi là kỹ thuật lính canh cần hiểu rõ để sử dụng sau này).
Program So_Lon_Nhat_2;
Uses crt;
Var a,max: real;
Begin
Clrscr;
Write(`Nhap so thu nhat:`);readln(a);Max:=a;
Write(`Nhap so thu hai:`);readln(a);if a>=Max then Max:=a;
Write(`Nhap so thu ba:`);readln(a);if a>=Max then Max:=a;
Write(`Nhap so thu tu:`);readln(a);if a>=Max then Max:=a;
Write(`So lon nhat la:`,Max:10:2);
readln
end.
Giới thiệu một đề thi
Bài tập 2.8: (HSG lớp 8 -TP Huế 2006-2007)
Ba bạn An, Bình và Cường cùng tham gia một trò chơi như sau: Mỗi bạn nắm trong tay một đồng xu, mỗi đồng xu có hai trạng thái : sấp và ngửa. Theo hiệu lệnh, cả ba bạn cùng đưa đồng xu của mình ra phía trước. Nếu cả ba đồng xu cùng sấp hoặc cùng ngửa thì chưa phát hiện người thua cuộc (hòa nhau). Nếu một bạn có trạng thái đồng xu khác với hai bạn kia( nghĩa là đồng xu của bạn ấy sấp còn hai người kia ngửa và ngược lại đồng xu của bạn ấy ngửa thì hai người kia sấp) thì bạn đó thắng cuộc. Hãy viết chương trình mô phỏng trò chơi trên.
Thuật toán:
- Để mô phỏng trạng thái sấp, ngửa của đồng xu ta dùng hàm Random(1) hoặc dùng Random(n) mod 2 với n > 2.
- Xét tám trường hợp xãy ra để tìm người thắng cuộc.
Mã chương trình:
Program Sap_ngua;
uses crt;
Var A, B, C: byte;
Begin
clrscr;
Writeln(`Go phim de xem ket qua: `);
A:=Random(10); A:=A mod 2;
B:=Random(10); B:=B mod 2;
C:=Random(10); C:=C mod 2;
Write(`Ket qua: `,a,b,c);
if (A=0) and (B=0) and (C=0) then Write(` Hoa`);
if (A=0) and (B=0) and (C=1) then Write(` C Thang`);
if (A=0) and (B=1) and (C=0) then Write(` B Thang`);
if (A=0) and (B=1) and (C=1) then Write(` A Thang`);
if (A=1) and (B=0) and (C=0) then Write(` A Thang`);
if (A=1) and (B=0) and (C=1) then Write(` B Thang`);
if (A=1) and (B=1) and (C=0) then Write(` C Thang`);
if (A=1) and (B=1) and (C=1) then Write(` Hoa`);
Readln;
Readln
End.
III. Cấu trúc lặp với số lần lặp đã biết: For … to … do
Bài tập 3.10
Viết chương trình in ra tất cả các số nguyên tố bé hơn hoặc bằng n?
a. Hướng dẫn:
- Cho i chạy từ 2 đến n.
- Xét i. Nếu nó là số nguyên tố thì in nó ra.
Program Nguyen_to_1;
uses crt;
var n, i, j: integer;
ok: boolean;
begin
clrscr;
write(`Nhap n: `); readln(n);
for i := 2 to n do
begin
ok:=true;
for j:= 2 to i - 1 do if i mod j = 0 then
ok :=false;
if ok then write(i,`;`)
end;
readln
end.
IV. Cấu trúc lặp với số lần lặp chưa biết.
Viết chương trình tính n! với n! được định nghĩa như sau:
- n! = 1 với n = 0
- n! = 1.2.3...n (Tích của n số từ 1 đến n).
Yêu cầu: Sử dụng vòng lặp với số lần chưa biết trước:
a. Hướng dẫn:
- Có thể viết lại: n! = n.(n-1)... 3.2.1.
- Lặp gt = gt*n; n = n-1 với điều kiện n>0.
Program Giai_Thua_while;
uses crt;
var n, gt:longint;
begin
clrscr;
Repeat
write(`Nhap so n: `);readln(n);
until n>0;
gt:=1;
while n>0 do
begin
gt:=gt*n;
n:=n-1;
end;
writeln(`Giai thua cua n la: `,gt);
readln
end.
V. Dữ liệu kiểu mảng (một chiều).
Viết chương trình in ra màn hình tam giác Pascal. Ví dụ, với n=4 sẽ in ra hình sau:
1 1
1 2 1
1 3 3 1
1 4 6 4 1
... Hàng thứ n được xác định từ hàng n-1:
- Phần tử đầu tiên và phần tử cuối cùng đều bằng 1.
- Phần tử thứ 2 là tổng của phần tử thứ nhất và thứ 2 của hàng n-1
- Phần tử thứ k của hàng thứ n là tổng của phần tử thứ k-1 và k của hàng thứ n-1.
Thuật toán:
Bước 1: Khởi tạo một mảng một chiều n phần tử có giá trị 0.
Bước 2: Khởi tạo giá trị cho hàng thứ nhất M[1,1] = 1.
Bước 3: - Đối với hàng thứ i tính giá trị phần tử từ phần tử thứ i + 1 xuống phần tử thứ 2: M[j]:=M[j] + M[j-1]
- In ra hàng thứ i.
Mã chương trình:
Program Tam_giac_Pascal_mot_chieu;
Var n,i,j: integer;
M: array[1..10] of integer;
Begin
Write(`Nhap n: `); Readln(n);
For i:= 1 to n do M[i]:=0;
M[1]:=1;
For i:=1 to n do
Begin
For j:=i+ 1 downto 2 do M[j]:=M[j]+M[j-1];
For j:=1 to i+ 1 do Write(M[j]:3);
Writeln;
End;
Readln
End.
VI. Chương trình con.
Viết chương trình cho phép thực hiện rút gọn phân số.
a. Hướng dẫn:
- Tìm UCLN của tử số và mẫu số.
- Chia tử và mẫu của phân số cho UCLN vừa tìm được.
Program Rut_gon_phan_so;
uses crt;
var tu,mau:integer;
Function UCLN(a,b:integer):integer;
var r: integer;
begin
r:= a mod b;
while r <> 0 do
begin
a:= b;
b:= r;
r:=a mod b;
end;
UCLN:=b;
end;
begin
clrscr;
write(`Nhap tu: `); readln(tu);
write(`Nhap mau: `); readln(mau);
write(`Ket qua rut gon: `,tu,`/`,mau,`=`,tu div UCLN(tu,mau),`/`,mau div UCLN(tu,mau));
readln
end.
VII. Chuyên đề: Tính chia hết- Số nguyên tố.
Bài toán: Nhập vào từ bàn phím số tự nhiên n (n<1000). Hãy phân tích n thành tích các thừa số nguyên tố.
VD: Nhập vào n = 9 được 9 = 3.3
Hướng dẫn:
Gán i := 2;
Khi n > 1 thì lặp:
Nếu n chia hết cho i thì in ra i và gán lại n:= n div i. Ngược lại tăng i lên 1.
Program Phan_tich;
var n,i: integer;
Begin
Write(`Nhap so can phan tich: `);Readln(n);
i:=2;
Write(`Ket qua phan tich:`);
Write(n,`=`);
While n>1 do
Begin
if n mod i = 0 then Begin Write(i,`.`); n:= n div i End
else i:=i+1;
End;
Readln
End.
VIII. Chuyên đề: Dãy con.
- Dãy con là dãy các phần tử liên tục thuộc một dãy có trước (dãy mẹ) thỏa mãn một tính chất nào đó.
- Để quản lí một dãy con cần một chỉ số (nơi bắt đầu dãy con) và độ dài của dãy.
- Để xây dựng một dãy con cần:
- Xây dựng giá trị ban đầu.
- Duyệt qua các phần tử của dãy, Nếu:
- Thỏa điều kiện, tăng độ dài thêm 1 ngược lại:
- Nếu dãy con đang xét cần lưu thì: Lưu lại độ dài, chỉ số đầu dãy, Xác định lại độ dài, chỉ số đầu của dãy mới.
- Nếu dãy con đang xét không cần lưu thì: Xác định lại độ dài, chỉ số đầu của dãy mới.
- Để duyệt qua tất cả các dãy con của một dãy gồm n số ta dùng thuật toán vét cạn sau:
For i:= 1 to n
For j:= 1 to n-i+1 Xét dãy con bắt đầu từ vị trí thứ i có độ dài j.
Bài tập 1: Cho dãy số gồm n số. Tìm dãy con lớn nhất các phần tử tăng (giảm) dần.
Giải thuật:
Sử dụng kỹ thuật xây dựng dãy con.
Program Day_con1;
Var M: array[1..100] of integer;
i,n, dau,ldau, dai,Max: integer;
Begin
Write(`Nhap so n: `); Readln(n);
For i:=1 to n do
Begin Write(`[`,i,`]=`); Readln(M[i]); End;
{Khoi tao gia tri dau}
i:=0;
Max:=1;
dau:=1;
dai:=1;
ldau:=1;

While i<=n do
Begin
i:=i+1;
if M[i+1]>=M[i] then dai:=dai+1 else
if dai> Max then Begin Max:=dai; ldau:=dau; dai:=0 End
else Begin dau:=i+1; dai:=1 End;
End;
Write(`Xau con dai:`,max,` bat dau tu: `,ldau);
Readln
End.
Mã chương trình
Program Day_con1b;
Type KM= array[1..100] of integer;
Var M:KM;
i,j,n, dau,ldau, dai,Max: integer;
Function KT(A:KM;m,l:byte):boolean;
Var ok:Boolean;
i:byte;
Begin
ok:=True;
For i:=m to m+l-1 do if A[i]>A[i+1] then ok:=ok and false;
KT:=ok;
End;
Begin
Write(`Nhap so nc: `); Readln(n); Max:=0;
For i:=1 to n do Begin Write(`[`,i,`]=`); Readln(M[i]); End;
For i:= 1 to n-1 do
For j:=1 to n-i+1 do
if KT(M,i,j) then
if j+1> Max then Begin ldau:=i; Max:=j+1 End;
Write(`Xau con dai:`,max,` bat dau tu: `,ldau);
Readln
End.
IX. Chuyên đề: Chữ số - hệ cơ số.
- Trong hệ cơ số 10: Số A = an….a2a1a0 = a0 + 10a1 + … +10nan nên:
Để lấy số a0 = A mod 10; Để xóa chữ số a0 ta dùng A:=A div 10.
(Tương tự: Để lấy hai số tận cùng a1a0 = A mod 100; Để xóa hai chữ số a1 a0 ta dùng A:=A div 100.
- Thuật toán vét cạn: Để xét tất cả các trường hợp của số A ta xét an = 1..9; an-1….a2a1a0 =0..9
- Hệ cơ số 2: Nếu như hệ thập phân dùng 10 chữ số để ghi số thì hệ cơ số 2 chỉ dùng hai chữ số là 0 và 1 để ghi số.
- Đổi một số từ cơ số 2 sang cơ số 10:
- Đổi một số từ cơ số 10 sang cơ số 2:
- Hệ cơ số bất kỳ.
- Vấn đề cộng, trừ, nhân, lũy thừa số lớn (hoặc kết quả được số lớn) được xem xét riêng ở một chuyên đề (sau khi được trang bị dữ liệu kiểu string).
Bài toán:
Bài tập 8.5: (Vĩnh Phúc 2009-2010)
Năm 1973, nhà Toán học Neil Sloan đưa ra khái niệm độ bền của một số nguyên không âm N như sau:
Nếu N có một chữ số thì độ bền của N bằng 0.
Nếu N có từ 2 chữ số trở lên thì độ bền của N bằng độ bền của số nguyên là tích các chữ số của N cộng 1.
Cho N, tìm số bé hơn N có độ bền lớn nhất (0 ≤ N ≤ 2.000.000.000).
Ví dụ: Doben(77)=Doben(49)+1=Doben(36)+1+1=Doben(18)+1+1+1=Doben(8)+1+1+1+1=0+1+1+1+1=4
Giải thuật:
- Để tìm độ bền một số cần một hàm tính tích các chữ số của n TICH(n).
- Cho d = 0. Lặp lại điều kiện n >9 việc: Tăng d lên 1 thay n = TICH(n).
Mã chương trình:
Program Do_ben;
uses crt;
Var n,d,i,j,max:longint;
Function TICH(n:Longint):Longint;
Var tam:integer;
Begin
if n=0 then tam:=0 else tam:=1;
While n<> 0 do
Begin
Tam:=tam*(n mod 10);
n:=n div 10;
End;
TICH:=Tam;
End;
Begin
clrscr;
Write(`Nhap n:`);Readln(n);
Max:=0;
For i:=1 to n do
Begin
d:=0;
j:=i;
gotoxy(1,2);
Write(`Dang duyet den so: `,i);

While j>9 do
Begin
d:=d+1;
j:=TICH(j);
End;
if d>=Max then
Begin
max:=d;
gotoxy(1,3);
Writeln(`So co do ben lon nhat dang la `,i,` do ben la:`,d);
End;
End;
Gotoxy(1,4);
Writeln(`Da duyet xong`);
Readln
End.
X. Chuyên đề: Đa thức.
- Để lưu trữ một đa thức ta chỉ cần lưu các hệ số (bằng một mảng)và bậc của đa thức.
- Các phép toán đối với một đa thức gồm cộng, trừ, nhân, chia hai đa thức.
- Việc tính giá trị đa thức tại một giá trị của biến được thực hiện thông qua lược đồ hooc nơ hoặc tính trực tiếp.
Chương trình nhân hai đa thức đã sắp xếp.
Program Nhan_da_thuc;
Var m,n,i,j:byte;
A, B, C: array[0..10] of real;
Begin
Write(` Nhap bac cua da thuc A: `); Readln(m);
For i:= m downto 0 do
Begin
Write(`A[`,i,`]= `); Readln(A[i]);
End;
Write(` Nhap bac cua da thuc B: `); Readln(n);

For i:= n downto 0 do
Begin
Write(`B[`,i,`]= `); Readln(B[i]);
End;
For i:=0 to m+n do C[i]:=0;
For i:=0 to m do
For j:=0 to n do C[i+j]:=C[i+j]+A[i]*B[j];
For i:= m+n downto 0 do if C[i]<>0 then Write(C[i]:3:1,`x^`,i,` + `);
Readln
End.
Tài liệu bồi dưỡng lớp 9
I. Chương trình con – Đệ quy và quay lui .
II. Mảng hai chiều.
III. Xâu kí tự.
IV. Chuyên đề: Sử dụng xâu để xử lí số.
V. Dữ liệu kiểu bản ghi.
VI. Dữ liệu kiểu tệp.
VII. Chuyên đề: Xâu con – xâu đối xứng.
VII. Chuyên đề: Hệ trục tọa độ
IX. Đề thi học sinh giỏi các tỉnh.
X. Đề thi học sinh giỏi tỉnh Quảng Nam.
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Lê Nho Duyệt
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)