1. Trang chủ
  2. » Công Nghệ Thông Tin

TAI LIEU BDHSG PASCAL THCS THAI HOA

40 880 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 40
Dung lượng 209 KB

Nội dung

Lệnh IF IF < Điều kiện> THEN < Câu lệnh 1> ELSE < Câu lệnh 2>; Giải thích lệnh: Khi gặp lệnh này máy kiểm tra < Điều kiện> nếu biểu thức này có giá trị TRUE tức là đúng như điều kiện đặ

Trang 1

MỤC LỤC

PHẦN MỞ ĐẦU 1

CHƯƠNG I 4

CÂU LỆNH CÓ CẤU TRÚC LẶP XÁC ĐỊNH 4

CHƯƠNG II 11

CẤU TRÚC LẶP KHÔNG XÁC ĐỊNH 11

CÁCH CHUYỂN ĐỔI TỪ FOR – DO SANG WHILE – DO 12

CHƯƠNG III 19

DỮ LIỆU KIỂU MẢNG MỘT CHIỀU 19

CHƯƠNG IV 28

DỮ LIỆU KIỂU MẢNG HAI CHIỀU 28

CÁC THUẬT TOÁN VỀ SỐ 33

CÁC THUẬT TOÁN TRÊN MẢNG 36

PHẦN MỞ ĐẦU Cấu trúc chung của một chương trình Pascal

Program <Tên_Chương_Trình>;

Uses Crt; {Khai báo thư viện hàm}

Const <Hằng> = <Giá Trị>; {Khai báo hằng}

Var <Biến 1>,<Biến 2> : <Kiểu Dữ Liệu>; {Khai báo biến}

Begin

Clrscr; { Lệnh xóa màn hình kết quả } Write(‘<Yêu cầu nhập liệu>’); Readln(<Biến>); { Nếu cần}

Trang 2

{Xử lĩ và hiện kết quả}

Writeln(‘<Thông báo kết quả>’,<kết quả>); { Nếu cần}

Readln; {Giữ màn hình kết quả}

VAR x, y: Real; {Khai báo hai biến x, y có kiểu là Real}

a, b: Integer; {Khai báo hai biến a, b có kiểu integer}

b Các hàm số học sử dụng cho kiểu số nguyên và số thực:

Hàm bình phương SQR(x) Sqr(5)= 25

Hàm căn bậc hai SQRT(x) Sqrt(9)=3

Hàm trị tuyệt đối ABS(x)

Hàm mũ ngược b mũ a: (ba) EXP(a*LN(b)) VD: 102 ta dùng hàm Exp là

Làm tròn số nguyên x ROUND(x) X=5.8 round(x)=6

Cho giá trị TRUE nếu n là số lẻ ODD(n) N=5; ODD(n)=true

Tăng n thêm 1 đơn vị (n:=n+1) INC(n) N=5; inc(n)=6

Giảm n đi 1 đơn vị (n:=n-1) DEC(n) N=5; dec(n)=4

c hàm MOD (Phép chia lấy phần dư) và hàm DIV (Phép chia lấy phần nguyên)

Sử dụng phép chia MOD để kiểm tra tính chẵn lẻ của một số: nếu (số đó) mod 2 =0 thì là

số đó là số chăn, nếu (số đó) mod 2 <>0 thì số đó là số lẻ

VD: X=7: X MOD 2<>0 Vậy X là số lẻ

X=8: X MOD 2=0 Vậy X là số chẵn

Trang 3

II CÂU LỆNH LỰA CHỌN (RẼ NHÁNH)

1 Lệnh IF

IF < Điều kiện> THEN < Câu lệnh 1> ELSE < Câu lệnh 2>;

Giải thích lệnh: Khi gặp lệnh này máy kiểm tra < Điều kiện> nếu biểu thức này có giá trị

TRUE (tức là đúng như điều kiện đặt ra) thì máy thực hiện <câu lệnh1> nếu ngược lại,

tức <biểu thức logic> có giá trị FALSE thì <câu lệnh 2> được thực hiện Trường hợp trong câu lệnh không có phần ELSE và <biểu thức logic> có giá trị FALSE thì <câu

lệnh> không được thực hiện và máy chuyển đến câu lệnh kế sau lệnh IF đó.

Chú ý: Trước từ khóa ELSE không đựơc có dấu ‘;‘ Trường hợp có câu lệnh ghép đựơc

