Documente Academic
Documente Profesional
Documente Cultură
RAPORT
Lucrarea de laborator nr.9.
la Programarea Calculatoarelor
A efectuat:
st. gr. RM-211 Dascal Sergiu
A verificat:
dr., conf. univ. M. Kulev
Chişinău -2021
Lucrarea de laborator nr. 9
Теmа: Implementarea tipului abstract de date „Listă
unidirecțională” („Listă simplu înlănțuită”) în limbajul C.
Partea II
Scopul lucrării: Obţinerea deprinderilor practice de implementare
și de utilizare a tipului abstract de date (TAD) “Listă simplu
înlanţuită” în limbajul C cu asigurarea operațiilor de prelucrare ale
listei.
Sarcină: Să se scrie trei fişiere-text în limbajul C pentru
implementarea și utilizarea TAD “Listă simplu înlanţuită” cu
asigurarea operațiilor de prelucrare ale listei:
4. Fişier antet cu extensia .h, care conține specificarea
structurii de date a elementului listei simplu înlănțuite
(conform variantelor) şi prototipurile funcţiilor de
prelucrare a listei.
5. Fişier cu extensia .cpp sau .c, care conține implementările
funcţiilor (codurile funcţiilor) declarate în fişierul antet.
6. Fişier al utilizatorului, funcţia mаin() pentru prelucrarea
listei cu afişarea la ecran a următorului meniu de opţiuni:
1. Crearea listei în memoria dinamică.
2. Introducerea informației despre elementele listei de la
tastatură.
3. Afişarea informației despre elementele listei la ecran.
4. Căutarea elementului în listă.
5. Modificarea câmpurilor unui element din listă.
6. Determinarea adresei ultimului element din listă.
7. Determinarea lungimii listei (numărul de elemente).
8. Înterschimbarea a două elemente indicate din listă.
30
9. Sortarea listei.
10. Adăugarea unui element nou la sfârșitul listei.
11. Adăugarea unui element nou la începutul listei.
12. Inserarea unui element nou după elementul indicat al
liste.i
13. Inserarea unui element nou înaintea elementului
indicat în listă.
14. Ştergerea elementului indicat în listă.
15. Divizarea listei în două liste.
16. Concatenarea a două liste.
17. Salvarea informației despre elementele listei în fişier.
18. Citirea informației despre elementele listei din fişier.
19. Eliberarea memoriei alocate pentru listă.
0. Ieşirea din program.
Indicaţie: La realizarea operaţiei de afișare la ecran a informaţiei
referitor la elementele listei a se prevedea afișarea adreselor din
memorie ale elementelor curent şi următor din listă.
Valorile datelor iniţiale : n=2,
struct casa
char adresa[50];
int telefon;
float suprafata;
int numar_odai;
float cost;
Mersul lucrării:
Noţiuni din teorie şi metodele folosite:
În Programarea calculatoarelor algoritmul este un set finit de operatiuni
(actiuni) pentru a rezolva problema dată la calculator. Există mai multe
forme de reprezentare a algoritmilor [2]:
- forma naturală;
- forma grafică;
- pseudocodul;
- programul scris intr-un limbaj de programare.
b) date de ieşire:
struct casa- variabile simple de tip real, valorile formulelor de calcul
(de afişat pe ecran).
c) date de lucru: casa *p, casa *c, casa *nc, casa *nb, casa t, casa *c2,
men, n, nm, num, flag, str[50], i, l, k, id_before, id_after, id_delete
char adresa[50];
int telefon;
float suprafata;
int numar_odai;
float cost;
}casa;
casa *head;
void read();
void show();
int lenght();
void sort();
void free();
void add_to_end();
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
int create(int n)
int i;
c=(casa*)malloc(sizeof(*c));
if(i==0)
head=c;
else
p->next=c;
p=c;
c->next=NULL;
return 0;
void read()
casa *c;
int i=0;
c=head;
while(c)
printf("Adresa : ");
fflush(stdin);
gets(c->adresa);
printf("Telefonul : ");
scanf("%d", &c->telefon);
printf("Suprafata : ");
scanf("%f", &c->suprafata);
scanf("%d", &c->numar_odai);
printf("Costul : ");
scanf("%f", &c->cost);
c=c->next;
i++;
void show()
{
casa *c;
int i=0;
c=head;
while(c)
c=c->next;
i++;
casa *c;
int i=0;
c=head;
while(c)
c=c->next;
i++;
casa *c;
c=head;
while(c)
strlwr(c->adresa);
strlwr(a);
if(strcmp(c->adresa, a)==0)
return c;
else
c=c->next;
return NULL;
}
int flag;
scanf("%d", &flag);
if(flag)
fflush(stdin);
gets(c->adresa);
scanf("%d", &flag);
if(flag)
scanf("%d", &c->telefon);
scanf("%d", &flag);
if(flag)
scanf("%f", &c->suprafata);
}
scanf("%d", &flag);
if(flag)
scanf("%d", &c->numar_odai);
scanf("%d", &flag);
if(flag)
scanf("%f", &c->cost);
return;
casa t;
nc=c->next;
nb=b->next;
t=*c;
*c=*b;
*b=t;
c->next=nc;
b->next=nb;
int lenght()
casa *c;
int l=0;
c=head;
while(c)
l++;
c=c->next;
return l;
void sort()
int n, i, k;
n=lenght();
c=head;
b=c->next;
if(strcmp(c->adresa, b->adresa)>1)
swap(c, b);
c=c->next;
b=b->next;
void last(int n)
casa *c;
int i;
c=head;
c=c->next;
void free()
c=head;
while(c)
{
p=c;
c=c->next;
free(p);
head=NULL;
int i=0;
while(c)
if(i==id-1)
p=c;
c=(casa*)malloc(sizeof(casa));
printf("Adresa : ");
fflush(stdin);
gets(c->adresa);
printf("Telefonul : ");
scanf("%d", &c->telefon);
printf("Suprafata : ");
scanf("%f", &c->suprafata);
scanf("%d", &c->numar_odai);
printf("Costul : ");
scanf("%f", &c->cost);
c->next=p->next;
break;
i++;
c=c->next;
int i=0;
while(c)
if(i==id-1)
p=c;
c=(casa*)malloc(sizeof(casa));
printf("Adresa : ");
fflush(stdin);
gets(c->adresa);
printf("Telefonul : ");
scanf("%d", &c->telefon);
printf("Suprafata : ");
scanf("%f", &c->suprafata);
scanf("%d", &c->numar_odai);
printf("Costul : ");
scanf("%f", &c->cost);
if(p==head)
c->next=head;
head=c;
break;
else
c->next=p;
i=0;
p=head;
while(p)
if(i==id-2)
p->next=c;
i++;
p=p->next;
break;
i++;
c=c->next;
}
void add_to_end()
int i=0;
while(c)
if(c->next==NULL)
p=c;
c=(casa*)malloc(sizeof(casa));
printf("Adresa : ");
fflush(stdin);
gets(c->adresa);
printf("Telefonul : ");
scanf("%d", &c->telefon);
printf("Suprafata : ");
scanf("%f", &c->suprafata);
scanf("%d", &c->numar_odai);
printf("Costul : ");
scanf("%f", &c->cost);
c->next=p->next;
break;
c=c->next;
}
void delete_id(int id)
int i=0;
while(c)
if(i==id-1)
if(c==head)
head=c->next;
free(c);
break;
else if(c->next==NULL)
p=head;
while(p)
if(p->next==c)
free(c);
p->next=NULL;
break;
p=p->next;
else
{
p=head;
while(p)
if(p->next==c)
p->next=c->next;
free(c);
break;
p=p->next;
i++;
c=c->next;
casa *c=head;
int i=0;
while(c)
if(i==id-1)
*head2=c->next;
c->next=NULL;
break;
i++;
c=c->next;
casa *c=head;
while(c)
if(c->next=NULL)
c->next=*head2;
break;
c=c->next;
*head2=NULL;
int main()
casa **head2=NULL;
int id_devide;
int id_before;
int id_after;
int id_delete;
char str[50];
while(1)
system("cls");
printf("\t\tMENU\n");
printf("\t3) Afisarea\n");
printf("\t4) Cautare\n");
printf("\t5) Modificarea\n");
printf("\t6) Swap\n");
printf("\t14) Divizarea\n");
printf("\t15) Concatinarea\n");
printf("\t0) Exit\n");
scanf("%d", &nm);
switch(nm)
{
case 0: printf("Doriti sa esiti din program? (1/0) : ");
scanf("%d", &flag);
if(flag)
return 0;
scanf("%d", &n);
num=create(n);
getch();break;
case 2: read();break;
case 3: show();
getch();break;
fflush(stdin);
gets(str);
c=search(str);
if(c!=NULL)
else
{
c=NULL;
getch();break;
fflush(stdin);
gets(str);
c=search(str);
if(c!=NULL)
modify(c);
else
getch();break;
fflush(stdin);
gets(str);
c=search(str);
if(c!=NULL)
fflush(stdin);
gets(str);
c2=search(str);
if(c2!=NULL)
{
swap(c, c2);
else
getch();break;
else
getch();break;
getch();break;
getch();break;
case 8: sort();
getch();break;
case 9: last(n);
getch();break;
show1(head);
scanf("%d", &id_after);
system("cls");
add_after_id(id_after);
else
system("cls");
system("pause");
break;
show1(head);
scanf("%d", &id_before);
system("cls");
add_before_id(id_before);
else
system("cls");
system("pause");
break;
add_to_end();
system("pause");
break;
case 13: system("cls");
show1(head);
scanf("%d", &id_delete);
delete_id(id_delete);
else
system("pause");
break;
show1(head);
scanf("%d", &id_devide);
devide(id_devide, head2);
system("cls");
show1(head);
show1(*head2);
system("pause");
break;
join(head2);
else
system("cls");
break;
getch();break;
return 0;
}
Analiza rezultatelor și concluzii:
1. Au fost obţinute deprinderi de elaborare, compilare, rulare și
testare a unui program ce contine tablou unidimensional în
limbajul de programare C.
2. Programul da rezultate corecte, veridice din punct de vedere
matematic.
3. Programul exclude probabilitatea situatiilor de conflict, cind
structura contine zero elemente.
4. Programul verifica optiunile alese anterior si exclude efectuarea
pasilor inutili sau imposibili.
5. Programul elaborat acorda utilizatorului un sir de optiuni din care
el poate alege.