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

Các dạng bài tập Pascal cơ bản

215 11 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

Tiêu đề Các Dạng Bài Tập Pascal Cơ Bản
Người hướng dẫn Thầy Trần Thông Quế
Trường học Chưa xác định
Chuyên ngành Lập trình
Thể loại Bài tập
Năm xuất bản 2017
Thành phố Chưa xác định
Định dạng
Số trang 215
Dung lượng 0,92 MB

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

Nội dung

Đây là tuyển tập ngắn gọn các bài toán giải bằng lập trình với ngôn ngữ Pascal, tài liệu này chứa nhiều bài toán và nhiều bản code được trực quan hóa bằng lập trình đồ họa rất trực quan. Mời các bạn cùng tham khảo!

Trang 1

(Đặc biệt ở phần GRAPHIC và phần GRAPH THEORY )

PHẦN I- CÁC BÀI TOÁN CƠ BẢN.

A/ LẬP TRÌNH KHÔNG DÙNG CẤU TRÚC NÀO.

1-Chỉ được dùng phép nhân, tính a mũ 28 với không hơn 6 phép nhân (khi Test, bạn nên cho a=2)

{Tinh a mu 28 chi dung khong hon 6 phep nhan}

a:=a*a; Writeln('a mu 4=',a);

b:=a; {luu a mu 4 vao b}

a:=a*a*a; Writeln('a mu 12=',a);

a:=a*a; Writeln('a mu 24=',a);

a:=a*b; Writeln('a mu 28=',a);

Writeln('Xau cho truoc:',s);

val('250000',so1,k1); val('100000',so2,k2); val('150000',so3,k3);

Trang 2

(Bài này kiểm tra sự hiểu biết của hs về cách dùng toán tử gán đồng thời với toán tử quan hệ trong một dònglệnh).

B/ CÁC CẤU TRÚC LẬP TRÌNH CƠ BẢN CỦA PASCAL

B1) CÁC CẤU TRÚC RẼ NHÁNH: IF…THEN…; IF…ELSE…; CASE…OF…

4- Lập trình tính xem, một tháng bất kỳ, năm bất kỳ có bao nhiêu ngày (tháng, năm đọc từ bàn phím)

Write('a/ Nhap thang:'); Readln(thang);

Write('b/ Nhap nam (co 4 chu so):'); Readln(nam);

Trang 3

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

Writeln('Tong cua cac so trong khoang [-3.0,3.0]=',t:0:2);

Write(' va Trung binh cong cua chung =',tbc:0:2);

Write('Cho biet nam duong lich:'); Readln(Year);

Write('Nam ',year,' la nam am lich:');

Trang 4

Case (Year Mod 10) of

Write('Nhap so Thap phan can chuyen:'); Readln(n);

Write(n,' -> Viet theo chu so La ma la:');

Trang 7

If i=Length(s) Then GtriLama:=x

Else If x<Val(s[i+1]) Then GtriLama:=GtriLama(s,i+1)-x

Trang 10

If tong_uoc=i Then

Begin

dem:=dem+1;

Writeln('* So hoan hao thu ', dem,' la:',i);

Write('* va cac uoc so cua no la:');

Hơn 250 năm bài toán Goldbach vẫn chưa được chứng minh, và cho đến năm 1930, nhà toán học Nga L G Snhirenman mới chỉ chứng minh trường hợp nhỏ của giả thiết: “Mọi số chẵn n ≥ 4 đều có thể biểu diễn

thành tổng của 2 số nguyên tố”).

Uses crt;

Var so1, so2, so3, so4: integer;

kt1, kt2: boolean; {kt=kiem tra}

Trang 11

If kt1 and kt2 then Write(‘GIA THIET GOLDBACH DUNG.’)

Else Write(‘GIA THIET GOLDBACH SAI.’);

Writeln;

Write(‘Another test (y/n)?’); Readln(hoi);

Until hoi In [‘N’, ‘n’];

End

*15- Tìm và liệt kê tất cả các số Mersenne nhỏ hơn một số tự nhiên N cho trước (với n>=3)-Các số nguyên

tố biểu diễn được dưới dạng 2n – 1 (n-số tự nhiên) gọi là số

Mersenne-uses Crt;