đặt kế trước ELSE thì từ khoá END trước ELSE không được đặt dấu ‘;‘.

Ví dụ 1: Chương trình nhập từ bàn phím 2 số nguyên a, b Kiểm tra và cho biết số nào lớn hơn.

Var a, b : Integer;

Begin

Write( ‘ Nhap so a: ‘ ); Readln(a);

Write( ‘ Nhap so b: ‘ ); Readln(b);

If a > b then Write( ‘ So lon hon la ‘, a) { tại vị trí này không được đặt dấu; } Else Write( ‘ So lon hon la ‘, b);

Write( ‘ Nhap so a: ‘ ); Readln(a);

Write( ‘ Nhap so b: ‘ ); Readln(b);

Write( ‘ Nhap so c: ‘ ); Readln(c);

Max := a;

If max < b thenMax := b;

If max < c then Max := c;

Write( ‘ So lon hon la ‘, max);

Readln;

End

Trang 4

FOR <biến đếm>:=<giá trị Max> DOWNTO <giá trị Min> DO S;

Sơ đồ thực hiện vòng lặp FOR:

Chú ý: Khi sử dụng câu lệnh lặp FOR cần chú ý các điểm sau:

 Không nên tuỳ tiện thay đổi giá trị của biến đếm bên trong vòng lặp FOR vì làm như

vậy có thể sẽ không kiểm soát được biến đếm.

 Giá trị Max và Min trong câu lệnh FOR sẽ được xác định ngay khi vào đầu vòng lặp.

Do đó cho dù trong vòng lặp ta có thay đổi giá trị của nó thì số lần lặp cũng không thay đổi.

Trang 5

III CÂU LỆNH LẶP

Trường hợp để giải quyết bài toán nào đó mà ta cần phải lặp đi lặp lại một công việcnào đó thì ta sẽ cần đến lệnh lặp Số bước lặp có thể xác định hoặc không xác định Trong

ngôn ngữ Pascal có ba câu lệnh lặp là FOR, REPEAT, WHILE Nếu số vòng lặp xác

định thì ta sử dụng lệnh FOR còn vòng lặp không xác định thì ta sử dụng lệnh REPEAT

hoặc WHILE Tất cả các loại lệnh lặp phải có điểm dừng, cho dù đó là loại xác định hay

không xác định

1 Vòng lặp xác định (For)

a Dạng tiến:

Cú pháp: FOR <Biến> := <giá trin Min> TO <giá trị max> DO < Câu Lệnh >;

<Biến> trong cấu trúc FOR gọi là biến điều khiển Kiểu của biến điều khiển là kiểu số nguyên,

<giá trin Min>, <giá trị max> phải là kiểu vô hướng đếm được (số nguyên, kí tự…)

Giải thích sự hoạt động lệnh FOR dạng tiến:

B1: Đầu tiên, Biến nhận giá trị của biểu_ thức1

B2: Máy kiểm tra Biến có nhỏ hơn hoặc bằng biểu_ thức2 hay không tức là xét điềukiện (Biến <= Biểu_ thức2) ?

B3: Nếu điều kiện trên là sai thì máy thoát khỏi vòng lặp FOR để thực hiện các lệnh

kế tiếp sau vòng lặp FOR Nếu điều kiện trên là đúng thì <Lệnh> được thực hiện, sau đó, Biến được tăng một giá trị và quay trở lại bước (2)

Lưu ý: Số lần lặp tính bằng công thưc : <giá trị Max> - <giá trin Min> + 1

b Dạng lùi:

Cú pháp: FOR <Biến> := <giá trin Max> DOWNTO <giá trin Min> DO <Câu lệnh>

Giải thích sự hoạt động lệnh FOR dạng lùi:

B1: Đầu tiên, Biến nhận giá trị của biểu thức1

B2: Máy kiểm tra Biến có lớn hơn hoặc bằng biểu thức2 hay không tức là xét điều kiện (Biến >= Biểu_ thức2) ?

B3: Nếu điều kiện trên là sai thì máy thoát khỏi vòng lặp FOR để thực hiện các lệnh

kế tiếp sau vòng lặp FOR Nếu điều kiện trên là đúng thì <Lệnh> được thực hiện, sau đó, Biến được giảm một giá trị và quay trở lại bước (2)

VD: Tính tổng các số liên tiếp từ 1 đến 100

program Tinh_tong;

Trang 6

- Cho biến i chạy từ 1 đến n.

