cv6
This commit is contained in:
		
							parent
							
								
									c4f1e47089
								
							
						
					
					
						commit
						34f0cde627
					
				
							
								
								
									
										13
									
								
								cv6/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								cv6/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | CFLAGS= -std=c99 -g -Wall -Werror | ||||||
|  | 
 | ||||||
|  | all: station | ||||||
|  | 
 | ||||||
|  | %.o: %.c | ||||||
|  | 	gcc -c -o $@ $< $(CFLAGS) | ||||||
|  | 
 | ||||||
|  | station: main.o a_station.o | ||||||
|  | 	gcc $(CFLAGS) main.o a_station.o -o station | ||||||
|  | 
 | ||||||
|  | clean: | ||||||
|  | 	rm *.o station | ||||||
|  | 
 | ||||||
							
								
								
									
										33
									
								
								cv6/a_station.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								cv6/a_station.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | #include "a_station.h" | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | struct station* create_station(){ | ||||||
|  |    struct station* station = (struct station*)calloc(1,sizeof(struct station)); | ||||||
|  |    station->tracks = (struct car**)calloc(STATION_SIZE, sizeof(struct car*)); | ||||||
|  |    station->track_count = STATION_SIZE; | ||||||
|  |    return station; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void destroy_station(struct station* station){ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int select_track(struct station* station, const char* target){ | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void add_target_capacity(struct station* station,const char* target, int capacity){ | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int get_target_capacity(struct station* station,const char* target){ | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int count_targets(struct station* station){ | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int count_capacity(struct station* station){ | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
							
								
								
									
										91
									
								
								cv6/a_station.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								cv6/a_station.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,91 @@ | |||||||
|  | #ifndef STATION_H | ||||||
|  | #define STATION_H | ||||||
|  | // Pocet trati k dispozicii
 | ||||||
|  | #define STATION_SIZE 10 | ||||||
|  | // Maximalny pocet znakov pre ulozenie nazvu cielovej stanice
 | ||||||
|  | #define TARGET_SIZE 36 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Jeden zaznam o kapacite do cielovej stanice | ||||||
|  |  */ | ||||||
|  | struct car { | ||||||
|  |     // Cielova stanica / nazov
 | ||||||
|  |     char value[TARGET_SIZE]; | ||||||
|  |     // Pocet cestujuchich
 | ||||||
|  |     int capacity; | ||||||
|  |     // Smernik na dalsi zaznam
 | ||||||
|  |     struct car* next; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Cela databaza zaznamov | ||||||
|  |  */ | ||||||
|  | struct station { | ||||||
|  |     // Dynamicke pole smernikov na zaznamy
 | ||||||
|  |     // jeden zaznam ma typ struct car*
 | ||||||
|  |     struct car** tracks; | ||||||
|  |     // Velkost pola tracks
 | ||||||
|  |     int track_count; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Vytvori prazdnu stanicu. | ||||||
|  |  * Alokuje pole smernikov tracks na pociatocnu kapacitu STATION_SIZE | ||||||
|  |  * nastavi velkost capacity na STATION_SIZE | ||||||
|  |  * @return smernik na prazdnu stanicu | ||||||
|  |  */ | ||||||
|  | struct station* create_station(); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Uvolni pamat | ||||||
|  |  * @param smernik na databazu | ||||||
|  |  */ | ||||||
|  | void destroy_station(struct station* station); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Vyberie poziciu v poli station->tracks pre ulozenie zaznamu target | ||||||
|  |  * | ||||||
|  |  * Proces vyberu by mal splnat kriteria pre hash funkciu: | ||||||
|  |  * - rovnaky retazec by mal vzdy mat rovnaky vysledok | ||||||
|  |  * - pre rozne retazce by mali byt vysledky co najviac rozne | ||||||
|  |  * | ||||||
|  |  * @param smernik na databazu | ||||||
|  |  * @param nazov cielovej stanice | ||||||
|  |  * @return cislo v intervale 0 az N-1, kde N je  station->track_count | ||||||
|  |  */ | ||||||
|  | int select_track(struct station* station, const char* target); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Zvysi zaznam o pocte cestujucich do danej cielovej stanice. | ||||||
|  |  * | ||||||
|  |  * Najprv sa vyberie cielova trat pomocou select_track(). Ak zaznam neexistuje,  | ||||||
|  |  * vytvori sa novy. Ak zaznam na danej trati (spojkovom zozname) existuje, cislo sa pripocita. | ||||||
|  |  * V databaze nesmu byt dva zaznamy s rovnakou cielovou stanicou. | ||||||
|  |  * | ||||||
|  |  * @param smernik na databazu | ||||||
|  |  * @param nazov cielovej stanice | ||||||
|  |  */ | ||||||
|  | void add_target_capacity(struct station* station,const char* target, int capacity); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Ziska zaznam o cielovej stanici. | ||||||
|  |  * @param smernik na databazu | ||||||
|  |  * @param nazov cielovej stanice | ||||||
|  |  * | ||||||
|  |  * @return kapacitu do cielovej stanice. Ak sa zaznam nenachedza, vrati nula. | ||||||
|  |  */ | ||||||
|  | int get_target_capacity(struct station* station,const char* target); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Spocita pocet cielovych stanic | ||||||
|  |  * @param smernik na databazu | ||||||
|  |  */ | ||||||
|  | int count_targets(struct station* station); | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * Spocita kapacitu vo vsetkych zaznamoch | ||||||
|  |  * @param smernik na databazu | ||||||
|  |  */ | ||||||
|  | int count_capacity(struct station* station); | ||||||
|  | #endif | ||||||
							
								
								
									
										41
									
								
								cv6/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								cv6/main.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | #include "a_station.h" | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <time.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | 
 | ||||||
|  | void print_station(struct station* station){ | ||||||
|  |     // Vypise celu stanicu
 | ||||||
|  |     printf("station>>>\n"); | ||||||
|  |     // Prechadza vsetky trate
 | ||||||
|  |     for (int i = 0 ; i< station->track_count; i++){ | ||||||
|  |         struct car* start = station->tracks[i]; | ||||||
|  |         struct car* this = start; | ||||||
|  |         // Prechadza vsetky vozne
 | ||||||
|  |         while(this != NULL){ | ||||||
|  |             printf("%s %d -> ",this->value,this->capacity); | ||||||
|  |             this=this->next; | ||||||
|  |         } | ||||||
|  |         printf("NULL\n"); | ||||||
|  |     } | ||||||
|  |     printf("<<<station\n"); | ||||||
|  | } | ||||||
|  | // Pre overenie ci to ide v poriadku
 | ||||||
|  | void test_station(struct station* station){ | ||||||
|  |    const char* stations[] = {"Presov","Kosice","Banska Bystrica","Banska Stiavnica","Povazska Bystrica","Snina","Humenne","Bratislava","Pezinok","Skalica","Ruzomberok","Bidovce","Michalovce","Poprad","Krompachy","Smizany","Vajkovce","Budimir","Modra","Myslava","Roznava","Gemerska Poloma","Stratena","Dobsina","Michalany","Kostolany"}; | ||||||
|  |    int size=26; | ||||||
|  |    for (int i = 0; i < 50; i++){ | ||||||
|  |        int s = rand() % size; | ||||||
|  |        int c = rand() % 20; | ||||||
|  |        printf("%s %d\n",stations[s],c); | ||||||
|  |        add_target_capacity(station,stations[s],c); | ||||||
|  |        print_station(station); | ||||||
|  |    } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(){ | ||||||
|  |    srand(time(NULL)); | ||||||
|  |    struct station* station = create_station(); | ||||||
|  |    test_station(station); | ||||||
|  |    destroy_station(station); | ||||||
|  |    return 0; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user