RAPORT
Lucrarea de laborator nr. 9 la Programarea Calculatoarelor
Codul programului.
Fisierul .h
Casa *head;
Casa *head2;
Fisierul functii.c
#include "_CASA.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int createList(int n)
{
Casa* c, *p;
int i;
for(i=0;i<n;i++){
c=(Casa*)calloc(1,sizeof(*c));
if (c==NULL) { head=NULL; return 0;}
if(i==0) { head =c; }
else
{ p->next=c; }
p=c;
}
c->next=NULL; // c->next=head;
return 1;
}
void readInfo(void)
{
Casa *c;
int i;
puts("Dati info despre case: ");
c=head;
i=0;
while(c)
{
readElement(c);
c=c->next;
i++;
}
return;
}
void showInfo(void)
{
Casa*c,*p;
int i;
c=head;
i=0;
if (head==NULL){
puts("Alocati macar memorie (-_-)");
return;
}
puts("Info despre case: ");
while(c)
{
printf("Casa[%d].Adresa: %s Nr.camere: %d Suprafata: %.2f(m^2)
Telefonul: %s Pretul: %.2f (mii lei)\n",i+1,c->adress,c->cam,c->aria,c->tel,c->cost);
i++;
printf("\tadress elem:%x\t",c);
c=c->next;
printf("adress next:%x\n",c);
if(c==head) break;
}
p=head2;
i=0;
if (head2==NULL){
return;
}
puts("Info despre case: ");
while(p)
{
printf("Casa[%d].Adresa: %s Nr.camere: %d Suprafata: %.2f(m^2)
Telefonul: %s Pretul: %.2f (mii lei)\n",i+1,p->adress,p->cam,p->aria,p->tel,p->cost);
i++;
printf("\tadress elem:%x\t",p);
p=p->next;
printf("adress next:%x\n",p);
if(p==head) break;
}
return;
}
Casa* searchElement(char* v)
{
Casa*c;
c=head;
while(c)
{
if(stricmp(c->adress, v)==0) {return c;}
c=c->next;
if(c==head) break;
}
return NULL;
}
void modifyInfo(Casa* c)
{
int f;
printf("De modificat adresa casei? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati adresa:");
fflush(stdin);
gets(c->adress);
}
printf("De modificat nr de camere? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati nr de camere:");
scanf("%d", &c->cam);
}
printf("De modificat pretul (mii lei)? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati pretul:");
scanf("%d", &c->cost);
}
printf("De modificat telefonul? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati nr de telefon:");
scanf("%s", &c->tel);
}
printf("De modificat suprafata ? (1/0): ");
scanf("%d", &f);
if(f!=0){
printf("Dati aria(m^2):");
scanf("%f", &c->aria);
}
return;
}
Casa* lastElement(void)
{
Casa*c;
c=head;
while(c->next!=NULL)
{
c=c->next;
if (c->next==head){
break;
}
}
return c;
}
int sizeList(void)
{
Casa*c;
int n;
c=head;
n=0;
while(c){
n++;
c=c->next;
if(c==head) break;
}
return n;
}
void swap(Casa *s1, Casa *s2)
{
Casa *na, *nb;
Casa t;
na=s1->next;
nb=s2->next;
t=*s1;
*s1=*s2;
*s2=t;
s1->next=na;
s2->next=nb;
return;
}
void sortList(void)
{
int i,k;
Casa *a,*b;
int n;
n=sizeList();
for(i=0; i<n;i++)
{a=head;
b=a->next;
for(k=0;k<n-1-i;k++)
{
if(stricmp(a->adress,b->adress)>0)
{
swap(a,b);
}
a=a->next;
b=b->next;
}
}
return;
}
void appendElement(){
Casa *c;
if (head==NULL)
{
c=(Casa*)malloc(sizeof(*c));
head=c;
c->next=NULL;
readElement(c);
return;
}
Casa *temp=lastElement();
c=(Casa*)malloc(sizeof(*c));
readElement(c);
temp->next=c;
c->next=NULL;
}
void prependElement(){
Casa *c;
c=(Casa*)malloc(sizeof(*c));
readElement(c);
c->next=head;
head=c;
}
head2=NULL;
return 1;
}
void freeMemory()
{
Casa*c,*p;
c=head;
while(c){
p=c;
c=c->next;
free(p);
if(c==head) break;
}
head=NULL;
return;
}
Fisierul main.c
#include "functii.c"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
switch(nm)
{
case 1:
printf("Dati numarul de case: ");
scanf("%d", &n);
flag=createList(n);
if(flag!=1){
puts("Memoria nu a fost alocata");
exit (1);
}
puts("Memoria a fost alocata cu succes");
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case 2:
readInfo();
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case 3:
showInfo();
getch();
break;
case 4:
puts("Dati adresa casei cautate: ");
fflush(stdin);
gets(adresa);
S=searchElement(adresa);
if(S==NULL){
puts("Casa cautata nu a fost gasita in tablou ");}
else{
puts("Info despre casa: ");
printf("Adresa: %s Nr.camere: %d Suprafata: %.2f(m^2)
Telefonul: %s Pretul (mii lei): %.2f \n",S->adress,S->cam,S->aria,S->tel,S->cost);
}
S=lastElement();
printf("Adresa ultimui element al listei: %x %x \n", S, S->next);
getch();
break;
case 7:
n=sizeList();
printf("Lungime listei este %d\n", n);
getch();
break;
case 8:
break;
case 16:
flag=unite(head, head2);
if (flag){
puts("Lista a fost unita.");
}
else {
puts("Nu avem ce uni. ");
}
getch();
break;
case 17:
puts("Dati adresa fisierului unde va fi salvata informatia");
fflush(stdin);
gets(fname);
flag=save(fname);
if (flag==1){
puts("Informatia a fost salvata");
}
if(flag==0){
puts("Nu s-a putut salva informatia...");
}
if (flag==-1){
puts("Lista este vida. Nu salvez nimic!");
}
getch();
break;
case 18:
puts("Dati adresa fisierului de unde va fi citita informatia");
fflush(stdin);
gets(fname);
flag=load(fname);
if (flag==1){
puts("Informatia a fost salvata");
}
if (flag==0){
puts("Nu s-a putut salva informatia...");
}
if (flag==-1){
puts("Aloca memorie si dupa citeste din fisier!!!");
}
getch();
break;
case 19:
freeMemory();
puts("memoria a fost eliberata. Tastati enter pentru a
continua");
getch();
break;
case 0:
printf("Doriti sa iesiti din program? (1/0): ");
scanf("%d", &flag);
if(flag==1) return 0;
puts("Pentru a continua apasati tasta Enter");
getch();
break;
default: puts("Alegeti optiunea corecta din menu! ");
puts("Pentru a continua apasati tasta Enter");
getch();
} // end switch
} // end while
}
In cadrul acestei lucrari de laborator am facut cunostinta cu listele simplu inlantuite. Am invatat si
avantajul folosirei listelor fata de structurile simple. Listele ocupa o zona mai mare de memorie
comparabil cu tabloul de structure datorita campului alocat pentru adresa urmatorul element. Desi
ocupa mai multa memorie listele sunt o obtiune mai buna atunci cand vrem sa stocam un numar mare
de elemente. Asta deoarece lista ocupa parti din memorie lagate intre ele cu noduri. In cazul tabloului
de structure care ocupa o zona solida de memorie. In cazul structurilor care trebuie sa-si pastreze in
timpul exploatarii ordonarea dupa un anumit criteriu, mecanismul vectorilor este greoi.In aceste cazuri,
se poate alege ca solutie de implementare a structurii de date lista, care nu este o structura fizica de
organizare a datelor, ci o structura logica, ce degreveaza programatorul de ordonarea dupa indice a
structurii, impusa de vectori.
Bibliografie:
1. Conspectul prelegerilor on-line al cursului Programarea Calculatoarelor pentru studenții gr. CR201,
CR-202, CR-203, RM-201, AI-201 (lector: dr., conf. univ. M. Kulev). Chișinău, UTM, FCIM, 2020.
3. https://tutoriale-pe.net/liste-simplu-inlantuite-structuri-de-date-alocate-dinamic/