Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. struct Student {
  5. char ime[20], prezime[20];
  6. int ocjene[50];
  7. int br_ocjena;
  8. };
  9.  
  10. float racunanje_prosjeka(int *niz, int velicina)
  11. {
  12. int i, suma=0;
  13. float prosjek;
  14. if (velicina==0) return 5;
  15.  
  16. for (i=0; i<velicina; i++) {
  17. suma+=niz[i];
  18. if (niz[i]==5) return 5;
  19. }
  20. prosjek=suma/(float)velicina;
  21. return prosjek;
  22. }
  23.  
  24. int genijalci (struct Student *niz, int velicina, float prosjek)
  25. {
  26. float prosjek_studenta;
  27. int i, j, max;
  28. //Izbacivanje studenata ciji je prosjek manji od prosjeka koji je poslan u funkciju
  29. for (i=0; i<velicina; i++) {
  30. prosjek_studenta=racunanje_prosjeka(&niz[i].ocjene, niz[i].br_ocjena);
  31. if (prosjek_studenta<prosjek) {
  32. for (j=i; j<velicina-1; j++) {
  33. niz[j]=niz[j+1];
  34. }
  35. i--;
  36. velicina--;
  37. }
  38. }
  39.  
  40. struct Student novi_niz[100];
  41. struct Student temp;
  42. int logicka;
  43. int neka_vel;
  44. //Posto kaze da se ne smije sortirat ovaj niz, nije rekao da se ne moze sortirat pomocni i kao sto on kaze sve sto nije receno da je zabranjeno, je dozvoljeno
  45. //Sada ove studente koji su preostali kopiramo u novi niz studenata sa kojim cemo raditi ostatak
  46. for (i=0; i<velicina; i++) {
  47. novi_niz[i]=niz[i];
  48. }
  49. //Sortiramo studente po prosjeku, ali ne i po leksikografskom poretku
  50. for (i=0; i<velicina; i++) {
  51. max=i;
  52. for (j=i+1; j<velicina; j++) {
  53. if (racunanje_prosjeka(&novi_niz[j].ocjene, novi_niz[j].br_ocjena)>racunanje_prosjeka(&novi_niz[max].ocjene, novi_niz[max].br_ocjena)) max=j;
  54. }
  55. temp=novi_niz[i];
  56. novi_niz[i]=novi_niz[max];
  57. novi_niz[max]=temp;
  58. }
  59. //ova neka_vel nam sluzi da ukoliko imamo vise studenta od 3 ciji je prosjek veci od zadanog prosjeka da ispise samo 3
  60. //jer velicinu niza ne smijemo dirati
  61. neka_vel=velicina;
  62. //Soritiranje po leksikografskom poretku, gledamo ukoliko su prosjeci jednaki onda saljemo prvo prezime u strcmp, ukoliko su i prezimena
  63. //jednaka onda u strcmp saljemo ime, ako je i ime jednako onda nista ne radi, a ukoliko nije nesto od ovoga jednako onda ce ga sortirat kako treba
  64. for (i=0; i<neka_vel-1; i++) {
  65. for (j=i+1; j<neka_vel;j++) {
  66. if ((racunanje_prosjeka(&novi_niz[i].ocjene, novi_niz[i].br_ocjena)-racunanje_prosjeka(&novi_niz[j].ocjene, novi_niz[j].br_ocjena))<0.001) {
  67. logicka=strcmp(&novi_niz[i].prezime, &novi_niz[j].prezime);
  68. if (logicka>=1) {
  69. temp=novi_niz[i];
  70. novi_niz[i]=novi_niz[j];
  71. novi_niz[j]=temp;
  72. } else if (logicka==0) {
  73. logicka=strcmp(&novi_niz[i].ime, &novi_niz[j].ime);
  74. if (logicka>=1) {
  75. temp=novi_niz[i];
  76. novi_niz[i]=novi_niz[j];
  77. novi_niz[j]=temp;
  78. }
  79. }
  80. }
  81. }
  82. }
  83. //Ukoliko ima vise studenata ciji je prosjek veci od zadanog prosjeka onda ce ispisat samo 3 studenta, a ukoliko ne onda ce ispisat sve ciji je veci od zadanog (hehe)
  84. if (neka_vel>3) neka_vel=3;
  85. for (i=0; i<neka_vel; i++) {
  86. printf ("%s %s\n", &novi_niz[i].prezime, &novi_niz[i].ime);
  87. }
  88. return velicina;
  89. }
  90.  
  91. int main()
  92. {
  93. /* AT5: Test leksikografskog sortiranja no. 2, jedna petica je prosjek 5.0 */
  94. struct Student studenti[5] ={
  95. { "Mujo", "Mujic", { 7,7,7,7,8}, 5},
  96. { "Meho", "Mujic", { 7,7,7,7,8}, 5},
  97. { "Beba", "Bebic", { 10, 10, 10, 10, 5}, 5},
  98. { "Mujo", "Mujic", { 7,7,7,7,8}, 5},
  99. { "Fata", "Fatic", { 7,7,7,7,8}, 5},
  100. };
  101. genijalci(studenti, 5, 6.5);
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement