.
" " " " - .
i , i , i, i , , i.
i , " ", " ", " ". " " " " . , , , , .
ii i . , i i i . , i . i , i , i i i i , i i i .
Pascal ͳ ³ , , Ғ 쳿, , , , -2, , . ³ + = , Pascal.
1.
ᒺ .
( , , ).
, , : ( , ).
:
Type
item = Record
key: Integer;
..... { }
End;
key , (, );
.
, .
|
|
1.1.
, in situ ( ).
. ̳ . , , .
in situ:
1. ;
2. ;
3. .
item :
Const
N=20;
Type
index = 0..n;
Var a: Array [1..n] Of item;
1.1.1.
:
2-, , .
For i:=2 To n Do
Begin
x:=a[i];
< >
End;
i . 2-, .
44 55 12 42 94 18 06 67
i=2 44 55 12 42 94 18 06 67
i=3 12 44 55 42 94 18 06 67
i=4 12 42 44 55 94 18 06 67
i=5 12 42 44 55 94 18 06 67
i=6 12 18 42 44 55 94 06 67
i=7 06 12 18 42 44 55 94 67
i=8 06 12 18 42 44 55 67 94
. , , , , - .
:
, x, ;
.
c ().
Procedure StraightInsertion;
Var
i,j: index;
x: item;
Begin
For i:=2 To n Do
Begin
x:=a[i];
a[0]:=x; { }
j:=i1;
While x.key < a[j].key Do
Begin
a[j+1]:=a[j];
j:=j1
End;
a[j+1]:=x
End
End;
( ).
.
, , .
1.1.2.
:
, , .
Procedure StraightSelection;
Var
i,j,k: index;
x: item;
Begin
For i:=1 To n1 Do
Begin
k:=i;
x:=a[i];
For j:=i+1 To n Do
If a[j].key < x.key Then
Begin
k:=j;
x:=a[j];
End;
a[k]:=a[i];
a[i]:=x;
End;
End;
, , .
1.1.3. ( )
, .
Procedure BubbleSort;
Var
i,j: index;
x: item;
Begin
For i:=2 To n Do
For j:=n DownTo i Do
If a[j1].key > a[j].key Then
Begin
x:=a[j1];
|
|
a[j1]:=a[j];
a[j]:=x
End;
End;
i=2 | i=3 | i=4 | i=5 | i=6 | i=7 | i=8 | |
44 | 06 | 06 | 06 | 06 | |||
55 | 44 | 12 | 12 | 12 | |||
12 | 55 | 44 | 18 | 18 | |||
42 | 12 | 55 | 44 | 42 | |||
94 | 42 | 18 | 55 | 44 | |||
18 | 94 | 42 | 42 | 55 | |||
06 | 18 | 94 | 67 | 67 | |||
67 | 67 | 67 | 94 | 94 |
: . , , , . , , .
, :
:
12 18 42 44 55 67 94 06
i
:
94 06 12 18 42 44 55 67
.
. -.
1.1.4. -
- .
44 06 06 06 06
55 44 44 12 12
12 55 12 44 18
42 12 42 18 42
94 42 55 42 44
18 94 18 55 55
06 18 67 67 67
67 67 94 94 94
Procedure ShakerSort;
Var
i,k,left,right: index;
x: item;
Begin
left:=2;
right:=n;
k:=n;
Repeat
{ }
For j:=right DownTo left Do
If a[j1].key > a[j].key Then
Begin
x:=a[j1];
a[j1]:=a[j];
a[j]:=x;
k:=j
End;
left:=k+1;
{ }
For j:=left To right Do
If a[j1].key > a[j].key Then
Begin
x:=a[j1];
a[j1]:=a[j];
a[j]:=x;
k:=j
End;
right:=k1
Until left>right
End;
, , - , .
, . - , , .
1.1.5.
:
x . , a[i]>x, , a[j]<x. a[i] a[j] , i j .
44 55 12 42 94 06 18 67
18 06 12 42 94 55 44 67
: , 42.
a[k].key <= x.key k=1,...,i1
a[k].key >= x.key k=j+1,...,n
, .., .
Procedure QuickSort;
Procedure Sort (left, right: index);
Var
i,j: index;
x,w: item;
Begin
i:=left;
j:=right;
x:=a[(left+right) div 2];
Repeat
While a[i].key < x.key Do i:=i+1;
While a[j].key > x.key Do j:=j1;
If i<=j Then
Begin
w:=a[j];
a[i]:=a[j];
a[j]:=w;
i:=i+1;
j:=j1
End
Until i>j;
If left<j Then Sort(left,j);
If i<right Then Sort(i,right)
End;
Begin
Sort(1,n);
End;
, .
̳ , .
ᒺ , . , .
|
|
1.2.
( , , ). ( , ), ..
, , :
>
: ABR < ABRAKAD
. , .
.
i :
Procedure SortString (Var inm:StringArray; n:Integer);
{StringArray , n }
Procedure InSort (left,right:Integer; Var m:StringArray);
Var
a,b: InData;
i,j: Integer;
Begin
i:=left;
j:=right;
a:= m[(left + right) div 2];
Repeat
While m[i] < a Do i:=i+1;
While a < m[j] Do j:=j1;
If i<=j Then
Begin
b:=m[i];
m[i]:=m[j];
m[j]:=b;
i:=i+1;
j:=j1
End
Until i>j;
If left<j Then InSort (left,j,m);
If i<right Then InSort (i,right,m);
End;
Begin
InSort (1,n,inm);
End;
1.3.
- (, ).
, , .
. .
{ : , , , , ; . , .}
Uses Crt;
Type
Karta = Record
tabnomer: Integer;
fio: String[20];
oklad: Real;
End;
Stroka = String[80];
Fv = File Of Karta;
Var
test: Karta;
t,t2: Integer;
namef: Fv;
{------------------------}
{ }
Procedure Sozd;
Begin
Assign(namef, a:Sps.txt);
ReWrite(namef);
While True Do
Begin
Write( :);
Readln(test.tabnomer);
If test.tabnomer = 0 Then
Begin
Close(namef);
Exit;
End;
Write(:);
Readln(test.oklad);
Write(...:);
Readln(test.fio);
Write(namef,test);
End;
End; {Sozd}
{-------------------------------------------------------}
Function Poisk(Var fpoisk:Fv; i:Integer):Integer;
Var
t: Karta;
Begin
i:=i-1;
Seek(fpoisk,i);
Read(fpoisk,t);
Poisk:=t.tabnomer;
End; {Poisk}
{----------------------------------------}
Procedure SortFile(Var zam:Fv; count:Integer);
Procedure SortIn(left,right:Integer);
Var
i,j,s: Integer;
x,y,z: Karta;
Begin
i:=left;
j:=right;
s:=(left+right) div 2;
Seek(zam,s1);
Read(zam,x);
Repeat
While Poisk(zam,i) < x.tabnomer Do i:=i+1;
While x.tabnomer < Poisk(zam,j) Do j:=j1;
If i<=j Then
Begin
Seek(zam,i1);
Read(zam,y);
Seek(zam,j1);
Read(zam,z);
Seek(zam,j1);
Write(zam,y);
Seek(zam,i1);
Write(zam,z);
i:=i+1;
j:=j1;
End
Until i>j;
If left<j Then SortIn(left,j);
|
|
If i<right Then SortIn(i,right);
End; {SortIn}
Begin
SortIn(1,count);
End; {SortFile}
{---------------------------------}
Begin
ClrScr;
Sozd;
Assign(namef,a:Sps.txt);
Reset(namef);
t:=FileSize(namef);
SortFile(namef,t);
Reset(namef);
ClrScr;
Writeln(i );
While Not Eof (namef) Do
Begin
Read(namef, test);
Writeln(test.tabnomer:10, test.fio:20, test.oklad:10);
End;
Close(namef);
Repeat Until KeyPressed
End.
2.
ᒺ , , .
ᒺ .
, -. P Q, P, P -.
ᒺ, , , .. ( , ). , , ᒺ, , , .
, ( ), , . , , . , .
H , . , , , .
2.1.
, . , , . , .
2.1.1.
, n x n, n x n . ʳ, , x0, y0. H , , , (n*n ‑ 1) , , .
: , .
Procedure <C__>;
Begin
Repeat
< > { }
If < > Then
Begin
< >
If < > Then
Begin
< >
If <> Then
< >
End
End
Until < > or < >
End
.
h n x n.
Type
index=1..n;
Var
h: array [index,index] Of integer;
, , , , .
:
h[x,y]=0 (x,y)
h[x,y]=i i- (1<= i <= n * n)
, . x, y, , i ( ). -:
q=true ;
q=false .
:
i<= n * n ;
u v , :
1<= u <=n 1<= v <=n
h[u,v]=0
h[u,v]=i;
h[u,v]=0;
:
, (u,v). , (x,y) (u,v), , , a b.
|
|
= 2, 1, -1, -2, -2, -1, 1, 2
b= 1, 2, 2, 1, -1, -2, -2, -1
x0,y0. 1.
{ ճ }
Program KnightSTore;
Const
n=5;
nsq=25;
Type
index=1..n;
Var
i,j: integer;
q: boolean;
s: set Of index;
a,b: array [1..8] Of integer;
h: array [index,index] Of integer;
Procedure Try(i:integer; x,y:index; Var q:boolean);
Var
k,ux,vy: integer;
q1: boolean;
Begin
k:=0;
Repeat
k:=k+1;
q1:=false;
ux:=x+a[k];
vy:=y+b[k];
If (ux in s) and (vy in s) Then
If h[ux,vy]=0 Then
Begin
h[ux,vy]:=i;
If i<nsq Then
Begin
Try (i+1,ux,vy,q1);
If Notq1 Then
h[ux,vy]:=0;
End
Else
q1:=true;
End;
Until q1 or (k=8);
q:=q1;
End; {Try}
{}
Begin
s:=[1,2,3,4,5];
a[1]:=2; b[1]:=1;
a[2]:=1; b[2]:=2;
a[3]:=-1; b[3]:=2;
a[4]:=-2; b[4]:=1;
a[5]:=-2; b[5]:=-1;
a[6]:=-1; b[6]:=-2;
a[7]:=1; b[7]:=-2;
a[8]:=2; b[8]:=-1;
{ }
For i:=1 To n Do
For j:=1 To n Do
h[i,j]:=0;
{ }
h[1,1]:=1;
Try(2,1,1,q);
Ifq Then
For i:=1 To n Do
Begin
For j:=1 To n Do
Write(h[i,j]:5);
Writeln;
End
Else
Writeln( );
End.
:
Procedure Try;
Begin
< >
Repeat
< >
If <> Then
Begin
< >
If < > Then
Begin
< >
If <> Then
< >
End;
End;
Until < > < >;
End
, , m, :
Procedure Try(i:integer);
Var
k:integer;
Begin
k:=0;
Repeat
k:=k+1;
If <> Then
Begin
<>
If i<n Then
Begin
Try(i+1);
If <> Then
< >
End;
End;
Until <> (k=m);
End;
2.1.2.
, .
H . , , , . ³, ( 88). (j).
㳿 . .
, , , .
:
Var
x:array [1..8] Of integer;
a:array [1..8] Of boolean;
b:array [2..16] Of boolean;
c:array [-7..7] Of boolean;
:
x[i] i- ;
a[i]=true j- ;
b[i]=true - (/) ;
c[i]=true - (\) ;
H / i+j;
\ i-j.
b[2,16] :
(1+1, 8+8)
a [-7,7] :
(1-8, 8-1)
:
x[i]:=j; , 1- 1- x[1]=1, 7- 2- x[7]=2;
a[j]:=false; ;
b[i+j]:=false; /;
c[i-j]:=false; \.
:
a[j]:=true;
b[j]:=true;
c[j]:=true;
:
a[j] and b[i+j] and c[i-j] { true}
.
Procedure Try(i:integer);
Begin
< - >
Repeat
< >
If <> Then
Begin
< >
If i<8 Then
Begin
Try(i+1)
If <> Then
< >
End
End
Until <> or < >
End
{ ³ ( ) }
Var
i: integer;
a: array [1..8] Of boolean;
b: array [2..16] Of boolean;
c: array [-7..7] Of boolean;
x: array [1..8] Of integer;
q: boolean;
Procedure Try(i:integer; Var q:boolean);
Var
j: integer;
Begin
j:=0;
Repeat
j:=j+1;
q:=false;
If a[j] and b[i+j] and c[i-j] Then
Begin
x[i]:=j;
a[j]:=false;
b[i+j]:=false;
c[i-j]:=false;
If i<8 Then
Begin
Try(i+1,q);
If Notq Then
Begin
a[j]:=true;
b[i+j]:=true;
c[i-j]:=true;
End;
End
Else
q:=true;
End
Until q or (j=8);
End;{Try}
{}
Begin
For i:=1 To 8 Do a[i]:=true;
For i:=2 To 16 Do b[i]:=true;
For i:= -7 To 7 Do c[i]:=true;
Try(1,q);
If q Then
For i:=1 To 8 Do Write (x[i]:4);
Writeln;
End.
3.
ϳ . , . .
. , . .
:
;
;
ii .i.
, , , , .
. , :
;
i ᒺ 4- ;
, , ᒺ.
3.1. .
. ii i i DOS Heap - (Heap ). , Var, , -, . . Pointer, .
: , (), ( ) .
- , .
, , Pointer, ^ .
:
Type
mas = array [1..10] Of integer;
dmas = ^mas;
Var
p: ^integer;
q: ^char;
workmas: dmas;
r,s,t: pointer;
:
p ᒺ ;
q ᒺ ;
workmas ᒺ, 10 ;
r,s,t - .
Heap -.
3.1.1.
:
Heap - ;
;
, .
ᒺ :
|
Nil. (Nil ).
ϳ p, . ᒺ :
New(Var p:pointer);
p , .
ᒺ , , New. .
integer, . ᒺ - , .
ᒺ . ᒺ :
p^
^ - , , , .
- .
p^:=10; 10 , p.
^ - , , :
r^:=p^+3;
- New-Dispose.
:
Var
x1,x2,s: ^integer;
Begin
New(x1);
New(x2);
New(s);
Readln(x1^);
Readln(x2^);
s^:=x1^+x2^;
Writeln(=, s^);
Dispose(x1);
Dispose(x2);
Dispose(s)
End.
Var
x1,x2,s: ^integer;
^ , x1,x2,s .
New(x1);
New(x2);
New(s);
Heap-i , - x1, x2, s.
-, ^ , , . :
Readln (x1^);
Readln (x2^);
, x1, x2.
s^:=x1^+x2^;
s , :
Writeln (=, s^);
New Dispose, , ( ).
, . : p:=Nil.
p,d - :
Var p,d: ^integer;
:
p^:=3; d^:=58; p:=d;d:=Nil;
:
p^:=3; d^:=58;
p:=d;
d:=Nil;
-i :
GetMem (Var P:pointer; Size:work);
FreeMem (Var P:pointer; Size:work);
GetMem P^ Size. FreeMem . , GetMem FreeMem , Size .
ij .. GetMem, FreeMem . , :
GetMem(P,20);
.............
FreeMem(P,20);
New-.
Mark Release -.
Mark(Var p:pointer) Heap- - p.
Release(Var p:pointer) Heap p , Mark, Release , - Mark. MemAvail(Var i:longint) . MaxAvail (Var i:longint) .
:
Uses Crt;
Var
i: longint;
p: ^integer;
Begin
ClrScr;
i:=MemAvail;
Writeln(....., i);
New(p);
p^:=4566;
i:=MemAvail;
Writeln(...., i);
Readln
End.
:
- 8 .
New : i i, i i ii ii. i New , i i i i, i, i , i. i i i . i ii.
i ii i i i i New. i MaxAvail, i i i, i i i.
3.1.2.
i i i i i i i . , i i ii i ii ii i i , ii i, i i i i i .
i , i , i i i i i i i i i.
:
Type
PtrAnk = ^Anketa;
Anketa = Record
...
End;
Procedure GetAnketa;
var
P: PtrAnk;
Begin
P: New (PtrAnk)
End;
Begin
WriteLn(MemAvail);
GetAnketa;
WriteLn(MemAvail)
End.
New i GetAnketa i i i i Anketa. i i ii P. i, i GetAnketa.
i i i ii i i i . i P. , i, i i 0 GetAnketa i, i i , Dispose. , i i GetAnketa ii - ii, i i ii.
i , i i i i i , i , , i , ii ii.
3.2.
㳿 .
. ³ , , ( , , ).
.
(Begin... End) , .
, , For; . ; .
While i Repeat, , .
. 㳿 , , , . . I , , . .
. , . . , , , . .
. , . , , - - . , , , , , .
, - , , .
3.3.
3.3.1. ˳
˳ ii , .
, : () .
.
:
Type
list = ^elem;
elem = Record
key: integer;
next: list;
.......... { }
End;
Var p,q: list;
..
(elem) .
i:
, , . , .
:
;
;
;
, , , ;
;
;
.
, i, .
, ii , , i i. , , , .
, , n :
{ n .}
{q }
{n 4,3,2,1}
{p }
Type
list = ^elem;
elem = Record
key: integer;
next: list;
End;
Var
p,q: list;
n: integer;
Begin
n:=4;
p:=Nil; { }
While n>0 Do
Begin
New(q);
q^.key:=n;
q^.next:=p;
p:=q;
n:=n-1
End;
Writeln( );
End.
:
P=Nil :
n=4:
New(q); q^.key:=n; q^.next:=p; p:=q;
n=3 ():
New(q);
q^.key:=n;
q^.next:=p;
q
p:=q;
p
p , , ..
. , , .
䳿 , ( ).
( - ).
:
While p<>Nil Do
Begin
p(p^);
p:=p^.next
End;
p(p^) 䳿 .
( Nil, 䳿 , ).
, .
, q, , p.
q , p, :
q^.next:=p^.next;
p q, :
p^.next:=q;
, p^ .
5, , . , .
New(q);
q^:=p^; { q p}
p^.key:=8;
p^.next:=q; { p q}
.
p ,
p^.next ,
(p^.next)^.next ..
:
q:=p;
p:=p^.next;
Dispose(q);
x
..........................
b:=true;
While (p<>Nil) and b Do
If p^.key=x Then b:=false
Else
p:=p^.next;
..........................
If Notb Then < >
Else < >;
{p=Nil or Notb} .
.
ϳ .
:
, , ;
, , ;
, .
{ }
Uses Crt;
Type
ref = ^Wword;
Wword = Record
key: integer;
count: integer;
next: ref
End;
Var
k: integer;
root: ref;
Procedure Search (x:integer; Var root:ref);
Var
w: ref;
b: boolean;
Begin
w:=root;
b:=true;
While (w<>Nil) and b Do
If w^.key=x Then b:=false
Else w:=w^.next;
If b Then
Begin
{ }
w:=root;
New(root); { }
With root^ Do
Begin
key:=x;
count:=1;
next:=w
End
End
Else
w^.count:=w^.count+1
End; {Search}
{------------------------------------}
Procedure Printlist (w:ref);
Begin
While w<>Nil Do
Begin
Writeln (w^.key, , w^.count);
w:=w^.next
End
End; {Printlist}
{------------------------------------}
Begin
ClrScr;
root:=Nil;
Writeln( );
Read(k);
While k<>0 Do
Begin
Search(k, root);
Read(k)
End;
Printlist(root);
Repeat Until KeyPressed
End.
Printlist .
. .
, . , .
. .
, i , .
{ d ii i p, , }
Procedure Add_Element (Var p:Point_typ; d:Data_typ);
Var
q: Point_typ;
Begin
If p=Nil Then
Begin
New (q);
q^.next:=Nil;
q^.data:=d;
p:=q;
End
Else
If p^.data>d Then
Begin
New (q);
q^.next:=p;
q^.data:=d;
p:=q;
End
Else
Add_Element (p^.next,d)
End;
3.3.2. ii
˳ , , .
, .
, , .
:
Type
List=^T;
T = Record
key: integer;
next: List;
pred: List
End;
a
Type
T = Record
key: integer;
next: ^T;
pred: ^T
End;
- .
: Nil , .
.
3.3.3.
, , .
i ( , , , ..), , . ᒺ , , .
:
: .
, :
FIFO first input first output - , .
, - ;
LIFO - last input first output - , .
, .
, . . .
, , Nil.
:
Type
stack:=^elstack;
elstack:= Record
elem: integer;
next: stack
End;
: , , , .
{ }
Procedure Instack (Var st:stack; Newelem:integer);
Var
q: stack;
Begin
New(q);
q^.elem:=Newelem;
q^.next:=st;
st:=q
End;
, - , .
{ }
Procedure Forstack (Var st:stack;Var a:integer);
Var
q: stack;
Begin
If st=Nil Then
Writeln ( )
Else
Begin
a:=st^.elem;
q:=st;
st:=st^.next;
dispose(q)
End
End;
:
, . (,{,[. .
:
;
{ [()] }, [{(])).
, .
:
, ..
, , , ,
, , , , .
{ }
Uses Crt;
Type
tipelem = char;
stack =^elstack;
elstack = Record
next: stack;
elem: tipelem;
End;
Var
sym: char;
s: stack;
b: boolean;
{}
Procedure Instack (Var st:stack; Newelem:tipelem);
Var
q: stack;
Begin
New (q);
q^.elem:=Newelem;
q^.next:=st;
st:=q
End;
{}
Procedure Forstack (Var st:stack; Var a:tipelem);
Begin
a:=st^.elem;
st:=st^.next;
End;
{}
Function Corresp:boolean;
Var
r: char;
Begin
Forstack (s,r);
Case sym of
): Corresp:= r=(;
]: Corresp:= r=[;
}: Corresp:= r={
End
End;
{}
Begin
ClrScr;
s:=Nil;
Read (sym);
b:=true;
While (sym<>.) and b Do
Begin
Write (sym);
If sym in [(, [, {] Then
Instack (s,sym)
Else
If sym in [), ], }] Then
If (s=Nil) or (not Corresp) Then b:=false;
Read (sym);
End;
Writeln;
If Notb or (s<>Nil) Then
Writeln ( ຒ)
Else
Writeln ( );
Repeat Until KeyPressed
End.
3.4.
, , ( ), .
, .
, .
.
:
A
,,, ,
,,,,,
\
,
/
.
, , .
: , ( ), .
, , , .
, .
.
.
.
y, x () x. x i, y i+1. x y () .
i 1. , () .
, , , .
,