Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct
- {
- char *nume;
- char *prenume;
- char CNP[14];
- int varsta;
- } pers;
- void citire(pers **v, int *n)
- {
- int i, j;
- printf("cate persoane doriti sa introduceti: ");
- scanf("%d", n);
- getchar();
- (*v) = malloc(sizeof(pers) * (*n));
- for (i = 0; i < (*n); i++)
- {
- (*v)[i].nume = malloc(sizeof(char) * 50);
- (*v)[i].prenume = malloc(sizeof(char) * 50);
- printf("dati numele: ");
- gets((*v)[i].nume);
- printf("dati prenumele: ");
- gets((*v)[i].prenume);
- printf("dati varsta: ");
- scanf("%d", &(*v)[i].varsta);
- getchar();
- printf("dati CNP(tot odata)\n");
- gets((*v)[i].CNP);
- }
- }
- void afisare(pers *v, int n)
- {
- int i, j;
- for (i = 0; i < n; i++)
- printf("\nNume:%s\nPrenume:%s\nVarsta:%d\nCNP:%s\n", v[i].nume, v[i].prenume, v[i].varsta, v[i].CNP);
- }
- void modi(pers *v, int n)
- {
- int poz, val;
- printf("Ce pozitie doriti sa modificati [ 0 - %d ] ", n - 1);
- scanf("%d", &poz);
- getchar();
- if (poz > (n - 1))
- {
- printf("prea mult.");
- exit(1);
- }
- printf("dati numele: ");
- gets(v[poz].nume);
- printf("dati prenumele: ");
- gets(v[poz].prenume);
- printf("dati varsta: ");
- scanf("%d", &v[poz].varsta);
- getchar();
- printf("dati CNP(tot odata)\n");
- gets(v[poz].CNP);
- }
- void realocare(pers **v, int n)
- {
- (*v) = realloc(*v, sizeof(pers) * n);
- }
- void stergere(pers *v, int *n)
- {
- if ((*n) == 0)
- {
- printf("Stergerea a esuat (0 numere)\n");
- exit(1);
- }
- int poz, i;
- printf("Pozitia de pe care sa sterg? [0 - %d ] ", (*n) - 1);
- scanf("%d", &poz);
- for (i = poz; i < (*n) - 1; i++)
- v[i] = v[i + 1];
- (*n)--;
- realocare(&v, *n);
- }
- void adaugare(pers **v, int *n)
- {
- int i, poz;
- pers aux;
- printf("Pe ce pozitie doriti sa adaugati? [0 - %d] ", *n);
- scanf("%d", &poz);
- getchar();
- if (poz > *n)
- {
- printf("pozitie data prea mare\n");
- exit(1);
- }
- (*n)++;
- (*v) = realloc(*v,(*n) * sizeof(pers));
- (*v)[(*n) - 1].nume = malloc(sizeof(char) * 50);
- (*v)[(*n) - 1].prenume = malloc(sizeof(char) * 50);
- for (i = (*n) - 1; i > poz; i--)
- {
- strcpy((*v)[i].nume, (*v)[i - 1].nume);
- strcpy((*v)[i].prenume, (*v)[i - 1].prenume);
- strcpy((*v)[i].CNP, (*v)[i - 1].CNP);
- (*v)[i].varsta = (*v)[i - 1].varsta;
- }
- // aux.nume = malloc(sizeof(char) * 50);
- // aux.prenume = malloc(sizeof(char) * 50);
- // printf("dati numele: ");
- // gets(aux.nume);
- // printf("dati prenumele: ");
- // gets(aux.prenume);
- // printf("dati varsta: ");
- // scanf("%d", &aux.varsta);
- // getchar();
- // printf("dati CNP(tot odata)\n");
- // gets(aux.CNP);
- // v[poz] = aux;
- printf("dati numele: ");
- gets((*v)[poz].nume); // instructiunea se duce la adresa unde este stocat numele si il schimba, se modifica si v[poz+1].nume pentru ca au aceeasi adresa.
- printf("dati prenumele: ");
- gets((*v)[poz].prenume); // la fel, nu s ar fi intamplat daca nu aveam in parametrii structurii *nume si *prenume.
- printf("dati varsta: ");
- scanf("%d", &(*v)[poz].varsta);
- getchar();
- printf("dati CNP(tot odata)\n");
- gets((*v)[poz].CNP);
- }
- int main()
- {
- pers *v;
- int n;
- citire(&v, &n);
- afisare(v, n);
- //modificarea unui element din vector
- //modi(v, n);
- //afisare(v, n);
- //stergere(v, &n);
- //printf("Dupa stergere:\n");
- //afisare(v, n);
- adaugare(&v, &n);
- printf("Dupa adaugare:\n");
- afisare(v, n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement