Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

:

(a )







PASCAL

1, 2011

1/33

1, 2011

2/33










, integer:



,

,



()

TYPE pokint = ^integer;

1, 2011

3/33

1, 2011

4/33

PROGRAM primer(input, output);


TYPE
pokint = ^integer;
VAR
a : integer;
pa : pokint;
BEGIN
new(pa); { vrsi alokaciju memorije }
readln(input, a);
pa^ := a; { pristup memoriji na koju pokazuje pa }
writeln(output, pa^);
dispose(pa); { oslobadja alociranu memoriju }
END.

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

Procedure izostavi(var niz:pokaz; k:integer);


? tekuci
Var preth,tekuci,stari:pokaz;
niz
Begin
broj
broj
broj
broj
tekuci:=niz; preth:=nil;
x
While tekuci<>nil Do
If tekuci^.broj=k Then Begin
stari:=tekuci;
? preth
tekuci:=tekuci^.sledeci; ? stari
If preth=nil Then niz:=tekuci
Else
preth^.sledeci:=tekuci;
dispose(stari)
End
Else
Begin
preth:=tekuci;
tekuci:=tekuci^.sledeci
End
End;

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;

Procedure citaj(var niz:pokaz); (*ucitava niz i pravi listu*)


Var posl,novi:pokaz;
Begin
niz:=nil; posl:=nil;
While not eoln(input) Do
Begin
new(novi);
read(input, novi^.broj);
novi^.sledeci:=nil;
If posl=nil Then
niz:=novi
Else
posl^.sledeci:=novi;
posl:=novi
End;
readln(input)
End;

1, 2011

11/33

1, 2011

12/33

1
Begin (* glavni program *)

Procedure brisi(var niz:pokaz); (* oslobaanje memorije *)


Var stari:pokaz;
Begin
stari:=niz;
While stari<>nil do
Begin
niz:=stari^.sledeci;
dispose(stari);
stari:=niz
End
End;

While not eoln(input) Do (*ponavlja korake dok se unosi neprazan niz *)


Begin
citaj(lista);
write(output, 'ucitani niz je: ');
pisi(lista);
readln(input, k);
writeln(output, 'izostavlja se = ',k:1);
izost(lista,k);
write(output, 'novi niz je: ');
pisi(lista);
brisi(lista)
End
End.

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

Var poslednji: pokazivac; (*poslednji ucitani podatak*)


novi: pokazivac;
(*novi element u dinamickoj memoriji*)
prvi: pokazivac;(*prvi podatak za ispisivanje*)
prazan_red: boolean; (*indikator praznog reda*)
broj_podataka: integer; (*broj podataka za prelazak u novi red*)
Begin
poslednji:=nil;
Repeat
prazan_red:=true;
Write(output, 'Unesite sledeci broj:');
While not Eoln(input) Do Begin
new(novi);
Read(input, novi^.broj);
novi^.sledeci:=poslednji;
poslednji:=novi;
prazan_red:=false
End;
Readln(input)
Until prazan_red;
1, 2011

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

program p1sep04z2(input, output);


type pok = ^cvor;
cvor = record
x, y, r: real;
sled: pok
end;
var novi, prvi, tek1, tek2: pok;
n, i: integer;
begin
write(output, 'unesite broj krugova: ');
readln(n);
prvi := nil;
for i := 1 to n do begin
new(novi);
write(output, 'unesite koordinate i poluprecnik ', i, '. kruga: ');
readln(input, novi^.x, novi^.y, novi^.r);
novi^.sled := prvi;
prvi := novi
end;

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

PROGRAM JUN05(Input, Output, ulaz);


TYPE ZAPIS = RECORD
IMEVL:ARRAY[1..30] OF CHAR;
IME:ARRAY[1..20] OF CHAR;
ID: RECORD
SIFRA:INTEGER;
VRSTA:CHAR;
END;
END;
LISTPOK = ^LISTZAPIS;
LISTZAPIS = RECORD
zap:ZAPIS;
sled: LISTPOK;
END;
VAR glava, pok:LISTPOK;
sifra:INTEGER;

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;

PROCEDURE FORMIRAJ_LISTU(var glava: LISTPOK);


var novi, posl:LISTPOK;
podat : LISTZAPIS;
ulaz : FILE OF ZAPIS;
begin
assign(ulaz, 'vlasnici.dat');
reset(ulaz);
posl:=nil; glava:=nil;

1, 2011

29/33

1, 2011

6 (4/6)

6 (5/6)

PROCEDURE OBRISI_LISTU(var glava: LISTPOK);


VAR tek: LISTPOK;
BEGIN
WHILE glava <> nil DO
BEGIN
tek := glava;
glava := glava^.sled;
dispose(tek)
END
END;

FUNCTION NADJI_SIFRU(glava: LISTPOK, sifra: INTEGER): LISTPOK;


VAR nasao: boolean;
BEGIN
nasao:= false; NADJI_SIFRU:= nil;
WHILE NOT nasao and glava <> nil DO
IF glava^.zap.ID.sifra = sifra THEN nasao:=true
ELSE glava:= glava^.sled;
NADJI_SIFRU := glava
END;

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

You might also like