Загрузка данных
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;
}