- Nếu i chẵn ( i chia 2 dư 0) thì in ra số n

- Cho biến i chạy từ 1 đến n

- Nếu i chẵn ( i chia 2 dư 0) thì in ra số n và tăng dem lên 1

- Nếu dem chia hết cho 15 thì thực hiện xuống dòng (Dùng Writeln)

Trang 7

c Nhận xét: Lệnh writeln không có tham số cho phép xuống hàng.

Nếu có nhận xét trong 30 số thì có 15 số lẻ, ta có thể không cần thêm biến đếm mà chỉ cần kiểm tra biến i để xuống hàng

Bài tập 3.3:

Viết chương trình in ra tổng các số lẻ nhỏ hơn hoặc bằng n ( Với n được nhập)

a Hướng dẫn:

- Cho S = 0

- Cho biến i chạy từ 1 đến n

- Nếu i chẵn ( i chia 2 dư 0) thì cộng thêm i vào S

For i:=1 to n do if i mod 2 =1 then S:= S+i;

Writeln('Tong cac so le nho hon ',n,' la: ',S);

Trang 8

c Nhận xét: Chương trình trên có hai điểm yếu:

- In dư một dấu phẩy ở cuối dãy các ước

- Khi n = 0 thì không in một số nào trong khi mọi số đều là ước của 0

Hãy tìm cách khắc phục yếu điểm này

- Biến S có giá trị ban đầu bằng 0

- Cho i chạy từ 1 đến n-1 nếu i là ước của n thì cộng thêm i vào S

for i:= 1 to n -1 do if n mod i = 0 then s:=s+i;

if s = n then write(n, ' la so hoan chinh')

else writeln(n, ' khong phai la so hoan chinh');

Trang 9

For j:=1 to i do if i mod j = 0 then S:=S+j;

if S = 2*i then write(i:6,',');

Trang 10

var i,j : integer;

begin

clrscr;

for i:= 2 to 9 do

Begin

Writeln('Bang cuu chuong ',i);

For j := 1 to 9 do writeln(i,' x ', j, ' = ', j*i);

readln

end;

readln

end

c Nhận xét: Chương trình này in bảng cửu chương dọc (Hết bảng này đến bảng khác tính

từ trên xuống) Hãy sửa chương trình để in theo kiểu ngang thường thấy

Bài tập 3.9

Viết chương trình xét xem một số n có phải là số nguyên tố không?

a.Hướng dẫn:

- Nếu n không chia hết mọi số i có giá trị từ 2 đến n - 1 thì n là số nguyên tố

- Sử dụng biến ok có kiểu boolean và có giá trị ban đầu là true

- Cho biến i chạy từ 2 đến n – 1 Xét n mod i Nếu bằng 0 thì gán ok = false Ngược lại vẫn để nguyên ok

if ok then write(n,' la so nguyen to')

else write(n, ' khong la so nguyen to');

readln

end

c Nhận xét: Ở đây ta sử dụng biến có kiểu logic (Đúng, sai) Chỉ cần một lần n mod i = 0

thì sau khi thực hiện xong vòng lặp ok có giá trị là false

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?

Trang 11

A LÝ THUYẾT

Dạng WHILE While B Do S;

Ý nghĩa:

Dạng WHILE: Trong khi biểu thức B=TRUE thì tiếp tục thực hiện công việc S.

Trước While cần có các lệnh để B được xác định

Yêu cầu quan trọng: Trong S phải có một lệnh làm thay đổi dữ liệu liên quan đến

điều kiện B

Trang 12

- Câu lệnh sẽ được lặp lại nhiều lần cho đến khi nào điều kiện còn đúng (nếu điều kiện sai thì các lệnh này sẽ không thực hiện nữa) Đối với lệnh này điều kiện sẽ được kiểm tra trước khi thực hiện lệnh nên nên điều kiện sai thì không có lệnh nào được thực hiện.

-SANG WHILE – DO

1/ Cách chuyển đổi từ For – do sang While – do:

- Câu lệnh For – do:

+ Dạng tiến:

For <biến điếm>:= <giá trị đầu> to <giá trị cuối> do <câu lệnh>;

+ Dạng lùi:

For <biến điếm>:= <giá trị cuối> downto <giá trị cuối> do <câu lệnh>;

- Câu lệnh While – do:

While <điều kiện> do <câu lệnh>;

- Chuyển For – do thành While – do:

