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