Tải bản đầy đủ (.docx) (11 trang)

Chương trình mẫu Free Pascal

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (111.73 KB, 11 trang )

PASCAL - Th ằ
ng h ạ
i não

Bài vi ết ph ục v ụcho vi ệc ôn t ập Pascal nhanh chóng cho các b ạn thi tin h ọc các ki ểu

Tổ
ng Quan - X ấ
u mà đẹp










Pascal không phân bi ệt hoa th ườ
n g. B ắt đầu định danh ph ải là Kí t ựch ữ, không cho phép kí
hi ệu trong địn h danh (tr ừ_ )
VD: BAI_NAY_MEO_BIET_LAM, bainayMeoBietLam, bai3eoThemLam
M ỗi câu l ệnh k ết thúc b ằng " ; ", kh ối l ệnh m ởđầu bang " begin " và k ế
t thúc bang "end"
C ấu trúc m ột ch ươ
n g trình Pascal chu ẩn
program Bai3MeoBietLam;
uses crt;
begin
{Méo biết trong này chứa gì}


end.
Mọi biến đều phải khai báo ở đầu chươ ng trình với từ khoá var hoặc const (đ/v hằng số)

C Ơ cmn B ẢN (nh ững gì tr ẻ trâu 8 h ọc)
Biến và Hằng
const SauChin = 69;
var SauChin, SinChau : integer = 69;

Khai báo hàm (sau var): <Định danh> : < kiểu > [< = <giá trị khởi tạo> ];
Giá trị khởi tạo có thể có hoặc không.

Khai báo hằng : const <định danh> = <giá trị>;

Các kiểu dữ cmn lieu: biết mấy thằng này là ngon rồi
Tên Kiểu | Phạm Vi
| Ý cmn Nghĩa
---------+-------------------------+-------------------BYTE
| 0..255
| Số tự nhiên
INTEGER | -32768..32767
| Số Nguyên
CHAR
| 256 Kí tự ASCII
| Kí tự đơn
STRING
| Max = 256 Char
| Chuỗi (Mảng kí tự)
BOOLEAN | TRUE/FALSE
| Luận lý
REAL

| 2,9x10^-39 .. 1,7x10^38 | Số Thực
LONGINT | -2147483648..2147483647 | Số Nguyên
CARDINAL |
0 .. 4294967295
| Số Tự Nhiên
INT64
|
-2^63 .. 2^63 - 1
| Số Nguyên


//Lưu ý: INT64 không thể dùng cho biến đếm for

Mảng: <định danh> : array [ < min > .. < max > ] of <kiểu>;

Toán Tử
:= gán (bác Wirth vui tính v**l)
+ - * / div (chia lấy nguyên) mod (chia lấy dư)
> < >= <= = <>(khác)
not or and

Điều Khiển
if <điều kiện> then <lệnh> [ else <lệnh (có thể if đc)> ] ;
case <biểu thức> of
<giá trị> : <lệnh> ;
[ else <lệnh>; ]
end;
for <biến đếm> := <đầu> to/downto <cuối> do <lệnh>
while <đk> do <lệnh>;
do <lệnh> while <đk>;

rapeat <lệnh> until <đk thoát>;

Thủ Tục Cơ bản
write ( 'Đây là chuỗi'); writeln ('Bla bla'); -> in ra không xuống dòng & xuống
dòng
read (<biến>); readln(<biến>); -> nhập input không cần enter và cần enter
sqr -> bình phương
sqrt -> căn bậc hai
abs -> lấy trị tuyệt đối
odd(x); xét x có là số lẻ ko
chr(x); -> trả về kí tự thứ x trong ascii
ord(x); -> trả về thứ tự của x trong ascii
round(x); -> làm tròn

CHUYÊN MÔN (nh ững gì th ằng đi thi h ọc)
Thủ Tục và Hàm


Thủ Tục:
procedure <tên> [ ([var] <tham số>: <kiểu tham số> ) ];
var <biến nội bộ> : <kiểu>;


begin
{ bla bla }
end;

Hàm: khi cần trả về trị, ta dùng exit(<trị>);
function <tên> [ ([var] <than số> : <kiểu tham số> ) ] : <kiểu trả về>;
var <biến nội bộ> : <kiểu>;

begin
{ bla bla }
end;

Thao Tác Tệp
assign(<filevar>, <địa chỉ file trên đĩa>); -> gán file
rewrite(<filevar>); -> tạo file mới để ghi
reset(<filevar>); -> đọc file
append(<filevar>); -> ghi file (file có sẵn)
close(<filevar>); -> đóng file
để đọc dữ liệu file ta dùng lệnh:
eof(<filevar>); -> file có kết thúc chưa
eoln(<filevar>); -> dòng đang đọc kết thúc chưa

Sâu
delete(<strvar>, <vị trí>, <độ dài>);
insert(<strvar>, <string>, <vị trí>);
copy(<strvar> , <vị trí>, <độ dài>);
length(<strvar>); -> trả về độ dài sâu (áp dung cho mảng cũng đc nhé ;) )
pos(<string>,<strvar>); -> trả về vị trí xuất hiện string đầu tiên trong strvar
upcase(<strvar>); / lowcase(<strvar>);
StrToInt(<string>); -> cast chuỗi thành số, cần dùng uses SysUtils;

PASCAL - Th ằng h ại não part 2

Bài viết phục vụ cho việc ôn tập Pascal nhanh chóng cho các bạn thi tin học các kiểu


Lưu ý: các giải thuật nào cần thuộc lòng thì tác giả sẽ viết luôn mã, còn hên xui thì mã


giả

Các Gi ải Thu ật C ơ B ản
Kiểm tra nguyên tố
function isPrime (n: longint): boolean;
var g: longint;
begin
if n=1 then exit(false) else for g:=2 to trunc(sqrt(n)) do
if n mod g = 0 then exit(false);
exit(true);
end;
Ước chung lớn nhất
function uc(a,b: longint):longint;
var t: longint;
begin
while b>0 do begin
a:= a mod b; t:=a; a:=b; b:=t; //get mod and swap
end;
exit(a);
end;
Bội chung nhỏ nhất
function bc(a,b: longint):longint;
begin
exit( (a*b) div uc(a,b) );
end;
Số fibonacci
function fib(n: longint):longint;
begin
if n<=1 then exit(n) else exit( fib(n-1) + fib(n-2) );
end;


X ử Lý S ố Nguyên L ớn
type int69 = string; //bigger than int64 :V
So sánh
function ss(a,b: int69): integer;
begin


while length(a)while length(b)if a=b then exit(0) else if a>b then exit(1) else exit(-1);
end;
Cộng
function sum(a,b: int69): int69;
var s,i,cr,x,y: integer;
c: int69;
begin
while length(a)while length(b)cr:=0; c:='';
for i:= length(A) downto 1 do begin
s:= ord(a[i])-48 + ord(b[i])-48 + cr;
cr:= sum div 10; c:=chr(s mod 10 + 48)+c;
end;
if cr>0 then c:='1'+c;
exit(c);
end;
Trừ
function sub(a,b: int69): int69;
var c: int69;

s,b,i: integer;
begin
b:=0; c:='';
while length(a)while length(b)for i:= length(a) downto 1 do begin
s:= ord(a[i])-ord(b[i])-b;
if s<0 then begin s:=s+10; b:=1; end else b:=0;
c:= chr(s+48)+c;
end;
while (length(C)>1) and (c[1]='0') do delete(c,1,1); //take Sunsilk, smoother
end;
Nhân
function mul(a,b: int69): int69;
var s,t: int69;
m,i,j:integer;
begin
m:=-1; s:='';
for i:= length(a) downto 1 do begin
inc(m); t:=''; for j:= 1 to ord(a[i])-48 do t:=sum(t,b);
for j:= 1 to m do t:=t+'0'; s:=add(t,s);
end;


exit(s);
end;
Chia
function divi(a,b: int69): int69;
var c, h: int69;
kb: array[0..10] of int69;

i,k: longint;
begin
kb[0]:='0'; for i:= 1 to 10 do kb[i]:=add(kb[i-1],b);
h:=''; c:='';
for i:= 1 to length(A) do begin
inc(h,a[i]); k:=1;
while ss(h,kb[k])<>-1 do inc(k);
c:=c+chr(k-1+48); h:= sub(h,kb[k-1]);
end;
while (length(c)>1) and (c[1]='0') do delete(c,1,1);
exit(c);
end;
Modula
function divi(a,b: int69): int69;
var h: int69;
kb: array[0..10] of int69;
i,k: longint;
begin
kb[0]:='0'; for i:= 1 to 10 do kb[i]:=add(kb[i-1],b);
h:='';
for i:= 1 to length(A) do begin
inc(h,a[i]); k:=1;
while ss(h,kb[k])<>-1 do inc(k);
c:=c+chr(k-1+48); h:= sub(h,kb[k-1]);
end;
exit(h);
end;
Chuyển Đổi Hệ Cơ Số đi thi thấy ít cho
function mushroom(a,t: integer): longint;
var i: byte;

n: longint;
begin
if t = 0 then exit(1);
n:= a;
for i:= 1 to t-1 do begin
n:=n*a;
end;
exit(n);

//return a^t


end;
function rvs(a: string): string;
var i: integer;
p: string='';
begin
for i:= length(a) downto 1 do p := p+a[i];
exit(p);
end;
function Bin_Dec(a: string): longint;
var n,p,i: integer;
begin
p:=0; n:=0;
for i:= length(a) downto 1 do begin
n:= (strtoint(a[i]) * mushroom(2,p)) + n;
inc(p);
end;
exit(n);
end;

function Dec_Bin(a: integer): string;
var i,k: integer;
p: string = '';
begin
k:= a div 2;
p:= p+inttostr(a mod 2);
while k <> 0 do begin
p:=p+inttostr(k mod 2);
k:= k div 2;
end;
exit(rvs(p));
end;
function Hex_Dec(a: string): longint;
var p,i,x: integer;
c: char;
n: longint;
begin
p:=0; n:=0;
for i:= length(a) downto 1 do begin
c:= a[i];
if c in ['0'..'9'] then begin
x:=strtoint(c);


end else begin
if (c = 'a') or (c='A')
if (c = 'b') or (c='B')
if (c = 'c') or (c='C')
if (c = 'd') or (c='D')
if (c = 'e') or (c='E')

if (c = 'f') or (c='F')
end;
n:= (x * mushroom(16,p)) + n;
inc(p);

then
then
then
then
then
then

x:=10;
x:=11;
x:=12;
x:=13;
x:=14;
x:=15;

end;
exit(n);
end;
function Dec_Hex(a: integer): string;
var i,k: integer;
p: string = '';
x: byte;
m: string;
begin
k:= a div 16;
p:= p+inttostr(a mod 16);

while k >= 0 do begin
x:=k mod 16;
if x < 10 then p:= p+inttostr(x) else begin
if x = 10 then p:=p+'A';
if x = 11 then p:=p+'B';
if x = 12 then p:=p+'C';
if x = 13 then p:=p+'D';
if x = 14 then p:=p+'E';
if x = 15 then p:=p+'F';
end;
k:= k div 16;
end;
exit(rvs(p));
end;
function Hex_Bin(s: string): string;
var i: integer;
a: string;
p: integer= 1;
r: string='';
m: string='';
begin
a:=s;


for i:= 1 to length(a) do begin //make each Hexa character to 4 Binary
characters and append them into a string
m:= Dec_Bin(Hex_Dec(a[i]));
while length(m) < 4 do m:='0'+m;
r:=r+m;
end;

exit(r);
end;
function Bin_Hex(s: string): string;
var HexStr: string = '';
step: integer = 4;
position: integer = 1;
a: string;
i: integer = 1;
t: string;
begin
t:= s;
while (length(t) mod 4) <> 0 do t:='0'+t;
while position < length(t) do begin //divide all group of bin and
convert it to Hex and append into a string
a:= Dec_Hex(Bin_Dec(copy(t,position,step)));
HexStr := HexStr + a;
inc(i); position:= position + step;
end;
while HexStr[1] = '0' do delete(HexStr,1,1);
exit(HexStr);
end;

Các Ph ươ ng Pháp Gi ải Bài Toán Li ệt Kê ho ặc liên
quan Đệ Qui
Generating (Sinh)
//Xây dựng cấu hình đang có
repeat
//đưa ra cấu hình đang có
//sinh cấu hình mới từ cấu tình đã có
until //hết cấu hình ;

Quay Lui Vét Cạn
procedure backtrack(i);
begin
for <mọi giá trị có thể gán cho x[i]> do begin
<thử cho x[i]:= V>


if <x[i] là pt cuối trong ch> then <xuất cấu hình>
else begin
<ghi nhận việc gán V>
backtrack(i+1);
<bỏ ghi nhận để thử giá trị khác>
end;
end;
end;
Nhánh Cận
procedure nc(i);
begin
for <mọi giá trị có thể gán cho x[i]> do begin
<thử cho x[i]:= V>
if <có cấu hình tốt hơn> then
if <x[i] là pt cuối trong ch> then <xuất cấu hình>
else begin
<ghi nhận việc gán V>
backtrack(i+1);
<bỏ ghi nhận để thử giá trị khác>
end;
end;
end;
Tham lam

procedure greedy;
begin
//khởi tạo Vector nghiệm
i:=0;
while <chưa hết nghiệm> do begin
inc(i);
//xây dựng S[i]
X = select(S[i]) //chọn ứng viên sáng giá
end;
end;
Chia để trị
procedure CdT(a,x) //tìm nghiệm x của A
begin
if <A đủ nhỏ> then <giải A>
else begin
//chia bài toán
for i:= 1 to m do cdt(A[i], x[i])
//ghép các nghiệm để nhận nghiệm cuối
end;
end;


S ắp X ếp
Đi thị thì xài 2 cái là đủ rồi
Bubble
for i:= 1 to n-1 do for j:= n downto i+1 do if a[j-1] > a[j] then swap(a[j-1],
a[j]);
Quick
procedure sort(l,r: longint);
var i,j,p: longint;

begin
i:=l; j:=r; p:=(l+r) div 2;
repeat
while a[i] < a[p] do inc(i); while a[j] > a[p] do dec(j);
if i<=j then begin swap(a[j],a[i]); inc(i); dec(j); end;
until i>j;
if lend;



×