Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #define _CRTDBG_MAP_ALLOC
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <crtdbg.h>
- enum {
- buffermeret = 64
- };
- /*uszoszamok kozotti valtoztatas*/
- typedef enum fajta {
- GYORS, MELL, HAT, PILLE
- }versenyfajta;
- /*atlagos ido struktura letrehozasa az idoeredmenyek konnyebb rendezese celjabol*/
- typedef struct atlagido {
- int elsoido;
- int masodikido;
- int harmadikido;
- int negyedikido;
- }atlagido;
- /*rajtszam struktura letrehozasa az atlagidohoz kapcsolodva*/
- typedef struct atlagrajtszam {
- int elsorajtszam;
- int masodikrajtszam;
- int harmadikrajtszam;
- int negyedikrajtszam;
- }atlagrajtszam;
- /*atlagido es atlagrajtszam strukturaba rendezese*/
- typedef struct atlagos {
- atlagido ido;
- atlagrajtszam rajtszam;
- }atlagos;
- /*uszoknevek.txt fajlbol, ebbe a strukturaba olvassuk be a rajtszamokat es neveket*/
- typedef struct uszo {
- int rajtszam;
- char nevek[buffermeret];
- struct uszo* next;
- }uszo;
- /*beolvasas*/
- uszo* uszobeolvas(uszo* head)
- {
- uszo* ujhead = head;
- FILE* fp = fopen("uszonevek.txt", "r");
- if (fp == NULL)
- {
- printf("uszonevek.txt megnyitas sikertelen");
- return;
- }
- char buffer[buffermeret] = { '\0' };
- char string[buffermeret];
- int rajtszam = 0;
- while (fgets(buffer, buffermeret, fp))
- {
- if (sscanf(buffer, "%d.", &rajtszam) == 1)
- {
- uszo* uj = (uszo*)malloc(sizeof(uszo));
- uj->rajtszam = rajtszam;
- uj->next = ujhead;
- ujhead = uj;
- }
- else if (sscanf(buffer, "%[^\n]", &string) == 1)
- {
- strcpy(ujhead->nevek, string);
- }
- }
- fclose(fp);
- return ujhead;
- }
- /*listak letrehozasa*/
- typedef struct gyorslista {
- int gyorsido;
- struct gyorslista* next;
- }gyorslista;
- typedef struct melllista {
- int mellido;
- struct mellista* next;
- }melllista;
- typedef struct hatlista {
- int hatido;
- struct hatlista* next;
- }hatlista;
- typedef struct pillelista {
- int pilleido;
- struct pillelista* next;
- }pillelista;
- /*listak tarolasa egy kozos strukturaban, ebbe fogjuk olvasni a kulonbozo emberekhez tartozo idoket az idok.txt fajlbol*/
- typedef struct Idoeredmenyek {
- int rajtszam;
- gyorslista* gyorsfesu;
- melllista* mellfesu;
- hatlista* hatfesu;
- pillelista* pillefesu;
- struct Idoeredmenyek* next;
- }Idoeredmenyek;
- /*ido struktura*/
- typedef struct time {
- int m, s, h;
- }time;
- /*elso harom helyezett ideje*/
- typedef struct haromtime {
- time t1;
- time t2;
- time t3;
- }haromtime;
- /*valto tagok ideje*/
- typedef struct negytime {
- time t1;
- time t2;
- time t3;
- time t4;
- }negytime;
- /*ido atvaltasa a legkissebb idoegysegre a konyebb szamolas erdekeben*/
- int atvaltas(time t)
- {
- int sumtime = 0;
- sumtime = t.m * 60 * 100 + t.s * 100 + t.h;
- return sumtime;
- }
- /*visszavaltas kiiratashoz*/
- time visszavaltas(int ido)
- {
- time t;
- t.h = ido % 100;
- ido = ido - t.h;
- t.s = ido % (60 * 100);
- ido = ido - t.s;
- t.s = t.s / 100;
- t.m = ido / (60 * 100);
- return t;
- }
- /*kiiro fuggvenyek*/
- void timekiir(time t)
- {
- printf("%02d:%02d:%02d\n\n==========\n", t.m, t.s, t.h);
- }
- void valtotimekiir(time t)
- {
- printf("%02d:%02d:%02d\n\n", t.m, t.s, t.h);
- }
- /*kulonbozo listakba valo befuzes fuggvenyek*/
- gyorslista* hozzafuzgyors(gyorslista* head, int ido)
- {
- gyorslista* uj = (gyorslista*)malloc(sizeof(gyorslista));
- uj->gyorsido = ido;
- uj->next = head;
- head = uj;
- return head;
- }
- melllista* hozzafuzmell(melllista* head, int ido)
- {
- melllista* uj = (melllista*)malloc(sizeof(melllista));
- uj->mellido = ido;
- uj->next = head;
- head = uj;
- return head;
- }
- hatlista* hozzafuzhat(hatlista* head, int ido)
- {
- hatlista* uj = (hatlista*)malloc(sizeof(hatlista));
- uj->hatido = ido;
- uj->next = head;
- head = uj;
- return head;
- }
- pillelista* hozzafuzpille(pillelista* head, int ido)
- {
- pillelista* uj = (pillelista*)malloc(sizeof(pillelista));
- uj->pilleido = ido;
- uj->next = head;
- head = uj;
- return head;
- }
- /*beolvasas*/
- Idoeredmenyek* beolvas(Idoeredmenyek* head)
- {
- FILE* fp;
- fp = fopen("idok.txt", "r");
- char buffer[buffermeret] = { '\0' };
- Idoeredmenyek* ujhead = head;
- int rajtszam = 0, min = 0, sec = 0, hun = 0;
- versenyfajta fajta = MELL;
- while (fgets(buffer, buffermeret, fp))
- {
- if (sscanf(buffer, "%d:%d:%d", &min, &sec, &hun) == 3)
- {
- time t;
- t.m = min; t.s = sec; t.h = hun;
- switch (fajta)
- {
- case GYORS:ujhead->gyorsfesu = hozzafuzgyors(ujhead->gyorsfesu, atvaltas(t)); break;
- case MELL:ujhead->mellfesu = hozzafuzmell(ujhead->mellfesu, atvaltas(t)); break;
- case HAT:ujhead->hatfesu = hozzafuzhat(ujhead->hatfesu, atvaltas(t)); break;
- case PILLE:ujhead->pillefesu = hozzafuzpille(ujhead->pillefesu, atvaltas(t)); break;
- }
- }
- else if (sscanf(buffer, "%d.", &rajtszam) == 1)
- {
- Idoeredmenyek* uj = (Idoeredmenyek*)malloc(sizeof(Idoeredmenyek));
- uj->rajtszam = rajtszam;
- uj->gyorsfesu = NULL;
- uj->mellfesu = NULL;
- uj->hatfesu = NULL;
- uj->pillefesu = NULL;
- uj->next = ujhead;
- ujhead = uj;
- }
- else if (strcmp(buffer, "Gy\n") == 0)
- {
- fajta = GYORS;
- }
- else if (strcmp(buffer, "M\n") == 0)
- {
- fajta = MELL;
- }
- else if (strcmp(buffer, "H\n") == 0)
- {
- fajta = HAT;
- }
- else if (strcmp(buffer, "P\n") == 0)
- {
- fajta = PILLE;
- }
- }
- fclose(fp);
- return ujhead;
- }
- /*egy versenyzo , egy versenyszamabol kiszamoljuk az atlag idejet*/
- int atlagkeresgyors(Idoeredmenyek* head)
- {
- gyorslista* mozgo = head->gyorsfesu;
- int db = 0, akt = 0, sum = 0, tempatlag = 100000;
- for (mozgo = head->gyorsfesu; mozgo != NULL; mozgo = mozgo->next)
- {
- akt = mozgo->gyorsido;
- sum += akt;
- db++;
- }
- /*hibakezeles*/
- if (db == 0)
- {
- return tempatlag;
- }
- tempatlag = sum / db;
- return tempatlag;
- }
- int atlagkeresmell(Idoeredmenyek* head)
- {
- melllista* mozgo = head->mellfesu;
- int db = 0, akt = 0, sum = 0, tempatlag = 100000;
- for (mozgo = head->mellfesu; mozgo != NULL; mozgo = mozgo->next)
- {
- akt = mozgo->mellido;
- sum += akt;
- db++;
- }
- if (db == 0)
- {
- return tempatlag;
- }
- tempatlag = sum / db;
- return tempatlag;
- }
- int atlagkereshat(Idoeredmenyek* head)
- {
- hatlista* mozgo = head->hatfesu;
- int db = 0, akt = 0, sum = 0, tempatlag = 100000;
- for (mozgo = head->hatfesu; mozgo != NULL; mozgo = mozgo->next)
- {
- akt = mozgo->hatido;
- sum += akt;
- db++;
- }
- if (db == 0)
- {
- return tempatlag;
- }
- tempatlag = sum / db;
- return tempatlag;
- }
- int atlagkerespille(Idoeredmenyek* head)
- {
- pillelista* mozgo = head->pillefesu;
- int db = 0, akt = 0, sum = 0, tempatlag = 1000000;
- for (mozgo = head->pillefesu; mozgo != NULL; mozgo = mozgo->next)
- {
- akt = mozgo->pilleido;
- sum += akt;
- db++;
- }
- if (db == 0)
- {
- return tempatlag;
- }
- tempatlag = sum / db;
- return tempatlag;
- }
- /*elso harom es elso negy (valtok miatt) rendezese, egy ember csak egyszer szerepelhet*/
- atlagos elsonegyrendzese(int ido, Idoeredmenyek* head, atlagos elsoharom)
- {
- atlagos dobogosok = elsoharom;
- int aktualisatlag = ido;
- if (aktualisatlag < dobogosok.ido.negyedikido)
- {
- if (aktualisatlag < dobogosok.ido.harmadikido)
- {
- if (aktualisatlag < dobogosok.ido.masodikido)
- {
- if (aktualisatlag < dobogosok.ido.elsoido)
- {
- dobogosok.ido.negyedikido = dobogosok.ido.harmadikido;
- dobogosok.ido.harmadikido = dobogosok.ido.masodikido;
- dobogosok.ido.masodikido = dobogosok.ido.elsoido;
- dobogosok.ido.elsoido = aktualisatlag;
- dobogosok.rajtszam.negyedikrajtszam = dobogosok.rajtszam.harmadikrajtszam;
- dobogosok.rajtszam.harmadikrajtszam = dobogosok.rajtszam.masodikrajtszam;
- dobogosok.rajtszam.masodikrajtszam = dobogosok.rajtszam.elsorajtszam;
- dobogosok.rajtszam.elsorajtszam = head->rajtszam;
- }
- else
- {
- dobogosok.ido.negyedikido = dobogosok.ido.harmadikido;
- dobogosok.ido.harmadikido = dobogosok.ido.masodikido;
- dobogosok.ido.masodikido = aktualisatlag;
- dobogosok.rajtszam.negyedikrajtszam = dobogosok.rajtszam.harmadikrajtszam;
- dobogosok.rajtszam.harmadikrajtszam = dobogosok.rajtszam.masodikrajtszam;
- dobogosok.rajtszam.masodikrajtszam = head->rajtszam;
- }
- }
- else
- {
- dobogosok.ido.negyedikido = dobogosok.ido.harmadikido;
- dobogosok.ido.harmadikido = aktualisatlag;
- dobogosok.rajtszam.negyedikrajtszam = dobogosok.rajtszam.harmadikrajtszam;
- dobogosok.rajtszam.harmadikrajtszam = head->rajtszam;
- }
- }
- else
- {
- dobogosok.ido.negyedikido = aktualisatlag;
- dobogosok.rajtszam.negyedikrajtszam = head->rajtszam;
- }
- }
- return dobogosok;
- }
- /*a ket fajl osszeparositasa, nev megkeresese*/
- uszo* nevkereso(uszo* eleje, int rajtszam)
- {
- char x[buffermeret] = { "Nem letezo versenyzo" };
- uszo* mozgo = eleje;
- if (rajtszam == 0)
- {
- strcpy(mozgo->nevek, x);
- return mozgo;
- }
- while (mozgo->rajtszam != rajtszam)
- {
- mozgo = mozgo->next;
- if (mozgo == NULL)
- {
- printf("\nERROR::Tul keves ember szerepel az uszonekvek.txt-ben.\n\nTobb ido es rajtszam van mint versenyzo.\n");
- exit(0);
- }
- }
- return mozgo;
- }
- /*eredmenykiiro fuggvenyek*/
- void eredmenysegedkiiro(int rajtszam, uszo* eleje)
- {
- printf("Rajtszam: %d\nNeve: %s\nAtlag ido:", rajtszam, eleje->nevek);
- }
- void eredmenykiir(atlagos elsoharom, uszo* head, haromtime t)
- {
- uszo* nev1 = nevkereso(head, elsoharom.rajtszam.elsorajtszam);
- eredmenysegedkiiro(elsoharom.rajtszam.elsorajtszam, nev1);
- timekiir(t.t1);
- uszo* nev2 = nevkereso(head, elsoharom.rajtszam.masodikrajtszam);
- eredmenysegedkiiro(elsoharom.rajtszam.masodikrajtszam, nev2);
- timekiir(t.t2);
- uszo* nev3 = nevkereso(head, elsoharom.rajtszam.harmadikrajtszam);
- eredmenysegedkiiro(elsoharom.rajtszam.harmadikrajtszam, nev3);
- timekiir(t.t3);
- }
- /*egy alap ido es versenyszam letrehozasa*/
- void nulletrehoz(atlagos* x)
- {
- atlagos uj = *x;
- uj.ido.elsoido = 100000;
- uj.ido.masodikido = 100000;
- uj.ido.harmadikido = 100000;
- uj.ido.negyedikido = 100000;
- uj.rajtszam.elsorajtszam = 0;
- uj.rajtszam.masodikrajtszam = 0;
- uj.rajtszam.harmadikrajtszam = 0;
- uj.rajtszam.negyedikrajtszam = 0;
- *x = uj;
- }
- void timeletrehoz(haromtime* t, atlagos* x)
- {
- haromtime uj = *t;
- t->t1 = visszavaltas(x->ido.elsoido);
- t->t2 = visszavaltas(x->ido.masodikido);
- t->t3 = visszavaltas(x->ido.harmadikido);
- }
- void valtotimeletrehoz(negytime* t, atlagos* x)
- {
- negytime uj = *t;
- t->t1 = visszavaltas(x->ido.elsoido);
- t->t2 = visszavaltas(x->ido.masodikido);
- t->t3 = visszavaltas(x->ido.harmadikido);
- t->t4 = visszavaltas(x->ido.negyedikido);
- }
- /*atlagok keresese, sorrendbe rendezese es eredmenyek kiirasa*/
- void gyorsatlagkereses(Idoeredmenyek* head, uszo* eleje)
- {
- atlagos gyorsdobogosok;
- nulletrehoz(&gyorsdobogosok);
- int aktualisatlag = 0;
- while (head != NULL)
- {
- aktualisatlag = atlagkeresgyors(head);
- gyorsdobogosok = elsonegyrendzese(aktualisatlag, head, gyorsdobogosok);
- head = head->next;
- }
- haromtime t1;
- timeletrehoz(&t1, &gyorsdobogosok);
- eredmenykiir(gyorsdobogosok, eleje, t1);
- }
- void melltlagkereses(Idoeredmenyek* head, uszo* eleje)
- {
- atlagos melldobogosok;
- nulletrehoz(&melldobogosok);
- int aktualisatlag = 0;
- while (head != NULL)
- {
- aktualisatlag = atlagkeresmell(head);
- melldobogosok = elsonegyrendzese(aktualisatlag, head, melldobogosok);
- head = head->next;
- }
- haromtime t1;
- timeletrehoz(&t1, &melldobogosok);
- eredmenykiir(melldobogosok, eleje, t1);
- }
- void hattlagkereses(Idoeredmenyek* head, uszo* eleje)
- {
- atlagos hatdobogosok;
- nulletrehoz(&hatdobogosok);
- int aktualisatlag = 0;
- while (head != NULL)
- {
- aktualisatlag = atlagkereshat(head);
- hatdobogosok = elsonegyrendzese(aktualisatlag, head, hatdobogosok);
- head = head->next;
- }
- haromtime t1;
- timeletrehoz(&t1, &hatdobogosok);
- eredmenykiir(hatdobogosok, eleje, t1);
- }
- void pilleatlagkereses(Idoeredmenyek* head, uszo* eleje)
- {
- atlagos pilledobogosok;
- nulletrehoz(&pilledobogosok);
- int aktualisatlag = 0;
- while (head != NULL)
- {
- aktualisatlag = atlagkerespille(head);
- pilledobogosok = elsonegyrendzese(aktualisatlag, head, pilledobogosok);
- head = head->next;
- }
- haromtime t1;
- timeletrehoz(&t1, &pilledobogosok);
- eredmenykiir(pilledobogosok, eleje, t1);
- }
- /*valto kiiras*/
- void valtoeredmenysegedkiiro(int rajtszam, uszo* eleje)
- {
- printf("Rajtszam: %d\nNeve: %s\nAtlag ido:", rajtszam, eleje->nevek);
- }
- void valtoeredmenykiir(atlagos elsonegy, uszo* head, negytime t)
- {
- uszo* nev1 = nevkereso(head, elsonegy.rajtszam.elsorajtszam);
- valtoeredmenysegedkiiro(elsonegy.rajtszam.elsorajtszam, nev1);
- valtotimekiir(t.t1);
- uszo* nev2 = nevkereso(head, elsonegy.rajtszam.masodikrajtszam);
- valtoeredmenysegedkiiro(elsonegy.rajtszam.masodikrajtszam, nev2);
- valtotimekiir(t.t2);
- uszo* nev3 = nevkereso(head, elsonegy.rajtszam.harmadikrajtszam);
- valtoeredmenysegedkiiro(elsonegy.rajtszam.harmadikrajtszam, nev3);
- valtotimekiir(t.t3);
- uszo* nev4 = nevkereso(head, elsonegy.rajtszam.negyedikrajtszam);
- valtoeredmenysegedkiiro(elsonegy.rajtszam.negyedikrajtszam, nev4);
- valtotimekiir(t.t4);
- }
- /*legjobb negy idovel rendelkezo emberek keresese valtoba rendezese kiirasa*/
- void gyorsvalto(Idoeredmenyek* head, uszo* eleje)
- {
- atlagos gyorsdobogosok;
- nulletrehoz(&gyorsdobogosok);
- int aktualisatlag = 0;
- while (head != NULL)
- {
- aktualisatlag = atlagkeresgyors(head);
- gyorsdobogosok = elsonegyrendzese(aktualisatlag, head, gyorsdobogosok);
- head = head->next;
- }
- negytime t1;
- valtotimeletrehoz(&t1, &gyorsdobogosok);
- valtoeredmenykiir(gyorsdobogosok, eleje, t1);
- }
- void mellvalto(Idoeredmenyek* head, uszo* eleje)
- {
- atlagos melldobogosok;
- nulletrehoz(&melldobogosok);
- int aktualisatlag = 0;
- while (head != NULL)
- {
- aktualisatlag = atlagkeresgyors(head);
- melldobogosok = elsonegyrendzese(aktualisatlag, head, melldobogosok);
- head = head->next;
- }
- negytime t1;
- valtotimeletrehoz(&t1, &melldobogosok);
- valtoeredmenykiir(melldobogosok, eleje, t1);
- }
- void felszabaditfuggveny(Idoeredmenyek* head)
- {
- Idoeredmenyek* uj = head;
- while (uj != NULL)
- {
- {
- while (uj->gyorsfesu != NULL)
- {
- gyorslista* mozgo = uj->gyorsfesu->next;
- free(uj->gyorsfesu);
- uj->gyorsfesu = mozgo;
- }
- }
- while (uj->mellfesu != NULL)
- {
- melllista* mozgo = uj->mellfesu->next;
- free(uj->mellfesu);
- uj->mellfesu = mozgo;
- }
- while (uj->hatfesu != NULL)
- {
- hatlista* mozgo = uj->hatfesu->next;
- free(uj->hatfesu);
- uj->hatfesu = mozgo;
- }
- while (uj->pillefesu != NULL)
- {
- pillelista* mozgo = uj->pillefesu->next;
- free(uj->pillefesu);
- uj->pillefesu = mozgo;
- }
- Idoeredmenyek* mozgo = uj->next;
- free(uj);
- uj = mozgo;
- }
- }
- void felszabadituszo(uszo* eleje)
- {
- uszo* akt = eleje;
- while (akt != NULL)
- {
- uszo* next = akt->next;
- free(akt);
- akt = next;
- }
- }
- int main()
- {
- /*ket NULL pointer letrehozasa a ket kulon fajlhoz tartozo listakbol*/
- Idoeredmenyek* head = NULL;
- uszo* eleje = NULL;
- /*beolvasas*/
- eleje = uszobeolvas(eleje);
- head = beolvas(head);
- /*eredmenyek keresese kiirasa, ha nincs 3 eredmeny akkor nem letezo versenyzo kiirasara kerul sor 0-as rajtszammal es 16:40:00-as idovel(100000 szazadmasodperc), valtoknal szinten*/
- printf("\nGyorshelyezettek//\n\n");
- gyorsatlagkereses(head, eleje);
- printf("\nMellhelyezettek//\n\n");
- melltlagkereses(head, eleje);
- printf("\nHathelyezettek//\n\n");
- hattlagkereses(head, eleje);
- printf("\nPillehelyezettek//\n\n");
- pilleatlagkereses(head, eleje);
- printf("\nGyorsvalto tagjai:\n\n");
- gyorsvalto(head, eleje);
- printf("\nMellvalto tagjai:\n\n");
- mellvalto(head, eleje);
- felszabaditfuggveny(head);
- felszabadituszo(eleje);
- _CrtDumpMemoryLeaks();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement