1. Trang chủ
  2. » Thể loại khác

Ôn tap ngôn ngữ lập trình pascal

32 763 2
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Ôn tập ngôn ngữ lập trình Pascal
Trường học University of Education Vietnam
Chuyên ngành Programming Languages
Thể loại Tóm tắt kiến thức
Năm xuất bản 2023
Thành phố Ho Chi Minh City
Định dạng
Số trang 32
Dung lượng 197 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tài liệu ôn tập ngôn ngữ lập trình pascal.I.Cấu trúc điều khiển 1.Cấu trúc rẽ nhánh if…then a.Dạng thiếu if then ; Hoạt động: Kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện Câu lệnh b.Dạng đủ If then Else ; Hoạt động: Kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện Câu lệnh 1, điều kiện sai thì thực hiện Câu lệnh 2. 2.Câu lệnh rẽ nhánh Case…of Cú pháp: Case of : Câu lệnh 1; : Câu lệnh 2; …….

Trang 1

NHẮC LẠI KIẾN THỨC CƠ BẢN TRONG PASCAL

I.Cấu trúc điều khiển

1.Cấu trúc rẽ nhánh if…then

a.Dạng thiếu if <Điều kiện> then <Câu lệnh>;

*Hoạt động: Kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện Câu lệnh

b.Dạng đủ If <Điều kiện> then <Câu lệnh 1>

*Cú pháp: For <Biến đếm>:=<Giá trị đầu> to <Giá trị cuối> do <Câu lệnh>;

For <Biến đếm>:=<Giá trị cuối> downto <Giá trị đầu> do <Câu lệnh>;

Until <Điều kiện>;

*Ví dụ: Kiểm tra số nguyên dương N nhập vào từ bàn phím có thỏa mãn điều kiện(0<=N<=1000)?

Repeat

Write(‘Nhap so nguyen N=’);

Readln(N);

1

Trang 2

*Khai báo: Var <Tên biển mảng>:array[m1 m2,n1 n2] of <Kiểu dl>;

*Ví dụ: Chương trình sau tính và đưa ra màn hình bảng nhân

Nếu chỉ số hàng lẻ thì ta điền theo chỉ số cột tăng

Nếu chỉ số hàng chẵn thì ta điền theo chỉ số cột giảm

Viết ra màn hình mảng vừa điền

Trang 3

Bài 2: Để làm bài này ta dùng thuật toán “lùa bò vào chuồng”, Các phần tử bằng nhau sẽ nhốt

chung một chuồng, có bao nhiêu chuồng thì có bấy nhiêu phần tử khác nhau trong dãy banđầu

Ta đóng dãy chuồng C, đánh số chuồng lần lượt từ 1,2….32000 ( ai là các số nguyên dương,ai<32000), ban đầu các chuồng đều trống) Duyệt mảng A ban đầu, phần tử ai sẽ được “nhốt”vào chuồng có số ai (tăng C[a[i]] lên một đơn vị) Đếm số chuồng khác trống đó chính là sốphần tử khác nhau của dãy ban đầu

Trang 4

For j:=0 to 32000 do if C[j]<>0 then inc(D);

Write(‘So phan tu khac nhau la’,D:4);

write('Nhap so phan tu cua day '); readln(n);

for i:=1 to n do a[i]:=random(maxint)-random(100);

for j:=0 to maxint do if c[j]<>0 then inc(D);

writeln('So phan tu khac nhau cua day la ',D:4);

readln

end

Bài 3: Dùng một trục số với các điểm chia nguyên 0->40000 để đánh dấu tổng số kẹo có thể

sinh ra khi xếp một số gói kẹo nào đó lại với nhau Ta lần lượt xét từng gói kẹo từ a1->anG/s bây giờ xét đến gói ai, để tạo ra các tổng mới, ta cộng ai vào từng tổng đã có (Cộng từtổng lớn nhất về tổng nhỏ nhất là 0) Mỗi khi sinh ra tổng mới, cần ghi nhớ số hiệu vừa gộpvào để có tổng mới này

