From c13afed07df354954cb49b8c68a1c09bf056efba Mon Sep 17 00:00:00 2001 From: Anzhelika Nikolaieva Date: Fri, 24 Mar 2023 21:45:02 +0000 Subject: [PATCH] Update 'a1/program.c' --- a1/program.c | 395 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 343 insertions(+), 52 deletions(-) diff --git a/a1/program.c b/a1/program.c index 3b54b0c..63159bc 100644 --- a/a1/program.c +++ b/a1/program.c @@ -1,54 +1,345 @@ -#include //pripojím si potrebné knnižnice +#include +#include #include -#include -#define DLZKA_RETAZCA 100 //zadefinujem potrebnú konštantu -int main() { - struct tm* vypoctovyCas1 = calloc(1, sizeof(struct tm)); //dynamicky alokujem štruktúry potrebné pre výpočet 1 týždňa v číselnej reprezentácií - if (vypoctovyCas1 == NULL) return 0; //ak sa alokácia pamäte nepodarí, tak program ukončím - - vypoctovyCas1->tm_mday = 1; //nastavím príslušné parametre pre výpočet - vypoctovyCas1->tm_mon = 6; - vypoctovyCas1->tm_year = 121; - - struct tm* vypoctovyCas2 = calloc(1, sizeof(struct tm)); //analogicky s vyššie uvedenou štruktúrou - if (vypoctovyCas2 == NULL) return 0; //ak sa alokácia pamäte nepodarí, tak program ukončím - - vypoctovyCas2->tm_mday = 8; - vypoctovyCas2->tm_mon = 6; - vypoctovyCas2->tm_year = 121; - - time_t tyzden = difftime(mktime(vypoctovyCas2), mktime(vypoctovyCas1)); //vypočítam čas 1 týždňa v číselnej reprezentácii - - struct tm* zadanyCas = calloc(1, sizeof(struct tm)); //dynamicky alokujem štruktúru pre vstupný čas - if (zadanyCas == NULL) return 0; //ak sa alokácia pamäte nepodarí, tak program ukončím - - char vstup[DLZKA_RETAZCA]; //nainicializujem pamäť pre vstup - if (fgets(vstup, DLZKA_RETAZCA, stdin) == NULL) return 0; //načítam dátum a ak sa jeho načítanie nepodarí, tak program ukončím - - char bodka1, bodka2; //nainicializujem dodatočné pamäte - - sscanf(vstup, "%d %c %d %c %d", &zadanyCas->tm_mday, &bodka1, &zadanyCas->tm_mon, &bodka2, &zadanyCas->tm_year); //jednotlivé vstupné údaje načítam do príslušných premenných - if (zadanyCas->tm_mday == 0) return 0; //ak nezadám do vstupu dátum, tak program ukončím - - zadanyCas->tm_mon -= 1; //odpočítam potrebné konštanty - zadanyCas->tm_year -= 1900; - - struct tm* casOdovzdania = calloc(1, sizeof(struct tm)); //dynamicky alokujem pamäť pre vypočítaný dátum - if (casOdovzdania == NULL) return 0; //ak sa alokácia pamäte nepodarí, tak program ukončím - - time_t vypocetCasu = mktime(zadanyCas) + tyzden; //vypočítam nový dátum - casOdovzdania = localtime(&vypocetCasu); //vypočítaný čas prevediem z číselnej reprezentácie na štrukturovanú - - char vypis[DLZKA_RETAZCA]; //inicializujem pamäť pre uloženie reťazcovej reprezentácie dátumu - size_t stavPrevodu = strftime(vypis, DLZKA_RETAZCA, "%d.%m.%Y", casOdovzdania); //dátum prevediem z o štrukturovanej reprezentácie do reťazcovej - if (stavPrevodu == 0) return 0; //ak sa prevod nepodarí, tak program ukončím - - printf("%s\n", vypis); //nový dátum vypíšem - - free(vypoctovyCas1); //uvoľním dynamicky alokované pamäte - free(vypoctovyCas2); - free(zadanyCas); - free(casOdovzdania); - - return 0; +#include +int main() +{ + char riadok[999][999]; + int i = 0; + int o = 0; + int need = 0; + bool first; + while (1) + { + o = 0; + while (1) + { + + riadok[i][o] = getchar(); + + if (riadok[i][o] == '\n') + { + first = true; + need++; + break; + } + + o++; + } + if (first == true && riadok[i][0] == '\n') + { + break; + } + i++; + } + for (int j = 0; j < need - 1; j++) + { + for (int g = 0; g < strlen(riadok[j]); g++) + { + if (riadok[j][g] != '.' && riadok[j][g] != '1' && riadok[j][g] != '2' && riadok[j][g] != '3' && riadok[j][g] != '4' && riadok[j][g] != '5' && riadok[j][g] != '6' && riadok[j][g] != '7' && riadok[j][g] != '8' && riadok[j][g] != '9' && riadok[j][g] != '0' && riadok[j][g] != '\n' && riadok[j][g] != '\0') + { + riadok[j][0] = '9'; + riadok[j][1] = '.'; + riadok[j][2] = '9'; + riadok[j][3] = '.'; + riadok[j][4] = '9'; + riadok[j][5] = '.'; + riadok[j][6] = '\0'; + break; + } + } + } + i = 0; + for (int j = 0; j < need - 1; j++) + { + i = 1; + for (int g = 0; g < strlen(riadok[j]); g++) + { + if ((riadok[j][g] == '1' || riadok[j][g] == '2' || riadok[j][g] == '3' || riadok[j][g] == '4' || riadok[j][g] == '5' || riadok[j][g] == '6' || riadok[j][g] == '7' || riadok[j][g] == '8' || riadok[j][g] == '9' || riadok[j][g] == '0' || riadok[j][g] == '\0')) + { + i++; + if (strlen(riadok[j]) == i) + { + riadok[j][0] = '9'; + riadok[j][1] = '.'; + riadok[j][2] = '9'; + riadok[j][3] = '.'; + riadok[j][4] = '9'; + riadok[j][5] = '.'; + riadok[j][6] = '\0'; + break; + } + } + } + } + + for (int j = 0; j < need - 1; j++) + { + if (riadok[j][0] == '0') + { + riadok[j][0] = '9'; + riadok[j][1] = '.'; + riadok[j][2] = '9'; + riadok[j][3] = '.'; + riadok[j][4] = '9'; + riadok[j][5] = '.'; + riadok[j][6] = '\0'; + } + } + + for (int j = 0; j < need - 1; j++) + { + for (int g = 0; g < strlen(riadok[j]); g++) + { + if (riadok[j][g] == '0' && riadok[j][g - 1] == '.') + { + riadok[j][0] = '9'; + riadok[j][1] = '.'; + riadok[j][2] = '9'; + riadok[j][3] = '.'; + riadok[j][4] = '9'; + riadok[j][5] = '.'; + riadok[j][6] = '\0'; + } + } + } + + char riadok1[999]; + i = 0; + for (int j = 0; j < need - 1; j++) + { + for (int g = 0; g < strlen(riadok[j]); g++) + { + if (riadok[j][g] == '\n') + { + riadok[j][g] = '.'; + } + if (riadok[j][g] != '\0') + { + riadok1[i] = riadok[j][g]; + i++; + } + } + } + riadok1[i] = '\0'; + int len = strlen(riadok1); + int s = 0; + for (int j = 0; j < len; j++) + { + if (riadok1[j] == '.') + { + s++; + } + } + char *endptr = NULL; + char *start = riadok1; + int cisla[s]; + i = 0; + while (start < (riadok1 + len)) + { + cisla[i] = strtol(start, &endptr, 10); + if (cisla[i]) + { + start = endptr + 1; + } + else + { + break; + } + i++; + } + + need = 0; + for (int j = 0; j < s; j = j + 3) + { + if (cisla[j + 1] > 12 || cisla[j + 1] < 0 || cisla[j] < 1 || cisla[j] > 31 || cisla[j + 2] < 1900 || cisla[j + 2] > 2100) + { + cisla[j] = 0; + cisla[j + 1] = 0; + cisla[j + 2] = 0; + need++; + } + } + + for (int j = 0; j < s; j = j + 3) + { + if (cisla[j + 1] == 2 && cisla[j] == 29 && cisla[j + 2] % 4 != 0) + { + cisla[j] = 0; + cisla[j + 1] = 0; + cisla[j + 2] = 0; + need++; + } + } + + for (int j = 0; j < s; j = j + 3) + { + if (cisla[j + 1] == 1 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 2 && cisla[j] > 0 && cisla[j] <= 28 && cisla[j + 2] % 4 != 0) + { + if (cisla[j] <= 21) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 21) + { + cisla[j] = cisla[j] + 7 - 28; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 2 && cisla[j] > 0 && cisla[j] <= 29 && cisla[j + 2] % 4 == 0) + { + if (cisla[j] <= 22) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 22) + { + cisla[j] = cisla[j] + 7 - 29; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 3 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 4 && cisla[j] > 0 && cisla[j] <= 30) + { + if (cisla[j] <= 23) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 23) + { + cisla[j] = cisla[j] + 7 - 30; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 5 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 6 && cisla[j] > 0 && cisla[j] <= 30) + { + if (cisla[j] <= 23) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 23) + { + cisla[j] = cisla[j] + 7 - 30; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 7 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 8 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 9 && cisla[j] > 0 && cisla[j] <= 30) + { + if (cisla[j] <= 23) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 23) + { + cisla[j] = cisla[j] + 7 - 30; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 10 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 11 && cisla[j] > 0 && cisla[j] <= 30) + { + if (cisla[j] <= 23) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 23) + { + cisla[j] = cisla[j] + 7 - 30; + cisla[j + 1]++; + } + } + else if (cisla[j + 1] == 12 && cisla[j] > 0 && cisla[j] <= 31) + { + if (cisla[j] <= 24) + { + cisla[j] = cisla[j] + 7; + } + else if (cisla[j] > 24) + { + cisla[j] = cisla[j] + 7 - 31; + cisla[j + 1] = 1; + cisla[j + 2]++; + } + } + if (cisla[j] != 0 && cisla[j + 1] != 0 && cisla[j + 2] != 0) + { + printf("%d.%d.%d\n\n", cisla[j], cisla[j + 1], cisla[j + 2]); + } + + else if (cisla[j] == 0 && cisla[j + 1] == 0 && cisla[j + 2] == 0) + { + puts("Neplatny datum."); + } + } } \ No newline at end of file