Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.83 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define NR 10
  6.  
  7. typedef struct
  8. {
  9. char prenume[NR];
  10. char sex;
  11. float nota;
  12. }STUD;
  13.  
  14. void ordonare_prenume(STUD tablou[], int n)
  15. {
  16. int i, j;
  17. char *p;
  18.  
  19. p = (char*)malloc(NR); // Aloc memorie pentru o variabila auxiliara
  20.  
  21. if(p == NULL) exit(EXIT_FAILURE);
  22. for(i = 0; i < n - 1; i++)
  23. for(j = i; j < n; j++)
  24. if(strcmp(tablou[i].prenume,tablou[j].prenume) == -1)
  25. {
  26. strcpy(p,tablou[i].prenume);
  27. strcpy(tablou[i].prenume,tablou[j].prenume);
  28. strcpy(tablou[j].prenume,p);
  29.  
  30. }
  31. free(p);
  32. }
  33.  
  34. void ordonare_nota(STUD tablou[],int n)
  35. {
  36. int i, j;
  37. float aux;
  38. for(i = 0; i < n - 1; i++)
  39. for(j = i; j < n; j++)
  40. if(tablou[i].nota - tablou[j].nota > 0.01)
  41. {
  42. aux = tablou[i].nota;
  43. tablou[i].nota = tablou[j].nota;
  44. tablou[j].nota = aux;
  45. }
  46.  
  47. }
  48.  
  49. void afisare(STUD tablou[],int n)
  50. {
  51. int i;
  52. for(i = 0; i < n; i++)
  53. {
  54. printf("\n Preumele este %s",tablou[i].prenume);
  55. printf("\n Sexul este %c",tablou[i].sex);
  56. printf("\n Nota este %.3f",tablou[i].nota);
  57. }
  58. }
  59.  
  60. int main(void)
  61. {
  62. FILE *f, *f1, *f2;
  63. int i, n, optiune, nr_baieti = 0, nr_fete = 0;
  64. STUD student, *retinere_inf, *retinere_inf_fete, *retinere_inf_baieti;
  65.  
  66.  
  67. // Generarea unui fisier binar pentru a scrie informatii in el
  68.  
  69. /*
  70. if((f = fopen("Ex1.dat","wb")) == NULL)
  71. {
  72. printf("Eroare");
  73. exit(1);
  74. }
  75. printf("Cate informatii doriti sa adaugati in fisier ? ( <10 )");
  76. scanf("%d",&n); // numarul de informatii
  77. fflush(stdin);
  78.  
  79. // Scrierea a "n" persoane in fisier
  80.  
  81. for(i = 0; i < n; i++)
  82. {
  83. puts("\nPrenumele : max. 10 caractere");
  84. gets(student.prenume);
  85. puts("\nSexul : f - fata, b -baiat");
  86. scanf("%c",&student.sex);
  87. puts("\nNota : (>1) ");
  88. scanf("%f",&student.nota);
  89. fflush(stdin);
  90. fwrite(&student,sizeof(STUD),1,f);
  91. }
  92. fclose(f);
  93. */
  94.  
  95. // Citirea inf din fisier si retinerea lor intr-un vector
  96.  
  97. if((f = fopen("Ex1.dat","rb")) == NULL)
  98. {
  99. printf("Eroare");
  100. exit(1);
  101. }
  102.  
  103. fseek(f,0L,SEEK_END);
  104. n = ftell(f)/sizeof(student);
  105. fseek(f,0L,SEEK_SET);
  106.  
  107. retinere_inf = (STUD *)malloc(n*sizeof(STUD));
  108.  
  109. for(i = 0; i < n; i++)
  110. {
  111. fread(&student,sizeof(STUD),1,f);
  112. retinere_inf[i] = student;
  113. }
  114. fclose(f);
  115.  
  116.  
  117. if((f1 = fopen("Fete.dat","wb")) == NULL)
  118. {
  119. printf("Eroare");
  120. exit(1);
  121. }
  122. if((f2 = fopen("Baieti.dat","wb")) == NULL)
  123. {
  124. printf("Eroare");
  125. exit(1);
  126. }
  127.  
  128.  
  129. for(i = 0; i < n; i++)
  130. {
  131. printf("%2s %2c %.2f\n", retinere_inf[i].prenume, retinere_inf[i].sex, retinere_inf[i].nota);
  132. if(retinere_inf[i].sex == 'f')
  133.  
  134. fwrite(&retinere_inf[i],sizeof(STUD),1,f1); // Retinem in fisierul de fete
  135.  
  136. else fwrite(&retinere_inf[i],sizeof(STUD),1,f2); // Retinem in fisierul de baieti
  137. }
  138.  
  139. fclose(f1);
  140. fclose(f2);
  141.  
  142. if((f2 = fopen("Baieti.dat","rb")) == NULL)
  143. {
  144. printf("Eroare");
  145. exit(1);
  146. }
  147. if((f1 = fopen("Fete.dat","rb")) == NULL)
  148. {
  149. printf("Eroare");
  150. exit(1);
  151. }
  152.  
  153. fseek(f2,0L,SEEK_END);
  154. nr_baieti = ftell(f2)/sizeof(STUD);
  155. fseek(f2,0L,SEEK_SET);
  156.  
  157. nr_fete = n - nr_baieti;
  158.  
  159. retinere_inf_baieti = (STUD*)malloc(nr_baieti*sizeof(STUD));
  160. retinere_inf_fete = (STUD*)malloc(nr_fete*sizeof(STUD));
  161.  
  162. for(i = 0; i < nr_fete; i++)
  163. {
  164. fread(&student,sizeof(STUD),1,f1);
  165. retinere_inf_fete[i] = student;
  166. }
  167. for(i = 0; i < nr_baieti; i++)
  168. {
  169. fread(&student,sizeof(STUD),1,f2);
  170. retinere_inf_baieti[i] = student;
  171. }
  172.  
  173. fclose(f1);
  174. fclose(f2);
  175. free(retinere_inf);
  176.  
  177.  
  178. // Ordonarea dupa prenume a inf din fisierul baietilor
  179. ordonare_prenume(retinere_inf_baieti,nr_baieti);
  180.  
  181. puts("Afisare baieti : ");
  182.  
  183. afisare(retinere_inf_baieti,nr_baieti);
  184. puts("\n***\t***");
  185. puts("\nAfisare fete : ");
  186. ordonare_nota(retinere_inf_fete,nr_fete);
  187.  
  188. afisare(retinere_inf_fete,nr_fete);
  189.  
  190. return 0;
  191.  
  192. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement