Documente Academic
Documente Profesional
Documente Cultură
al Republicii Moldova
RAPORT
despre lucrarea de laborator Nr. 8
la Programarea calculatoarelor
Varianta 7
A efectuat:
st. gr. RM-201 Grosu Maxim
A verificat:
Lector univ. Stratulat Stefan
Chişinău – 2021
Lucrare de laborator nr.8
Tema: Prelucrarea caracterelor și a șirurilor de caractere
Теmа: Implementarea tipului abstract de date „Listă unidirecțională” („Listă simplu înlănțuită”)
în limbajul C. Partea I.
Scopul lucrării:
Obţinerea deprinderilor practice de implementare și de utilizare a tipului abstract de date (TAD)
“Listă simplu înlănţuită” în limbajul C cu asigurarea operațiilor de prelucrare de bază ale listei.
Sarcină: Să se scrie trei fişiere-text în limbajul C pentru implementarea și utilizarea TAD “Listă
simplu înlănţuită” cu asigurarea operațiilor de prelucrare de bază ale listei:
1.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 de bază ale listei.
2.Fişier cu extensia .cpp sau .c, care conține implementările (codurile) funcţiilor declarate în fişierul
antet.
3.Fişier al utilizatorului, funcţia mаin() pentru prelucrarea listei cu afişarea la ecran a următorului
meniu de opţiuni de bază:
Codul :
typedef struct Disciplina
{
char denumirea [20];
int anul;
char facultatea[20];
char departamentul[25];
int nr_ore;
} Disciplina;
Disciplina *head;
int main()
{
Disciplina *S,*B;
char num[40] ;
int n,nm,f;
while(1) // for(;;)
{
system("cls");
puts("\t MENU:");
puts("1. Crearea listei in memoria dinamica. ");
puts("2. Introducerea informatiei despre elementele listei de la tastatura. ");
puts("3. Afisarea informatiei despre elementele listei la ecran.");
puts("4. Cautarea elementului in lista.");
puts("5. Modificarea campurilor unui element din lista.");
puts("6. Determinarea adresei ultimului element din lista.");
puts("7. Determinarea lungimii listei (numarul de elemente).");
puts("8. Interschimbarea a doua elemente indicate in lista. ");
puts("9. Sortarea listei.");
puts("10. Eliberarea memoriei alocate pentru lista. ");
puts("0. Iesire din program. ");
switch(nm)
{
case 1:
printf("Dati numarul de Disciplini: ");
scanf("%d", &n);
f= createList(n);
if(f==0) {
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();
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case 4:
puts("Dati numele Disciplinei de cautat:");
fflush(stdin);
gets(num);
S=searchDisciplina(num);
if(S==NULL)
{puts("Disciplina cautata nu a fost gasita in tablou ");
}
else
{ puts("Info despre Disciplina: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",S->denumirea,S-
>anul,S->facultatea,S->departamentul,S->nr_ore);
case 5:
puts("Dati numele Disciplinei de modificat:");
fflush(stdin);
gets(num);
S=searchDisciplina(num);;
if(S==NULL)
{puts("Disciplina cautat nu a fost gasit in tablou ");
}
else
{ puts("Info despre Disciplina: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",S->denumirea,S-
>anul,S->facultatea,S->departamentul,S->nr_ore);
modifyInfo(S);
puts("Info modificata despre student: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",S->denumirea,S-
>anul,S->facultatea,S->departamentul,S->nr_ore);
}
case 7:
n=sizeList();
printf("Lungimea listei: %d", n);
case 8:
puts("Dati numele studentului 1 pentru intreschimbarea:");
fflush(stdin);
gets(num);
S=searchDisciplina(num);
if(S==NULL)
{puts("Disciplina cautata nu a fost gasita in tablou ");
}
else
{ puts("Info despre Disciplina 1: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",S->denumirea,S-
>anul,S->facultatea,S->departamentul,S->nr_ore);
}
puts("Dati numele Disciplina2 pentru intreschimbarea:");
fflush(stdin);
gets(num);
B=searchDisciplina(num);
if(B==NULL)
{puts("Disciplina cautata nu a fost gasita in tablou ");
}
else
{ puts("Info despre Disciplina 2: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",B->denumirea,B-
>anul,B->facultatea,B->departamentul,B->nr_ore);
}
if(S!=NULL && B!=NULL)
{
swap(S,B);
puts("Dupa interschimbarea.");
puts("Info despre Disciplina 1: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",S->denumirea,S-
>anul,S->facultatea,S->departamentul,S->nr_ore);
puts("Info despre Disciplina 2: ");
printf("Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d\n",B->denumirea,B-
>anul,B->facultatea,B->departamentul,B->nr_ore);
}
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case 9:
sortList();
puts("Sortarea s-a efectuat cu succes.");
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case 10:
freeMemory();
puts("Eliberarea memoriei s-a efectuat cu succes.");
puts("Pentru a continua apasati tasta Enter");
getch();
break;
case 0:
printf("Doriti sa iesiti din program? (1/0): ");
scanf("%d", &f);
if(f==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
}
}
#include"Disciplinalab2.h"
#include<stdlib.h>
#include<stdio.h>
int create(int n)
{
Disciplina* c, *p;
int i;
for(i=0;i<n;i++)
{
c=(Disciplina*)malloc(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)
{
Disciplina *c;
int i;
puts("Dati info despre studenti: ");
c=head;
i=0;
while(c)
{
printf("Denumirea %d: ", i+1);
printf("anul: ");
scanf("%d", &c->anul);
printf("facultatea: ");
fflush(stdin);
gets(c->facultatea);
printf("departamentul: ");
fflush(stdin);
gets(c->departamentul);
printf("nr_ore: ");
scanf("%f", &c->nr_ore);
c=c->next;
if(c==head) break;
}
return;
}
void showInfo(void)
{
Disciplina*c;
int i;
c=head;
i=0;
puts("Info despre Disciplina: ");
while(c)
{
printf("%d. Denumirea: %s anul: %d facultatea: %s departamentul: %s nr_ore: %d c: %p next: %p\n",i+1,c-
>nume,c->an,c->facultatea,c->departamentul,c->nr_ore,c,c->next);
c=c->next;
if(c==head) break;
}
return;
}
Disciplina* searchDisciplina(char* v)
{
Disciplina*c;
c=head;
while(c)
{
if(stricmp(c->nume, v)==0) {return c;}
c=c->next;
if(c==head) break;
}
return NULL;
}
void modifyInfo(Disciplina* c)
{
int f;
printf("De modificat numele Disciplina? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati denumirea Disciplina:");
fflush(stdin);
gets(c->denumirea);
}
printf("De modificat anul de studiu? (1/0): ");
scanf("%d", &f);
if(f!=0)
{
printf("Dati anul de studiu:");
scanf("%d", &c->anul);
}
Disciplina* lastDisciplina(void)
{
Disciplina*c;
c=head;
while(c->next!=NULL ||c->next!=head)
{
c=c->next;
}
return c;
}
int sizeList(void)
{
Disciplina*c;
int n;
c=head;
n=0;
while(c)
{
n++;
c=c->next;
if(c==head) break;
}
return n;
}
void sortList(void)
{
int i,k;
Disciplina *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->nume,b->nume)>0)
{
swap(a,b);
}
a=a->next;
b=b->next;
}
}
return;
}
void freeMemory(void)
{
Disciplina*c,*p;
c=head;
while(c)
{
p=c;
c=c->next;
free(p);
if(c==head) break;
}
return;
}