Sunteți pe pagina 1din 5

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică și Microelectronică


Departamentul Ingineria Software și Automatică

RAPORT
la lucrarea de laborator nr.1
la Structuri de date și algoritme

Tema: Implementarea tipului de date abstract “Tablou de structuri” în


limbajul C.

A efectuat: Revenko Ivan TI-224

A verificat: Bîrnaz Adrian

Chişinău 2022
Scopul lucrării

Scopul lucrării este de a familiariza studentul cu mecanismul de creare a


tablourilor statice și dinamice de structuri și operații elementare asupra acestuia,
utilizînd pentru aceasta limbajul C.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int ciclu = 0 ; int nr = 0; int op; char search[50];int poz;

struct student{
char nume[255];
char prenume[255];
char grupa[255];
float nota;
};

void input(struct student *s){


printf("Introduceti numele:");scanf("%s", &s->nume);
printf("Introduceti prenumele:");scanf("%s", &s->prenume);
printf("Introduceti grupa:");scanf("%s", &s->grupa);
mark:
printf("Introduceti nota:");scanf("%f", &s->nota);
if(s->nota > 10 && s->nota < 1){
printf("Nota este incorecta!");
goto mark;
}

void output(struct student *s){


printf("Numele:"); printf("%s\n", s->nume);
printf("Preumele:"); printf("%s\n", s->prenume);
printf("Grupa:"); printf("%s\n", s->grupa);
printf("Nota:"); printf("%.2f\n", s->nota);
}

int main(){
struct student *std;
struct student temp;
std = malloc(sizeof(struct student));
while(ciclu == 0){
printf("\nMeniu: \n1 - Introduceti un student \n2 - Printeaza toti
studentii \n3 - Cauta un student dupa nume \n4 - Elibereaza memoria \n5 -
Sorteaza dupa nota ");
printf("\n6 - Insereaza un element la inceput \n7 - Insereaza un element
pe o pozitie \n8 - Sterge un element de pe o pozitie\n");
printf("Introduceti optiunea:"); scanf("%d", &op);
system("cls");
switch(op){
case 1:{
printf("\n");
std = realloc(std, (nr + 2) * sizeof(struct student));
input(&std[nr]);
nr++;
break;
}
case 2:{
if(nr == 0){
printf("\nNu sunt studenti!!!\n");
break;
}

for (int i = 0; i < nr; i++) {


printf("\nStudentul %d:\n", i+1);
output(&std[i]);
}
break;
}
case 3:{
if(nr == 0){
printf("\nNu sunt studenti!!!\n");
break;
}
printf("Introduceti numele:"); scanf("%s", &search);
for(int i = 0 ; i < nr; i++){
if(strcmp(search, std[i].nume) == 0){
printf("\nStudentul %d:\n", i+1);
output(&std[i]);
break;
}
}
break;
}
case 4:{
free(std);
nr = 0;
printf("\nMemoria a fost eliberata cu succes!\n");
std = malloc(sizeof(struct student));
break;
}
case 5:{
for(int i = 0 ; i < nr - 1 ;i++){
for(int j = 0 ; j < nr- i - 1;j++){
if(std[j].nota < std[j+1].nota){
temp = std[j];
std[j] = std[j+1];
std[j+1] = temp;
}
}
}
printf("\nSortat cu succes!\n");
break;
}
case 6:{
printf("\n");
nr++;
std = realloc(std,nr * sizeof(struct student));
for(int i = nr - 1; i >= 0; i--){
std[i] = std[i - 1];
}
input(&std[0]);
std = realloc(std,nr * sizeof(struct student));
break;
}
case 7:{
printf("\n");
nr++;
std = realloc(std,nr * sizeof(struct student));
printf("Introduceti nr studentului:");scanf("%d", &poz);
if(poz > nr && poz <= 0){
printf("Index incorect!");
break;
}
for(int i = nr - 1; i >= poz;i--){
std[i] = std[i - 1];
}
input(&std[poz - 1]);
break;
}
case 8:{
printf("Introduceti nr studentului:");scanf("%d", &poz);
if(poz > nr && poz <= 0){
printf("Index incorect!");
break;
}
for (int i = poz - 1; i < nr - 1; i++) {
std[i] = std[i+1];
}
nr--;
std = realloc(std, nr * sizeof(struct student));
printf("Sters cu succes\n");
break;
}
default:{
printf("\nOptiune gresita!\n");
break;
}
}
}

return 0;
}

Concluzie

În această lucrare la disciplina de structure de date și algoritme noi


am familiarizat studentul cu mecanismul de creare a tablourilor
statice și dinamice de structuri și operații elementare asupra
acestuia, utilizînd pentru aceasta limbajul C.

S-ar putea să vă placă și