| Referate | Director web | Adauga link | Contact |

Titlu referat: Adresa primului element

Nivel referat: liceu

Descriere referat:
       Adresa primului element
O lista circulara simplu inlantuita este o
lista in care ultimul element contine campul ce adreseaza elementul urmator,
adresa primului element.
       
1.1. Definirea unei liste circulare simplu
inlantuite
Type lista = ^nod;
       nod = record
            inf: integer;
            adr: lista;
       end;
var pr: lista;
       Crearea unei liste circulare se realizeaza in mod asemanator cu o
lista liniara simplu inlantuita, cu deosebirea ca ultimul element adaugat in
lista nu va mai avea in campul de adresa valoarea NIL, ci adresa primului
element adaugat.
       
1.2. Crearea unei liste circulare cu numar cunoscut de
elemente
       Vom crea mai intai primul element al listei. Folosind un
ciclu for vor fi adaugate la
sfarsitul listei celelalte elemente. In final campul de adresa al ultimului
element adaugat va contine adresa primului element.
       Vom utiliza pointerii : pr – contine
adresa primului element adaugat in lista; ul – contine adresa ultimului element
adaugat in lista; p
– contine adresa
elementului ce se adauga.
Procedure creare (var p:lista);
Var p, ul : lista;
       i:
integer;
begin
  new(pr);
  readln(pr^.inf);
  ul:=pr;
  for i := 1 to n-1 do begin
     new(p);
readln(p^.inf);
    
ul^.adr:=p;
     ul:=p;
  end;
  ul^.adr:pr;
end;
       
1.3. Afisarea elementelor unei liste circulare
       Parcurgem nodurile listei cu ajutorul unui pointer care plecand de
la un element al listei, va referi pe rand fiecare nod al listei, pana cand va
adresa nodul de pornire.
Parcurgerea folosind un
ciclu while
Procedure parc1 (pr:lista);
var p:lista;
begin
  p:=pr;
  while (p^.adr<>pr) do
begin
    write (p^.inf,’ ’); p:= p^.adr;
  end;
  write (p^.inf);
end;
Parcurgerea folosind un
ciclu repeat
Procedure parc2 (pr:lista);
var p:lista;
begin
  p:=pr;
  repeat
    write (p^.inf,’ ’);
    
p:=p^.adr;
  until p=pr;
end;
       1.4. Adaugarea unui element intr-o lista circulara
       Sa se scrie un subprogram ce realizeaza inserarea unui nod dupa
elementul de cheie k dintr-o
lista circulara.
       Observam ca intr-o lista circulara putem accesa toate elementele
listei pornind din orice nod al acesteia. Avand in vedere acest lucru, pentru a
evita tratarea cazului particular de inserare inainte primului element, vom
parcurge lista prin intermediul lui pr, salvand adresa primului element intr-o variabila p.
Procedure adaug (var pr:lista;
k:integer);
var p: lista;
begin
  p:=pr:
  repeat
    if pr^.inf=k then
begin
      new(q);
readln(q^.inf);
      q^adr:=
pr^.adr;
     
pr:=p;
    end;
    else
pr:=pr^.adr;
  until (pr=p);
end;
     
 
1.5. Eliminarea elementelor dintr-o lista circulara
       Sa se scrie un subprogram ce realizeaza eliminarea elementelor de
cheie para dintr-o lista circulara.
       In situatia in care toate elementele sunt pare lista devine vida.
Punem in evidenta acest lucru prin
pr:=nil. Parcurgem lista prin pr, pozitionandu-ne pe elementul anterior
care trebuie sters.
Procedure elimin (var pr:lista);
var p,q:lista;
begin
  p:=pr;
  while pr^.adr<>p do
    if pr^.adr^.inf mod 2 = 0
then begin 
{se elimina pr^.adr}
     
q:=pr^.adr;
     
pr^.adr:=q^.adr;
     
dispose(q);
    end
    else
pr:=pr^.adr;
  if p^.adr=pr then begin  
{lista are un singur element}
    if pr^.inf mod 2 = 0 the
begin
     
dispose(pr);
     
pr:=nil;
    end
  end
  else
{se verifica daca
nodul de pornire este par, situatie in care se elimina}
    pr^.inf mod 2 = 0 then
begin
    dispose(p);
  end;
end;
     
 
1.6. Crearea unei liste circulare cu numar necunoscut de
elemente
       Se sa fisierul Numere.in. Sa se creeze o lista circulara simplu inlantuita ce contine
numerele pare din fisier.
type lista = ^nod;
       nod = record
         inf:integer;
         adr:lista;
       end;