Từ điểm X là điểm đánh dấu nửa tổng tất cả số kẹo (Nếu có) hoặc điểm đánh dấu gần x nhất(Nếu X không được đánh dấu) biết được gói cuối cùng thêm vào, trừ đi số kẹo của gói đó tađến tổng mới, lại biết số kẹo nào vừa thêm vào để tạo ra tổng mới này….Quá trình tiếp tụckhi ta về điểm đánh dấu 0

Chương trình sau lay dl từ tệp chiakeo.int sau do ket qua ghi ở tệp chiakeo.out

program chiakeo;

uses crt;

const fi='chiakeo.int'; fo='chikeo.out';

maxn=200; maxk=200; maxs=40000;

type m1=array[0 maxs] of byte;

Trang 5

if T[j+a[i]]=0 then T[j+a[i]]:=i; {danh dau tong j+a[i]

vua sinh ra goi i them vao}

Trang 6

3.Kiểu xâu.

*Khai báo Var <biến xâu>:string[độ dài];

* Một số hàm và thủ tục liên quan đến xâu

-Length(S): Cho độ dài xâu S

-Upcase(ch): Cho kí tự in hoa ứng với ch

-Pos(s1,s2): Cho vị trí xuất hiện đầu tiên của S1 trong S2, nếu s1 không có trong s2hàm cho giá trị 0

-Insert(s1,s2,vt): Chèn xâu s1 vào xâu s2 tại vị trí vt

-Delete(s,vt,n): Xóa trong xâu s n kí tự từ vị trí vt

-Copy(s,vt,n): Sao chép trong xâu S n kí tự từ vị trí vt

-str(x,s): Biến đối số x thành 1 xâu kí tự biểu diễn số đó

-Val(s,x,loi): Đổi xâu s thành số chứa trong x, nếu đổi thành công loi nhận giá trị 0,ngược lại loi nhận giá trị là vị trí kí tự sai trong s

-Concat(s1,s2,…,sn): Ghép các xâu thành một xâu.Nếu tổng độ dài các xâu lớn hơn

255 thì máy tính báo lỗi

Bài 1: Cho xâu S, kiểm tra xâu S có là xâu đối gương không?

Bài 2: Cho xâu S chỉ gồm các chữ cái Cho biết xâu S có bao nhiêu chữ cái khác nhau Mỗi

chữ cái xuất hiện bao nhiêu lần

Bài 3: Cho xâu S gồm các kí tự chữ số trong hệ thập phân biểu diễn 1 số nguyên dương có

không quá 200 chữ số Hãy tìm cách xóa đi k chữ số khỏi xâu S nói trên để xâu S thu đượcbiểu diễn số có giá trị nhỏ nhất

4.Kiểu dữ liệu tập hợp

Khi xử lí dữ liệu gồm các phần tử mà không cần lưu tâm đến quan hệ thứ tự giữa chúng,người ta có thể khai báo dữ liệu theo kiểu tập hợp

*Khai báo: type <tên kiểu>=set of <kiểu cơ sở>;

Var <tên biến>:<tên kiểu>;

Hoặc var <tên biến>:set of <kiểu cơ sở>;

*Ví dụ: Khai báo biến b là tập hợp chứa các kí tự

Type ks=set of char;

-Phép giao: Kí hiệu A*B

-Phép hiệu: Kí hiệu A-B

-Phép thuộc: Kí hiệu A<=B

Bài tập áp dụng

Bài 1: Hai từ gọi là bạn bè nếu chúng được tạo nên cùng một số kí tự giống nhau: Ví dụ

S1=’aabbbccccb’ và xâu S2=’aabccccaaaaa’ là bạn bè Viết chương trình nhập 2 xâu từ bànphím, kiểm tra 2 xâu có là bạn bè không?

Thuật toán: Ta đổi 2 xâu thành chữ in hoa, tạo 2 tập hợp t1, t2 rỗng Duyệt xâu s1 kiểm tratừng kí tự nếu kí tự đang xét s1[i] chưa có trong tệp t1 thì thêm kí tự này vào tệp Tương tựvới xâu s2 và tập hợp t2 So sánh 2 tập hợp nếu chúng bằng nhau thì kết luận 2 xâu là bạn bè

6

Trang 7

writeln('Nhap xau 1='); readln(s1);

writeln('Nhap xau 2='); readln(s2);

for i:=1 to length(s1) do s1[i]:=upcase(s1[i]);

for j:=1 to length(s2) do s2[j]:=upcase(s2[j]);

t1:=[]; t2:=[];

for i:=1 to length(s1) do if not(s1[i] in t1) then t1:=t1+[s1[i]];

for j:=1 to length(s2) do if not(s2[j] in t2) then t2:=t2+[s2[j]];

if t1=t2 then writeln('Hai xau la ban be ')

else writeln('Hai xa khong la ban be');

GV Hướng dẫn hs viết chương trình này

Ta khai báo một mảng lưu lại các số fibonaci tính được, viết ra màn hình số hạng thứ n

Var F:array[1 nmax] of longint;

F[1]:=1; F[2]:=2;

For i:=3 to n do F[i]:=F[i-1]+F[i-2];

Writeln(‘So hang thu n=’,F[n]);

Bài 3:Nhập vào một số nguyên không âm, kiểm tra xem nó có phải là số nguyên tố hay

Until (n mod i= 0) or (i*i>sqrt(n));

If i*i>sqrt(n) then kq:=trueElse kq:=false;

NT:=kq;

7

Trang 8

8

Trang 9

