Professional Documents
Culture Documents
Pascal Pokazivaci I Liste
Pascal Pokazivaci I Liste
(a )
PASCAL
1, 2011
1/33
1, 2011
2/33
, integer:
,
,
()
1, 2011
3/33
1, 2011
4/33
1, 2011
a
pa
5
1B3Ch
new(pa);
( integer)
readln(a);
( 5).
pa^ := a;
dispose(pa);
.
1B3Ch
!!!
( )
5/33
1, 2011
.
,
( )
()
...
1, 2011
6/33
( , , )
( , , )
( )
nil
7/33
1, 2011
8/33
Pascal ,
,
.
Program NizBrojeva(input,output);
Type
pokaz = ^elem;
broj
elem = Record
broj: integer;
sledeci: pokaz
End;
Var
lista,prvi: pokaz;
k: integer;
broj
1, 2011
broj
9/33
1, 2011
10/33
1
Procedure pisi(niz:pokaz); (*ispisuje listu u jednom redu*)
Var prvi:pokaz;
Begin
prvi:=niz;
While prvi<>nil Do
Begin
write(output, prvi^.broj:1,' ');
prvi:=prvi^.sledeci
End;
writeln(output)
End;
1, 2011
11/33
1, 2011
12/33
1
Begin (* glavni program *)
niz
broj
broj
broj
broj
stari
1, 2011
13/33
14/33
Pascal
.
. .
Program NizBrojeva(input,output);
Const
DuzinaReda=10; (*broj podataka za ispis u jednom redu*)
BrojKolona=7; (*broj kolona za ispis jednog podatka*)
Type
pokazivac=^ElementListe;
ElementListe=Record
broj: integer;
sledeci: pokazivac
End;
1, 2011
1, 2011
15/33
16/33
broj_podataka:=0;
prvi:=poslednji;
While prvi<>nil Do Begin
write(output, prvi^.broj:BrojKolona);
prvi:=prvi^.sledeci;
broj_podataka := broj_podataka+1;
If (broj_podataka mod DuzinaReda)=0 Then writeln(output)
End;
(*prelazak u novi red ako poslednji nije ceo*)
If (broj_podataka mod DuzinaReda)<>0 Then writeln(output);
(*oslobaanje memorije*)
prvi:=poslednji;
While prvi<>nil Do
Begin
poslednji:=prvi^.sledeci;
dispose(prvi);
prvi:=poslednji
End
End.
(broj),
(dole)
(desno).
1, 2011
17/33
18/33
Program matrica(input,output);
Type
ukaz=^matr;
matr=record
broj: real;
dole,desno: ukaz
End;
Function XYZ(prvi:ukaz):real;
Begin
If prvi<>nil Then
If prvi^.desno<>nil Then
XYZ:=prvi^.broj+XYZ(prvi^.desno^.dole)
Else
XYZ:=prvi^.broj
Else
XYZ:=0.0
Pascal
End;
:
Begin
A)
B)
End.
C)
1, 2011
1, 2011
19/33
.
(x y) .
Pascal
.
,
.
(
),
, ,
(
).
.
.
1, 2011
20/33
tek1 := prvi;
while (tek1<>nil) do begin
tek2 := tek1^.sled;
while (tek2<>nil) do begin
if (tek1^.r + tek2^.r) >
sqrt(sqr(tek1^.x - tek2^.x) + sqr(tek1^.y-tek2^.y)) then
writeln(output,
'krugovi(', tek1^.x:5:3, ', ', tek1^.y:5:3, ', ', tek1^.r:5:3,') i
(', tek2^.x:5:3, ', ', tek2^.y:5:3, ', ', tek2^.r:5:3, ') se seku');
tek2 := tek2^.sled
end;
tek1 := tek1^.sled
end
end.
1, 2011
21/33
info
info
info
info
info
sled
sled
sled
sled
sled
pred
pred
pred
pred
pred
prvi
22/33
Pascal
pok,
pom?
pok, pom pok^.sled
nil. pred ,
sled .
1, 2011
1, 2011
B)
pok^.sled := pom;
pom^.pred := pok;
pom^.sled := pok^.sled;
pom^.sled^.pred := pom;
pom
info
sled
pred
pok
info
info
info
sled
sled
sled
pred
pred
pred
info
info
sled
sled
pred
pred
posl
23/33
1, 2011
24/33
C)
A)
pom^.sled := pok;
pom^.pred := pok^.pred;
pok^.pred^.sled := pom;
pok^.pred := pom;
info
pom
pom^.pred := pok;
pom^.sled := pok^.sled;
pok^.sled := pom;
pom^.sled^.pred := pom;
info
sled
pom
pred
pred
pok
info
info
sled
sled
pred
pred
1, 2011
x
x
pok
info
info
info
info
info
info
sled
sled
sled
sled
sled
sled
pred
pred
pred
pred
pred
pred
25/33
1, 2011
info
info
sled
sled
pred
pred
26/33
6 (1/6)
vlasnici.dat
.
( 30 ),
( 20 ) .
( )
('P' , '' '' ).
Pascal
. ,
.
,
.
vlasnici.dat .
1, 2011
sled
27/33
1, 2011
28/33
6 (2/6)
6 (3/6)
WHILE NOT eof(ulaz) DO
BEGIN
read(ulaz, podat);
IF podat.zap.ID.vrsta = 'p' THEN
BEGIN
new(novi);
novi^.sled = nil;
novi^.zap = podat.zap;
IF glava = nil THEN
glava := novi
ELSE
posl^.sled := novi;
posl := novi
END
END;
close(ulaz)
END;
1, 2011
29/33
1, 2011
6 (4/6)
6 (5/6)
1, 2011
31/33
1, 2011
30/33
32/33
6 (6/6)
BEGIN
FORMIRAJ_LISTU(glava);
IF glava <> nil THEN
BEGIN
sifra := 1;
WHILE sifra > 0 DO
BEGIN
read(input, sifra);
IF sifra > 0 DO
BEGIN
pok:=NADJI_SIFRU(glava, sifra);
IF pok <> nil THEN
writeln(pok^.zap.IMEVL)
END
END;
OBRISI_LISTU(glava)
END
END.
1, 2011
33/33