var pr:lista; f:text;
procedure creare (var pr:lista);
var p,ul:lista; k:integer;
begin
  assign(f,’numere.in’); reset(f);
  pr:=nil;
  while not seekof(f) do
begin
    read(f,k);
    if k mod 2=0 then
begin
     
new(p);
     
p^.inf:=k;
      if pr=nil then
begin
       
pr:=p;
       
ul:p;
      end
      else
begin
       
ul^.adr:=p; ul:=p;
       
end;
    end;
  end;
  ul^.adr:= pr; close(f);
end;
procedure parc (pr:lista);
var p:lista;
begin
  p:=pr;
  repeat
    write (p^.inf,
’ ’);
    p:=p^.adr;
  until p=pr;
end;
begin     {main}
  creare (pr);
  parc (pr);
end.
Enunt problema
Sa se creeze o lista circulara cu caracterele
dintr-un fisier existent pe disc. Fiecare nod al listei va contine un caracter.
La citirea din fisier, se vor scrie in lista doar caracterele care sunt litere
sau spatii. Sa se afiseze lista obtinuta.
Analiza problemei
Date de intrare : un fisier care contine
litere, spatii, semne de punctuatie, simboluri
Date de iesire : o lista circulara simplu
inlantuita  care contine numai literele si spatiile din fisier
Se utilizeaza urmatoarele proceduri
:
procedura creare – creaza o lista circulara simplu inlantuita si face legatura cu
fisierul
procedura afisare – afiseaza lista circulara simplu inlantuita numai cu litere si
spatii
In programul principal se citeste numele
fisierului, se defineste multimea caracterelor si se apeleaza procedurile de
creare si afisare.
2.2. Program Pascal
program lista_circulara;
type pnod = ^nod;
nod = record
inf : char;
adr_urm : pnod;
end;
var b,c,v,aux : pnod;
nume : string;; f : text;
car : set of char;
procedure creare (nume : string);
begin
assign (f, nume);
reset (f);
while nor eof(f) do begin
while not eoln (f) do begin
new (c);
read (f, c^.inf);
if c^.inf in car) then
if b = nil then begin
b:=c;
v:=c;
end;
else begin
v^.adr_urm := c;
v:=c;
end;
v^.adr_urm:=b;
end;
readln(f);
end;
close (f);
end;
procedure afisare (b:pnod);
begin
if b <> nil then begin
c:=b;
while c^.adr_urm <> b do
begin
write (c^.inf);
c:=c^.adr_urm;
end;
write (c^.inf);
end else writeln (’Fisierul este gol.’);
end;
begin
write (’Numele fisierului:’);
readln(nume);
car := [’A’..’Z’, ’a’..’z’,’ ’];
creare(nume);
afisare(b);
readln;
end;
2.3. Exemple de executie
1. Daca fisierul cuprinde caracterele :
a3lex^andr^u, programul va afisa alexandru (fig. 1).
2. Daca fisierul nu cuprinde nici un
caracter, programul va afisa ’Fisierul este gol’ (fig.2).
BIBLIOGRAFIE
1. Colectia Informanica nr. 8 – Culegere de probleme – Varianta Pascal
Editura Else
Autori: Dana BOTOFEI
        Roxana Tamplaru
        Liliana Schiopu
2. Limbajul Pascal structuri dinamice de date,
grafuri si programare orientata pe obiecte
Editura Else
Autori: Eugen Popescu
         Sofia Vitelaru
         Mihaela Codres
         Daniel Codres



Curs valutar
Euro4,5511
Dolarul american4,2615
Lira Sterlina5,3015
Gramul de aur170,1555
Leul moldovenesc0,2176
Materii referate

Anatomie (61)

Astronomie (61)

Biologie (546)

Chimie (530)

Contabilitate (87)

Design (4)

Diverse (878)

Drept (356)

Ecologie (59)

Economie (520)

Educatie Fizica (2)

Educatie si Invatanmant (2)

Engleza (463)

Filosofie (99)

Fizica (343)

Franceza (25)

Geografie (838)

Germana (40)

Informatica (354)

Istorie (1169)

Italiana (21)

Latina (26)

Literatura (22)

Logica (6)

Management (133)

Marketing (118)

Matematica (114)

Mecanica (13)

Medicina si Farmacie (229)

Muzica (35)

Psihologie (337)

Religie (248)

Romana (2303)

Spaniola (31)

Statistica (17)

Stiinte politice (27)

Turism (64)

Nota explicativa

Informatiile oferite de acuz.net au scop educativ si orientativ pentru cercetare academica. Va recomandam utilizarea acestora doar ca sursa de inspiratie sau ca resurse educationale.