Advertisement
Guest User

Untitled

a guest
Jan 18th, 2017
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.41 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. struct Student {
  4.     char ime[20], prezime[20];
  5.     int ocjene[50];
  6.     int br_ocjena;
  7. };
  8.  
  9. void unesi(char niz[], int velicina) {
  10.     char znak = getchar();
  11.     int i = 0;
  12.     if (znak == '\n') znak=getchar();
  13.     while (i < velicina-1 && znak != '\n') {
  14.         niz[i] = znak;
  15.         i++;
  16.         znak = getchar();
  17.     }
  18.     niz[i]='\0';
  19. }
  20.  
  21. double p_ocjena (int niz[], int velicina) {
  22.    
  23.     int i;
  24.     double prosjek = 0;
  25.    
  26.     for(i = 0; i < velicina; i++) prosjek += niz[i];
  27.     if(velicina != 0) prosjek /= velicina;
  28.    
  29.     return prosjek;
  30. }
  31.  
  32. int leksikografija (struct Student student1, struct Student student2) {
  33.    
  34.     char *p1 = student1.prezime, *p2 = student1.ime, *q1 = student2.prezime, *q2 = student2.ime;
  35.    
  36.     while((*p1 != '\0') && (*q1 != '\0')) {
  37.         if(*p1 < *q1) return 1;
  38.         else if(*q1 > *p1) return 0;
  39.         p1++;
  40.         q1++;
  41.     }
  42.     if(*p1 == '\0' && *q1 == '\0') {
  43.         while((*p2 != '\0') && (*q2 != '\0')) {
  44.             if(*p2 < *q2) return 1;
  45.             else if(*q2 > *p2) return 0;
  46.             p2++;
  47.             q2++;
  48.         }
  49.         if(*p2 != '\0') return 0;
  50.         else if(*q2 != '\0') return 1;
  51.     }
  52.     else if(*p1 != '\0') return 0;
  53.     else if(*q1 != '\0') return 1;
  54.    
  55.     return 1;
  56. }
  57.  
  58. void ispisi_genijalce (struct Student studenti[], int br_studenata) {
  59.    
  60.     int i;
  61.     struct Student *prvi = NULL, *drugi = NULL, *treci = NULL, *genijalac = NULL;
  62.    
  63.     if(br_studenata != 0) {
  64.         genijalac = &studenti[0];
  65.         for(i = 0; i < br_studenata; i++) {
  66.             if(p_ocjena((*genijalac).ocjene, (*genijalac).br_ocjena) < p_ocjena(studenti[i].ocjene, studenti[i].br_ocjena)) genijalac = &studenti[i];
  67.             else if((p_ocjena((*genijalac).ocjene, (*genijalac).br_ocjena)) == p_ocjena(studenti[i].ocjene, studenti[i].br_ocjena)) {
  68.                 if(leksikografija(*genijalac, studenti[i])) genijalac = &studenti[i];
  69.             }
  70.         }
  71.         if(genijalac != NULL) prvi = genijalac;
  72.     }
  73.    
  74.     if(br_studenata > 1) {
  75.         genijalac = &studenti[0];
  76.         if(genijalac == prvi) genijalac++;
  77.        
  78.         for(i = 0; i < br_studenata; i++) {
  79.             if(prvi == &studenti[i]) continue;
  80.             else if(p_ocjena((*genijalac).ocjene, (*genijalac).br_ocjena) < p_ocjena(studenti[i].ocjene, studenti[i].br_ocjena)) genijalac = &studenti[i];
  81.             else if((p_ocjena((*genijalac).ocjene, (*genijalac).br_ocjena)) == p_ocjena(studenti[i].ocjene, studenti[i].br_ocjena)) {
  82.                 if(leksikografija(*genijalac, studenti[i])) genijalac = &studenti[i];
  83.             }
  84.         }
  85.         if(genijalac != NULL) drugi = genijalac;
  86.     }
  87.    
  88.     if(br_studenata > 2) {
  89.         genijalac = &studenti[0];
  90.         while(genijalac == prvi || genijalac == drugi) genijalac++;
  91.        
  92.         for(i = 0; i < br_studenata; i++) {
  93.             if((prvi == &studenti[i]) || (drugi == &studenti[i])) continue;
  94.             else if(p_ocjena((*genijalac).ocjene, (*genijalac).br_ocjena) < p_ocjena(studenti[i].ocjene, studenti[i].br_ocjena)) genijalac = &studenti[i];
  95.             else if((p_ocjena((*genijalac).ocjene, (*genijalac).br_ocjena)) == p_ocjena(studenti[i].ocjene, studenti[i].br_ocjena)) {
  96.                 if(leksikografija(*genijalac, studenti[i])) genijalac = &studenti[i];
  97.             }
  98.         }
  99.         if(genijalac != NULL) treci = genijalac;
  100.     }
  101.    
  102.    
  103.     if(prvi != NULL) printf("%s %s\n", (*prvi).prezime, (*prvi).ime);
  104.     if(drugi != NULL) printf("%s %s\n", (*drugi).prezime, (*drugi).ime);
  105.     if(treci != NULL) printf("%s %s\n", (*treci).prezime, (*treci).ime);
  106. }
  107.  
  108. int genijalci (struct Student studenti[], int br_studenata, double prosjek) {
  109.    
  110.     double prosjek_ocjena = 0;
  111.     int i, j;
  112.    
  113.    
  114.     for(i = 0; i < br_studenata; i++) {
  115.         for(j = 0; j < studenti[i].br_ocjena; j++) {
  116.             if(studenti[i].ocjene[j] != 5) {
  117.                 prosjek_ocjena += studenti[i].ocjene[j];
  118.             }
  119.             else {
  120.                 prosjek_ocjena = 5;
  121.                 break;
  122.             }
  123.         }
  124.         if(prosjek_ocjena == 0 || prosjek_ocjena == 5) prosjek_ocjena = 5;
  125.         else prosjek_ocjena /= studenti[i].br_ocjena;
  126.        
  127.         if(prosjek_ocjena < prosjek) {
  128.             if(br_studenata == 1) br_studenata = 0;
  129.             else {
  130.                 for(j = i; j < (br_studenata - 1); j++) {
  131.                     studenti[j] = studenti[j + 1];
  132.                 }
  133.                 br_studenata--;
  134.                 i--;
  135.             }
  136.         }
  137.        
  138.         prosjek_ocjena = 0;
  139.     }
  140.    
  141.     ispisi_genijalce(studenti, br_studenata);
  142.    
  143.     return br_studenata;
  144. }
  145.  
  146. int main() {
  147.    
  148.     struct Student studenti[100];
  149.     int i, j, n;
  150.    
  151.     printf("Unesite broj studenata: ");
  152.     scanf("%d", &n);
  153.    
  154.     for(i = 0; i < n; i++) {
  155.         printf("Unesite ime %d. studenta: ", i + 1);
  156.         unesi(studenti[i].ime, 20);
  157.         printf("Unesite prezime %d. studenta: ", i + 1);
  158.         unesi(studenti[i].prezime, 20);
  159.         printf("Unesite broj ocjena %d. studenta: ", i + 1);
  160.         scanf("%d", &studenti[i].br_ocjena);
  161.         if(studenti[i].br_ocjena != 0) {
  162.             printf("Unesite te ocjene: ");
  163.             for(j = 0; j < studenti[i].br_ocjena; j++) scanf("%d", &studenti[i].ocjene[j]);
  164.         }
  165.     }
  166.    
  167.     printf("\n%d", genijalci(studenti, n, 7));
  168.    
  169.     return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement