.


:




:

































 

 

 

 


,

.

" " " " - .

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

;

, .

ᒺ :

*
p

 

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. , () .

, , , .

,



<== | ==>
. - | -
:


: 2016-10-06; !; : 478 |


:

:

- - , .
==> ...

1648 - | 1607 -


© 2015-2024 lektsii.org - -

: 1.014 .