diff --git a/include/task1.h b/include/task1.h new file mode 100644 index 0000000..eb67767 --- /dev/null +++ b/include/task1.h @@ -0,0 +1,5 @@ +#define M 28 +#define N 28 +void drawFractal(char(*arr)[M], int x, int y, int size); //функция, формирующая изображение + //в массиве arr, центр задается координатами(x, y) + //и масштаб изображения задается size diff --git a/include/task2.h b/include/task2.h new file mode 100644 index 0000000..7174063 --- /dev/null +++ b/include/task2.h @@ -0,0 +1,4 @@ +#include +#define SIZE 1000000 +unsigned int seqCollatz(unsigned int* maxlen); //функция, возвращающая число и записывающую по адресу maxlen длину +unsigned int collatz(unsigned long long num); // функция, возвращающая длину последовательности Коллатца для числа num diff --git a/include/task3.h b/include/task3.h new file mode 100644 index 0000000..4320fdc --- /dev/null +++ b/include/task3.h @@ -0,0 +1 @@ +char* int2str(char* buf, unsigned int value); diff --git a/include/task4.h b/include/task4.h new file mode 100644 index 0000000..b5c3bc4 --- /dev/null +++ b/include/task4.h @@ -0,0 +1,2 @@ +long long sumC(char* arr, int len); //суммирование массива циклом +long long sumR(char* arr, int len); //суммирование массива рекурсией diff --git a/include/task5.h b/include/task5.h new file mode 100644 index 0000000..69ca84a --- /dev/null +++ b/include/task5.h @@ -0,0 +1 @@ +unsigned long long fib1(int N); diff --git a/include/task6.h b/include/task6.h new file mode 100644 index 0000000..f669c3c --- /dev/null +++ b/include/task6.h @@ -0,0 +1,2 @@ +unsigned long long fib2(int N); +unsigned long long fib1(unsigned long long f1, unsigned long long f2, int N); \ No newline at end of file diff --git a/include/task7.h b/include/task7.h new file mode 100644 index 0000000..148fee2 --- /dev/null +++ b/include/task7.h @@ -0,0 +1,4 @@ +#define M 29 +#define N 9 + +void place(int x, int y); //перемещение в ячейку массива с координатами(x, y) diff --git a/include/task8.h b/include/task8.h new file mode 100644 index 0000000..48ac7e2 --- /dev/null +++ b/include/task8.h @@ -0,0 +1,2 @@ +int eval(char* buf); //функция, вычисляющая строку, содержащуюся в buf +char partition(char* buf, char* expr1, char* expr2); //функция, которая разбивает строку, содержащуюся в buf на три части : строку с первым операндом, знак операции и строку со вторым операндом \ No newline at end of file diff --git a/src/main1.cpp b/src/main1.cpp new file mode 100644 index 0000000..a2ddf4c --- /dev/null +++ b/src/main1.cpp @@ -0,0 +1,28 @@ +#include +#include "task1.h" +#define SIZE 3 + +int main() +{ + char arr[M][N]; + for (int i = 0; i < N; i++) + { + for (int j = 0; j < M; j++) + { + arr[i][j] = ' '; + } + } + + drawFractal(arr, M / 2, N / 2, SIZE); + + for (int i = 0; i < M; i++) + { + for (int j = 0; j < M; j++) + { + printf("%2c", arr[i][j]); + } + printf("\n"); + } + + return 0; +} \ No newline at end of file diff --git a/src/main2.cpp b/src/main2.cpp new file mode 100644 index 0000000..ad11bf3 --- /dev/null +++ b/src/main2.cpp @@ -0,0 +1,9 @@ +#include "task2.h" + +int main() +{ + unsigned int maxlen = 0; + int maxnumber = seqCollatz(&maxlen); + printf("Number is %u, max length is %u\n", maxnumber, maxlen); + return 0; +} diff --git a/src/main3.cpp b/src/main3.cpp new file mode 100644 index 0000000..6af107c --- /dev/null +++ b/src/main3.cpp @@ -0,0 +1,20 @@ +#define _CRT_SECURE_NO_WARNINGS +#include "task3.h" +#include + +#define SIZE 256 + +int main() +{ + char buf[SIZE] = { 0 }; + unsigned int value = 0; + + printf("Enter number\n"); + scanf("%u", &value); + + printf("%s\n", int2str(buf, value)); + + return 0; +} + + diff --git a/src/main4.cpp b/src/main4.cpp new file mode 100644 index 0000000..4b7c210 --- /dev/null +++ b/src/main4.cpp @@ -0,0 +1,38 @@ +#define _CRT_SECURE_NO_WARNINGS +#include "task4.h" +#include +#include +#include +#include + +int main() { + + int number = 0; + unsigned long long result = 0; + clock_t start, finish; + + printf("Enter number\n"); + scanf("%i", &number); + + int len = pow(2.0, number); + char* arr = (char*)calloc(len, sizeof(char)); + + for (int i = 0; i < len; i++) + { + arr[i] = rand() % 100; + } + + start = clock(); + result = sumC(arr, len); + finish = clock(); + printf("Cycle result = %lld, time = %3.2f\n", result, (float)(start - finish) / CLOCKS_PER_SEC); + + start = clock(); + result = sumR(arr, len); + finish = clock(); + printf("Cycle result = %lld, time = %3.2f\n", result, (float)(start - finish) / CLOCKS_PER_SEC); + + free(arr); + + return 0; +} \ No newline at end of file diff --git a/src/main5.cpp b/src/main5.cpp new file mode 100644 index 0000000..35a2005 --- /dev/null +++ b/src/main5.cpp @@ -0,0 +1,21 @@ +#define _CRT_SECURE_NO_WARNINGS +#include "task5.h" +#include +#include +#include + +#define SIZE 40 + +int main() +{ + FILE* f_out = fopen("FILE.xls", "wt"); + for (int i = 1; i < SIZE; i++) + { + clock_t start = clock(); + unsigned long long fib = fib1(i); + clock_t finish = clock(); + fprintf(f_out, "%llu\t %6.2f\n", fib, (float)(finish - start) / CLOCKS_PER_SEC); + } + fclose(f_out); + return 0; +} \ No newline at end of file diff --git a/src/main6.cpp b/src/main6.cpp new file mode 100644 index 0000000..a5a3475 --- /dev/null +++ b/src/main6.cpp @@ -0,0 +1,22 @@ +#define _CRT_SECURE_NO_WARNINGS +#include "task6.h" +#include +#include +#include + + +#define SIZE 40 + +int main() +{ + FILE* out = fopen("FILE.xls", "wt"); + for (int i = 1; i < SIZE; i++) + { + clock_t start = clock(); + unsigned long long fib = fib2(i); + clock_t finish = clock(); + fprintf(out, "%6.2f - %llu\n", (float)(finish - start) / CLOCKS_PER_SEC, fib); + } + fclose(out); + return 0; +} diff --git a/src/main7.cpp b/src/main7.cpp new file mode 100644 index 0000000..69b4c22 --- /dev/null +++ b/src/main7.cpp @@ -0,0 +1,35 @@ +#include +#include "task7.h" + +#define M 29 +#define N 9 + +char labirinth[N][M] ={ "############################", + "# # # #", + "########## # # #", + "# # ####### ###", + "# ###### # x #", + "# # # ####### ##", + "##### # # # ##", + " # # ######", + "############################" }; + +int main() +{ + + int x = 0, y = 0; + for (int i = 0; i < N; i++)// поиск начальной точки + { + for (int j = 0; j < M; j++) + if (labirinth[i][j] == 'x') + { + x = i; + y = j; + break; + } + if (x != 0) + break; + } + place(x, y); + return 0; +} diff --git a/src/main8.cpp b/src/main8.cpp new file mode 100644 index 0000000..15de7a9 --- /dev/null +++ b/src/main8.cpp @@ -0,0 +1,8 @@ +#include "task8.h" +#include + +int main(int argc, char* argv[]) +{ + printf("%s = %d\n", argv[1], eval(argv[1])); + return 0; +} \ No newline at end of file diff --git a/src/task1.cpp b/src/task1.cpp new file mode 100644 index 0000000..5fa0ff2 --- /dev/null +++ b/src/task1.cpp @@ -0,0 +1,21 @@ +#include "task1.h" +#include +#include + +void drawFractal(char(*arr)[M], int x, int y, int size) +{ + int space = 0; + + if (size == 0) { + arr[x][y] = '*'; + } + else + { + space = pow(3, size - 1); + drawFractal(arr, x, y, size - 1); + drawFractal(arr, x + space, y, size - 1); + drawFractal(arr, x - space, y, size - 1); + drawFractal(arr, x, y + space, size - 1); + drawFractal(arr, x, y - space, size - 1); + } +} \ No newline at end of file diff --git a/src/task2.cpp b/src/task2.cpp new file mode 100644 index 0000000..63ee25c --- /dev/null +++ b/src/task2.cpp @@ -0,0 +1,29 @@ +#include "task2.h" + +unsigned int collatz(unsigned long long num) +{ + if (num == 1) + return 1; + if (num % 2 == 0) + return 1 + collatz(num / 2); + else + return 1 + collatz(3 * num + 1); +} + +unsigned int seqCollatz(unsigned int* maxlen) +{ + unsigned int len = 0, maxnum = 0; + *maxlen = 0; + + for (int i = 2; i <= SIZE; i++) + { + len = collatz(i); + if (len > * maxlen) + { + *maxlen = len; + maxnum = i; + } + } + + return maxnum; +} diff --git a/src/task3.cpp b/src/task3.cpp new file mode 100644 index 0000000..115610c --- /dev/null +++ b/src/task3.cpp @@ -0,0 +1,14 @@ +char* int2str(char* buf, unsigned int value) +{ + static int i = 0; + if (value > 10) + { + int2str(buf, value / 10); + } + value %= 10; + buf[i] = value + '0'; + buf[i + 1] = '\0'; + i++; + return buf; +} + diff --git a/src/task4.cpp b/src/task4.cpp new file mode 100644 index 0000000..b107afd --- /dev/null +++ b/src/task4.cpp @@ -0,0 +1,19 @@ +#include + +long long sumC(char* arr, int len) +{ + long long sum = 0; + for (int i = 0; i < len; i++) + { + sum += + arr[i]; + } + return sum; +} + +long long sumR(char* arr, int len) +{ + if (len == 1) + return arr[len - 1]; + else + return sumR(arr, len / 2) + sumR(arr + len / 2, (len - len / 2)); +} \ No newline at end of file diff --git a/src/task5.cpp b/src/task5.cpp new file mode 100644 index 0000000..b957672 --- /dev/null +++ b/src/task5.cpp @@ -0,0 +1,9 @@ +unsigned long long fib1(int N) +{ + if (N == 1) + return 1; + else if (N == 2) + return 1; + else + return (fib1(N - 2) + fib1(N - 1)); +} \ No newline at end of file diff --git a/src/task6.cpp b/src/task6.cpp new file mode 100644 index 0000000..2c85ec9 --- /dev/null +++ b/src/task6.cpp @@ -0,0 +1,15 @@ +#include + +unsigned long long fib1(unsigned long long f1, unsigned long long f2, int N) +{ + if (N == 1) + return 1; + else if (N == 2) + return f2; + else + return fib1(f2, f2 + f1, N - 1); +} +unsigned long long fib2(int N) +{ + return (fib1(1, 1, N)); +} \ No newline at end of file diff --git a/src/task7.cpp b/src/task7.cpp new file mode 100644 index 0000000..01fb33a --- /dev/null +++ b/src/task7.cpp @@ -0,0 +1,48 @@ +#include "task7.h" +#include +#include +#include + +extern char labirinth[N][M]; + +void place(int x, int y) +{ + labirinth[x][y] = 'x'; + + if (y == 0) + { + labirinth[x][y] = 'x'; + for (int i = 0; i < N; i++) + { + for (int j = 0; j < M; j++) + { + printf("%c", labirinth[i][j]); + } + printf("\n"); + + } + } + else + { + if (labirinth[x + 1][y] == ' ') + { + labirinth[x][y] = 'x'; + place(x + 1, y); + } + if (labirinth[x][y - 1] == ' ') + { + labirinth[x][y] = 'x'; + place(x, y - 1); + } + if (labirinth[x - 1][y] == ' ') + { + labirinth[x][y] = 'x'; + place(x - 1, y); + } + if (labirinth[x][y + 1] == ' ') + { + labirinth[x][y] = 'x'; + place(x, y + 1); + } + } +} \ No newline at end of file diff --git a/src/task8.cpp b/src/task8.cpp new file mode 100644 index 0000000..e4a331e --- /dev/null +++ b/src/task8.cpp @@ -0,0 +1,62 @@ +#include +#include +#include + +#define SIZE 256 + +char partition(char* buf, char* expr1, char* expr2) +{ + int opening = 0, closing = 0; + buf[strlen(buf) - 1] = '\0'; + int length = strlen(buf); + int sign = 0, isign = 0; + + for (int i = 0; i <= length; i++) + { + if (buf[i] == '(') + opening++; + else if (buf[i] == ')') + closing++; + else + if ((buf[i] == '-' || buf[i] == '+' || buf[i] == '*' || buf[i] == '/') && ((opening - 1) == closing)) + { + sign = buf[i]; + isign = i; + } + } + + int j = 0; + for (int i = 1; i < isign; i++) + { + expr1[j] = buf[i]; + j++; + } + j = 0; + for (int i = isign + 1; i < length; i++) + { + expr2[j] = buf[i]; + j++; + } + + return sign; +} + +int eval(char* buf) +{ + if (buf[0] != '(') + return atoi(buf); // number + char expr1[SIZE] = { 0 }, expr2[SIZE] = { 0 }; + char sign; + sign = partition(buf, expr1, expr2); + switch (sign) + { + case '+': + return eval(expr1) + eval(expr2); + case '-': + return eval(expr1) - eval(expr2); + case '*': + return eval(expr1) * eval(expr2); + case '/': + return eval(expr1) / eval(expr2); + } +}