Загрузка данных


1 задание 
#include <stdio.h>

int div_without_division(int a, int b) {
    int result = 0;

    if (a < 0) {
        a = -a;
    }

    while (a > 0) {
        a = a - b;
    }

    if (a == 0) {
        result = 1;
    }

    return result;
}

int is_prime(int number) {
    int result = 1;
    int i = 2;

    if (number < 2) {
        result = 0;
    }

    while (i * i <= number && result == 1) {
        if (div_without_division(number, i)) {
            result = 0;
        }

        i++;
    }

    return result;
}

int max_prime_divisor(int number) {
    int result = 0;
    int i;

    if (number < 0) {
        number = -number;
    }

    i = number;

    while (i >= 2 && result == 0) {
        if (div_without_division(number, i) && is_prime(i)) {
            result = i;
        }

        i--;
    }

    return result;
}

int main(void) {
    int number;
    int answer;
    char extra;

    if (scanf("%d%c", &number, &extra) != 2 || extra != '\n') {
        printf("n/a");
    } else {
        answer = max_prime_divisor(number);

        if (answer == 0) {
            printf("n/a");
        } else {
            printf("%d", answer);
        }
    }

    return 0;
}
2 задание 
#include <stdio.h>

int hex_value(char c) {
    int res = -1; 

    if (c >= '0' && c <= '9') {
        res = c - '0';
    } else if (c >= 'A' && c <= 'F') {
        res = c - 'A' + 10;
    }

    return res;
}

int print_hex_code(char c) {
    int n = c;       
    int a = n / 16;  
    int b = n % 16;  
    if (a < 10) {
        printf("%c", a + '0');
    } else {
        printf("%c", a - 10 + 'A');
    }

    if (b < 10) {
        printf("%c", b + '0');
    } else {
        printf("%c", b - 10 + 'A');
    }

    return 1;
}

int print_decoded_char(char a, char b) {
    int res = 1;         
    int n1 = hex_value(a);  
    int n2 = hex_value(b); 

    if (n1 == -1 || n2 == -1) {
        res = 0;
    } else {
        printf("%c", n1 * 16 + n2);
    }

    return res;
}

int encode_mode() {
    int res = 1;  
    char c;       
    char sep;     

    if (scanf("%c%c", &c, &sep) != 2) {
        res = 0;
    }

    while (res == 1) {
        if (sep != ' ' && sep != '\n') {
            res = 0;
        } else {
            print_hex_code(c);

            if (sep == '\n') {
                res = 2;
            } else {
                printf(" ");

                if (scanf("%c%c", &c, &sep) != 2) {
                    res = 0;
                }
            }
        }
    }

    return res;
}

int decode_mode() {
    int res = 1;  
    char a;       
    char b;       
    char sep;     

    if (scanf("%c%c%c", &a, &b, &sep) != 3) {
        res = 0;
    }

    while (res == 1) {
        if (sep != ' ' && sep != '\n') {
            res = 0;
        } else if (!print_decoded_char(a, b)) {
            res = 0;
        } else {
            if (sep == '\n') {
                res = 2;
            } else {
                printf(" ");

                if (scanf("%c%c%c", &a, &b, &sep) != 3) {
                    res = 0;
                }
            }
        }
    }

    return res;
}

int main(int argc, char *argv[]) {
    int res = 0;  

    if (argc == 2 && argv[1][1] == '\0') {
        if (argv[1][0] == '0') {
            res = encode_mode();
        } else if (argv[1][0] == '1') {
            res = decode_mode();
        }
    }

    if (res == 0) {
        printf("n/a");
    }

    return 0;
}
3 задание 
#include <stdio.h>

int fibonacci(int n) {
    int result;

    if (n == 0) {
        result = 0;
    } else if (n == 1) {
        result = 1;
    } else {
        result = fibonacci(n - 1) + fibonacci(n - 2);
    }

    return result;
}

int main(void) {
    int n;
    char extra;

    if (scanf("%d%c", &n, &extra) != 2 || extra != '\n' || n < 0) {
        printf("n/a");
    } else {
        printf("%d", fibonacci(n));
    }

    return 0;
}
4 задание 
#include <math.h>
#include <stdio.h>

double versiera(double x) {
    return 1.0 / (1.0 + x * x);
}

double lemniscate_value(double x) {
    return sqrt(sqrt(1.0 + 4.0 * x * x) - x * x - 1.0);
}

int lemniscate_exists(double x) {
    int res = 1;
    double value = sqrt(1.0 + 4.0 * x * x) - x * x - 1.0;

    if (value < 0.0) {
        res = 0;
    }

    return res;
}

double hyperbola(double x) {
    return 1.0 / (x * x);
}

int hyperbola_exists(double x) {
    int res = 1;

    if (x == 0.0) {
        res = 0;
    }

    return res;
}

int main(void) {
    const double pi = 3.14159265358979323846;
    const int count = 42;
    double x;
    double step;
    int i = 0;

    step = 2.0 * pi / (count - 1);

    while (i < count) {
        x = -pi + step * i;

        printf("%.7lf | %.7lf | ", x, versiera(x));

        if (lemniscate_exists(x)) {
            printf("%.7lf", lemniscate_value(x));
        } else {
            printf("-");
        }

        printf(" | ");

        if (hyperbola_exists(x)) {
            printf("%.7lf", hyperbola(x));
        } else {
            printf("-");
        }

            printf("\n");

        i++;
    }

    return 0;
}
5 задание
#include <math.h>
#include <stdio.h>

double versiera(double x) {
    return 1.0 / (1.0 + x * x);
}

double lemniscate(double x) {
    double y;
    double value;

    value = sqrt(1.0 + 4.0 * x * x) - x * x - 1.0;

    if (value < 0.0) {
        y = -1.0;
    } else {
        y = sqrt(value);
    }

    return y;
}

double hyperbola(double x) {
    double y;

    if (x == 0.0) {
        y = -1.0;
    } else {
        y = 1.0 / (x * x);
    }

    return y;
}

void print_graph(int type) {
    const double pi = 3.14159265358979323846;
    double x;
    double y;
    double max_y;
    int row;
    int col;
    int point;

    if (type == 1) {
        max_y = 1.0;
    } else if (type == 2) {
        max_y = 0.5;
    } else {
        max_y = 170.4;
    }

    row = 0;
    while (row < 21) {
        col = 0;

        while (col < 42) {
            x = -pi + 2.0 * pi * col / 41.0;

            if (type == 1) {
                y = versiera(x);
            } else if (type == 2) {
                y = lemniscate(x);
            } else {
                y = hyperbola(x);
            }

            if (y < 0.0) {
                printf(" ");
            } else {
                point = 20 - (int)(y * 20.0 / max_y + 0.5);

                if (point == row) {
                    printf("*");
                } else {
                    printf(" ");
                }
            }

            col++;
        }

        printf("\n");
        row++;
    }
}

int main(void) {
    print_graph(1);
    printf("\n");
    print_graph(2);
    printf("\n");
    print_graph(3);

    return 0;
}