Sunteți pe pagina 1din 7

UNIVERSITATEA DE STAT DIN MOLDOVA

FACULTATEA MATEMATICĂ ŞI INFORMATICĂ


CATEDRA „TEHNOLOGII DE PROGRAMARE”

La „Java”
Lucrare de laborator N4

Tema: „Colectie de Obiecte”

Efectuat:

Verificat: Opinca C.

Chisinau -2010-
Conditia:
De creat o clasa in limbajul “java” folosind pachetul “java.util”, clasa sa mosteneasca
clasa “LinkedList”…

Listing (cod) a programului:


import java.util.*;

class poveste extends LinkedList //clasa "poveste" mosteneste clasa LinkedList


{ public poveste() //constructorul clasei scazca apeleaza constructorul standart al clasi
LinkedList

{ super(); }
public poveste(poveste po) //constructor cu parametru poveste
{super();
int i=po.size();
for(int j=0;j<i;j++)
{addLast(po.get(j));
}
}
public void adauga(String inf) //adauga un element la sfirsitul listei
{
addLast(inf);
}
public void afiseaza() //afiseaza clasa poveste
{System.out.print("Continutul listei:\n");
int i=1,j=numbers();
while(i<=j)
{String s=(String)get(i-1);
System.out.println(s);
i++;
}
}
public int numbers() //returneaza num de personae in poveste
{
return size();
}
public void distruge() //nimiceste obiectul clasei scazca
{clear();
}
public boolean extrage(String inf) //sterge primul personaj din lista cu inf=inf
{
int i=0,j=numbers();
while(i<j)
{String s=(String)get(i);
if(s==inf)
{remove(i);
return true;
}
i++;
}
return false;

}
public String extrageprimul() //sterge primul personaj
{ return (String)removeFirst();}
public String extrageultimul() //sterge ultimul personaj
{ return (String)removeLast();}
public String extrage(int i) //sterge personaj pe pozitia i
{ return (String)remove(i-1);}
public String citprim() //citiste primul personaj
{ return (String)getFirst();}
public String citulim() //citiste ultimul personaj
{ return (String)getLast();}
public String citn(int n) //citiste personaj pe pozitia i
{ return (String)get(n-1);}
}
class main{
public static void main(String args[])
{ poveste po1,po = new poveste();
po.adauga("ridike");
po.adauga("mosneagul");
po.adauga("baba");
po.adauga("nepoata");
po.adauga("cateaua");
po.afiseaza();
po.extrage(2);
po.afiseaza();
po.extrageultimul();
po.afiseaza();
po1=new poveste(po);
po1.afiseaza();
po.extrage("ridike");
po.afiseaza();
}

// C

#include <stdio.h>;
#include <stdlib.h>;
#include <conio.h>;

struct suschestvo //structura fiinta


{
suschestvo* pred;
void* info; // stocheaza inf.spre un tip nedefinit
suschestvo* next;
};
class skazka //cl.poveste
{ protected: suschestvo* repka; //campul ridichii—primul elemente al listei
suschestvo* current; // campul—personajul curent
public:
skazka();//constructor implicit
skazka(void*);//constructor cu parametru
skazka(skazka&);//constr.de copiere
~skazka();//distructor
void add_personaj(void*); //adauga un personaj la sfarsitul liste
void kill_personaj(void*); // omoara(elimina) un personaj anume
int nr_personaje(); //numara cite personaje exista in poveste
void current_to_repka(); //asocia pointerul spre baza listei (repka)
void current_to_personaj(int n); //trece pointerul current la personajul al carui e specificat
numarul
void* return_info(int n);
};
skazka::skazka() // Constructorul implicit. Cream o lista goala
{ repka = current = NULL; };
skazka::skazka(void* info) //acest constructor creaza o lista goala, la care apoi adauga un element
{ repka = NULL; // initializam indicatorul(pointerul) spre inceputul listei
add_personaj(info);
};
skazka::skazka(skazka& Staraia) // Cream o poveste dintr-un prototip
{ repka = NULL; // o cream goala
if (Staraia.repka != NULL)
{ suschestvo* temp = Staraia.repka; // asociam variabila temp(temporara) cu indicatorul spre baza
povestei vechi
do
{ add_personaj(temp->info); // adaugam in povestea noua cate un personaj din cea veche
temp = temp->next; // si trecem la urmatorul personaj
}
while (temp != NULL); // Repetam pana nu se termina lista
};
};
skazka::~skazka()
{ if (repka != NULL) // daca lista nu e vida
{ suschestvo* temp = repka; //asociam temp cu inceputul listei
suschestvo* old = repka; // asociam old cu inceputul listei
do
{ old = temp; //lui old i se atribuie temp
temp = temp->next; // trecem la urmatorul element
delete old; // stergem un element
}
while (temp != NULL); // Repetam pana lista nu e vida
};
};
void skazka::add_personaj(void* info) // Adauga un personaj
{ if (repka != NULL) //Daca lista nu vida(exista cel putin un element in ea)
{ suschestvo* temp = repka; // asociam o variabila temporara cu inceputul listei
while (temp->next != NULL) // ajungem la sfarstul listei
temp = temp->next;
suschestvo* novobranets = new suschestvo; //cream o fiinta
novobranets->pred = temp; //specificam predecesorul finitei noi
novobranets->next = NULL; // specificam ca nu mai e nimeni dupa elemental nou
novobranets->info = info; // copiam informatia
temp->next = novobranets; // legam celula curenta cu sfarsitul listei
}
else // Daca lista este vida
{ repka = new suschestvo; // asociam indicatorul inceputului cu celula noua
repka->next = NULL; // specificam ca nu mai e nimic dupa fiinta curenta
repka->pred = NULL; // specificam ca nu mai e nimic pana la fiinta curenta
repka->info = info; // copiam informatia
current = repka; //specificam ca personajul nou esti si personajul curent
};
};
void skazka::kill_personaj(void* info) // eliminarea unui personaj anume
{ suschestvo* temp = repka; // cream o variabila temporara si o asociam cu inceputul listei
if (temp != NULL) // daca lista nu e vida
{ int pritsel = 0; //variabila trigger
while (temp != NULL) // pana nu s-a procesat toata lista
if (temp->info == info) // verificam daca am gasit celula de care avem nevoie
{ pritsel = 1; // dam comanda la stergere
break; // intrerupem
}
else // in caz contrar(nu e celula de care avem nevoie)
temp = temp->next; // trecem la urmatoare
if (pritsel ==1) //daca variabila trigger este egala cu 1
// stergem celula
{ if (temp == repka) // daca e nevoie sa stergem baza listei
{ if (current ==repka) // daca personajul curente este chiar baza listei
current = repka = temp->next; // mutam indicatoarele spre celula urmatoare
else // iar daca indicatorul nu e spre baza listei
repka = temp->next; // mutam doar indicatorul bazei spre celula urmatoare
if (temp->next) //daca exista o celula succesoare persnajului de sters
(temp->next)->pred = NULL; // stergem referinta succesorului spre celula curenta
};
else if (temp->next == NULL) // daca celula, care trebuie stearsa, e ultima in lista
{ if (current == temp) // verificam daca personajul current trebuie sters
current = temp->pred; // mutam pointerul ultimei cellule spre penultima
(temp->pred)->next = NULL; // precizam ca dupa penultiam celula nu mai e nimic
}
else // daca celula de sters e la mijlocul listei
{ (temp->next)->pred = temp->pred; //facem ca pointerul pred a celulei succesoare sa indice spre
predecesoarea celulei curente
(temp->pred)->next = temp->next; //facem ca pointerul next a celulei predecesoare sa indices pre
succesoarea celulei curente
if (current == temp) // daca trebuie sa stergem celula spre care indica pointerul current
current = temp->next; // trecem pointerul la urmatoarea
};
delete temp; // stergem celula
};
};
};

//numarul 1
int skazka::nr_personaje()
{
int nr=0;
suschestvo* temp = repka;// cream o variabila temporara si o asociam cu inceputul listei
while(temp!=NULL)// pana nu s-a procesat toata lista
{
nr++;//incrementam o variabila
temp=temp->next;//parcurgem fiecare element din lista
}
return nr;//returnam valoare variabilei incrementate
};

//numarul 2
void skazka::current_to_repka()
{
current=repka;//asociam pointerul spre celula curenta cu baza listei (repka)
};

//numarul 3
void skazka::current_to_personaj(int n)
{
suschestvo* temp = repka;// cream o variabila temporara si o asociam cu inceputul listei
while(n!=1)//pina
{n--;//scadem cite o unitate
temp=temp->next;//parcurgem fiecare element din lista
}
current=temp;//trece pointerul current la personajul, al carui numar e specificat in n
};

//numarul 4
void* skazka::return_info(int n)
{
suschestvo* temp = repka;
while(n!=1)
{n--;
temp=temp->next;//parcurgem fiecare element din lista
}
return temp->info;//returneaza informatia despre personajul indicat de n
};

//numarul 5
void main ()
{
clrscr();
int nr_pers;

char personaj1[10]="repka";
char personaj2[10]="dedka";
char personaj3[10]="babka";
char personaj4[10]="vnucika";
char personaj5[10]="jucika";
char *c;
//adaugam personaje
skazka poveste(personaj1);
poveste.add_personaj(personaj2);
poveste.add_personaj(personaj3);
poveste.add_personaj(personaj4);
poveste.add_personaj(personaj5);

int i=poveste.nr_personaje();
cout<<"Numarul de personaje "<<i<<endl;

cout<<"Introduceti numarul personajului afisat"<<endl;


cin>>nr_pers;
c=(char*)poveste.return_info(nr_pers);
cout<<"Personajul "<<nr_pers<<" este "<<c<<endl;

cout<<"\nAm ucis pe dedka"<<endl;


poveste.kill_personaj(personaj2);

i=poveste.nr_personaje();
cout<<"\nAcuma au ramas "<<i<<" personaje "<<endl;

getch();
}

Afisarea la ecran:

Continutul listei:
ridike
mosneagul
baba
nepoata
cateaua
Continutul listei:
ridike
baba
nepoata
cateaua
Continutul listei:
ridike
baba
nepoata
Continutul listei:
ridike
baba
nepoata
Continutul listei:
baba
nepoata

Concluzie:

In urma efectuarii acestei lucrari de laborator am observat ca este mai usor


de lucrat in Java decit in C,deoarece in Java exista o superclasa LinkedList a
pachetului “java.util” de la care se mosteneste functiile folosite in program,
astfel incit ele sunt doar apelate,insa in C trebuie de descries corpul fiecarei
functiei, deci complexitatea programarii in C este volumul mare de descrieri
si un interval de timp mai mare de lucru.