Var so, n, i, ntmin:longint;

check, stop: Boolean; tt:Byte;

While (i<=sqrt(so)) And (so MOD i<>0) do Inc(i);

If i>sqrt(so) then check:=true

Trang 12

Var i,n,f1,f2,fi,fi_1,fi_2:Integer;

Begin clrscr;

Write(‘Nhap do dai day Fibonaci n=’); Readln(n);

Writeln(‘ DAY FIBONACI UNG VOI DO DAI ‘,N,’ LA:’);

17- Lập trình (PHI ĐỆ QUY) tìm ước số chung lớn nhất của N số tùy ý đọc từ bàn phím vào

Test Vào: 72 40 24 48 56, Ra: 8

Uses Crt;

Var a:Array[1 100] of integer;

n,i,tt: Byte; d: Integer;

Begin Clrscr; {Có lẽ bạn nên dùng PHÁT SINH DỮ LIỆU NGẪU NHIÊN TỰ ĐỘNG, sẽ nhanh hơn!} Repeat

Writeln(‘Day so vua nhap:’);

For i:= 1 to n Do Write(a[i]:3);

Write(‘USC max cua ‘,n,’ so vua nhap la:’,a[n]); Writeln;

Write(‘More(1/0)? Continue - > 1, Stop -> 0:’); Readln(tt);

Until tt=0;

End

Trang 13

18- Tìm nghiệm nguyên dương của phương trình sau:

a) 4x+3y-9z=n, với 0 ≤ x, y, z ≤ 50; n- đọc từ bàn phím vào

Không áp đặt trước miền giá trị của x, y, z hãy tìm nghiệm nguyên dương của các phương trình sau:

Các bài còn lại làm tưong tự

19- Lập trình tạo bảng ba cột GÓC SIN COS, tính giá trị hàm Sin, Cos ứng với góc

ở cột cận trái (Vì có từ góc 0o đến 360o nên yêu cầu mỗi lần chỉ hiện lên màn 20 giá trị kết quả, để XEM TIẾP: gõ phím ENTER.)

Uses Crt;

Var goc:word;

gocradian: Real;

Begin clrscr;

Writeln(#32:9,’BANG GIA TRI GOC, SIN, COS:’);

Writeln(‘ Nho an ENTER de xem tiep.’);

Trang 14

B.2.2) CÁC LỆNH LẶP KHÔNG XÁC ĐỊNH (WHILE .DO; REPEAT…UNTIL)

Lập trình giải các bài toán sau:

20- Tính gần đúng với sai số 10^-6 (1/1000000): số Pi; sinx; cosx; e^x

n n

+

Lời nhắc không thừa:

+ Đối số x trong các hàm sin, cos ở đây cần hiểu ngầm có đơn vị đo là Radian (Trong mọi Program

để nó như một hư số)

+ và có LỜI NHẮC QUAN TRỌNG HƠN: Hãy test program với bộ số sau:

x=0 hoặc x=3.1416 (= π) sinx=0; x=1.5708 (=π/2)  sinx=1; x=4.7124 (=3π/2) sinx=-1

và trong đầu luôn có hình ảnh Vòng Tròn Đơn Vị:

Uses Crt;

Const ss=1E-6;

Var x,S,T: Real; n: Integer; hd:char;

Trang 15

n n

x e

n

≈ −

+

≈ +

21- Phân tích một số tự nhiên ra các thừa số nguyên tố

Program Thua_so_nguyen_to; {Repeat và While lồng nhau}

Trang 16

Writeln(‘Tong cac chu so cua so vua nhap:’,tong);

Writeln(‘So cac chu so cua so vua nhap=’,dem);

Write(‘Nhap Sobichia:’) ; Readln(Sobichia);

Write(‘Nhap Sochia<=Sobichia:’) ; Readln(Sochia);

Trang 18

Write(‘ thi chu so ‘, max,’ la chu so lon nhat va nam o vi tri thu ‘,vitri);

Write(‘ ke tu ben phai sang.’);

Var so1, so2, so3, so4, n, dem: longint;

kt1, kt2: boolean; {kt=kiem tra}

Begin clrscr;

Write(‘Nhap so tu nhien n:’); Readln(n);

