Documente Academic
Documente Profesional
Documente Cultură
RAPORT
la lucrarea de laborator nr. 1
la SDA
Chişinău 2023
Scopul lucrării
Obiectivele temei
#include <stdio.h>
#define n 10 // marimea tabloului
struct Element {
int value;
};
void read_elements() {
for (int i = 0; i < n; i++) {
printf("Dati valoarea elementului %d: ", i+1);
scanf("%d", &array[i].value);
}
}
void display_elements() {
printf("Elementele: \n");
for (int i = 0; i < n; i++) {
printf("Elementul %d: valoarea = %d\n", i+1, array[i].value);
}
}
int main() {
read_elements();
display_elements();
int pos, nr;
printf("Dati voaloarea pe care o cautati: ");
scanf("%d", &nr);
pos = search_element(nr);
if (pos == -666) {
printf("Elementul nu a fost gasit\n");
} else {
printf("Elementul a fost gasit pe pozitia %d\n", pos + 1);
}
return 0;
}
2. Să se elaboreze un program ce va aloca dinamic un tablou unidimensional de
structuri și va realiza următoarele funcții, unde funcțiile date reprezintă opțiuni
organizate într-un meniu în cadrul programului:
- citirea de la tastatură a elementelor tabloului;
- afișarea la consolă a elementelor tabloului;
- căutarea unui element după o valoarea a unui cîmp din structură și returnarea poziției
unde se află primul element găsit;
- eliberarea memoriei tabloului;
- sortarea elementelor după un cîmp a structurii;
- inserarea unui element nou la capătul tabloului;
- inserarea unui element nou la începutul tabloului;
- insearea unui element la o poziție X (introdusă de la tastatură) în cadrul tabloului;
- ștergerea unui element de pe o poziție X ( introdusă de la tastatură) din cadrul tabloului.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct element {
int nota;
int grupa;
char name[20];
char sex[10];
char specialitatea[40];
};
}
}
//După Grupă
else if (sort == 4){
if (arr[j].grupa > arr[j+1].grupa) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
//După Sex
else if (sort == 5){
if (strcmp(arr[j].sex, arr[j+1].sex) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
} }
}
void Insert_element(struct element **arr, int *size, struct element elem, int pos) {
(*size)++;
*arr = (struct element *) realloc(*arr, (*size) * sizeof(struct element));
int i;
for (i = (*size) - 1; i > pos; i--) {
(*arr)[i] = (*arr)[i-1];
}
(*arr)[pos] = elem;
}
int main() {
int choice, size, i, pos, nota, sort;
struct element *arr = NULL;
while (1) {
printf("\n====================================================
=");
printf("\nMeniul:\n");
printf("1. Dati studentii si notele lor\n");
printf("2. Arata informatia studentului\n");
printf("3. Cauta studentii dupa note\n");
printf("4. Aranjeaza studentii\n");
printf("5. Adaugati un student la sfirsit\n");
printf("6. Adaugati un student la inceput\n");
printf("7. Adaugati studenti de la pozitia preselectata\n");
printf("8. Scoate studentuls de la pozitia oferita\n");
printf("9. Exit\n");
printf("Dati un numar de la 1 la 9: ");
scanf("%d", &choice);
printf("=====================================================\
n");
switch (choice) {
case 1:
printf("Dati nr de studenti: ");
scanf("%d", &size);
arr = (struct element *) malloc(size * sizeof(struct element));
for (i = 0; i < size; i++) {
printf("Dati numele, nota, specialitatea, grupa si sexul elevului %d: ",
i+1);
scanf("%s%d%s%d%s", &arr[i].name, &arr[i].nota,
&arr[i].specialitatea, &arr[i].grupa, &arr[i].sex);
}
break;
case 2:
if (arr == NULL) {
printf("Masivul nu e initializat\n");
}
else {
Print_array(arr, size);
}
break;
case 3:
printf("Dati nota pe care o cautati: ");
scanf("%d", ¬a);
pos = Search_element(arr, size, nota);
if (pos == -666) {
printf("Nu a fost gasit nici un elev cu aceasta nota\n");
}
else {
printf("Nota cautata a fost gasita la elevul cu id-ul %d\n", pos+1);
}
break;
case 4:
printf("Sorteaza:\n1. Name\n2. Nota\n3. Specialitatea \n4. Grupa \n5.
Sex\nAlege: ");
scanf("%d", &sort);
Sort_array(arr, size, sort);
break;
case 5:
printf("Dati informatii despre studentul nou: ");
struct element elem;
scanf("%s%d%s%d%s", &elem.name, &elem.nota, &elem.specialitatea,
&elem.grupa, &elem.sex);
Insert_element(&arr, &size, elem, size);
break;
case 6:
printf("Dati informatii despre studentul nou: ");
struct element elem2;
scanf("%s%d%s%d%s", &elem2.name, &elem2.nota,
&elem2.specialitatea, &elem2.grupa, &elem2.sex);
Insert_element(&arr, &size, elem2, 0);
break;
case 7:
printf("Dati pozitia si informatii despre studentul nou: ");
struct element elem3;
scanf("%d%s%d%s%d%s", &pos, &elem3.name ,&elem3.nota,
&elem3.specialitatea, &elem3.grupa, &elem3.sex);
Insert_element(&arr, &size, elem3, pos-1);
break;
case 8:
printf("Dati nr elevului pentru al da afara din grupa: ");
scanf("%d", &pos);
Delete_element(&arr, &size, pos-1);
break;
case 9:
free(arr);
return 0;
default:
printf("Nu era presupus sa ajungeti aici )\n");
break;
}
}
return 0;
} #include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct element {
int nota;
int grupa;
char name[20];
char sex[10];
char specialitatea[40];
};
}
}
//După Grupă
else if (sort == 4){
if (arr[j].grupa > arr[j+1].grupa) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
//După Sex
else if (sort == 5){
if (strcmp(arr[j].sex, arr[j+1].sex) > 0) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
} }
}
void Insert_element(struct element **arr, int *size, struct element elem, int pos) {
(*size)++;
*arr = (struct element *) realloc(*arr, (*size) * sizeof(struct element));
int i;
for (i = (*size) - 1; i > pos; i--) {
(*arr)[i] = (*arr)[i-1];
}
(*arr)[pos] = elem;
}
int main() {
int choice, size, i, pos, nota, sort;
struct element *arr = NULL;
while (1) {
printf("\n====================================================
=");
printf("\nMeniul:\n");
printf("1. Dati studentii si notele lor\n");
printf("2. Arata informatia studentului\n");
printf("3. Cauta studentii dupa note\n");
printf("4. Aranjeaza studentii\n");
printf("5. Adaugati un student la sfirsit\n");
printf("6. Adaugati un student la inceput\n");
printf("7. Adaugati studenti de la pozitia preselectata\n");
printf("8. Scoate studentuls de la pozitia oferita\n");
printf("9. Exit\n");
printf("Dati un numar de la 1 la 9: ");
scanf("%d", &choice);
printf("=====================================================\
n");
switch (choice) {
case 1:
printf("Dati nr de studenti: ");
scanf("%d", &size);
arr = (struct element *) malloc(size * sizeof(struct element));
for (i = 0; i < size; i++) {
printf("Dati numele, nota, specialitatea, grupa si sexul elevului %d: ",
i+1);
scanf("%s%d%s%d%s", &arr[i].name, &arr[i].nota,
&arr[i].specialitatea, &arr[i].grupa, &arr[i].sex);
}
break;
case 2:
if (arr == NULL) {
printf("Masivul nu e initializat\n");
}
else {
Print_array(arr, size);
}
break;
case 3:
printf("Dati nota pe care o cautati: ");
scanf("%d", ¬a);
pos = Search_element(arr, size, nota);
if (pos == -666) {
printf("Nu a fost gasit nici un elev cu aceasta nota\n");
}
else {
printf("Nota cautata a fost gasita la elevul cu id-ul %d\n", pos+1);
}
break;
case 4:
printf("Sorteaza:\n1. Name\n2. Nota\n3. Specialitatea \n4. Grupa \n5.
Sex\nAlege: ");
scanf("%d", &sort);
Sort_array(arr, size, sort);
break;
case 5:
printf("Dati informatii despre studentul nou: ");
struct element elem;
scanf("%s%d%s%d%s", &elem.name, &elem.nota, &elem.specialitatea,
&elem.grupa, &elem.sex);
Insert_element(&arr, &size, elem, size);
break;
case 6:
printf("Dati informatii despre studentul nou: ");
struct element elem2;
scanf("%s%d%s%d%s", &elem2.name, &elem2.nota,
&elem2.specialitatea, &elem2.grupa, &elem2.sex);
Insert_element(&arr, &size, elem2, 0);
break;
case 7:
printf("Dati pozitia si informatii despre studentul nou: ");
struct element elem3;
scanf("%d%s%d%s%d%s", &pos, &elem3.name ,&elem3.nota,
&elem3.specialitatea, &elem3.grupa, &elem3.sex);
Insert_element(&arr, &size, elem3, pos-1);
break;
case 8:
printf("Dati nr elevului pentru al da afara din grupa: ");
scanf("%d", &pos);
Delete_element(&arr, &size, pos-1);
break;
case 9:
free(arr);
return 0;
default:
printf("Nu era presupus sa ajungeti aici )\n");
break;
}
}
return 0;
}