Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<string.h>
- const int MAX=10;
- struct Vrijeme{
- int sat,minuta,sekunda;
- };
- void ispisi_vrijeme(struct Vrijeme v){
- printf("%d:",v.sat);
- if(v.minuta<10)printf("0");
- printf("%d",v.minuta);
- }
- struct Vrijeme saberi_sa_minutama(struct Vrijeme v, int min){
- v.minuta+=min;
- v.sat+=(v.minuta/60);
- v.minuta=v.minuta%60;
- return v;
- }
- int jel_prije(struct Vrijeme v1, struct Vrijeme v2){
- if(v1.sat==v2.sat && v1.minuta==v2.minuta)return v1.sekunda<=v2.sekunda;
- if(v1.sat==v2.sat)return v1.minuta<=v2.minuta;
- return v1.sat<=v2.sat;
- }
- struct Cas{
- char predmet[100];
- enum {Ponedjeljak,Utorak,Srijeda,Cetvrtak,Petak,Subota,Nedjelja} dan_u_sedmici;
- struct Vrijeme pocetak,kraj;
- };
- int provjeri_imal_casova(struct Cas *raspored, int broj_casova, int dan){
- int i;
- for(i=0;i<broj_casova;i++)
- if(raspored[i].dan_u_sedmici==dan)return 1;
- return 0;
- }
- void dodaj_cas(struct Cas *raspored, int broj_casova, char *predmet, int trajanje){
- int dan=0,nasao=0;
- for(dan=0;dan<7 && !nasao;dan++){
- struct Vrijeme pocetka=(struct Vrijeme){8,0,0};
- struct Vrijeme zavrsetak=saberi_sa_minutama(pocetka,trajanje);
- if(!provjeri_imal_casova(raspored,broj_casova,dan) && jel_prije(saberi_sa_minutama((struct Vrijeme){8,0,0},trajanje),(struct Vrijeme){21,0,0})){
- nasao=1;
- strcpy(raspored[broj_casova].predmet,predmet);
- raspored[broj_casova].dan_u_sedmici=dan;
- raspored[broj_casova].pocetak=pocetka;
- raspored[broj_casova].kraj=zavrsetak;
- broj_casova++;
- }
- int i, logika=0;
- struct Vrijeme kraj_zadnjeg_casa_dana={21,0,0};
- for(i=0;i<broj_casova && jel_prije(zavrsetak,(struct Vrijeme){21,0,0}) && !nasao;i++){
- if(raspored[i].dan_u_sedmici==dan && jel_prije(raspored[i].kraj,pocetka)){
- nasao=1;
- strcpy(raspored[broj_casova].predmet,predmet);
- raspored[broj_casova].dan_u_sedmici=dan;
- raspored[broj_casova].pocetak=pocetka;
- raspored[broj_casova].kraj=zavrsetak;
- broj_casova++;
- break;
- }
- else if(raspored[i].dan_u_sedmici==dan && !jel_prije(raspored[i].kraj,pocetka)){
- pocetka=raspored[i].kraj;
- kraj_zadnjeg_casa_dana=raspored[i].kraj;
- zavrsetak=saberi_sa_minutama(pocetka,trajanje);
- logika=1;
- }
- }
- if(logika && jel_prije(zavrsetak,(struct Vrijeme){21,0,0}) && jel_prije(kraj_zadnjeg_casa_dana,pocetka)){
- nasao=1;
- strcpy(raspored[broj_casova].predmet,predmet);
- raspored[broj_casova].dan_u_sedmici=dan;
- raspored[broj_casova].pocetak=pocetka;
- raspored[broj_casova].kraj=zavrsetak;
- broj_casova++;
- break;
- }
- }
- if(nasao)
- printf("Cas je dodan u raspored\n");
- }
- void ispis_raspored(struct Cas *raspored, int broj_casova){
- char *dani[7]={"PONEDJELJAK","UTORAK","SRIJEDA","CETVRTAK","PETAK","SUBOTA","NEDJELJA"};
- int dan;
- for(dan=0;dan<7;dan++){
- if(provjeri_imal_casova(raspored,broj_casova,dan)){
- printf("%s:\n",dani[dan]);
- int i;
- for(i=0;i<broj_casova;i++)
- if(raspored[i].dan_u_sedmici==dan){
- ispisi_vrijeme(raspored[i].pocetak);printf(" - ");ispisi_vrijeme(raspored[i].kraj);
- printf(" %s\n",raspored[i].predmet);
- }
- }
- }
- }
- void unesi(char niz[], int velicina) {
- char znak = getchar();
- if (znak == '\n') znak = getchar();
- int i = 0;
- while (i < velicina-1 && znak != '\n') {
- niz[i] = znak;
- i++;
- znak = getchar();
- }
- niz[i] = '\0';
- }
- int main(){
- //printf("%d",jel_prije((struct Vrijeme){8,0,0},(struct Vrijeme){21,0,0}));return 1;
- int opcija=0,broj_casova=0;
- struct Cas raspored[MAX];
- for(;broj_casova<MAX;){
- printf("Izaberite opciju: 1 = dodavanje casa, 2 = ispis rasporeda, 0 = izlaz: ");
- scanf("%d",&opcija);
- if(opcija==0)break;
- else if(opcija==2){
- ispis_raspored(raspored,broj_casova);
- }
- else if(opcija==1){
- char predmet[100];int trajanje;
- printf("Unesite naziv predmeta: ");
- unesi(predmet,100);
- printf("Unesite trajanje u minutama: ");
- scanf("%d",&trajanje);
- dodaj_cas(raspored,broj_casova,predmet,trajanje);
- broj_casova++;
- }
- }
- }
Add Comment
Please, Sign In to add comment