Guest User

Untitled

a guest
Feb 27th, 2020
151
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct
  6. {
  7. char *nume;
  8. char *prenume;
  9. char CNP[14];
  10. int varsta;
  11.  
  12. } pers;
  13.  
  14. void citire(pers **v, int *n)
  15. {
  16. int i, j;
  17. printf("cate persoane doriti sa introduceti: ");
  18. scanf("%d", n);
  19. getchar();
  20.  
  21. (*v) = malloc(sizeof(pers) * (*n));
  22.  
  23. for (i = 0; i < (*n); i++)
  24. {
  25. (*v)[i].nume = malloc(sizeof(char) * 50);
  26. (*v)[i].prenume = malloc(sizeof(char) * 50);
  27. printf("dati numele: ");
  28. gets((*v)[i].nume);
  29. printf("dati prenumele: ");
  30. gets((*v)[i].prenume);
  31. printf("dati varsta: ");
  32. scanf("%d", &(*v)[i].varsta);
  33. getchar();
  34. printf("dati CNP(tot odata)\n");
  35. gets((*v)[i].CNP);
  36. }
  37. }
  38.  
  39. void afisare(pers *v, int n)
  40. {
  41. int i, j;
  42. for (i = 0; i < n; i++)
  43. printf("\nNume:%s\nPrenume:%s\nVarsta:%d\nCNP:%s\n", v[i].nume, v[i].prenume, v[i].varsta, v[i].CNP);
  44. }
  45.  
  46. void modi(pers *v, int n)
  47. {
  48. int poz, val;
  49. printf("Ce pozitie doriti sa modificati [ 0 - %d ] ", n - 1);
  50. scanf("%d", &poz);
  51. getchar();
  52.  
  53. if (poz > (n - 1))
  54. {
  55. printf("prea mult.");
  56. exit(1);
  57. }
  58.  
  59. printf("dati numele: ");
  60. gets(v[poz].nume);
  61. printf("dati prenumele: ");
  62. gets(v[poz].prenume);
  63. printf("dati varsta: ");
  64. scanf("%d", &v[poz].varsta);
  65. getchar();
  66. printf("dati CNP(tot odata)\n");
  67. gets(v[poz].CNP);
  68. }
  69.  
  70. void realocare(pers **v, int n)
  71. {
  72. (*v) = realloc(*v, sizeof(pers) * n);
  73. }
  74.  
  75. void stergere(pers *v, int *n)
  76. {
  77. if ((*n) == 0)
  78. {
  79. printf("Stergerea a esuat (0 numere)\n");
  80. exit(1);
  81. }
  82.  
  83. int poz, i;
  84. printf("Pozitia de pe care sa sterg? [0 - %d ] ", (*n) - 1);
  85. scanf("%d", &poz);
  86.  
  87. for (i = poz; i < (*n) - 1; i++)
  88. v[i] = v[i + 1];
  89.  
  90. (*n)--;
  91. realocare(&v, *n);
  92. }
  93.  
  94. void adaugare(pers **v, int *n)
  95. {
  96. int i, poz;
  97. pers aux;
  98. printf("Pe ce pozitie doriti sa adaugati? [0 - %d] ", *n);
  99. scanf("%d", &poz);
  100. getchar();
  101.  
  102. if (poz > *n)
  103. {
  104. printf("pozitie data prea mare\n");
  105. exit(1);
  106. }
  107. (*n)++;
  108. (*v) = realloc(*v,(*n) * sizeof(pers));
  109. (*v)[(*n) - 1].nume = malloc(sizeof(char) * 50);
  110. (*v)[(*n) - 1].prenume = malloc(sizeof(char) * 50);
  111. for (i = (*n) - 1; i > poz; i--)
  112. {
  113. strcpy((*v)[i].nume, (*v)[i - 1].nume);
  114. strcpy((*v)[i].prenume, (*v)[i - 1].prenume);
  115. strcpy((*v)[i].CNP, (*v)[i - 1].CNP);
  116. (*v)[i].varsta = (*v)[i - 1].varsta;
  117. }
  118.  
  119. // aux.nume = malloc(sizeof(char) * 50);
  120. // aux.prenume = malloc(sizeof(char) * 50);
  121. // printf("dati numele: ");
  122. // gets(aux.nume);
  123. // printf("dati prenumele: ");
  124. // gets(aux.prenume);
  125. // printf("dati varsta: ");
  126. // scanf("%d", &aux.varsta);
  127. // getchar();
  128. // printf("dati CNP(tot odata)\n");
  129. // gets(aux.CNP);
  130. // v[poz] = aux;
  131.  
  132. printf("dati numele: ");
  133. 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.
  134. printf("dati prenumele: ");
  135. gets((*v)[poz].prenume); // la fel, nu s ar fi intamplat daca nu aveam in parametrii structurii *nume si *prenume.
  136. printf("dati varsta: ");
  137. scanf("%d", &(*v)[poz].varsta);
  138. getchar();
  139. printf("dati CNP(tot odata)\n");
  140. gets((*v)[poz].CNP);
  141. }
  142.  
  143. int main()
  144. {
  145.  
  146. pers *v;
  147. int n;
  148.  
  149. citire(&v, &n);
  150. afisare(v, n);
  151.  
  152. //modificarea unui element din vector
  153. //modi(v, n);
  154. //afisare(v, n);
  155.  
  156. //stergere(v, &n);
  157. //printf("Dupa stergere:\n");
  158. //afisare(v, n);
  159.  
  160. adaugare(&v, &n);
  161. printf("Dupa adaugare:\n");
  162. afisare(v, n);
  163.  
  164. return 0;
  165. }
RAW Paste Data