Writeln(‘Cac cap so sinh doi < n:’);

Trang 19

WRITELN(‘LAN BOC THU ‘,I,’:’);

WRITE(‘ BAN BOC MAY VIEN (khong qua 4 vien): ‘);READLN(N);

WRITELN(‘ MAY BOC: ‘,5-N);{WRITELN(5-N);}

WRITELN(‘ SO SOI CON LAI:= ‘,TONG_SOI-(5*i));

Trang 20

*30- Tìm và in lên màn tất cả các cặp số thân thiện mà giá trị của chúng không quá 10000 (Hai số được gọi

là thân thiện nếu TỔNG CÁC ƯỚC CỦA SỐ LỚN BẰNG SỐ NHỎ: ví dụ 48 và 75 là cặp số thân thiện vì các uớc của 75 là: 3 5 15 25 và tổng các ước này bằng 48!)

Trang 21

*32- (ĐẢO BIT INFORMATIC OLYMPIC MOSCOW 1983)

Số nguyên m được viết trong hệ cơ số 2 theo trật tự ngược lại Số nhận được viết trong hệ thập phân được coi là giá trị của hàm B(m) Hãy tính giá trị hàm B(m) chẳng hạn với m=512 ; 513; 514;…; 1024

PROGRAM DaoBit; {chay voi m=513}

Trang 22

PHẦN II LẬP TRÌNH THEO MODUL

Trong Pascal có hai Modul để ta lập trình Đơn Thể Âý là:

* Procedure (Thủ Tục)

* (và) FUNCTION (Hàm)

Đặc biệt các em cần chú ý và nắm thật vững bản chất 3 khái niệm sau của lập trình Modul:

a-Biến toàn cục (Global Var.) và biến cục bộ (Locate Var.)

b-Các khái niệm về tham chiếu

c-Hai phương cách truyền data trong lập trình Modul của Pascal:

c1 Truyền theo Tham Trị (Transfer By Value Parameters)

c2 Truyền theo Tham Biến (Transfer By Variable Parameters)

Trước hết các bạn hãy “khai vị” 3 “món” sau ( 3 MÓN “KHAI VỊ” NÀY KIỂM TRA XEM CÁC BẠN CÓ HIỂU ĐẾN TẬN NGỌN NGUỒN CÁC KHÁI NIỆM a); b) ; c); d) nêu trên không Vì chỉ khi hiểu rõ thực chất 4 khái niệm đó, bạn mới hòng lập trình đơn thể thạo):

Không RUN program, chỉ dùng bút ghi kết quả của 3 program sau đây lên giấy + giải thích tỉ mỉ kết quả!

BA BÀI “KHAI VỊ” NÀY KHÔNG DỄ ĐÂU! NHỚ: KHÔNG ĐƯỢC RUN PROGRAM NHÉ!!!

1 Program Transf_By_Val;

Uses Crt;

Var so1, so2:integer;

Procedure Transf_Val(x, y:integer);

Begin

Writeln(' Ben trong thu tuc:');

x:=x+15;

Trang 23

y:=y+15;

Writeln('X=',x);

Write('Y=',y);

End;

Begin {Main Prog.)

Writeln('Co che truyen data theo THAM TRI:');

Write('Nhap so thu nhat so1='); Readln(so1);

Write('Nhap so thu hai so2='); Readln(so2);

Transf_Val(so1, so2);

Writeln;

Writeln('Ben ngoai thu tuc(tuc la sau truyen Data):');

Writeln('Bay gio so thu 1 so1=',so1);

Writeln('Bay gio so thu 2 so2=',so2);

Writeln('Go ENTER de stop!');

Readln;

End

2 Program Transf_By_Vari_Para;

Uses Crt;

Var so1, so2:integer;

Procedure Transf_By_Vari_Para(Var x, y:integer);

BEGIN {Main Prog.}

Writeln('Co che truyen Data theo THAM BIEN:');

Write('Nhap so thu nhat so1='); Readln(so1);

Write('Nhap so thu hai so2='); Readln(so2);

Writeln('Sau khi truyen Data (tucla ben ngoai thu tuc):');

Writeln('Bay gio so1=',so1);

Writeln('Bay gio so2=',so2);