+ Cách 1:

<Biến đếm> := <giá trị đầu>;

While (<Biến đếm> <= <giá trị cuối>) do

Begin <câu lệnh>;

Trang 13

<tăng biến đếm 1 đơn vị>;

End;

+ Cách 2:

<Biến đếm> := <giá trị cuối>;

While (<Biến đếm> >= <giá trị đầu>) do

Begin <câu lệnh>;

<giảm biến đếm 1 đơn vị>;

i:=1;

While (i <= n) doBegin

Trang 14

While (i >= 1) doBegin

If (2*ga + (100-ga)*4 = 100) then

Write(‘so ga la:’,ga,’ so cho la:’, 36-ga);

If (2*ga + (100-ga)*4 = 100) then

Write(‘so ga la:’,ga,’ so cho la:’, 36-ga);

While (i>=1) do Begin

Trang 15

If (2*ga + (100-ga)*4 = 100) then

Write(‘so ga la:’,ga,’ so cho la:’, 36-ga);

- Sử dụng kiến thức số lẻ đầu tiên bằng 1 Số lẻ sau bằng số trước cộng với 2

- Cho biến i có giá trị ban đầu bằng 1

- Dùng vòng lặp while do với điều kiện i < n và công việc bên trong là in i và tăng ilên 2

Trang 16

write('Nhap so n: ');readln(n);

until n>0;

Dùng để kiểm tra, khống chế điều kiện của dữ liệu vào

- Trong vòng lặp while nhất thiết phải có một câu lệnh làm thay đổi điều kiện lặp Ởđây là i:=i+2 Nếu không có sẽ dẫn đến trường hợp lặp vô hạn Chương trình chạy mãi mà không có lối ra (Không thoát ra khỏi vòng lặp được)

c Nhận xét: Tiết kiệm được một biến i để chạy nhưng làm thay đổi n nên khi xuất ra chỉ

có thể xuất một câu chung chung “Giai thua cua n la:”

Trang 17

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:

- Hai số chẵn liên tiếp hơn kém nhau 2 Hai số lẻ liên tiếp cũng vậy

- Thực hiện tính như giai thừa đơn nhưng với bước nhảy là 2

write('Nhap so thu ',i,': ');

readln(so); tong:=tong+so; i:=i+1;

until so=0;

write('Tong la: ',tong:6:1);

Trang 18

Thuật toán Euclid: Nếu a chia hết cho b (a chia b dư 0) thì UCLN(a,b) bằng b

Nếu a chia b dư r thì UCLN(a,b) = UCLN(b,r)

- Cần hai biến F_1 và F có giá trị đầu là 1, 1

- Thực hiện lặp cho đến khi F >= n

- Do yêu cầu chỉ in các số bé hơn n nên khi in cần thêm một lệnh kiểm tra

Trang 19

- Để truy cập đến phần tử thứ k trong mảng một chiều A, ta sử dụng cú pháp: A[k].

- Có thể sử dụng các thủ tục READ(LN)/WRITE(LN) đối với các phần tử của biếnkiểu mảng

Trang 21

write('Nhap phan tu can xoa: ');readln(k);

for i:=k to n-1 do m[i]:=m[i+1];

for i:=1 to n-1 do write(m[i],', ');

readln

end

c Nhận xét: Với yêu cầu của bài tập trên chỉ cần kiểm tra chỉ số khi in (VD nếu i = 8 thì

không in) Tuy nhiên trong khi sử dụng mảng để lưu dữ liệu giải toán, nhiều khi ta có nhu cầu xóa bớt hoặc chèn thêm phần tử vào dãy

Trang 22

write('Vi tri chen: ');readln(k);

for i:=n+1 downto k+1 do M[i]:=M[i-1];

write('Nhap so can chen: '); readln(M[k]);

for i:=1 to n+1 do write(M[i],', ');

- Cho Min = M[1], j = 1 (Xem phần tử đầu tiên là bé nhất)

- So sánh Min với n-1 số còn lại Trong quá trình so sánh nếu Min > M[i] thì gán Min

= M[i], j=i và tiếp tục so sánh

Trang 23

For j:=i+1 to n do if M[j] <=M[i] then

Begin Tam:= M[i]; M[i]:=M[j]; M[j]:=tam; End;

Write('Sau khi sap xep: ');

For i:=1 to n do Write(M[i],';');

