BORUTO-121

RasporedCasaova

Sep 12th, 2021 (edited)
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.24 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. const int MAX=10;
  5.  
  6. struct Vrijeme{
  7.   int sat,minuta,sekunda;
  8. };
  9.  
  10. void ispisi_vrijeme(struct Vrijeme v){
  11.   printf("%d:",v.sat);
  12.   if(v.minuta<10)printf("0");
  13.   printf("%d",v.minuta);
  14. }
  15.  
  16. struct Vrijeme saberi_sa_minutama(struct Vrijeme v, int min){
  17.   v.minuta+=min;
  18.   v.sat+=(v.minuta/60);
  19.   v.minuta=v.minuta%60;
  20.   return v;
  21. }
  22.  
  23. int jel_prije(struct Vrijeme v1, struct Vrijeme v2){
  24.   if(v1.sat==v2.sat && v1.minuta==v2.minuta)return v1.sekunda<=v2.sekunda;
  25.   if(v1.sat==v2.sat)return v1.minuta<=v2.minuta;
  26.   return v1.sat<=v2.sat;
  27. }
  28.  
  29.  
  30. struct Cas{
  31.   char predmet[100];
  32.   enum {Ponedjeljak,Utorak,Srijeda,Cetvrtak,Petak,Subota,Nedjelja} dan_u_sedmici;
  33.   struct Vrijeme pocetak,kraj;
  34. };
  35.  
  36. int provjeri_imal_casova(struct Cas *raspored, int broj_casova, int dan){
  37.   int i;
  38.   for(i=0;i<broj_casova;i++)
  39.     if(raspored[i].dan_u_sedmici==dan)return 1;
  40.   return 0;
  41. }
  42.  
  43. void dodaj_cas(struct Cas *raspored, int broj_casova, char *predmet, int trajanje){
  44.   int dan=0,nasao=0;
  45.   for(dan=0;dan<7 && !nasao;dan++){
  46.     struct Vrijeme pocetka=(struct Vrijeme){8,0,0};
  47.     struct Vrijeme zavrsetak=saberi_sa_minutama(pocetka,trajanje);
  48.     if(!provjeri_imal_casova(raspored,broj_casova,dan) && jel_prije(saberi_sa_minutama((struct Vrijeme){8,0,0},trajanje),(struct Vrijeme){21,0,0})){
  49.       nasao=1;
  50.       strcpy(raspored[broj_casova].predmet,predmet);
  51.       raspored[broj_casova].dan_u_sedmici=dan;
  52.       raspored[broj_casova].pocetak=pocetka;
  53.       raspored[broj_casova].kraj=zavrsetak;
  54.       broj_casova++;
  55.       }
  56.       int i, logika=0;
  57.       struct Vrijeme kraj_zadnjeg_casa_dana={21,0,0};
  58.       for(i=0;i<broj_casova && jel_prije(zavrsetak,(struct Vrijeme){21,0,0}) && !nasao;i++){
  59.         if(raspored[i].dan_u_sedmici==dan && jel_prije(raspored[i].kraj,pocetka)){
  60.           nasao=1;
  61.           strcpy(raspored[broj_casova].predmet,predmet);
  62.           raspored[broj_casova].dan_u_sedmici=dan;
  63.           raspored[broj_casova].pocetak=pocetka;
  64.           raspored[broj_casova].kraj=zavrsetak;
  65.           broj_casova++;
  66.           break;
  67.         }
  68.         else if(raspored[i].dan_u_sedmici==dan && !jel_prije(raspored[i].kraj,pocetka)){
  69.           pocetka=raspored[i].kraj;
  70.           kraj_zadnjeg_casa_dana=raspored[i].kraj;
  71.           zavrsetak=saberi_sa_minutama(pocetka,trajanje);
  72.           logika=1;
  73.         }
  74.       }
  75.       if(logika && jel_prije(zavrsetak,(struct Vrijeme){21,0,0}) && jel_prije(kraj_zadnjeg_casa_dana,pocetka)){
  76.         nasao=1;
  77.         strcpy(raspored[broj_casova].predmet,predmet);
  78.         raspored[broj_casova].dan_u_sedmici=dan;
  79.         raspored[broj_casova].pocetak=pocetka;
  80.         raspored[broj_casova].kraj=zavrsetak;
  81.         broj_casova++;
  82.         break;
  83.       }
  84.     }
  85.  
  86.   if(nasao)
  87.     printf("Cas je dodan u raspored\n");
  88. }
  89.  
  90. void ispis_raspored(struct Cas *raspored, int broj_casova){
  91.   char *dani[7]={"PONEDJELJAK","UTORAK","SRIJEDA","CETVRTAK","PETAK","SUBOTA","NEDJELJA"};
  92.   int dan;
  93.   for(dan=0;dan<7;dan++){
  94.     if(provjeri_imal_casova(raspored,broj_casova,dan)){
  95.     printf("%s:\n",dani[dan]);
  96.     int i;
  97.     for(i=0;i<broj_casova;i++)
  98.       if(raspored[i].dan_u_sedmici==dan){
  99.         ispisi_vrijeme(raspored[i].pocetak);printf(" - ");ispisi_vrijeme(raspored[i].kraj);
  100.         printf(" %s\n",raspored[i].predmet);
  101.       }
  102.     }
  103.   }
  104. }
  105.  
  106. void unesi(char niz[], int velicina) {
  107.     char znak = getchar();
  108.     if (znak == '\n') znak = getchar();
  109.     int i = 0;
  110.     while (i < velicina-1 && znak != '\n') {
  111.         niz[i] = znak;
  112.         i++;
  113.         znak = getchar();
  114.     }
  115.     niz[i] = '\0';
  116. }
  117.  
  118. int main(){
  119.   //printf("%d",jel_prije((struct Vrijeme){8,0,0},(struct Vrijeme){21,0,0}));return 1;
  120.   int opcija=0,broj_casova=0;
  121.   struct Cas raspored[MAX];
  122.   for(;broj_casova<MAX;){
  123.     printf("Izaberite opciju: 1 = dodavanje casa, 2 = ispis rasporeda, 0 = izlaz: ");
  124.     scanf("%d",&opcija);
  125.     if(opcija==0)break;
  126.     else if(opcija==2){
  127.       ispis_raspored(raspored,broj_casova);
  128.     }
  129.     else if(opcija==1){
  130.       char predmet[100];int trajanje;
  131.       printf("Unesite naziv predmeta: ");
  132.       unesi(predmet,100);
  133.       printf("Unesite trajanje u minutama: ");
  134.       scanf("%d",&trajanje);
  135.       dodaj_cas(raspored,broj_casova,predmet,trajanje);
  136.       broj_casova++;
  137.     }
  138.   }
  139. }
  140.  
Add Comment
Please, Sign In to add comment