Bài 4 In ra các số nguyên tố nhỏ hơn hoặc bằng N (N là số nguyên không âm được nhập từ

until (n mod i=0) or (i*i>n);

if i*i>n then kq:=true

Biểu diễn các só nguyên trên trục số bắt đầu từ số 2 đến N sau đó tìm cách xóa dần các điểm biểu diễn hợp số, các điểm còn lại trên trục số sẽ biểu diễn số nguyên tố cụ thể:

-Ban đầu tất cả các điểm nguyên trên trục số chưa bị xóa;

-Số đầu tiên chưa bị xóa là số 2 (đó là số nguyên tố) , xóa các bội của 2

-Số đầu tiên chưa bị xóa là số 3 (Số nguyên tố), xóa các bội của 3

….quá trình cứ tiếp diễn với các số chưa bị xóa i mà i*i<N

Trang 10

Bài 5- Dãy số Fibonaci

Như các bạn đã biết dãy số Fibonaci là dãy 1, 1, 2, 3, 5, 8, Dãy này cho bởi công thức đệqui sau:

Với biểu diễn như trên ta nói N có biểu diễn Fibonaci là akak-1 a2a1

2 Cho trước số tự nhiên N, hãy tìm biểu diễn Fibonaci của số N

Input:

Tệp văn bản P11.INP bao gồm nhiều dòng Mỗi dòng ghi một số tự nhiên

Output:

Tệp P11.OUT ghi kết quả của chương trình: trên mỗi dòng ghi lại biểu diễn Fibonaci của các

số tự nhiên tương ứng trong tệp P11.INP

Trang 11

for i := 3 to Ind do Fibo[i] := Fibo[i - 1] + Fibo[i - 2];

Bài 6: Giai thừa (Đề thi HSG tỉnh năm 2010-2011)

Giai thừa của một số được cho bởi công thức sau: n!=1*2*…*n

Cho số N (N<=2.109) nguyên dương tính tổng giai thừa các chữ số chủa nó

Trong bài các em viết 1 hàm tính giai thừa của số nguyên dương N Sử dụng hàm này để tính tổng các chữ số của một số

Trang 12

Bài 7: (Đề thi HSG tỉnh năm 2010-2011) Dãy số Fibinaci

Cho số nguyên dương N (N<=2.109) Hãy kiểm tra xem n có là số thuộc dãy Fibinaci không? Nếu có thì là số bao nhiêu trong dãy?

Yêu cầu hs dựa vào chương trình bài 5 tự viết chương trình

until (Fibo[i]=n) or (i>=Ind);

if i=Ind then writeln('NO')

else writeln('YES ',i);

Trang 13

Bài 8: Số chữ số 0 tận cùng (Đề thi HSG tỉnh năm 2011-2012)

Tính chữ số 0 tận cùng của N!=1*2*….*N, với số nguyên dương N<=109 N nhập từ bàn phím, kết quả đưa ra màn hình gồm một số là số chữ số 0 tận cùng của N! tìm được

Bài tập tìm các số siêu nguyên tố có n chữ số

Bài này có thuật toán không đệ quy

Tạo các số siêu nguyên có i chữ số từ các số siêu nguyên tố có i-1 chữ số Code

Trang 14

Khởi tạo a mảng chứa các số nguyên tố 1 9

Trang 15

Bài 2 (Đề thi HSG Tỉnh năm 2009-2010)

Dãy các số tự nhiên được viết ra thành một dãy vô hạn trên đường thẳng: 1234567891011121314 (1)

Hỏi số ở vị trí thứ 1000 trong dãy trên là số nào?

Trang 16

{1,2,3,4, ,10,11, ,100,101,102 ,1000,10001 }

Khi i có 1 chữ số: có tối đa 9 số, số chữ số = 9x1 = 9;

Khi i có 2 chữ số: có tối đa 9 chữ số chục (1->9) x 10 chữ số đơn vị (0 ->9) = 9x10 = 90 số, số chữ số = 90x2 = 180;

Khi i có 3 chữ số: có tối đa 9x10x10 = 900 số, số chữ số tối đa = 900x3 = 2700;

Trường hợp trên k = 1000, ta tính 1000 - 189 = 811, 811/3 = 270 dư 1 nghĩa là chữ số thứ 1 của số thứ 270 tính từ 100 Ta có từ 100 tới 299 có 200 số, 70 số còn lại rơi vào khoảng 300 -> 369, số thứ 270 chính là 369 vậy kết quả cần tìm

Trang 17

so:=n div k+mu+ord(n mod k>0)-1;

thuật toán rất đơn giản, căn bản là làm 2 bước sau:

b1 Xác định xem vị trí n nằm ở số nguyên nào trong dãy số

"1234567891011121314 "

vd: với k=14, thì số nguyên chứa chữ số ở vị trí thứ 14 chính là số 12

b2 Xác định chữ số cần tìm trong số nguyên vừa tìm ở bước 1

vd: với k=14, số nguyên tìm được là 12, thì chữ số cần tìm là số 1

- để làm được bước 1 thì ta dựa vào quy luật sau: ban đầu với các số nguyên có

1 chữ số thì ta sẽ có 9 chữ số, tiếp theo với các số nguyên có 2 chữ số ta sẽ có

180 chữ số, tiếp theo nữa là 2700 chữ số, Ta gọi các số 9, 180, 2700, này là

d, và số d cần tìm phải là số lớn nhất và <=k, để tìm d ta dùng công thức :

d=9*i*10i-1 ( i là số chữ số của số nguyên)

- sau khi tìm được d, ta sẽ xác định số nguyên cần tìm là x=x+ d div i, và k=k-d

là số dư còn lại

vd: với n=14, ta tìm được d là 9, x=9, số dư k=5

- với k còn dư, ta có x=x+(k div i)

- tiếp theo là làm bước 2, ta sẽ xác định vị trí chứa chữ số cần tìm trong số nguyên x :

nếu k mod i=0 thì vị trí đó chính là chữ số cuối của số nguyên vừa tìm, ngược lại thì vị trí đó sẽ là i = k mod i

- cuối cùng thì dùng hàm str(x,st) để chuyển số thành chuỗi và in chữ số st[i] ra màn hình

Trang 18

Dữ liệu nhập: file DAYSO.INP:

- Dòng 1: 2 số N, K giữa 2 số cách nhau 1 khỏang trắng

Trang 19

Nhập dãy số thực a và số k Xét xem trong dãy có k số dương đứng cạnh nhau hay không?

Dữ liệu nhập: DUNGCANH.INP: dãy a và số k

Dữ liệu xuất: DUNGCANH.OUT có xuất 1 , không có xuất 0

Trang 20

While (i<=n) and (a[i]>0) and (a[i+1]>0) do

begin inc(d); inc(i);end;

Dữ liệu vào trong file PNT.INP nội dung gồm:

- Dòng đầu tiên là số M (1 < M <= 100) - số các số cần tìm số phản nguyên tố lớn nhất củanó;

- M dòng tiếp theo lần lượt là các số K1, K2, K3, , KM;

Dữ liệu ra trong file PNT.OUT gồm M dòng: dòng thứ i là số phản nguyên tố lớn nhất nhỏhơn hoặc bằng Ki

Một chuỗi kí tự thuần nhất được định nghĩa là chuổi chỉ bao gồm các kí tự ‘A’ ‘Z’ hoặc ‘a’

‘z’ Một xâu thuần nhất có thể được viết thu gọn, bao gồm các ký tự kèm theo số lần xuất hiện liên tiếp của ký tự đó

Ví dụ:

Chuỗi thuần nhất: AABBCDDEEF Chuỗi thu gọn: 2A2BC2D2EF

Chuỗi thu gọn: A5B3D2E Chuỗi thuần nhất: ABBBBBDDDEE

Yêu cầu: Viết chương trình nhập 1 chuỗi không quá 255 ký tự từ bàn phím là dạng thuần nhất

Trang 21

hay dạng thu gọn, ghi chuổi vừa nhập vào tập tin INPUT.TXT

‒ Nếu là chuỗi thuần nhất thì hãy chuyển đổi nó về dạng thu gọn

‒ Nếu là chuỗi thuộc dạng thu gọn thì hãy chuyển đổi nó trở lại dạng thuần nhất tương ứng

‒ Kết quả lưu vào tập tin OUTPUT.TXT

for j:=i+1 to length(s) do

if (s[i]=s[j+1]) and (j<length(s)) then d:=d+1

for i:=1 to length(s) do

if s[i] in ['0' '9'] then c:=c+s[i] else

for i:=1 to length(s) do

if s[i] in ['0' '9'] then begin k:=1; break; end;

if k=1 then writeln(giainen(s)) else writeln(nen(s));

readln

end.

Trang 22

BÀI 1: - Số siêu nguyên tố

Số siêu nguyên tố là số nguyên tố mà khi bỏ một số tuỳ ý các chữ số bên phải của nó thì phần cònlại vẫn tạo thành một số nguyên tố

Ví dụ 7331 là một số siêu nguyên tố có 4 chữ số vì 733, 73, 7 cũng là các số nguyên tố

Nhiệm vụ của bạn là viết chương trình nhập dữ liệu vào là một số nguyên N (0< N <10) và đưa rakết quả là một số siêu nguyên tố có N chữ số cùng số lượng của chúng

Ví dụ khi chạy chương trình:

Trang 23

write(' '); { <- thêm dấu cách }

for j:=i to 2*i-1 do write(j:2); { <- đặt chỗ trống cho số}

for j:=2*i-2 downto i do write(j:2); { <- đặt chỗ trống cho số}

Trang 24

Ý tưởng: Thay vì chạy 2 vòng lặp để xét m và n, ta có thể chỉ cần chạy 1 vòng lặp kiểm tra xem m

và uoc(m) có là bạn của nhau không

FOR i:=1 TO k DIV 2 DO

IF k MOD i =0 THEN tong:=tong+i;

Trang 25

Cách 2: Sử dụng xâu: Xâu giúp lưu trữ thoải mái hơn kiểu số nguyên, nên ta có thể khái báo N có

ở string thay vì Integer Như vậy, ở những trường hợp lớn (vd N bao gồm 100 chữ số chẳng hạn) thuật toán vẫn có thể hoạt động bình thường

Bài 6: Nhập vào n (1<=n<=30000), hãy in ra số chữ số 0 cuối cùng của n giai thừa.

Ý tưởng cách tìm: Xét tất cả các số chia hết cho 5 Giả sử mỗi số đó có thể chia hết cho Xi chữ số 5

Cộng tất cả các Xi đó lại thì ta được số chữ số 0

Giả sử 25! = 15511210043330985984000000 có 6 chữ số 0 tận cùng

ta có

Trang 26

Bài 7: Cho ột số ở hệ cơ số 10 đổi sang hệ nhị phận

Nguyên tắc của phương pháp chuyển đổi từ hệ cơ số 10 sang hệ cơ số 2 là lấy số cần chuyển đổi chia cho 2 (kết quả chỉ lấy phần nguyên), sau đó tiếp tục lấy kết quả chia 2 (và cũng chỉ lấy phần nguyên), kết quả số nhị phân thu được là tập hợp các số dư của các phép chia

Trang 27

Writeln('+Doi sang he 2 la: ',He2);

Writeln;

Writeln(' Bam phim <Enter> de ket thuc');

Readln

End

Bài 8: Phân tích một số ra thừa số nguyên tố

Ví dụ: Phân tích 12=2*2*3 Ý tưởng: Thuật toán phân tích một số ra thừa số nguyên tố tương tự như thuật toán kiểm tra số nguyên tố Điểm khác ở đây là khi kiểm tra số nguyên tố ta phải lần lượt kiểm tra các số nhỏ hơn sqrt(n) (căn bậc hai của n) có phải là ước của n hay không, còn khi phân tích ta chỉ việc chia n cho các số nguyên bắt đầu từ số nguyên tố nhỏ nhất là 2 Khi không chia được nữa thì ta tăng số chia lên 1 đơn vị, quá trình phân tích kết thúc khi n bằng 1

VAR i,n :INTEGER;

Trang 28

Bài 10: Dãy số tự nhiên a1 , a2 ,a3 ak được gọi là hạnh phúc nếu nó thoả mãn các điều kiện sau :

- Dãy trên là một dãy giảm dần

- Với mọi i ( 1<=i <= k ) ai hoặc là số nguyên tố , hoặc phải là ước của một trong các số a1 , a2 , , ai

a[1]:=1; a[2]:=1; a[3]:=2;

For i:=4 to max do

Ví dụ: 289 là một số chính phương vì 289 = 17 bình phương.

Thuật toán Pascal dưới đây sẽ giúp tìm số chính phương trong mảng 1 chiều

uses crt;

type ArrInt = array[1 250] of integer;

Var n,i,x : integer;

a: ArrInt;

BEGIN

Trang 30

Write('Nhap so phan tu= ');readln(x);

For i:=1 to x do begin

1 Bubble Sort (Sắp xếp nổi bọt)

Ý tưởng: Giả sử có mảng có n phần tử Chúng ta sẽ tiến hành duyệt từ cuối lên đầu,so sánh 2 phần

tử kề nhau, nếu chúng bị ngược thứ tự thì đổi vị trí, việc duyệt này bắt đầu từ cặp phần tử thứ n-1

và n Tiếp theo là so sánh cặp phần tử thứ n-2 và n-1,… cho đến khi so sánh và đổi chỗ cặp phần

tử thứ nhất và thứ hai Sau bước này phần tử nhỏ nhất đã được nổi lên vi trí trên cùng (nó giống như hình ảnh của các “bọt” khí nhẹ hơn được nổi lên trên) Tiếp theo tiến hành với các phần tử từ thứ 2 đến thứ n

Procedure bubblesort(var amang; Ninteger);

Ngày đăng: 19/07/2014, 20:15

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w