- Sử dụng mảng M để chứa dãy n số fibonacy Tạo lập hai phần tử đầu tiên là 1, 1

- Cho i chạy từ 3 đến n M [i] = M[i-1]+M[i-2]

- In n phần tử đầu tiên của mảng

for i:=3 to n do m[i]:=m[i-1]+m[i-2];

for i:=1 to n do write(m[i],' ,');

Trang 24

- 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]

Trang 25

b/ in ra các phần tử dương trong mảng c/ in ra các phần tử ở vị trí chẵn trong mảng d/ tính tổng các phần tử ở vị trí lẻ trong mảng e/ tim số lớn nhất trong mảng

f/ đưa ra số dương đầu tiên trong mảng g/ sắp xếp mảng theo chiều tăng dần.

Trang 26

Write('cac so duong co trong mang la:');

Trang 28

VAR M: Array[1 100,1 100] of Integer;

- Khái niệm: Nếu mảng 1 chiều là dãy thì mảng 2 chiều là bảng các phần tử cùng kiểu

Readln(F,n,m);

For i:=1 to n do Begin

For j:=1 to m do Read(F,A[i,j]);

For i:=1 to n do Begin

For j:=1 to m do Write(A[i,j]:4);

Trang 29

b/ sắp xếp từng dòng theo chiều tăng dần

c/ tìm phần tử yên ngựa.( phần tử yên ngựa là phần tử lớn nhất trên dòng đồng thời cũng làphần tử nhỏ nhất trên cột.)

Dữ liệu vào Dữ liệu ra phần a/ Dữ liệu ra phần b/ Dữ liệu ra phần c/

Trang 30

If Max<A[i,j] Then Max:=A[i,j];

Writeln('Max cua dong ',i,' la:',Max);

If Max<A[i,j] Then Max:=A[i,j];

Writeln('Max cua cot thu ',j,' la:',Max);

Trang 33

For i:=2 to trunc(sqrt(x)) do

If x mod i=0 thenKt:=false;

End;

End;

2/ Thuật toán tìm UCLN của hai số

FUNCTION UCLN (a,b:integer):integer;

Var r:integer;

Begin

While a<>b doBegin

If a>b thena:=a-bElseb:=b-a;

S:=s+ n mod 10;

Trang 34

For i:=1 to n div 2 do

If n mod i=0 thenS:=s+I;

If s=n then SOHT:=true;

FIBO:=false;

End;

(dưới đây là bài tập dùng hàm để in các số fibonaci với n nhập vào từ bàn phím)

Trang 35

End;

BeginClrscr;

Writeln('TINH SO FIBONACII:');

Write('Nhap n = ');

Readln(n);

for i:=1 to n doWrite(F(I):3);

End;

Trang 36

CÁC THUẬT TOÁN TRÊN MẢNG

If a[i] > a[j] thenBegin

If a[j]<a[j-1] thenBegin

(Chú ý: thuật toán sắp xếp mảng giảm dần tương tự)

c/ Sắp xếp mảng sao cho các số lẻ nằm trước day, các số chẵn nằm ở cuối dãy, các số 0 nằm ở giữa dãy

PROCEDURE sapxep(var a:mang);

Trang 37

FUNCTION timx(x:integer; A:mang):boolean;

Var i:integer; kt:boolean;

Begin

Kt:=false;

For i:=1 to n do

Trang 38

If a[i]=x then kt:=true;

Timx:=kt;

End;

b/ Đếm số lần xuất hiện ký tự x trong mảng

FUCNTION Demx(x:integer; A:mang):integer;

If x>a[n] thenA[n+1]:=x

Trang 39

J:=1;

While x>a[j] doInc(j);

For i:=n+1 downto j+1 doA[i]:=a[i-1];

5/ Thuật toán cộng hai số nguyên lớn (sử dụng xâu ký tự)

PROCEDURE Cong(M, N:string; var s:string);

Var a,b,so, du, I, code:integer;

D:string[1];

Begin

If length(m) <length(n) thenFor i:=1 to length(n) – length(m) doM:=’0’+m

ElseFor i:=1 to length(m) – length(n) don:=’0’+n;

Trang 40

so:=(a+b+du) mod 10;

du:=(a+b+du) div 10;

str(so,d) ;

s :=d+s ;end;

if du>0 thenbegin

str(du,d);

s:=d+s;

end;

End;

Ngày đăng: 17/04/2017, 20:22

TỪ KHÓA LIÊN QUAN

w