Advertisement
Guest User

Untitled

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