Trang 24

BÀI NÀY NGẮN, NHƯNG KHÁ HAY VÌ NÓ CHO BẠN NHIỀU HIỂU BIẾT: 1 CÁCH KHAI BÁO Ở ĐẦU PROGRAM; Ở 2 MODUL: CÁCH THAM CHIẾU KHÁC NHAU (TẠI SAO?); CÁCH DÙNG CÁCLỆNH Ở MODUL NHẬP VÀ MODUL INRA…

Uses Crt;

Type Kytu='!' '}';

Tapkytu=Set of Kytu;

Var A,B,C,D,E: Tapkytu;

Procedure Nhap(Var x:Tapkytu);

Write('Nhap cac phan tu cua tap A (Ngung, go ENTER:'); Nhap(A);

Write('Nhap cac phan tu cua tap B (Ngung, go ENTER:'); Nhap(B);

C:=A+B;

D:=A*B;

Trang 25

E:=A-B;

Write('Hop cua 2 tap vua nhap C=A+B='); Inra(C); Writeln;

Write('Giao cua 2 tap vua nhap D=A*B='); Inra(D); Writeln;

Write('Hieu cua 2 tap vua nhap E=A-B='); Inra(E); Writeln;

Var n:longint; tt:byte;

Function chphuong_check(var k:longint):boolean;

Write('Nhap so nguyen n:'); Readln(n);

If chphuong_check(n) then Write(n,' la so chinh phuong.')

Else Write(n,' khong phai la so chin phuong.');

For i:=1 to k DIV 2 do

If n MOD i=0 then sum:=sum+i;

If sum=n then Hhao_Check:=true

Else Hhao_Check:=false;

End;

Begin clrscr;

Write('n='); Readln(n);

If Hhao_Check(n) then Write(n,' la so hoan hao.')

Else Write(n,' khong la so hoan hao.');

Trang 26

Readln;

End

CÓ THỂ BẠN KHÔNG ĐỂ Ý HOẶC KHÔNG HIỂU: Trong 2 bài 28 & 29, biến Toàn cục và Tham số Thực sự là trùng nhau (n) Lời gọi hàm ở Main Program luôn luôn phải dùng BIẾN TOÀN CỤC HOẶC THAM SỐ THỰC SỰ (NGHĨA LÀ: KHÔNG ĐƯỢC DÙNG BIẾN CỤC BỘ OR KHÔNG ĐƯỢC DÙNG THAM SỐ HÌNH THỨC)

7 Đọc từ bàn phím vào số nguyên dương n Viết một hàm kiểm tra xem số ấy có là số nguyên tố không.USES CRT;

Var n ,d,i: Integer;

Function ktnt:Boolean;

Begin

d:=0;

For i:=2 to n-1 do

If n mod i=0 then d:=d+1;

If(d=0) and (n>1) then ktnt:=True

