From b73e15a70ad309ab617d316e8d09cae5f7482d16 Mon Sep 17 00:00:00 2001 From: Anzhelika Nikolaieva Date: Mon, 6 Nov 2023 20:06:53 +0000 Subject: [PATCH] Update 'cv7/a_station.c' --- cv7/a_station.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/cv7/a_station.c b/cv7/a_station.c index e69de29..b18cbbc 100644 --- a/cv7/a_station.c +++ b/cv7/a_station.c @@ -0,0 +1,83 @@ +#include "a_station.h" +#include +#include + + +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){ + for (int i = 0; i < station->track_count; i++) { + struct car* eto = station->tracks[i]; + while (eto != NULL) { + struct car* delete = eto; + eto = delete->next; + free(delet); + } + } + + free(station->tracks); + free(station); +} + +int select_track(struct station* station, const char* target){ + if (target[0] >= 'A' && target[0] <= 'Z') { + return target[0] - 'A'; + + } else if (target[0] >= 'a' && target[0] <= 'z') { + return target[0] - 'a'; + + } else { + return 0; + } +} + +void add_target_capacity(struct station* station,const char* target, int capacity){ + int track = select_track(station, target); + struct car* new_car = (struct car*)malloc(sizeof(struct car)); + strncpy(new_car->value, target, TARGET_SIZE); + 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* aktualna = station->tracks[track]; + while (aktualna != NULL) { + if (strcmp(aktualna->value, target) == 0) { + return aktualna->capacity; + } + + aktualna = aktualna->next; + } + return 0; +} + +int count_targets(struct station* station){ + int count = 0; + for (int i = 0; i < station->track_count; i++) { + struct car* aktualna = station->tracks[i]; + while (aktualna != NULL) { + count++; + aktualna = aktualna->next; + } + } + return count; +} + +int count_capacity(struct station* station){ + int total_capacity = 0; + for (int i = 0; i < station->track_count; i++) { + struct car* aktualna = station->tracks[i]; + while (aktualna != NULL) { + total_capacity += aktualna->capacity; + aktualna = aktualna->next; + } + } + return total_capacity; +}