diff --git a/a1/program.c b/a1/program.c index c6f6999..49811fa 100644 --- a/a1/program.c +++ b/a1/program.c @@ -2,31 +2,49 @@ #include #include #include +#include int main () { - char* BMW = (char*) calloc (100, sizeof(char)); - int x; - int counter = 0; - int numbers [100]; - for (int i = 0; fgets(BMW, 100, stdin) != NULL; i++){ - if (!strcmp("\n", BMW)) { - counter = i; - break; - } - if (i == 0){ - x = atoi (BMW); - } - else { - numbers [i] = atoi (BMW); - } - } - int result = 0; - while (counter > 0){ - result += pow (x, counter -1) * numbers [counter]; - counter --; - } - printf ("Vysledok je: "); - printf ("%d\n", &result); - free(BMW); - return 0; + char* input = (char*) calloc (100, sizeof(char)); + double x; + char* ptr; + int counter = 0; + double numbers [100]; + numbers[0] = 0; + for (int i = 0; fgets(input, 100, stdin) != NULL; i++){ + if (!strcmp("\n", input)) + break; + + if(i == 0){ + for(int j = 0; input[j] != '\0' && input[j] != '\n'; j++) + if(!isdigit(input[j]) && input[j] != '.'){ + printf("Nepodarilo sa nacitat zaklad x\n"); + return 0; + } + } + + for(int j = 0; input[j] != '\0' && input[j] != '\n'; j++) + if(!isdigit(input[j]) && input[j] != '.'){ + printf("Nepodarilo sa nacitat polynom na %d mieste.\n", i); + return 0; + } + + if (i == 0){ + x = (double)strtod(input, &ptr); + } + else { + numbers [i] = (double)strtod(input, &ptr); + } + counter = i; + } + double result = 0; + for(int i = 1; i <= counter; i++) + result += pow (x, i-1) * numbers [counter - i + 1]; + + result = roundf((float) result * 100)/100; + + printf ("Vysledok je: "); + printf ("%.2f\n", result); + free(input); + return 0; } diff --git a/du3/program.c b/du3/program.c index 903ec9d..fa02602 100644 --- a/du3/program.c +++ b/du3/program.c @@ -1,61 +1,88 @@ #include #include #include +#include int main() { - char input[10]; - char numbers[4]; - int date[3] + char* input = (char*) calloc(11, sizeof(char)); + char numbers[4] = "\0\0\0\0"; + char* ptr; + int date[3] = {0, 0, 0}; int counter1 = 0, counter2 = 0; - fgets(input, 10, stdin); + + int truth = 0; - for(int i = 0; i < 10; i++){ - if(!isdigit(input[i]) && input[i] != '.' && input[i] != '\n'){ - break; - } + for (int j = 0; fgets(input, 11, stdin) != NULL; j++){ + if(input[0] == '\n') continue; + for(int i = 0; i < 11; i++){ + if(!isdigit(input[i]) && input[i] != '.' && input[i] != '\0' && input[i] != '\n'){ + puts("Neplatny datum."); + goto LABEL; + } - if(input[i] != '.' && input[i] != '\n'){ - numbers[counter1++] = input[i]; - } - else { - date[counter2++] = atoi(numbers); - if(counter2 == 1 && (date[0] < 1 || date[0] > 31)){ - break; + if(input[i] != '.' && input[i] != '\n' && input[i] != '\0'){ + numbers[counter1++] = input[i]; } - else if(counter2 == 2 && (date[1] < 1 || date[1] > 12)){ - break; - } - else if(counter2 == 2 && date[0] > 29){ - break; - } - else if (counter2 == 3){ - date[1] += 7; - if(date[0] > 31 && (date[1] == 1 || date[1] == 3 || date[1] == 5 || date[1] == 7 || date[1] == 8 || date[1] == 10 || date[1] == 12)){ - date[0] -= 31; - date[1]++; - if(date[1] > 12){ - date[1] = 1; - date[2]++; + else { + date[counter2++] = (int) strtol(numbers, &ptr, 10); + if(counter2 == 1 && (date[0] < 1 || date[0] > 31)){ + puts("Neplatny datum."); + goto LABEL; + } + else if(counter2 == 2 && (date[1] < 1 || date[1] > 12)){ + puts("Neplatny datum."); + goto LABEL; + } + /*else if(counter2 == 2 && date[0] > 29){ + //goto LABEL; + }*/ + else if (counter2 == 3){ + if(date[2] < 1900 || date[2] > 2100){ + puts("Neplatny datum."); + goto LABEL; } + if(date[0] >= 29 && date[1] == 2 && (date[2] % 4 != 0 || (date[2] % 100 == 0 && date[2] % 400 != 0))){ + puts("Neplatny datum."); + goto LABEL; + } + date[0] += 7; + if(date[0] > 31 && (date[1] == 1 || date[1] == 3 || date[1] == 5 || date[1] == 7 || date[1] == 8 || date[1] == 10 || date[1] == 12)){ + date[0] -= 31; + date[1]++; + if(date[1] > 12){ + date[1] = 1; + date[2]++; + } + } + if(date[0] > 30 && (date[1] == 4 || date[1] == 6 || date[1] == 9 || date[1] == 11)){ + date[0] -= 30; + date[1]++; + } + if(date[0] > 29 && date[1] == 2 && date[2] % 4 == 0 && (date[2] % 100 != 0 || (date[2] %100 == 0 && date[2] % 400 == 0))){ + date[0] -= 29; + date[1]++; + } + else if(date[0] > 28 && date[1] == 2){ + date[0] -= 28; + date[1]++; + } + printf("%d.%d.%d\n\n", date[0], date[1], date[2]); + break; } - if(date[0] > 30 && (date[1] == 4 || date[1] == 6 || date[1] == 9 || date[1] == 11)){ - date[0] -= 30; - date[1]++; - } - if(date[0] > 29 && date[1] == 2 && date[2] % 4 == 0 && (date[2] % 100 != 0 || (date[2] %100 == 0 && date[2] % 400 == 0))){ - date[0] -= 29; - date[1]++; - } - else if(date[0] > 28 && date[1] == 2){ - date[0] -= 28; - date[1]++; - } - printf("%d.%d.%d\n", date[0], date[1], date[2]); - return 0; + memset(numbers, '\0', 4); + counter1 = 0; } } + if(isdigit(input[9])) getchar(); + LABEL: + memset(input, '\0', 11); + date[0] = 0, date[1] = 0, date[2] = 0; + counter1 = 0, counter2 = 0; + memset(numbers, '\0', 4); + } - puts("Neplatny datum"); - + + + free(input); return 0; -} +} \ No newline at end of file