Writeln(#32:9,n,' la so nguyen to.')

Else Writeln (#32:9,n,' khong phai la so nguyen to.');

Readln;

END

(CÁC HÀM KIỂM TRA TRÊN ĐÂY, KHÔNG NHẤT THIẾT PHẢI CÓ KIỂU BOOLEAN KIỂU CỦA

NÓ CÓ THỂ LÀ BYTE (THƯỜNG) HOẶC LÀ CHAR (ĐÃ CÓ LÚC NHÀO BẠN THỬ VỚI KIỂU CHAR CHO NHỮNG HÀM CÓ CHỨC NĂNG KIỂM TRA CHƯA?)

8 Đọc từ bàn phím vào một số nguyên dương, kiểm tra xem số ấy có đối xứng không Một số đọc xuôi, đọc ngược đều như nhau là số đối xứng Ví dụ 123454321

CODE DƯỚI ĐÂY LÀ NGẮN NHẤT, KHÔNG THỂ NGẮN HƠN

If m=n then Write('So vua nhap la so Doi xung.')

Else Write('So vua nhap Khong la so Doi xung.');

Writeln;

Trang 27

Write('Another Test (1/0)? Come on->Press 1; Stop-> Press 0:');

Số 5 biểu diễn được bằng tổng của 2 số tự nhiên liên tiếp

BÀI NÀY KHÁ KHÓ ĐỐI VỚI HS VÀ CẢ SINH VIÊN!

Trang 28

Repeat

Repeat

Write('Nhap so duong n='); Readln(n);

If n<0 then Writeln(' Nhap lai n>=0');

Write('So ',n,' bieu dien duoc thanh');

Write(' tong cua ',dem,' so tu nhien lien tiep!');

End

Else

Begin

Write('So ',n,' khong bieu dien duoc thanh');

Write(' tong cua >=2 so tu nhien lien tiep!');

Test1 vào: 8; ra: 3 3 2, tích các số hạng đạt max=18

Test2: Vào 23; ra: 3 3 3 3 3 3 3 2, tích các số hạng này đạt max=4374

Trang 30

dem:=0; writeln; Writeln;

Writeln(#32:18,'Cac so Tam tam thoa man d/kien dau bai:');

Ví dụ Vào cận trên: 1000, Ra: (1,1); (5, 25); (6, 36); (25, 625) Có tất cả 4 cặp Lucasa

CODE DƯỚI ĐÂY LÀ NGẮN NHẤT!

Trang 31

Writeln('Tong cong co ',d,' cap LucasaNumbers.');

Write('Go ESc de tro lai chuong trinh!');

Until Readkey = #27;

End

**13 Liệt kê tất cả các số SIÊU NGUYÊN TỐ có không hơn 8 chữ số (Các số SIÊU NGUYÊN TỐ dài L

là những số mà xóa đi k (k<L) ký số bên phải của nó thì phần còn lại vẫn là số nguyên tố Chẳng hạn: Số

37397 là số siêu nguyên tố khi ta xóa đi 7, hoặc 97 hoặc 397 v.v…)

Trang 32

II_1) MẢNG 1_CHIỀU LẬP TRÌNH GIẢI CÁC BÀI TOÁN SAU:

1- Cho trước độ dài n của dãy số Đọc từ bàn phím vào dãy n số tự nhiên Tìm và in lên màn hình các

số nguyên tố cùng nhau trong dãy

write(‘Nhap do dai cua day so: ‘); readln(n);

writeln(‘Nhap cac phan tu cua mang:’);

for i:=1 to n do

Begin

write(‘a[‘,i,’]=’);readln(A[i]);

End;

write(‘Day vua nhap la:’);

For i:=1 to n do write(‘ ‘,a[i]);

writeln;

writeln(‘= = = = = = = = = = = = = = = = =’);

write(‘Cac so nguyen to co trong mang la:’);

For i:=1 to n do

Trang 33

write(‘Nhap do dai n (2<=n<=1000) cua day so: ‘); readln(n);

writeln(‘Nhap cac phan tu cua mang:’);

writeln(‘Day vua nhap la:’);

For i:=1 to n do write(‘ ‘,a[i]);

Trang 34

Writeln(‘Day con gom cac so duong lien tiep dai nhat:’);

For i:=id to id+kmax-1 do Write(a[i]:4);

Readln;

End

3- Hai bài dưới đây yêu cầu dùng THUẬT TOÁN PHI ĐỆ QUY:

a/ In lên màn hình tam giác ĐỀU Pascal

b/ In lên màn hình tam giác VUÔNG Pascal

(Tam giác Pascal là bảng số có hình tam giác chứa các hệ số của khai triển nhị thức Newton)

For j:=i Downto 1 Do

If (j=i) or (j=1) then a[j]:=1

Trang 35

Write(‘ Nhap n:’); Readln(n);

Writeln(‘Cac phuong an bieu dien tong:’); Writeln;

Writeln(#32:5,’So cach bieu dien=’,dem); Writeln;

Write(‘Continue (y/n) ?, Go y->de tiep; go n hoac N de thoat:’);

Readln(tt); Writeln; Writeln;

Until tt IN [‘n’,’N’];

End

*5- INFORMATIC OLYMPIC MOSCOW 1987 (TẬP NỬA BỘI-HALF MULTI SET)

Tập A các số tự nhiên định nghĩa như sau:

Trang 36

a- 1 ∈ A

b- K ∈ A thì 2K+1 ∈ A và 3K+1 ∈ A Tìm và in lên màn n phần tử đầu tiên của tập A

(n<1000) Tập định nghĩa trên đây gọi là HALF MULTI SET

Chẳng hạn với n=9 thì các phần tử đầu tiên của tập A là:

Trang 37

if a<b then min:=a

Else min:=b;

End;

Procedure RandomGene(t, n:word); {Tao sinh data ngau nhien}

var i,s: word;

Write(‘Day a[1 ’,n,’] co the chia thanh ‘,k,’ doan’);

Writeln(‘ co tong nhu nhau la=’,tt Div k);

s:=0;

If k=1 Then

Begin

Trang 38

A[i,i] + A[i,j] ( 1<=i, j<=k, i = j )

Tìm số hiệu làng i để đặt trạm cấp cứu sao cho từ đó đi tới làng xa nhất (về thời gian) sẽ mất thời gian ít nhất

Mảng A[1 k,1 k] cho trước, trong đó tất cả phần tử A[i,j]>0 và có thể A[i,j] <>A[j,i]

Uses Crt;

Const kk=20;

Trang 39

Const ktuhe2:Array[0 1] Of Char='01';

Var so:Word;i:Byte; sohe2:string[8];hd:Char;

Begin ClrScr;

Repeat

Write('Vao mot so nguyen kieu Word:');Readln(so);

sohe2[0]:=#8;

For i:=8 Downto 0 Do

If (so AND (1 SHL i))=(1 SHL i) Then

sohe2[8-i]:=ktuhe2[1]

Else

sohe2[8-i]:=ktuhe2[0];

Delete(sohe2,9,80);

Writeln(so,' O he THAP PHAN, doi sang he 2 la :',sohe2);

Write('Ban co thu tiep khong (c/k)?');Readln(hd);

Until (hd='k') OR (hd='K');

End

Trang 40

9- (BÀI TOÁN NGƯỢC CỦA BÀI 8) Đổi một số nhị phân sang thập phân Ví dụ Vào là 1101 thì Ra là 13Program Nhi_Thapphan;

write('Nhap do dai n (n<=1000) cua day so: '); readln(n);

writeln('Nhap cac phan tu cua mang:');

For i:=2 to n do

a[i]:=Random(100);

clrscr;

writeln('Day vua nhap la:');

For i:=2 to n do write(' ',a[i]);

writeln;

writeln('= = = = = = = = = = = = = = = = = = = = = = = = = =');

dmin:=abs(a[3]-a[2]);

For i:=4 to n do

If (dmin>abs(a[i]-a[i-1])) then dmin:=abs(a[i]-a[i-1]);

Writeln('Khoang cach nho nhat giua cac phan tu trong day la:',dmin);

Trang 41

Write('Another Test (1/0)? Continue->Press 1; Stop->Press 0:');

Writeln;

Readln(hoi);

Until hoi=0;

End

III_2) MẢNG HAI CHIỀU (TÊN KHÁC: MA TRẬN)

(CHỦ ĐỀ NÀY KHÁ NHIỀU BÀI TẬP THÚ VỊ HOẶC ÍT QUEN THUỘC VỚI CÁC BẠN)

Khuyến cáo: Các bạn học sinh hãy chú ý điều sau:

CÁI KHÓ CỐT LÕI CỦA CÁC BÀI TOÁN TỪ 7 ĐẾN 11 đối với các bạn học sinh hay sinh viên KHÔNG Ở THUẬT TOÁN TÌM KIẾM HAY TÍNH TOÁN (những thuật toán này quá dễ với các bạn) MÀ

Ở THUẬT TOÁN DUYỆT THEO CÁC INDEX (CÁC CHỈ SỐ ) CỦA MA TRẬN Bởi vậy khuyến cáo cácbạn nên XEM+NGẪM+NHỚ KỸ CÁCH DUYỆT INDEX ở các bài toán đó

*11- Cho trước ma trận vuông cấp n Lập trình làm

c- In lên màn ma trận tam giác dưới & ma trận tam giác trên

d- Xem các phần tử thuộc đường chéo chính

e- Xem các phần tử ở PHÍA TRÊN đường chéo chính

f- TỔNG các phần tử ở PHÍA TRÊN đường chéo chính

Ngày đăng: 20/05/2021, 02:07

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w