From 57490613d201fe61894b4e68de2c9f98eff205c0 Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 18 Nov 2024 17:45:15 +0100 Subject: [PATCH] Initializacia --- cv6/a_station.c | 125 ++++++++++++++++++++++++++++-------------------- 1 file changed, 73 insertions(+), 52 deletions(-) diff --git a/cv6/a_station.c b/cv6/a_station.c index c117b1a..4fec864 100644 --- a/cv6/a_station.c +++ b/cv6/a_station.c @@ -1,72 +1,93 @@ -#include "a_train.h" #include +#include "a_station.h" #include #include -struct car* add_car(struct car* first, const char* target) { - struct car* last = first; - struct car* newcar = calloc(1, sizeof(struct car)); - strcpy(newcar->value, target); - - if (last != NULL) { - struct car* current = last; - while (current->next != NULL) { - current = current->next; - } - current->next = newcar; - } else { - last = newcar; - return last; - } - - return first; +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 print_train(struct car* first) { - if(first != NULL){ - struct car* current = first; - while(current->next != NULL){ - printf("%s\n", current->value); +void destroy_station(struct station* station){ + for (int i = 0; i < station->track_count; i++) { + struct car* current = station->tracks[i]; + while (current) { + struct car* temp = current; current = current->next; + free(temp); } } + free(station->tracks); + free(station); } -void cancel_train(struct car* first) { - struct car* current = first; - while(first != NULL){ - current = current->next; - free(first); - first = current; +int select_track(struct station* station, const char* target){ + size_t length = strlen(target); + int sum = 0; + for (size_t i = 0; i < length; i++) { + sum += target[i]; } + return sum % station->track_count; } +void add_target_capacity(struct station* station,const char* target, int capacity){ + int track = select_track(station, target); + struct car* current = station->tracks[track]; -struct car* clear_train(struct car* first, const char* target) { - if (first == NULL) { - return NULL; - } - - struct car* current = first; - struct car* previous = NULL; - - while (current != NULL && strcmp(current->value, target) == 0) { - struct car* temp = current; - first = current->next; - current = first; - free(temp); - } - - while (current != NULL) { + while (current) { if (strcmp(current->value, target) == 0) { - previous->next = current->next; - free(current); - current = previous->next; - } else { - previous = current; + current->capacity += capacity; + return; + } + current = current->next; + } + + struct car* new_car = malloc(sizeof(struct car)); + strncpy(new_car->value, target, TARGET_SIZE - 1); + new_car->value[TARGET_SIZE - 1] = '\0'; + new_car->capacity = capacity; + new_car->next = station->tracks[track]; + station->tracks[track] = new_car; +} + +int get_target_capacity(struct station* station, const char* target) { + int track = select_track(station, target); + struct car* current = station->tracks[track]; + + while (current) { + if (strcmp(current->value, target) == 0) { + return current->capacity; + } + current = current->next; + } + + return 0; +} + +int count_targets(struct station* station) { + int count = 0; + for (int i = 0; i < station->track_count; i++) { + struct car* current = station->tracks[i]; + while (current) { + count++; current = current->next; } } - - return first; + return count; } + +int count_capacity(struct station* station) { + int total_capacity = 0; + for (int i = 0; i < station->track_count; i++) { + struct car* current = station->tracks[i]; + while (current) { + total_capacity += current->capacity; + current = current->next; + } + } + return total_capacity; +} + +