Escolar Documentos
Profissional Documentos
Cultura Documentos
Pagina
Scurt istoric al evolu\iei calculatoarelor
Liste circulare ..
13
14
Bibliografie .
45
primul calculator ce putea fi programat. O parte din echipa care 1-a creat s-a
desprins si a nceput s[ construiasc[ a]a numitul UNIVAC (Universal
Automatic Computer), n anul 1951, cnd acesta a nlocuit aparatura lui
Hollerith n prelucr[rile oficiale de date statistice americane, conducerea
firmei IBM s-a decis s[ intre rapid n competi\ia calculatoarelor electronice.
Primul calculator al acestei firme a intrat n exploatare n anul 1954 si n anul
1955 firma IBM a preluat conducerea n produc\ia de calculatoare, nainte de a
fi lansat[ cea de-a treia genera\ie de calculatoare au mai existat nc[ dou[
genera\ii, astfel:
Genera\ia I (1945-1955). Calculatoarele din aceast[ genera\ie nu
aveau sisteme de operare (S.O.=un ansamblu de programe ce coordoneaz[
hardul) si erau construite din tuburi electronice (l[mpi). Programele erau
introduse bit cu bit.
Genera\ia a Il-a (1955-1964). Calculatoarele din aceast[ genera\ie
aveau o tehnologie bazat[ pe componente semiconductoare( diode, tranzistori).
Firma IBM a lansat ncepnd cu anul 1964 calculatoarele de
genera\ia a IlI-a (1964-1975), care erau influen\ate de apari\ia circuitelor
integrate, n aceast[ genera\ie calculatoarele aveau memorii cu o capacitate mai
mare .Dup[ c\iva ani au fost aruncate pe pia\[ calculatoarele din seria 370
avnd n componen\[ cipuri de siliciu . Despre aceste calculatoare se afirm[ c[ ar
constitui a IV-a genera\ie de calculatoare.
Genera\ia a V-a , specific[ zilelor noastre , este dotat[ n plus cu
circuite integrate tridimensionale, si folose]te alte tehnologii speciale cu
circuite integrate de tip VLSI (Very Large Scale Integration).
Evolu\ia calit[\ii calculatoarelor este exploziv[:
reducerea
dimensiunilor este spectaculoas[; timpul de execu\ie al unei instruc\iuni a
sc[zut; capacitatea de memorare a crescut si ea , iar programele au atins nivele
de neimaginat acum 40 de ani. Putem spune c[ am intrat n epoca revolu\iei
informatice.
LIMBAJUL PASCAL
Acest program este conceput si construit n anul 1970 de profesorul
Niklaus Wirth de la Politehnica din Zurich. Limbajul a fost numit Pascal n
memoria matematicianului , filozofului Blaise Pascal , creatorul primei ma]ini
mecanice de adunat.
Dup[ cum afirma profesorul Wirth , limbajul Pascal a fost conceput din
considerente
didactice,
vederea
pred[rii
artei
program[rii
O sec\iune de declara\ii.
O sec\iune de instruc\iuni.
\n
func]ie
de
necesit`]i,
se
aloc`
memorie
urm`toare),
care
re]ine
adresa
unei
alte
\nregistr`ri.
Procedura NEW(c) rezev` spa]iu (un num`r de octe]i
consecutivi) pentru o \nregistrare, adresa primului octet fiind
depus` \n variabila c.
Presupunem c` variabila c con]ine adresa unei \nregistr`ri .
Procedura DISPOSE(c) elibereaz` spa]iul de memorie afectat
acelei \nregistr`ri care are adresa \n c. Cuv#ntul NIL are
semnifica]ia nici o adres`.
Ovseva]ii:
1) c se refer` la adresa care se gase[te \n variabila c;
2) c^.nr se refer` la c#mpul numeric al \nregistr`rii care are
adresa memorat` \n variabila c;
3) c^.adrum semnific` adresa de \nregistrare care se
g`se[te
memorat` \n cadrul \nregistr`rii care are adresa c;
4) c^.adrum^.nr semnific` variabila nr care se g`se[te \n
6
\n c#mpul adrum al
\nregistr`rii cu adresa c.
Observa]ie foarte important`: spa]iul necesar variabilelor
alocate dinamic se rezerv` \ntr-o zon` de memorie, special
destinat`, numit` HEAP .
Structuri dinamice
Lista simplu \nl`n]uit`
O list` liniar` simplu \nl`n]uit` este o structur` de forma:
In1
adr2
In2 adr3
Inn
Nil
1) Creare
Se cere
in1
adr2
adr1 in2
adr3
adrn-1 inn
NIL
cu NIL;
--- variabilele
adresei
acestei prime \nregistr`ri (b semnific` adresa
\nregistr`rii cea mai din st#nga, s adresa ultimei \nregistr`ri din
dreapta).
2) Ad`ugare la dreapta
Aceast` opera]ie este realizat` de procedura addr. Pentru
ad`ugarea unei \nregistr`ri se realizeaz` urm`toarele opera]ii;
--- citirea informa]iei utile;
--- alocarea spa]iului pentru \nregistrare;
--- completarea adresei la dreapta cu NIL;
--- completarea adresei din st#nga cu adresa celei mai din
dreapta \nregistr`ri (re]inute \n variabila s);
11
---
modificarea
c#mpului
de
adres`
la
dreapta
12
c#mpul
de
adres`
st#nga
al
\nregistr`rii
care
Lista circular`
Se consider` o list` liniar`. Dac`, la ultima \nregistrare,
adresa urm`toare va fi adresa primei \nregistr`ri, am definit o
list` circular`. |n cazul \n care lista ini]ial` este simplu \nl`n]uit`,
lista circular` va fi simplu \nl`n]uit`, iar dac` lista ini]ial` este
dublu \nl`n]uit` [I lista circular` va fi dublu \nl`n]uit`.
i:=300;
j:=250;
putimage(i,j,p^,xorput);
repeat
if keypressed then
begin
c:=getkey;
case c of
{sus} #72: if j>4 then
begin
putimage(i,j,p^,xorput);
j:=j-4;
putimage(i,j,p^,xorput);
end;
{jos} #80: if j<460 then
begin
putimage(i,j,p^,xorput);
j:=j+4;
putimage(i,j,p^,xorput);
end;
{st} #75: if i>4 then
begin
putimage(i,j,p^,xorput);
i:=i-4;
putimage(i,j,p^,xorput);
end;
{dr} #77: if i<610 then
begin
putimage(i,j,p^,xorput);
i:=i+4;
putimage(i,j,p^,xorput);
end;
#13: begin
{L. simple} if (i>200)and(i<450)and(j>130)and(j<165) then
begin
beep;
restorecrtmode;
simple;
setgraphmode(2);
meniu_princ;
putimage(i,j,p^,xorput);
end;
{L. duble} if (i>200)and(i<450)and(j>210)and(j<245) then
begin
beep;
15
restorecrtmode;
duble;
setgraphmode(2);
meniu_princ;
putimage(i,j,p^,xorput);
end;
{L. circulare} if (i>200)and(i<450)and(j>290)and(j<335) then
begin
beep;
restorecrtmode;
circulare;
setgraphmode(2);
meniu_princ;
putimage(i,j,p^,xorput);
end;
{Help}
if (i>50)and(i<200)and(j>370)and(j<405) then
begin
beep;
help;
cleardevice;
meniu_princ;
putimage(i,j,p^,xorput);
end;
{About}
if (i>250)and(i<400)and(j>370)and(j<405) then
begin
beep;
about;
cleardevice;
meniu_princ;
putimage(i,j,p^,xorput);
end;
{Exit}
if (i>450)and(i<600)and(j>370)and(j<405) then
begin
beep;
meniu_iesire(f);
c:=#27;
end;
end; {#13}
{ESC} #27: begin end;
end; {case}
end {if} else actualizare_ceas(s);
until c=#27;
fin;
end.
16
unit liste_pr;
interface
uses graph,dos,crt;
type lista=^nod;
nod=record
info:integer;
next:lista;
end;
lista_d=^nod_d;
nod_d=record
info:integer;
ant:lista_d;
post:lista_d;
end;
var gd,gm,d1,d2,d3,i:integer;
c:char;
p:pointer;
procedure beep;
procedure start;
procedure fin;
function getkey:char;
procedure init_cursor(var p:pointer);
procedure buton(x,y:integer;s:string);
procedure buton_mare(x,y:integer;s:string);
procedure meniu_princ;
procedure help;
procedure about;
procedure meniu_iesire(var f:boolean);
procedure actualizare_ceas(var s:word);
procedure simple;
procedure duble;
procedure circulare;
procedure creare_s(var p:lista);
procedure crea_ord_s(var p:lista);
procedure adaug_s(p:lista);
procedure ins_in_s(var p:lista);
procedure ins_dupa_s(p:lista);
procedure stergere_s(var p:lista);
procedure modif_s(p:lista);
procedure afisare_s(p:lista);
procedure creare_d(var p1,p2:lista_d);
procedure adaug_d(var p1,p2:lista_d);
17
case c of
'1':creare_s(p);
'2':crea_ord_s(p);
'3':adaug_s(p);
'4':ins_in_s(p);
'5':ins_dupa_s(p);
'6':stergere_s(p);
'7':modif_s(p);
'8':afisare_s(p);
end; {case}
until c=#27; {ESC}
end; {simple}
procedure duble;
{Meniu - liste dublu inlantuite}
var c:char;
p1,p2:lista_d;
begin
textcolor(13);
repeat
clrscr;
writeln(' ***** L I S T E D U B L U I N L A N T U I T E ******');
writeln; writeln;
writeln(' ');
writeln('
1. C R E A R E
');
writeln(' ');
writeln('
2. A D A U G A R E
');
writeln(' ');
writeln('
3. I N S E R A R E
');
writeln(' ');
writeln('
4. S T E R G E R E
');
writeln(' ');
writeln('
5. M O D I F I C A R E
');
writeln(' ');
writeln('
6. A F I S A R E
');
writeln(' ');
writeln(' ESC
');
writeln(' ');
c:=readkey;
case c of
'1':creare_d(p1,p2);
'2':adaug_d(p1,p2);
'3':inserare_d(p1,p2);
'4':stergere_d(p1,p2);
'5':modif_d(p1,p2);
19
'6':afisare_d(p1,p2);
end; {case}
until c=#27; {ESC}
end; {duble}
procedure circulare;
{Meniu - liste circulare}
var c:char;
p:lista;
begin
textcolor(13);
repeat
clrscr;
writeln(' ***** LISTE CIRCULARE SIMPLU INLANTUITE
******');
writeln; writeln;
writeln(' ');
writeln('
1. C R E A R E
');
writeln(' ');
writeln('
2. A D A U G A R E
');
writeln(' ');
writeln('
3. I N S E R A R E I N A I N T E
');
writeln(' ');
writeln('
4. I N S E R A R E D U P A
');
writeln(' ');
writeln('
5. S T E R G E R E
');
writeln(' ');
writeln('
6. M O D I F I C A R E
');
writeln(' ');
writeln('
7. A F I S A R E
');
writeln(' ');
writeln('
8. C O P I I
');
writeln(' ');
writeln(' ESC
');
writeln(' ');
c:=readkey;
case c of
'1':creare_c(p);
'2':adaug_c(p);
'3':ins_in_c(p);
'4':ins_dupa_c(p);
'5':stergere_c(p);
'6':modif_c(p);
'7':afisare_c(p);
'8':copii;
20
end; {case}
until c=#27; {ESC}
end; {circulare}
procedure creare_s(var p:lista);
{creaza o lista simplu inlantuita}
var r,q:lista;
c:char;
begin
new(p);
write('Info=');
readln(p^.info);
p^.next:=nil;
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
while upcase(c)<>'N' do
begin
adaug_s(p);
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
end;
afisare_s(p);
end;{creare_s}
procedure crea_ord_s(var p:lista);
{creaza o lista simplu inlantuita direct ordonata}
var q,r:lista;
k:integer;
begin
new(p);
write('Info=');
readln(p^.info);
p^.next:=nil;
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
while upcase(c)<>'N' do
begin
write('Info=');read(k);
if k<p^.info then
begin
new(r);
r^.info:=k;
r^.next:=p;
p:=r;
end
21
else
begin
q:=p;
while (q^.next^.info<k)and(q^.next<>nil) do q:=q^.next;
{ins dupa}
new(r);
r^.info:=k;
r^.next:=q^.next;
q^.next:=r;
end;
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
end;
afisare_s(p);
end; {crea_ord_s}
procedure adaug_s(p:lista);
{adauga la sfarsitul listei}
var q,r:lista;
begin
q:=p;
while (q^.next<>nil) do q:=q^.next;
new(r);
write('Info:');read(r^.info);
r^.next:=nil;
q^.next:=r;
end; {adaug_s}
procedure ins_in_s(var p:lista);
{inserare inaintea unui element}
var q,r:lista;
k,i:integer;
begin
q:=p;
write('Poz =');read(k);
write('Info=');
for i:=1 to k-1 do
q:=q^.next;
new(r);
r^.info:=q^.info;
read(q^.info);
r^.next:=q^.next;
q^.next:=r;
afisare_s(p);
end; {ins_in_s}
22
procedure ins_dupa_s(p:lista);
{inserare dupa un element}
var q,r:lista;
k,i:integer;
begin
q:=p;
write('Poz =');read(k);
write('Info=');
for i:=1 to k-1 do
q:=q^.next;
new(r);
read(r^.info);
r^.next:=q^.next;
q^.next:=r;
afisare_s(p);
end; {ins_dupa_s}
procedure stergere_s(var p:lista);
{sterge un element din lista}
var q,r:lista;
k,i:integer;
begin
write('Poz =');read(k);
if k=1 then
begin
r:=p;
p:=p^.next;
dispose(r);
end
else
begin
q:=p;
for i:=1 to k-2 do
q:=q^.next;
r:=q^.next;
q^.next:=q^.next^.next;
dispose(r);
end;
afisare_s(p);
end; {stergere_s}
procedure modif_s(p:lista);
{modifica informatia dintr-o celula}
var q,r:lista;
23
k,i:integer;
begin
write('Poz =');read(k);
write('Info=');
if k=1 then read(p^.info)
else
begin
q:=p;
for i:=1 to k-1 do
q:=q^.next;
read(q^.info);
end;
afisare_s(p);
end; {modif_s}
procedure afisare_s(p:lista);
{afiseaza lista simplu inlantuita}
var q:lista;
begin
q:=p;
writeln('Elementele listei sunt: ');
while q<>NIL do
begin
write(q^.info:7);
q:=q^.next;
end;
readkey;
end;{afisare_s}
procedure creare_d(var p1,p2:lista_d);
{creaza o lista dublu inlantuita}
var r,q:lista_d;
c:char;
begin
new(p1);
write('Info=');
readln(p1^.info);
p1^.post:=nil;
p1^.ant:=nil;
p2:=p1;
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
while upcase(c)<>'N' do
begin
24
adaug_d(p1,p2);
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
end;
afisare_d(p1,p2);
end; {creare_d}
procedure adaug_d(var p1,p2:lista_d);
{adauga un nou element la sf listei}
var q:lista_d;
begin
new(q);
write('Info= ');read(q^.info);
q^.post:=nil;
p2^.post:=q;
q^.ant:=p2;
p2:=q;
end; {adaug_d}
procedure inserare_d(var p1,p2:lista_d);
{insereaza un element pe pozitia k}
var q,r:lista_d;
k,i:integer;
begin
write('Poz =');read(k);
if k=1 then
begin
new(r);
write('Info= ');
read(r^.info);
r^.ant:=nil;
r^.post:=p1;
p1^.ant:=r;
p1:=r;
end
else
begin
write('Info=');
q:=p1;
for i:=1 to k-2 do
q:=q^.post;
new(r) ;
read(r^.info);
r^.post:=q^.post;
r^.ant:=q;
25
q^.post^.ant:=r;
q^.post:=r;
end;
afisare_d(p1,p2);
end; {inserare_d}
procedure stergere_d(var p1,p2:lista_d);
{sterge un element din lista de pe pozitia k}
var q,r:lista_d;
k,i:integer;
begin
write('Poz =');read(k);
if k=1 then
begin
q:=p1^.post;
dispose(p1);
p1:=q;
p1^.ant:=nil;
end
else
begin
q:=p1;
for i:=1 to k-1 do
q:=q^.post;
q^.post^.ant:=q^.ant;
q^.ant^.post:=q^.post;
dispose(q);
end;
afisare_d(p1,p2);
end; {stergere_d}
procedure modif_d(p1,p2:lista_d);
{modifica informatia dintr-o celula}
var q,r:lista_d;
k,i:integer;
begin
write('Poz =');read(k);
write('Info=');
if k=1 then read(p1^.info)
else
begin
q:=p1;
for i:=1 to k-1 do
q:=q^.post;
read(q^.info);
26
end;
afisare_d(p1,p2);
end; {modif_d}
procedure afisare_d(p1,p2:lista_d);
{afiseaza lista dublu inlantuita}
var q:lista_d;
begin
q:=p1;
writeln('Elementele listei sunt: ');
while q<>NIL do
begin
write(q^.info:7);
q:=q^.post;
end;
readkey;
end; {afisare_d}
procedure creare_c(var p:lista);
{creaza o lista circulara}
var r,q:lista;
c:char;
begin
new(p);
write('Info=');
readln(p^.info);
p^.next:=p;
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
while upcase(c)<>'N' do
begin
adaug_c(p);
writeln('mai doriti sa introduceti? ../n');
c:=readkey;
end;
afisare_c(p);
end; {creare_c}
procedure adaug_c(var p:lista);
{adauga un element in lista (inainte de p)}
var q:lista;
begin
new(q);
q^.info:=p^.info;
write('Info='); readln(p^.info);
27
q^.next:=p^.next;
p^.next:=q;
p:=q;
end; {adaug_c}
procedure ins_in_c(var p:lista);
{insereaza un element inainte}
var q,r:lista;
k,i:integer;
begin
q:=p;
write('Poz =');read(k);
write('Info=');
for i:=1 to k-1 do
q:=q^.next;
new(r);
r^.info:=q^.info;
read(q^.info);
r^.next:=q^.next;
q^.next:=r;
afisare_c(p);
end; {ins_in_c}
procedure ins_dupa_c(p:lista);
{inserare dupa un element}
var q,r:lista;
k,i:integer;
begin
q:=p;
write('Poz =');read(k);
write('Info=');
for i:=1 to k-1 do
q:=q^.next;
new(r);
read(r^.info);
r^.next:=q^.next;
q^.next:=r;
afisare_c(p);
end; {ins_in_c}
procedure stergere_c(var p:lista);
{sterge un element din lista}
var q,r:lista;
k,i,j:integer;
begin
28
write('Poz =');read(k);
j:=0;
if k=1 then begin k:=k+1; j:=1; end;
q:=p;
for i:=1 to k-2 do q:=q^.next;
r:=q^.next;
if j=1 then p:=q^.next^.next;
q^.next:=q^.next^.next;
dispose(r);
afisare_c(p);
end; {stergere_c}
procedure modif_c(p:lista);
{modifica informatia dintr-o celula}
var q,r:lista;
k,i:integer;
begin
write('Poz =');read(k);
write('Info=');
if k=1 then read(p^.info)
else
begin
q:=p;
for i:=1 to k-1 do
q:=q^.next;
read(q^.info);
end;
afisare_c(p);
end; {modif_c}
procedure afisare_c(p:lista);
{afiseaza lista circulara}
var q:lista;
begin
q:=p;
writeln('Elementele listei sunt: ');
while q^.next<>p do
begin
write(q^.info:7);
q:=q^.next;
end;
write(q^.info:7);
readkey;
end; {afisare_c}
29
procedure copii;
{aplicatie la lista circulara}
var p,q,r:lista;
i,n,k:integer;
begin
clrscr;
write('Numarul de copii=');readln(n);
write('k=');readln(k);
for i:=1 to n do
if i=1 then
begin
new(p);
write('info:');readln(p^.info);
p^.next:=nil;
q:=p;
end
else
begin
new(r);
write('info:');readln(r^.info);
q^.next:=r;
r^.next:=nil;
q:=r;
end;
writeln;
q^.next:=p;
q:=p;
while (q<>q^.next) do
begin
write(q^.info,' ');
q^.info:=q^.next^.info;
r:=q^.next;
q^.next:=q^.next^.next;
dispose(r);
for i:=1 to k-1 do
q:=q^.next;
end;
writeln('castigatorul: ',q^.info);
dispose(q);
readkey;
end; {copii}
procedure beep;
begin
30
sound(5000);delay(50);nosound;
sound(800); delay(100);nosound;
end; {beep}
procedure start;
{initializeaza modul grafic}
begin
gd:=detect;
initgraph(gd,gm,'c:\util\bp7\bgi');
setlinestyle(0,0,3);
rectangle(0,0,640,480);
setlinestyle(0,0,1);
rectangle(4,4,636,476);
setbkcolor(1);
setfillstyle(11,9);
bar(50,50,590,410);
setcolor(15);
settextstyle(4,0,8);
outtextxy(120,50,'L I S T E');
settextstyle(4,0,7);
outtextxy(100,130,'Simple & Duble');
settextstyle(1,0,4);
outtextxy(200,420,'Craiova - 2002');
settextstyle(6,0,3);
outtextxy(380,250,'Absolvent:');
outtextxy(430,280,'Cristian Catan');
outtextxy(380,310,'Profesor:');
outtextxy(430,340,'Predesel Elena');
end; {start}
procedure fin;
{sfarsit program}
begin
closegraph;
gotoxy(20,20);
write('Colegiul National "Fratii Buzesti" - Craiova 2002');
readkey;
end; {fin}
function getkey:char;
{citeste o tasta}
var c:char;
begin
c:=readkey;
if c=#0 then c:=readkey;
31
getkey:=c;
end; {getkey}
procedure init_cursor(var p:pointer);
{deseneaza cursorul si il salveaza in pointerul p}
var size:word;
begin
{sageata}
moveto(300,300);
lineto(325,309);
lineto(308,309);
lineto(304,315);
lineto(300,300);
moveto(303,304);
lineto(311,307);
lineto(307,307);
lineto(305,309);
lineto(303,304);
setfillstyle(1,green);
floodfill(305,304,15);
Size:=ImageSize(300,300,325,315);
GetMem(p,Size);
{ Allocate memory on heap }
GetImage(300,300,325,315,p^);
setfillstyle(1,0);
bar(300,300,325,315);
end;{init_cursor}
procedure buton(x,y:integer;s:string);
{deseneaza un buton cu coltul st-sus in coord x,y de marime 150x35}
begin
setcolor(15);
rectangle(x,y,x+150,y+35);
rectangle(x+4,y+4,x+146,y+31);
line(x,y,x+4,y+4);
line(x+146,y+31,x+150,y+35);
setfillstyle(1,15);
floodfill(x+2,y+10,15);
setfillstyle(1,8);
floodfill(x+10,y+2,15);
setfillstyle(1,7);
floodfill(x+10,y+10,15);
settextstyle(1,0,2);
setcolor(0);
outtextxy(x+10,y+5,s);
end; {buton}
32
procedure buton_mare(x,y:integer;s:string);
{deseneaza un buton cu coltul st-sus in coord x,y de marime 250x35}
begin
setcolor(15);
rectangle(x,y,x+250,y+35);
rectangle(x+4,y+4,x+246,y+31);
line(x,y,x+4,y+4);
line(x+246,y+31,x+250,y+35);
setfillstyle(1,15);
floodfill(x+2,y+10,15);
setfillstyle(1,8);
floodfill(x+10,y+2,15);
setfillstyle(1,7);
floodfill(x+10,y+10,15);
settextstyle(1,0,2);
setcolor(0);
outtextxy(x+10,y+5,s);
end; {buton}
procedure meniu_princ;
{ des. chenarul si butoanele }
var s1,s2,s3:string;
h,m,s,l:word;
begin
cleardevice;
{chenar}
setlinestyle(0,0,3);
rectangle(0,0,640,480);
setlinestyle(0,0,1);
rectangle(4,4,636,476);
{butoane}
setbkcolor(1);
buton_mare(200,130,'Liste simplu inlantuite');
buton_mare(200,210,'Liste dublu inlantuite');
buton_mare(200,290,' Liste circulare');
buton(250,370,' About');
buton( 50,370,' Help');
buton(450,370,' Exit');
{titlu}
setcolor(15);
settextstyle(4,0,6);
outtextxy(20,40,'LISTE');
settextstyle(4,0,5);
outtextxy(200,50,' implementare dinamic');
33
{data+ceas}
settextstyle(2,0,5);
rectangle(370,20,620,40);
getdate(h,m,s,l);
case l of
1 : outtextxy(380,22,' Luni');
2 : outtextxy(380,22,' Marti');
3 : outtextxy(380,22,'Miercuri');
4 : outtextxy(380,22,' Joi');
5 : outtextxy(380,22,'Vineri');
6 : outtextxy(380,22,'Sambata');
7 : outtextxy(380,22,'Duminica');
end;{case}
str(s,s1); str(m,s2); str(h,s3);
s1:=s1+'.'+s2+'.'+s3;
outtextxy(450,22,s1);
s:=80;
actualizare_ceas(s);
end; {meniu_princ}
procedure help;
{ afiseaza un text ajutator }
var a,b:integer;
begin
cleardevice;
setlinestyle(0,0,3);
rectangle(0,0,640,480);
setlinestyle(0,0,1);
rectangle(4,4,636,476);
settextstyle(10,0,1);
outtextxy(110,15,'L i s t e - Online Help');
settextstyle(2,0,6);
i:=1;
outtextxy(50,450,'Page of 3' );
outtextxy(350,450,'PageUp \ PageDown \ ESC' );
line(5,447,635,447);
outtextxy(100,450,'1');
{titlu}
setcolor(7);
settextstyle(1,0,2);
outtextxy(200,70,'Prezentare generala:');
{text}
setcolor(15);
settextstyle(2,0,6);
outtextxy(50,100,' Listele sunt structuri de date omogene de forma:');
34
line(250,398,430,398);
line(250,380,430,380);
setlinestyle(0,0,1);
circle(100,400,2);
circle(200,380,2);
circle(480,380,2);
outtextxy(80,400,'p1');
outtextxy(490,360,'p2');
outtextxy(200,355,'q');
outtextxy(505,400,'NIL');
outtextxy(60,370,'NIL');
rectangle(100,380,130,400);
line(125,380,125,400);
line(105,380,105,400);
line(110,385,120,385);
line(110,390,120,390);
line(110,395,120,395);
ellipse(140,400,180,360,10,5);
ellipse(140,380,0,180,10,5);
rectangle(150,380,180,400);
line(175,380,175,400);
line(155,380,155,400);
line(160,385,170,385);
line(160,390,170,390);
line(160,395,170,395);
ellipse(190,400,180,360,10,5);
ellipse(190,380,0,180,10,5);
rectangle(200,380,230,400);
line(225,380,225,400);
line(205,380,205,400);
line(210,385,220,385);
line(210,390,220,390);
line(210,395,220,395);
ellipse(240,400,180,360,10,5);
ellipse(240,380,0,180,10,5);
rectangle(450,380,480,400);
line(475,380,475,400);
line(455,380,455,400);
line(460,385,470,385);
line(460,390,470,390);
line(460,395,470,395);
ellipse(440,400,180,360,10,5);
ellipse(440,380,0,180,10,5);
{nil}
line(480,400,490,400);
36
line(490,400,490,410);
setfillstyle(1,7);
bar(480,410,500,415);
line(90,380,100,380);
line(90,370,90,380);
bar(80,365,100,370);
{figura 3}
settextstyle(2,0,5);
rectangle(450,270,500,300);
circle(450,270,3);
line(485,270,485,300);
line(458,278,478,278);
line(458,283,478,283);
line(458,288,478,288);
line(458,293,478,293);
outtextxy(380,250,'adresa');
outtextxy(370,260,'de inceput');
line(460,260,480,285);
line(475,285,480,285);
line(480,280,480,285);
outtextxy(450,240,'informatie');
ellipse(512,300,180,360,12,7);
outtextxy(530,280,' adresa');
outtextxy(530,290,'urmatoare');
settextstyle(2,0,6);
readkey;
repeat
if keypressed then
begin
c:=getkey;
case c of
{PgUp} #73 :if i>1 then
begin
setfillstyle(1,0);
bar(30,60,600,440);
i:=i-1;
case i of
1: begin
bar(90,450,110,470);
outtextxy(100,450,'1');
{titlu}
setcolor(7);
settextstyle(1,0,2);
outtextxy(200,70,'Prezentare generala:');
{text}
37
setcolor(15);
settextstyle(2,0,6);
outtextxy(50,100,' Listele sunt structuri de date omogene de
forma:');
outtextxy(50,180,' Adresa de sfarsit a listei este NIL=adresa
vida.');
outtextxy(50,200,' Adresa de inceput se noteaza cu P=capul
listei.');
outtextxy(50,220,'Cand adresa de sfarsit coincide cu capul
listei lista');
outtextxy(50,240,'se numeste circulara.');
outtextxy(50,260,' Un nod al listei este format');
outtextxy(50,280,'dintr-o parte de informatie si o');
outtextxy(50,300,'legatura catre urmatorul nod:');
outtextxy(50,320,' Daca legatura este dubla, atat catre nodul
precedent');
outtextxy(50,340,'cat si catre urmatorul, lista este dublu
inlantuita.');
{figura1}
circle(100,140,2);
circle(200,140,2);
outtextxy(90,120,'p');
outtextxy(190,120,'q');
outtextxy(505,160,'NIL');
rectangle(100,140,130,160);
line(125,140,125,160);
line(108,145,118,145);
line(108,150,118,150);
line(108,155,118,155);
ellipse(140,160,180,360,10,5);
rectangle(150,140,180,160);
line(175,140,175,160);
line(158,145,168,145);
line(158,150,168,150);
line(158,155,168,155);
ellipse(190,160,180,360,10,5);
rectangle(200,140,230,160);
line(225,140,225,160);
line(208,145,218,145);
line(208,150,218,150);
line(208,155,218,155);
ellipse(240,160,180,360,10,5);
rectangle(450,140,480,160);
line(475,140,475,160);
line(458,145,468,145);
38
line(458,150,468,150);
line(458,155,468,155);
line(480,160,490,160);
line(490,160,490,170);
setfillstyle(1,7);
bar(480,170,500,175);
setlinestyle(3,0,1);
line(250,158,440,158);
{figura2}
line(250,398,430,398);
line(250,380,430,380);
setlinestyle(0,0,1);
circle(100,400,2);
circle(200,380,2);
circle(480,380,2);
outtextxy(80,400,'p1');
outtextxy(490,360,'p2');
outtextxy(200,355,'q');
outtextxy(505,400,'NIL');
outtextxy(60,370,'NIL');
rectangle(100,380,130,400);
line(125,380,125,400);
line(105,380,105,400);
line(110,385,120,385);
line(110,390,120,390);
line(110,395,120,395);
ellipse(140,400,180,360,10,5);
ellipse(140,380,0,180,10,5);
rectangle(150,380,180,400);
line(175,380,175,400);
line(155,380,155,400);
line(160,385,170,385);
line(160,390,170,390);
line(160,395,170,395);
ellipse(190,400,180,360,10,5);
ellipse(190,380,0,180,10,5);
rectangle(200,380,230,400);
line(225,380,225,400);
line(205,380,205,400);
line(210,385,220,385);
line(210,390,220,390);
line(210,395,220,395);
ellipse(240,400,180,360,10,5);
ellipse(240,380,0,180,10,5);
rectangle(450,380,480,400);
39
line(475,380,475,400);
line(455,380,455,400);
line(460,385,470,385);
line(460,390,470,390);
line(460,395,470,395);
ellipse(440,400,180,360,10,5);
ellipse(440,380,0,180,10,5);
{nil}
line(480,400,490,400);
line(490,400,490,410);
setfillstyle(1,7);
bar(480,410,500,415);
line(90,380,100,380);
line(90,370,90,380);
bar(80,365,100,370);
{figura 3}
settextstyle(2,0,5);
rectangle(450,270,500,300);
circle(450,270,3);
line(485,270,485,300);
line(458,278,478,278);
line(458,283,478,283);
line(458,288,478,288);
line(458,293,478,293);
outtextxy(380,250,'adresa');
outtextxy(370,260,'de inceput');
line(460,260,480,285);
line(475,285,480,285);
line(480,280,480,285);
outtextxy(450,240,'informatie');
ellipse(512,300,180,360,12,7);
outtextxy(530,280,' adresa');
outtextxy(530,290,'urmatoare');
settextstyle(2,0,6);
end;
2: begin
bar(90,450,110,470);
outtextxy(100,450,'2');
{titlu}
setcolor(7);
settextstyle(1,0,2);
outtextxy(200,70,'Implementare - Operatii specifice');
{text}
setcolor(15);
settextstyle(2,0,6);
40
{text}
setcolor(15);
settextstyle(2,0,6);
outtextxy(50,100,' Pentru implementare putem folosi
varianta statica');
outtextxy(50,120,'sau varianta dinamica. In implementarea
statica avem');
outtextxy(50,140,'ca avantaj accesul direct la elemente si
dezavantaje');
outtextxy(50,160,'limitarea numarului de elemente, consumul
inutil de ');
outtextxy(50,180,'memorie, deplasarea elementelor in cazul
operatiilor');
outtextxy(50,200,'de inserare si stergere.');
outtextxy(50,220,' In implementarea dinamica numarul
elementelor este');
outtextxy(50,240,'limitat numai de memoria calculatorului,
este folosita');
outtextxy(50,260,'memoria numai cat e necesar, operatiile de
stergere si');
outtextxy(50,280,'inserare se fac fara operatii suplimentare, in
schimb');
outtextxy(50,300,'se permite numai accesul secvential la
elemente.');
outtextxy(50,320,'
OPERATII SPECIFICE:');
outtextxy(50,340,' - crearea unei liste');
outtextxy(50,360,' - parcurgerea si afisarea (conditionata)');
outtextxy(50,380,' - adaugarea la sfarsitul listei');
outtextxy(50,400,' - inserarea inainte sau dupa pozitia
curenta');
outtextxy(50,420,' - stergerea unui element');
{figura}
end;
3: begin
bar(90,450,110,470);
outtextxy(100,450,'3');
{titlu}
setcolor(7);
settextstyle(1,0,2);
outtextxy(200,70,'Tipuri de probleme:');
{text}
setcolor(15);
settextstyle(2,0,6);
outtextxy(50,100,' Pentru implementarea structurilor
arborescente si a');
42
settextstyle(2,0,6);
outtextxy(270,220,'Catan Cristi');
outtextxy(270,240,'Cls. XII H');
outtextxy(270,280,'Predesel Elena');
settextstyle(2,0,5);
{sterge}
delay(2000);
randomize;
for i:=1 to 32000 do
putpixel(224+random(192),164+random(152),1);
bar(224,164,416,316);
delay(500);
end; {about}
procedure meniu_iesire(var f:boolean);
{}
begin
end; {meniu_iesire}
procedure actualizare_ceas(var s:word);
{afiseaza ceasul cand se schimba secunda}
var h,m,sec,sut:word;
s1,s2,s3:string;
begin
gettime(h,m,sec,sut);
if sec<>s then
begin
s:=sec;
str(h,s1); str(m,s2); str(sec,s3);
s1:=s1+':'+s2+':'+s3;
setfillstyle(1,1);
bar(520,22,600,38);
outtextxy(530,22,s1);
end;
end; {actualizare_ceas}
begin {initializari}
end.
44
Bibliografia:
1.
2.
3.
4.
Tudor Sorin
Tudor Sorin
Leon Livovski
Knuth D.E.
5.
6.
Eugen Popescu,
Bucure]ti 1984
Limbajul Pascal
Ecaterina Ursache,
Mihaela Paciug[
*******
46
&
Tehnici
de