diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..2ef85cb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "1Y-2H/trpo/gui-quizsolver"] + path = 1Y-2H/trpo/gui-quizsolver + url = https://git.oniic.ru/oniic/quizsolver.git diff --git a/1Y-1H/infolabs/procmemorylearning/run.sh b/1Y-1H/infolabs/procmemorylearning/run.sh old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/input/test.num b/1Y-1H/infolabs/pythontrabscribe/input/test.num old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/input/test.py b/1Y-1H/infolabs/pythontrabscribe/input/test.py old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/main.bak.c b/1Y-1H/infolabs/pythontrabscribe/main.bak.c old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/main.c b/1Y-1H/infolabs/pythontrabscribe/main.c old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/output/output b/1Y-1H/infolabs/pythontrabscribe/output/output old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/output/output.c b/1Y-1H/infolabs/pythontrabscribe/output/output.c old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/output/prog b/1Y-1H/infolabs/pythontrabscribe/output/prog old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/run.sh b/1Y-1H/infolabs/pythontrabscribe/run.sh old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/Отчёт по информатике на тему Реализация простого конвертера с подмножества Python на Си.pdf b/1Y-1H/infolabs/pythontrabscribe/Отчёт по информатике на тему Реализация простого конвертера с подмножества Python на Си.pdf old mode 100755 new mode 100644 diff --git a/1Y-1H/infolabs/pythontrabscribe/Работа_реализация_простого_конвертера_с_подмножества_Python_на_Си.pdf b/1Y-1H/infolabs/pythontrabscribe/Работа_реализация_простого_конвертера_с_подмножества_Python_на_Си.pdf old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/exam/tmp.out b/1Y-1H/proglabs/exam/tmp.out old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab10/compile.sh b/1Y-1H/proglabs/lab10/compile.sh old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab10/prog b/1Y-1H/proglabs/lab10/prog old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab10/test/output.1_3 b/1Y-1H/proglabs/lab10/test/output.1_3 old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab10/test/output.2_8 b/1Y-1H/proglabs/lab10/test/output.2_8 old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab10/test/output.3_4 b/1Y-1H/proglabs/lab10/test/output.3_4 old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab11/compile.sh b/1Y-1H/proglabs/lab11/compile.sh old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab11/data.csv b/1Y-1H/proglabs/lab11/data.csv old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab11/head.h b/1Y-1H/proglabs/lab11/head.h old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab11/input.c b/1Y-1H/proglabs/lab11/input.c old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab11/main.c b/1Y-1H/proglabs/lab11/main.c old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab9/compile.sh b/1Y-1H/proglabs/lab9/compile.sh old mode 100755 new mode 100644 diff --git a/1Y-1H/proglabs/lab9/prog b/1Y-1H/proglabs/lab9/prog old mode 100755 new mode 100644 diff --git a/1Y-2H/arr.c b/1Y-2H/arr.c index 4292ac5..f077c4c 100644 --- a/1Y-2H/arr.c +++ b/1Y-2H/arr.c @@ -1,30 +1,14 @@ #include -typedef struct{ - char ch; - struct ste{ - int x; - int y; - int z; - }st; -}STR; - int main(){ + int partFirst = 16; // считаем что романтические отношения начинаются с 16 + int partSecond = 16; - STR m1; - putchar('a'); //1 - m1.ch = 'A'; - putchar('g'); //2 - (&m1)->ch = 'B'; - putchar('z'); //3 - putchar('z'); //4 - - - STR* m2; - putchar('a');//5 - m2->st.x = 'A'; - putchar('g'); //6 - (&(m2)->st)->x = 'B'; - putchar('z'); //7 - - + int count = 0, fix = -2; + while (partFirst<80){ + if (count == 3+(fix>7?2:0)) {fix++; count = 0;} + partSecond = (partFirst + 4) + fix; + printf("Возраст партнёров %d • %d\n", partFirst, partSecond); + partFirst++; count++; + } } + diff --git a/1Y-2H/dsa/lab1/data/compile.sh b/1Y-2H/dsa/lab1/data/compile.sh old mode 100755 new mode 100644 diff --git a/1Y-2H/dsa/lab1/data/run b/1Y-2H/dsa/lab1/data/run old mode 100755 new mode 100644 diff --git a/1Y-2H/dsa/lab2/.o/main.o b/1Y-2H/dsa/lab2/.o/main.o index 15c99d0..d3ff393 100644 Binary files a/1Y-2H/dsa/lab2/.o/main.o and b/1Y-2H/dsa/lab2/.o/main.o differ diff --git a/1Y-2H/dsa/lab2/.o/sort.o b/1Y-2H/dsa/lab2/.o/sort.o index f6fead3..0c2f0ae 100644 Binary files a/1Y-2H/dsa/lab2/.o/sort.o and b/1Y-2H/dsa/lab2/.o/sort.o differ diff --git a/1Y-2H/dsa/lab2/code/head.h b/1Y-2H/dsa/lab2/code/head.h index 3c110cf..f08118e 100644 --- a/1Y-2H/dsa/lab2/code/head.h +++ b/1Y-2H/dsa/lab2/code/head.h @@ -5,15 +5,16 @@ #include #include #include +#include #define AVG_TIME_LOOPS 1 #define AVG_RAND_MAX 100000 #define MILLION 1000000 -void sort_radix(uint32_t* arr,int n); -void sort_heap(uint32_t* arr,int n); -void sort_bubble(uint32_t* arr,int n); -void sort_merge(uint32_t* arr,int left, int right); +void sort_radix(uint32_t* arr,uint32_t n); +void sort_heap(uint32_t* arr,uint32_t n); +void sort_bubble(uint32_t* arr,uint32_t n); +void sort_merge(uint32_t* arr,uint32_t left, uint32_t right); void run_exp(); diff --git a/1Y-2H/dsa/lab2/code/main.c b/1Y-2H/dsa/lab2/code/main.c index 38b9289..4f830ae 100644 --- a/1Y-2H/dsa/lab2/code/main.c +++ b/1Y-2H/dsa/lab2/code/main.c @@ -2,7 +2,7 @@ #include double get_time(); -void fill_rand(uint32_t *arr, int n); +void fill_rand(uint32_t *arr, uint32_t n); int main(int argc,char **argv) { srand(get_time()); @@ -14,42 +14,42 @@ int main(int argc,char **argv) { break; case '2': // Test Sorts { - int n; + uint32_t n; if(!(argv[1][1]>='a'&&argv[1][1]<='z')){ printf("\nPrint 2(r/h/b/m) to sort or 3 to see var"); printf("\n2r - radix\n2h - heap\n2b - bubble\n2m - merge\n"); return 0;} printf("Write n:"); - scanf("%d",&n); + scanf("%" SCNu32, &n); while(getchar()>'\n'); uint32_t *arr = (uint32_t*)malloc(sizeof(uint32_t) * n); printf("Write n nums:"); - for (int i = 0;i 0; exp *= 10) counting_sort(arr, n, exp); } -uint32_t get_max(uint32_t* arr, int n) { +uint32_t get_max(uint32_t* arr, uint32_t n) { uint32_t max = arr[0]; - for(int i = 1; i < n; i++) + for(uint32_t i = 1; i < n; i++) if(arr[i] > max) max = arr[i]; return max; } -void counting_sort(uint32_t* arr, int n, int exp) { +void counting_sort(uint32_t* arr, uint32_t n, uint32_t exp) { uint32_t output[n]; uint32_t count[10] = {0}; - for(int i = 0; i < n; i++) + for(uint32_t i = 0; i < n; i++) count[(arr[i] / exp) % 10]++; - for(int i = 1; i < 10; i++) + for(uint32_t i = 1; i < 10; i++) count[i] += count[i - 1]; - for(int i = n - 1; i >= 0; i--) { + for(uint32_t i = n; i-- > 0;){ output[count[(arr[i] / exp) % 10] - 1] = arr[i]; count[(arr[i] / exp) % 10]--; } - for(int i = 0; i < n; i++) + for(uint32_t i = 0; i < n; i++) arr[i] = output[i]; } // === === === HEAP SORT === === === -void heapify(uint32_t* arr, int n, int i); +void heapify(uint32_t* arr, uint32_t n, uint32_t i); void swap(uint32_t* a, uint32_t *b); -void sort_heap(uint32_t* arr,int n){ - for(int i = n/2 - 1; i >= 0; i--) - heapify(arr, n, i); +void sort_heap(uint32_t* arr,uint32_t n){ + for(int i = n/2 - 1; i >= 0; i--) + heapify(arr, n, i); - for(int i = n - 1; i > 0; i--) { + for(uint32_t i = n - 1; i > 0; i--) { swap(&arr[0], &arr[i]); heapify(arr, i, 0); } } void swap(uint32_t* a, uint32_t *b) { - int temp = *a; + uint32_t temp = *a; *a = *b; *b = temp; } -void heapify(uint32_t* arr, int n, int i) { - int largest = i; - int left = 2 * i + 1; - int right = 2 * i + 2; +void heapify(uint32_t* arr, uint32_t n, uint32_t i) { + uint32_t largest = i; + uint32_t left = 2 * i + 1; + uint32_t right = 2 * i + 2; if(left < n && arr[left] > arr[largest]) largest = left; @@ -70,12 +70,12 @@ void heapify(uint32_t* arr, int n, int i) { } // === === === BUBBLE SORT === === === -void sort_bubble(uint32_t* arr,int n){ - for(int i = 0; i < n - 1; i++) { - int swapped = 0; - for(int j = 0; j < n - i - 1; j++) { +void sort_bubble(uint32_t* arr,uint32_t n){ + for(uint32_t i = 0; i < n - 1; i++) { + uint32_t swapped = 0; + for(uint32_t j = 0; j < n - i - 1; j++) { if(arr[j] > arr[j + 1]) { - int temp = arr[j]; + uint32_t temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; swapped = 1; @@ -86,38 +86,45 @@ void sort_bubble(uint32_t* arr,int n){ } // === === === MERGE SORT === === === -void merge(uint32_t* arr, int left, int mid, int right); -void sort_merge(uint32_t* arr, int left, int right){ - if(left < right) { - int mid = left + (right - left) / 2; +void sort_merge(uint32_t* arr, uint32_t left, uint32_t right) +{ + uint32_t n = right - left + 1; - sort_merge(arr, left, mid); - sort_merge(arr, mid + 1, right); - merge(arr, left, mid, right); - } -} -void merge(uint32_t* arr, int left, int mid, int right) { - int n1 = mid - left + 1; - int n2 = right - mid; + uint32_t *temp = malloc(sizeof(uint32_t) * n); + if(!temp) return; - int L[n1], R[n2]; + for(uint32_t size = 1; size < n; size *= 2) + { + for(uint32_t start = 0; start < n; start += 2 * size) + { + uint32_t mid = start + size; + uint32_t end = start + 2 * size; - for(int i = 0; i < n1; i++) - L[i] = arr[left + i]; - for(int j = 0; j < n2; j++) - R[j] = arr[mid + 1 + j]; + if(mid > n) mid = n; + if(end > n) end = n; - int i = 0, j = 0, k = left; - while(i < n1 && j < n2) { - if(L[i] <= R[j]) { - arr[k] = L[i]; - i++; - } else { - arr[k] = R[j]; - j++; + uint32_t i = start; + uint32_t j = mid; + uint32_t k = start; + + while(i < mid && j < end) + { + if(arr[left + i] <= arr[left + j]) + temp[k++] = arr[left + i++]; + else + temp[k++] = arr[left + j++]; + } + + while(i < mid) + temp[k++] = arr[left + i++]; + + while(j < end) + temp[k++] = arr[left + j++]; } - k++; + + for(uint32_t i = 0; i < n; i++) + arr[left + i] = temp[i]; } - while(i < n1) { arr[k] = L[i]; i++; k++;} - while(j < n2) { arr[k] = R[j]; j++; k++;} + + free(temp); } diff --git a/1Y-2H/dsa/lab2/data/graph.gp b/1Y-2H/dsa/lab2/data/graph.gp index 871a49d..bfac1f2 100644 --- a/1Y-2H/dsa/lab2/data/graph.gp +++ b/1Y-2H/dsa/lab2/data/graph.gp @@ -5,6 +5,7 @@ set encoding utf8 set grid xtics ytics ls 1 lc rgb "#bbbbbb" lw 1 dt 2 set title "Radix, Heap и Bubble (Log scale)" +set xlabel "Количество элементов в массиве, тыс" offset 0,-1 set ylabel "Время выполнения, с" set xtics rotate by 90 right diff --git a/1Y-2H/dsa/lab2/data/result_dual.png b/1Y-2H/dsa/lab2/data/result_dual.png index 3c4888d..399acb2 100644 Binary files a/1Y-2H/dsa/lab2/data/result_dual.png and b/1Y-2H/dsa/lab2/data/result_dual.png differ diff --git a/1Y-2H/dsa/lab2/data/sort b/1Y-2H/dsa/lab2/data/sort old mode 100755 new mode 100644 index fde6408..fc37718 Binary files a/1Y-2H/dsa/lab2/data/sort and b/1Y-2H/dsa/lab2/data/sort differ diff --git a/1Y-2H/prog.old/.obj/bitstruct.o b/1Y-2H/prog.old/.obj/bitstruct.o new file mode 100644 index 0000000..2e450d8 Binary files /dev/null and b/1Y-2H/prog.old/.obj/bitstruct.o differ diff --git a/1Y-2H/prog.old/.obj/io.o b/1Y-2H/prog.old/.obj/io.o new file mode 100644 index 0000000..9f8597f Binary files /dev/null and b/1Y-2H/prog.old/.obj/io.o differ diff --git a/1Y-2H/prog.old/.obj/main.o b/1Y-2H/prog.old/.obj/main.o new file mode 100644 index 0000000..94c6f42 Binary files /dev/null and b/1Y-2H/prog.old/.obj/main.o differ diff --git a/1Y-2H/prog.old/.obj/matrix.o b/1Y-2H/prog.old/.obj/matrix.o new file mode 100644 index 0000000..50757db Binary files /dev/null and b/1Y-2H/prog.old/.obj/matrix.o differ diff --git a/1Y-2H/prog.old/compile_commands.json b/1Y-2H/prog.old/compile_commands.json new file mode 100644 index 0000000..037f944 --- /dev/null +++ b/1Y-2H/prog.old/compile_commands.json @@ -0,0 +1,44 @@ +[ + { + "file": "src/io.c", + "arguments": [ + "gcc", + "-I./include", + "-g", + "-c", + "src/io.c", + "-o", + ".obj/io.o" + ], + "directory": "/home/oniic/Documents/sibsutisiv522s18/1Y-2H/prog", + "output": ".obj/io.o" + }, + { + "file": "src/main.c", + "arguments": [ + "gcc", + "-I./include", + "-g", + "-c", + "src/main.c", + "-o", + ".obj/main.o" + ], + "directory": "/home/oniic/Documents/sibsutisiv522s18/1Y-2H/prog", + "output": ".obj/main.o" + }, + { + "file": "src/matrix.c", + "arguments": [ + "gcc", + "-I./include", + "-g", + "-c", + "src/matrix.c", + "-o", + ".obj/matrix.o" + ], + "directory": "/home/oniic/Documents/sibsutisiv522s18/1Y-2H/prog", + "output": ".obj/matrix.o" + } +] \ No newline at end of file diff --git a/1Y-2H/prog.old/include/bitstruct.h b/1Y-2H/prog.old/include/bitstruct.h new file mode 100644 index 0000000..a57fbe2 --- /dev/null +++ b/1Y-2H/prog.old/include/bitstruct.h @@ -0,0 +1,15 @@ +#ifndef BITSTRUCT_H +#define BITSTRUCT_H +#include "include.h" +#include "typedef.h" + +#define LED_SET(led, field, value) \ + (led)->l = ((led)->l & LED_MASK_##field) | \ + (((uint64_t)(value) & ((1ULL << LED_SIZE_##field) - 1)) << LED_PADD_##field) + +RGB_LED* create_led(uint16_t temp,uint8_t brg,uint8_t r,uint8_t g,uint8_t b); +char modify_led(RGB_LED* led,LED_WICH wh,uint16_t num); +void set_leds(MATRIX* m,LED_WICH wh, uint16_t num); +void del_leds(MATRIX* m); + +#endif diff --git a/1Y-2H/prog.old/include/case.h b/1Y-2H/prog.old/include/case.h new file mode 100644 index 0000000..3f0b08d --- /dev/null +++ b/1Y-2H/prog.old/include/case.h @@ -0,0 +1,9 @@ +#ifndef CASE +#define CASE + +typedef struct{ + int* ptrFirst; + int* ptrLast; +} CASE; + +#endif diff --git a/1Y-2H/prog.old/include/include.h b/1Y-2H/prog.old/include/include.h new file mode 100644 index 0000000..c6aa981 --- /dev/null +++ b/1Y-2H/prog.old/include/include.h @@ -0,0 +1,17 @@ +#ifndef INCLUDE_H +#define INCLUDE_H + +// INCLUDE + #include + #include + #include + #include + #include // + #include + +// DEFINE + #define BUFF_MAX 10 //(char) <= 254 + #define IN_BUFF_CHARS 10 //(char) <= 254 + +//TypeDef +#endif diff --git a/1Y-2H/prog.old/include/io.h b/1Y-2H/prog.old/include/io.h new file mode 100644 index 0000000..3315d7b --- /dev/null +++ b/1Y-2H/prog.old/include/io.h @@ -0,0 +1,16 @@ +#ifndef IO_H +#define IO_H + +#include "typedef.h" + +// === io.c === + void del_cmd_list(CMD_GRP_ENUM grp); + void create_cmd_list(CMD_GRP_ENUM grp,char* get[],int n); + char buff_input(char *inbuff, char *_buff); + char cmd_buff(char* _buff,CMD_GRP_ENUM grp); + char get_matrix_num(void); + int get_num(void); + + void declarete_cmd_main(); + +#endif diff --git a/1Y-2H/prog.old/include/matrixstruct.h b/1Y-2H/prog.old/include/matrixstruct.h new file mode 100644 index 0000000..05ef017 --- /dev/null +++ b/1Y-2H/prog.old/include/matrixstruct.h @@ -0,0 +1,19 @@ +#ifndef MATRIXSTRUCT_H +#define MATRIXSTRUCT_H + + #define MAX_MATRIX_ALIVE 21 + #include "typedef.h" + + void create_matrix(int rows, int cols); + void input(LED_WICH grp, unsigned char n); + void input_matrix(unsigned char n); + void free_matrix(unsigned char n); + void get_matrix(unsigned char n); + void logic_matrix(unsigned char n1, unsigned char n2); + void edit_matrix(unsigned char n); + void rand_matrix(unsigned char n); + void copy_matrix(unsigned char n1, unsigned char n2); + unsigned char is_Matrix_Exist(unsigned char n); + + +#endif diff --git a/1Y-2H/prog.old/include/typedef.h b/1Y-2H/prog.old/include/typedef.h new file mode 100644 index 0000000..7520b9e --- /dev/null +++ b/1Y-2H/prog.old/include/typedef.h @@ -0,0 +1,109 @@ +#ifndef TYPEDEF_H +#define TYPEDEF_H +#include "include.h" + + + typedef struct __attribute__((aligned(4))){ + uint64_t l; // 14tmp 8brg 8r 8g 8b 4type 2mode + } RGB_LED; + + + typedef struct{ + RGB_LED** leds; + unsigned int n; + } LED_STRIP; + + typedef enum{ + CMD_MAIN, + CMD_LOGIC, + CMD_EDIT, + CMD_LED, + + CMD_GRP_COUNT + }CMD_GRP_ENUM; + + typedef enum{ + CMD_MAIN_CREATE, + CMD_MAIN_INPUT, + CMD_MAIN_DEL, + CMD_MAIN_SHOW, + CMD_MAIN_LOGIC, + CMD_MAIN_EDIT, + CMD_MAIN_RAND, + CMD_MAIN_COPY, + CMD_MAIN_EXIT, + CMD_MAIN_TEST, + + CMD_MAIN_COUNT + }CMD_MAIN_ENUM; + +#define MASK_EXTRACT(start, bits) (((1ULL << (bits)) - 1) << (start)) + + typedef enum{ + LED_PADD_TEMP = 50, + LED_SIZE_TEMP = 14, + LED_MASK_TEMP = ~MASK_EXTRACT(LED_PADD_TEMP,LED_SIZE_TEMP), + + LED_PADD_BR = 42, + LED_SIZE_BR = 8, + LED_MASK_BR = ~MASK_EXTRACT(LED_PADD_BR,LED_SIZE_BR), + + LED_PADD_R = 34, + LED_SIZE_R = 8, + LED_MASK_R = ~MASK_EXTRACT(LED_PADD_R,LED_SIZE_R), + + LED_PADD_G = 26, + LED_SIZE_G = 8, + LED_MASK_G = ~MASK_EXTRACT(LED_PADD_G,LED_SIZE_G), + + LED_PADD_B = 18, + LED_SIZE_B = 8, + LED_MASK_B = ~MASK_EXTRACT(LED_PADD_B,LED_SIZE_B), + + LED_PADD_TYPE = 14, + LED_SIZE_TYPE = 8, + LED_MASK_TYPE = ~MASK_EXTRACT(LED_PADD_TYPE,LED_SIZE_TYPE), // тип контроллера? + + LED_PADD_MODE = 10, + LED_SIZE_MODE = 4, + LED_MASK_MODE = ~MASK_EXTRACT(LED_PADD_MODE,LED_SIZE_MODE), // 16 режимов + + LED_PADD_SPEED = 2, + LED_SIZE_SPEED = 8, + LED_MASK_SPEED = ~MASK_EXTRACT(LED_PADD_SPEED,LED_SIZE_SPEED), // Скорость анимации режима + + LED_PADD_SSCALE = 0, + LED_SIZE_SSCALE = 2, + LED_MASK_SSCALE = ~MASK_EXTRACT(LED_PADD_SSCALE,LED_SIZE_SSCALE) // множитель скорости ч.м.с + }LED_INFO; + + typedef enum{ + LED_TEMP, + LED_BR, + LED_R,LED_G,LED_B, + LED_TYPE, + LED_MODE, + LED_SPEED,LED_SSCALE + }LED_WICH; + + typedef struct{ + unsigned int n; + char** str; + }CMD_LIST; + + typedef struct{ + CMD_LIST* list[CMD_GRP_COUNT]; + }CMD_GRP_LIST; + + typedef struct { + int rows; + int cols; + RGB_LED*** led; + } MATRIX; + + typedef struct{ + unsigned int n; + MATRIX** list; + }MATRIX_LIST; + +#endif diff --git a/1Y-2H/prog.old/input b/1Y-2H/prog.old/input new file mode 100644 index 0000000..6c26bd0 --- /dev/null +++ b/1Y-2H/prog.old/input @@ -0,0 +1,39 @@ +create 3 3 +input 0 +1 2 3 4 5 6 7 8 9 +10 11 12 13 14 15 16 17 18 +19 20 21 22 23 24 25 26 27 +28 29 30 31 32 33 34 35 36 +37 38 39 40 41 42 43 44 45 +46 47 48 49 50 51 52 53 54 +55 56 57 58 59 60 61 62 63 + +show 0 +n + +create 3 3 +rand 1 +show 1 +n + +logic 0 1 >= +n +logic 0 0 == +n + +edit 0 +point 1:1 +sub +10 +exit + +show 0 +n + +copy 0 1 +show 1 +n + +del 1 +exit + diff --git a/1Y-2H/prog.old/lab3/.obj/bitrgbled.o b/1Y-2H/prog.old/lab3/.obj/bitrgbled.o new file mode 100644 index 0000000..ff61d3e Binary files /dev/null and b/1Y-2H/prog.old/lab3/.obj/bitrgbled.o differ diff --git a/1Y-2H/prog.old/lab3/.obj/contstruct.o b/1Y-2H/prog.old/lab3/.obj/contstruct.o new file mode 100644 index 0000000..b4fd380 Binary files /dev/null and b/1Y-2H/prog.old/lab3/.obj/contstruct.o differ diff --git a/1Y-2H/prog.old/lab3/.obj/main.o b/1Y-2H/prog.old/lab3/.obj/main.o new file mode 100644 index 0000000..2dc69f3 Binary files /dev/null and b/1Y-2H/prog.old/lab3/.obj/main.o differ diff --git a/1Y-2H/prog.old/lab3/.obj/matrix2d.o b/1Y-2H/prog.old/lab3/.obj/matrix2d.o new file mode 100644 index 0000000..7c3f8df Binary files /dev/null and b/1Y-2H/prog.old/lab3/.obj/matrix2d.o differ diff --git a/1Y-2H/prog.old/lab3/.vscode/c_cpp_properties.json b/1Y-2H/prog.old/lab3/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..92dd19c --- /dev/null +++ b/1Y-2H/prog.old/lab3/.vscode/c_cpp_properties.json @@ -0,0 +1,16 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c23", + "cppStandard": "gnu++23", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/1Y-2H/prog.old/lab3/.vscode/settings.json b/1Y-2H/prog.old/lab3/.vscode/settings.json new file mode 100644 index 0000000..70e34ec --- /dev/null +++ b/1Y-2H/prog.old/lab3/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "C_Cpp.errorSquiggles": "disabled" +} \ No newline at end of file diff --git a/1Y-2H/prog.old/lab3/build/bitrgbled.o b/1Y-2H/prog.old/lab3/build/bitrgbled.o new file mode 100644 index 0000000..529f35c Binary files /dev/null and b/1Y-2H/prog.old/lab3/build/bitrgbled.o differ diff --git a/1Y-2H/prog.old/lab3/build/contstruct.o b/1Y-2H/prog.old/lab3/build/contstruct.o new file mode 100644 index 0000000..f32f7c8 Binary files /dev/null and b/1Y-2H/prog.old/lab3/build/contstruct.o differ diff --git a/1Y-2H/prog.old/lab3/build/main.o b/1Y-2H/prog.old/lab3/build/main.o new file mode 100644 index 0000000..6479751 Binary files /dev/null and b/1Y-2H/prog.old/lab3/build/main.o differ diff --git a/1Y-2H/prog.old/lab3/build/matrix2d.o b/1Y-2H/prog.old/lab3/build/matrix2d.o new file mode 100644 index 0000000..bc7a2d3 Binary files /dev/null and b/1Y-2H/prog.old/lab3/build/matrix2d.o differ diff --git a/1Y-2H/prog.old/lab3/include/bitrgbled.h b/1Y-2H/prog.old/lab3/include/bitrgbled.h new file mode 100644 index 0000000..174a88c --- /dev/null +++ b/1Y-2H/prog.old/lab3/include/bitrgbled.h @@ -0,0 +1,46 @@ +typedef struct { + unsigned int rgbd; + _Alignas(unsigned int) unsigned short efg; +} rgbled; + +typedef struct { + unsigned int rgbd; + unsigned int fg; + unsigned int e; +} rgbled_bad; + +rgbled_bad* create_bad_led(); + +// rgbled +// | unsigned int rgbd | +// dddd dddd rrrr rrrr gggg gggg bbbb bbbb +// .... ftte eeee eeee ____ ____ ____ ____ +// |unsigned short efg| padding | +// 8 байт + +// rgbled_bad +// | unsigned int rgbd | +// dddd dddd rrrr rrrr gggg gggg bbbb bbbb +// |unsigned int fg | +// .... .... .... .... .... .... .... .ftt +// | unsigned int e | +// .... .... .... .... .... ...e eeee eeee +// 12 байт + +rgbled* create_led(void); + +void set_Temp(rgbled* led, int tempK); +void set_R(rgbled* led, int red); +void set_G(rgbled* led, int green); +void set_B(rgbled* led, int blue); +void set_D(rgbled* led, int bright); +void set_F(rgbled* led, int type); +void set_T(rgbled* led, int work); +int get_Temp(rgbled* led); +int get_R(rgbled* led); +int get_G(rgbled* led); +int get_B(rgbled* led); +int get_D(rgbled* led); +int get_F(rgbled* led); +int get_T(rgbled* led); +void print_colorHEX(rgbled* led); diff --git a/1Y-2H/prog.old/lab3/include/contstruct.h b/1Y-2H/prog.old/lab3/include/contstruct.h new file mode 100644 index 0000000..9991062 --- /dev/null +++ b/1Y-2H/prog.old/lab3/include/contstruct.h @@ -0,0 +1,18 @@ +typedef struct { + matrix2d** data; + int size; + int capacity; +} tdQueue; + +#define ERRALLOC do{ \ +fputs("Ошибка выделения памяти\n", \ +stderr); exit(EXIT_FAILURE); } while(0) + +tdQueue* queue_create(void); +void queue_decontruct(tdQueue* queue); +bool queue_is_empty(tdQueue* queue); +int queue_size(tdQueue* queue); +void queue_enqueue(tdQueue* queue, matrix2d* data); +matrix2d* queue_dequeue(tdQueue* queue); +matrix2d* queue_peek(tdQueue* queue); +void queue_clear(tdQueue* queue); diff --git a/1Y-2H/prog.old/lab3/include/includes.h b/1Y-2H/prog.old/lab3/include/includes.h new file mode 100644 index 0000000..ec58149 --- /dev/null +++ b/1Y-2H/prog.old/lab3/include/includes.h @@ -0,0 +1,9 @@ +#include +#include +#include +#include +#include +#include +#include "bitrgbled.h" +#include "matrix2d.h" +#include "contstruct.h" \ No newline at end of file diff --git a/1Y-2H/prog.old/lab3/include/matrix2d.h b/1Y-2H/prog.old/lab3/include/matrix2d.h new file mode 100644 index 0000000..2053c8c --- /dev/null +++ b/1Y-2H/prog.old/lab3/include/matrix2d.h @@ -0,0 +1,16 @@ +typedef struct { + const unsigned int x; + const unsigned int y; + void*** ptr; +} matrix2d; + +matrix2d* create_matrix2d(unsigned int x, unsigned int y); +void deconstruct_matrix2d(matrix2d* mat); +void print_matrix2d(matrix2d* mat); +void fill_rand_matrix2d(matrix2d* mat); +void set_elem_matrix2d(matrix2d* mat, void* elem, unsigned int x, unsigned int y); +bool not_equal_mtrx(matrix2d* matA, matrix2d* matB); +bool equal_mtrx(matrix2d* matA, matrix2d* matB); +matrix2d* get_row_matrix2d(matrix2d* mat, int y); +matrix2d* get_column_matrix2d(matrix2d* mat, int x); +matrix2d* transpond_mtrx(matrix2d* mat); diff --git a/1Y-2H/prog.old/lab3/makefile b/1Y-2H/prog.old/lab3/makefile new file mode 100644 index 0000000..dde4c72 --- /dev/null +++ b/1Y-2H/prog.old/lab3/makefile @@ -0,0 +1,39 @@ +CC = gcc + +CFLAGS = -I./include -g +LDFLAGS = -lm -g -lmenu + +TARGET = matrix + +SRC_DIR = src +OBJ_DIR = .obj + +SRC = $(wildcard $(SRC_DIR)/*.c) +OBJ = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC)) + +all: $(TARGET) + +$(TARGET): $(OBJ) + $(CC) $(OBJ) -o $(TARGET) $(LDFLAGS) + +# Компиляция .c -> .o в .obj/ +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR) + $(CC) $(CFLAGS) -c $< -o $@ + +# Создание папки для объектов +$(OBJ_DIR): + mkdir -p $(OBJ_DIR) + +run: + ./matrix < input > output + +clean: + rm -rf $(OBJ_DIR) $(TARGET) output + +.cc: $(OBJ) + mkdir -p $(OBJ_DIR) + @for src in $(SRC); do \ + obj=$(OBJ_DIR)/$$(basename $$src .c).o; \ + bear -- $(CC) $(CFLAGS) -c $$src -o $$obj; \ + done + mv ./compile_commands.json .build/ || true diff --git a/1Y-2H/prog.old/lab3/matrix b/1Y-2H/prog.old/lab3/matrix new file mode 100755 index 0000000..142ace8 Binary files /dev/null and b/1Y-2H/prog.old/lab3/matrix differ diff --git a/1Y-2H/prog.old/lab3/src/bitrgbled.c b/1Y-2H/prog.old/lab3/src/bitrgbled.c new file mode 100644 index 0000000..bb295c9 --- /dev/null +++ b/1Y-2H/prog.old/lab3/src/bitrgbled.c @@ -0,0 +1,132 @@ +#include "includes.h" + +static const char* control_type[] = {"Voltage", "PWM"}; +static const char* work_types[] = {"Glowing", "Blinking", "Breath"}; + +#define MASK_D 0xff000000 +#define MASK_R 0x00ff0000 +#define MASK_G 0x0000ff00 +#define MASK_B 0x000000ff +#define SHIFT_D 24 +#define SHIFT_R 16 +#define SHIFT_G 8 + +#define MASK_F 0x0800 +#define MASK_T 0x0600 +#define MASK_E 0x01ff +#define SHIFT_F 11 +#define SHIFT_T 9 + +rgbled* create_led() { + rgbled* led = (rgbled*)malloc(sizeof(rgbled)); + set_Temp(led, 0); + set_R(led, 0); + set_D(led, 255); + set_T(led, 0); + set_F(led, 0); + return led; +} + +rgbled_bad* create_bad_led() { + rgbled_bad* led = (rgbled_bad*)malloc(sizeof(rgbled_bad)); + return led; +} + +void set_Temp(rgbled* led, int tempK) { + if (tempK < 0 || tempK > 51200) return; + tempK /= 100; + int red, green, blue; + if (tempK <= 66) { + green = 99.4708025861 * log(tempK) - 161.1195681661; + red = 255; + if (tempK <= 19) { + blue = 0; + } else { + blue = 138.5177312231 * log((tempK)-10) - 305.0447927307; + } + } else { + red = 329.698727446 * powf((tempK-60), -0.1332047592); + green = 288.1221695283 * powf((tempK - 60), -0.0755148492); + blue = 255; + } + set_R(led, red); + set_G(led, green); + set_B(led, blue); + led->efg = (led->efg & ~MASK_E) | ((tempK << 0) & MASK_E); +} + +void set_R(rgbled* led, int red) { + if (red < 0 || red > 255) return; + led->rgbd = (led->rgbd & ~MASK_R) | ((red << SHIFT_R) & MASK_R); + led->efg = (led->efg & ~MASK_E) | ((0) & MASK_E); +} + +void set_G(rgbled* led, int green) { + if (green < 0 || green > 255) return; + led->rgbd = (led->rgbd & ~MASK_G) | ((green << SHIFT_G) & MASK_G); + led->efg = (led->efg & ~MASK_E) | ((0) & MASK_E); +} + +void set_B(rgbled* led, int blue) { + if (blue < 0 || blue > 255) return; + led->rgbd = (led->rgbd & ~MASK_B) | ((blue << 0) & MASK_B); + led->efg = (led->efg & ~MASK_E) | ((0) & MASK_E); +} + +void set_D(rgbled* led, int bright) { + if (bright < 0 || bright > 255) return; + led->rgbd = (led->rgbd & ~MASK_D) | ((bright << SHIFT_D) & MASK_D); +} + +void set_T(rgbled* led, int work) { + if (work < 0 || work > 3) return; + led->efg = (led->efg & ~MASK_T) | ((work << SHIFT_T) & MASK_T); +} + +void set_F(rgbled* led, int type) { + if (type < 0 || type > 1) return; + led->efg = (led->efg & ~MASK_F) | ((type << SHIFT_F) & MASK_F); +} + +int get_Temp(rgbled* led) { + return (led->efg & MASK_E)*100; +} + +int get_R(rgbled* led) { + return (led->rgbd & MASK_R) >> SHIFT_R; +} + +int get_G(rgbled* led) { + return (led->rgbd & MASK_G) >> SHIFT_G; +} + +int get_B(rgbled* led) { + return (led->rgbd & MASK_B); +} + +int get_D(rgbled* led) { + return (led->rgbd & MASK_D) >> SHIFT_D; +} + +int get_F(rgbled* led) { + return (led->efg & MASK_F) >> SHIFT_F; +} + +int get_T(rgbled* led) { + return (led->efg & MASK_T) >> SHIFT_T; +} + +void hex_color(int num) { + printf("%c%c", ((num/16) > 9) ? 'a'+(num / 16)-10 : '0'+(num/16), ((num%16) > 9) ? 'a'+(num%16)-10 : '0'+(num%16)); +} + +void print_colorHEX(rgbled* led) { + int r = get_R(led)*(get_D(led)/255); + int g = get_G(led)*(get_D(led)/255); + int b = get_B(led)*(get_D(led)/255); + //printf("(%d, %d, %d) ", r, g, b); + putchar('#'); + hex_color(r); + hex_color(g); + hex_color(b); +} diff --git a/1Y-2H/prog.old/lab3/src/contstruct.c b/1Y-2H/prog.old/lab3/src/contstruct.c new file mode 100644 index 0000000..82b21e8 --- /dev/null +++ b/1Y-2H/prog.old/lab3/src/contstruct.c @@ -0,0 +1,69 @@ +#include "includes.h" + +tdQueue* queue_create() { + tdQueue* queue = (tdQueue*)malloc(sizeof(tdQueue)); + queue->data = NULL; + queue->size = 0; + queue->capacity = 0; + return queue; +} + +void queue_decontruct(tdQueue* queue) +{ + int i = 0; + while ((i < queue->size) && (queue->data[i] != NULL)) { + deconstruct_matrix2d(queue->data[i]); + i++; + } + free(queue); +} + +bool queue_is_empty(tdQueue* queue) +{ + return queue->size == 0; +} + +int queue_size(tdQueue* queue) +{ + return queue->size; +} + +void queue_enqueue(tdQueue* queue, matrix2d* data) +{ + if (queue->capacity == queue->size) { + if (queue->capacity) { + queue->capacity = ceil(queue->capacity*sqrt(2)); + queue->data = (matrix2d**)realloc(queue->data, sizeof(matrix2d*)*(queue->capacity)); + } else { + queue->capacity = ceil(sqrt(2)); + queue->data = (matrix2d**)malloc(sizeof(matrix2d*)*(queue->capacity)); + } + } + queue->data[queue->size++] = data; +} + +matrix2d* queue_dequeue(tdQueue* queue) +{ + if (queue->data == NULL) return NULL; + matrix2d* data = queue->data[0]; + for (int i = 1; i < queue->size; i++) { + queue->data[i-1] = queue->data[i]; + } + queue->size -= 1; + return data; +} + +matrix2d* queue_peek(tdQueue* queue) +{ + if (queue->data == NULL) return NULL; + matrix2d* data = queue->data[0]; + return data; +} + +void queue_clear(tdQueue* queue) +{ + int i = 0; + while (i < queue->capacity && queue->data[i] != NULL) + deconstruct_matrix2d((matrix2d*) (queue->data)[i++]); + queue->size = 0; +} diff --git a/1Y-2H/prog.old/lab3/src/main.c b/1Y-2H/prog.old/lab3/src/main.c new file mode 100644 index 0000000..d76802a --- /dev/null +++ b/1Y-2H/prog.old/lab3/src/main.c @@ -0,0 +1,42 @@ +#include "includes.h" + +int main(void) { + tdQueue* queue = queue_create(); + printf("queue is empty? %i\n", queue_is_empty(queue)); + printf("ptr - %p %p\n", queue_peek(queue), queue_dequeue(queue)); + matrix2d* mat = create_matrix2d(2, 2); + int temp = -1; + rgbled* led = create_led(); + for (int y = 0; y < mat->y; y++) + for (int x = 0; x < mat->x; x++) { + led = create_led(); + while(scanf("%d", &temp) != 1 || temp < 0 || temp >= 511000) continue; + set_Temp(led, temp); + set_elem_matrix2d(mat, (void*)led, x, y); + temp = -1; + } + queue_enqueue(queue, mat); + printf("queue is empty? %i\n", queue_is_empty(queue)); + printf("Size queue? %i (%i)\n", queue_size(queue), queue->capacity); + print_matrix2d(queue_peek(queue)); + for (int i = 0; i < 500000; i++) { + mat = create_matrix2d(10, 10); + fill_rand_matrix2d(mat); + queue_enqueue(queue, mat); + } + printf("Size queue? %i (%i)\n", queue_size(queue), queue->capacity); + mat = queue_dequeue(queue); + print_matrix2d(mat); + deconstruct_matrix2d(mat); + printf("Size queue? %i (%i)\n", queue_size(queue), queue->capacity); + tdQueue* queue_b = queue_create(); + for (int i = 0; i < 500000; i++) { + mat = create_matrix2d(10, 10); + fill_rand_matrix2d(mat); + queue_enqueue(queue_b, mat); + } + printf("Size queue_b? %i (%i)\n", queue_size(queue_b), queue_b->capacity); + queue_decontruct(queue); + queue_decontruct(queue_b); + return 0; +} diff --git a/1Y-2H/prog.old/lab3/src/matrix2d.c b/1Y-2H/prog.old/lab3/src/matrix2d.c new file mode 100644 index 0000000..c6e140a --- /dev/null +++ b/1Y-2H/prog.old/lab3/src/matrix2d.c @@ -0,0 +1,115 @@ +#include "includes.h" + +int getrand(int min, int max) +{ + return (int)rand() / (RAND_MAX + 1.0) * (max - min) + min; +} + +matrix2d* create_matrix2d(unsigned int x, unsigned int y) +{ + matrix2d* mat = (matrix2d*)malloc(sizeof(matrix2d)); + mat->ptr = (void***)malloc(sizeof(void**) * x); + for (int i = 0; i < x; i++) + mat->ptr[i] = (void**)malloc(sizeof(void*) * y); + for (int i = 0; i < x; i++) + for (int j = 0; j < y; j++) + mat->ptr[i][j] = (void*)create_led(); + *((unsigned int*)&(mat->x)) = x; + *((unsigned int*)&(mat->y)) = y; + return mat; +} + +void deconstruct_matrix2d( matrix2d* mat) +{ + for (int i = 0; i < mat->x; i++){ + for (int j = 0; j < mat->y; j++) + free(mat->ptr[i][j]); + free(mat->ptr[i]); + } + free(mat->ptr); + free(mat); +} + +matrix2d* get_row_matrix2d(matrix2d* mat, int y) +{ + if (y >= mat->y) + return NULL; + matrix2d* res = create_matrix2d( mat->x, 1); + for (int x = 0; x < mat->x; x++) + memcpy(res->ptr[x][0], mat->ptr[x][y], sizeof(rgbled)); + return res; +} + +matrix2d* get_column_matrix2d(matrix2d* mat, int x) +{ + if (x >= mat->x) + return NULL; + matrix2d* res = create_matrix2d(1, mat->y); + for (int y = 0; y < mat->y; y++) + memcpy(res->ptr[0][y], mat->ptr[x][y], sizeof(rgbled)); + return res; +} + +void print_matrix2d(matrix2d* mat) +{ + for (int y = 0; y < mat->y; y++) { + for (int x = 0; x < mat->x; x++) { + print_colorHEX((rgbled*)mat->ptr[x][y]); + putchar(' '); + } + putchar('\n'); + } +} + +void fill_rand_matrix2d(matrix2d* mat) +{ + for (int y = 0; y < mat->y; y++) + for (int x = 0; x < mat->x; x++) { + set_R(mat->ptr[x][y], getrand(0, 255)); + set_G(mat->ptr[x][y], getrand(0, 255)); + set_B(mat->ptr[x][y], getrand(0, 255)); + } +} + +matrix2d* transpond_mtrx(matrix2d* mat) +{ + matrix2d* res = create_matrix2d(mat->y, mat->x); + for (int y = 0; y < mat->y; y++) + for (int x = 0; x < mat->x; x++) + memcpy(res->ptr[y][x], mat->ptr[x][y], sizeof(rgbled)); + return res; +} + +bool equal_mtrx(matrix2d* matA, matrix2d* matB) +{ + if (matA->x != matB->x || matA->y != matB->y) + return false; + for (int x = 0; x < matA->x; x++) + for (int y = 0; y < matA->y; y++) { + rgbled* ledA = (rgbled*)matA->ptr[x][y]; + rgbled* ledB = (rgbled*)matB->ptr[x][y]; + if ((ledA->rgbd != ledB->rgbd) || (ledA->efg != ledB->efg)) + return false; + } + return true; +} + +bool not_equal_mtrx(matrix2d* matA, matrix2d* matB) +{ + if (matA->x != matB->x || matA->y != matB->y) + return true; + for (int x = 0; x < matA->x; x++) + for (int y = 0; y < matA->y; y++) { + rgbled* ledA = (rgbled*)matA->ptr[x][y]; + rgbled* ledB = (rgbled*)matB->ptr[x][y]; + if ((ledA->rgbd == ledB->rgbd) && (ledA->efg == ledB->efg)) + return false; + } + return true; +} + +void set_elem_matrix2d(matrix2d* mat, void* elem, unsigned int x, unsigned int y) +{ + free(mat->ptr[x][y]); + mat->ptr[x][y] = elem; +} diff --git a/1Y-2H/prog.old/lab3/test_file b/1Y-2H/prog.old/lab3/test_file new file mode 100644 index 0000000..fb1aed0 --- /dev/null +++ b/1Y-2H/prog.old/lab3/test_file @@ -0,0 +1,2 @@ +10000 8000 +2500 6500 diff --git a/1Y-2H/prog/makefile b/1Y-2H/prog.old/makefile similarity index 100% rename from 1Y-2H/prog/makefile rename to 1Y-2H/prog.old/makefile diff --git a/1Y-2H/prog.old/matrix b/1Y-2H/prog.old/matrix new file mode 100755 index 0000000..860867f Binary files /dev/null and b/1Y-2H/prog.old/matrix differ diff --git a/1Y-2H/prog/include/bitstruct.h b/1Y-2H/prog.old/output similarity index 100% rename from 1Y-2H/prog/include/bitstruct.h rename to 1Y-2H/prog.old/output diff --git a/1Y-2H/prog.old/src/bitstruct.c b/1Y-2H/prog.old/src/bitstruct.c new file mode 100644 index 0000000..8d589d2 --- /dev/null +++ b/1Y-2H/prog.old/src/bitstruct.c @@ -0,0 +1,89 @@ +/* === === === bitstruct.c === === === */ + +#include "include.h" +#include "typedef.h" +#include "bitstruct.h" +//extern LED_STRIP strip; + +/*void declarate_led_strip(){ + strip.led=NULL; + strip.n=0; +} */ + + +RGB_LED* create_led(uint16_t temp,uint8_t brg,uint8_t r,uint8_t g,uint8_t b) +{ + RGB_LED* led = malloc(sizeof(RGB_LED)); + if (!led) return NULL; + + { + led->l = 0; + LED_SET(led, TEMP, temp); + LED_SET(led, BR, brg); + LED_SET(led, R, r); + LED_SET(led, G, g); + LED_SET(led, B, b); + } + + // strip.led = (RGB_LED**)realloc(strip.led,strip.n+1*sizeof(RGB_LED*)); + // strip.led[strip.n] = led; + // strip.n++; + return led; +} + +char modify_led(RGB_LED* led,LED_WICH wh,uint16_t num){ + switch(wh){ + case LED_TEMP: + LED_SET(led, TEMP, num); + break; + case LED_BR: + LED_SET(led, BR, num); + break; + case LED_R: + LED_SET(led, R, num); + break; + case LED_G: + LED_SET(led, G, num); + break; + case LED_B: + LED_SET(led, B, num); + break; + case LED_TYPE: + LED_SET(led, TYPE, num); + break; + case LED_MODE: + LED_SET(led, MODE, num); + break; + case LED_SPEED: + LED_SET(led, SPEED, num); + break; + case LED_SSCALE: + LED_SET(led, SSCALE, num); + break; + } + return 0; +} + +void set_leds(MATRIX* m,LED_WICH wh, uint16_t num){ + for (int i = 0; i < m->rows; i++){ + for (int j = 0; j < m->cols; j++){ + modify_led(m->led[i][j], wh, num); + } + } +} + +void del_leds(MATRIX* m){ + for (int i = 0; i < m->rows; i++){ + for (int j = 0; j < m->cols; j++){ + free(m->led[i][j]); + } + free(m->led[i]); + } + free(m->led); +} + +/*void del_strip(){ + for(int i = strip.n-1;i>=0;i--) + del_led(i); +}*/ + diff --git a/1Y-2H/prog.old/src/io.c b/1Y-2H/prog.old/src/io.c new file mode 100644 index 0000000..2227f3d --- /dev/null +++ b/1Y-2H/prog.old/src/io.c @@ -0,0 +1,122 @@ +/* === === === io.c === === === */ + +#include "include.h" +#include "typedef.h" +#include "io.h" + +CMD_GRP_LIST cmd_list; + +void create_cmd_list(CMD_GRP_ENUM grp,char* get[],int n){ + if(grp == CMD_GRP_COUNT)return; + + CMD_LIST* newlist = (CMD_LIST*)malloc(sizeof(CMD_LIST)); + newlist->str = (char**)malloc(n*sizeof(char*)); + for(int i = 0;istr[i] = (char*)malloc((strlen(get[i])+1)*sizeof(char)); + strcpy(newlist->str[i],get[i]); + } + + del_cmd_list(grp); + cmd_list.list[grp] = newlist; + cmd_list.list[grp]->n=n; +} + +void del_cmd_list(CMD_GRP_ENUM grp){ + CMD_LIST** list = &cmd_list.list[grp]; + if((*list)==NULL) return; + for(int i = 0; i < (*list)->n; i++) + free((*list)->str[i]); + free((*list)->str); + free(*list); +} + +void declarete_cmd_main(){ + create_cmd_list(CMD_MAIN,(char*[]) + {"create","input","del","show", + "logic","edit","rand","copy", + "exit","test"},10); +} + +char buff_input(char *inbuff, char *_buff){ + + *inbuff = 0; + { // INPUT + char ch; + memset(_buff, 0, BUFF_MAX); + while((ch=getchar())>' '&&*inbuff='a' && _buff[0] <= 'z'){ + char cmd = cmd_buff(_buff,CMD_MAIN); + if(cmd==15)return -1; + return cmd; + } + + return 0; +} + +char cmd_buff(char* _buff,CMD_GRP_ENUM grp){ + unsigned int n = cmd_list.list[grp]->n; + char** list = cmd_list.list[grp]->str; + + for (int i = 0;i0&&*_buff>' '); + + long int num = 0; + char flagIsDec = 1; + { // GetNum + int i = 0; + if(_buff[0]=='-'){i++;flagIsDec = -1;} + + for(; i= '0' && _buff[i] <= '9') + num = (num*10) + (_buff[i]-'0'); + num *= flagIsDec; + } + if (num>=matrix_l.n)num = matrix_l.n; + if (num<0)num = 0; + return num; +} + +int get_num(void){ + char inbuff; + char _buff[BUFF_MAX]; + while(buff_input(&inbuff,_buff)>0&&*_buff>' '); + + long int num = 0; + char flagIsDec = 1; + { // GetNum + int i = 0; + if(_buff[0]=='-'){i++;flagIsDec = -1;} + + for(; i= '0' && _buff[i] <= '9') + num = (num*10) + (_buff[i]-'0'); + num *= flagIsDec; + } + if (num>INT_MAX)num = INT_MAX; + if (num= 0); + + del_cmd_list(CMD_MAIN); + + return 0; +} + diff --git a/1Y-2H/prog.old/src/matrix.c b/1Y-2H/prog.old/src/matrix.c new file mode 100644 index 0000000..8a5af7a --- /dev/null +++ b/1Y-2H/prog.old/src/matrix.c @@ -0,0 +1,348 @@ +/* === === === matrix.c === === === */ + +#include "include.h" +#include "matrixstruct.h" +#include "bitstruct.h" +#include "io.h" + +extern MATRIX_LIST matrix_l; + +void create_matrix(int rows,int cols) { + MATRIX* m = (MATRIX*)malloc(sizeof(MATRIX)); + m->rows = rows; + m->cols = cols; + m->led = (RGB_LED***)malloc(rows * sizeof(RGB_LED**)); + + for (int i = 0; i < rows; i++){ + m->led[i] = (RGB_LED**)malloc(cols * sizeof(RGB_LED*)); + for (int j = 0; j < cols; j++) + m->led[i][j] = create_led(0,0,0,0,0); + } + + matrix_l.list = (MATRIX**)realloc(matrix_l.list,(matrix_l.n+1)*sizeof(MATRIX*)); + matrix_l.list[matrix_l.n] = m; + matrix_l.n++; +} + +void input(LED_WICH grp,unsigned char n){ + int maxrow = matrix_l.list[n]->rows; + int maxcol = matrix_l.list[n]->cols; + RGB_LED*** led = matrix_l.list[n]->led; + + for(int r = 0;r= matrix_l.n) return; + MATRIX* m = matrix_l.list[n]; + for (int i = 0; i < m->rows; i++){ + for (int j = 0; j < m->cols; j++) + free(m->led[i][j]); + free(m->led[i]); + } + free(m->led); + free(matrix_l.list[n]); + + for(int i = n; i < matrix_l.n-1; i++) + matrix_l.list[i] = matrix_l.list[i+1]; + + matrix_l.n--; + if (matrix_l.n == 0) { + free(matrix_l.list); + matrix_l.list = NULL; + } else { + matrix_l.list = realloc(matrix_l.list, matrix_l.n * sizeof(MATRIX*)); + } +} + +static uint64_t extract(uint64_t l, int padd, int size){ + return (l >> padd) & ((1ULL << size) - 1); +} + +void get_matrix(unsigned char n){ + int rows = matrix_l.list[n]->rows; + int cols = matrix_l.list[n]->cols; + RGB_LED*** led = matrix_l.list[n]->led; + + for(int r = 0;rl, LED_PADD_R, LED_SIZE_R), + extract(l->l, LED_PADD_TEMP, LED_SIZE_TEMP)); + } + putchar('\n'); + + for(int c = 0;cl, LED_PADD_G, LED_SIZE_G), + extract(l->l, LED_PADD_BR, LED_SIZE_BR)); + } + putchar('\n'); + + for(int c = 0;cl, LED_PADD_B, LED_SIZE_B), + extract(l->l, LED_PADD_TYPE, LED_SIZE_TYPE), + extract(l->l, LED_PADD_MODE, LED_SIZE_MODE)); + } + putchar('\n'); + putchar('\n'); + } +} +char edit_is_cmd(char _buff[BUFF_MAX],char inbuff,unsigned char n,int* r,int* c,char* mode,char *wich){ + int rows = matrix_l.list[n]->rows; + int cols = matrix_l.list[n]->cols; + + create_cmd_list(CMD_EDIT,(char*[]){"point","add","sub","exit"},4); + char loc_cmd = cmd_buff(_buff,CMD_EDIT); + + if (loc_cmd == 1) { + buff_input(&inbuff, _buff); + long pr = 0, pc = 0; + int i = 0; + + for (; i < inbuff && (_buff[i] != ':' && _buff[i] != ',' && _buff[i] != '.'); i++) + if (_buff[i] >= '0' && _buff[i] <= '9') + pr = pr * 10 + (_buff[i] - '0'); + + for (i++; i < inbuff; i++) + if (_buff[i] >= '0' && _buff[i] <= '9') + pc = pc * 10 + (_buff[i] - '0'); + + if (pr < rows && pc < cols) { + *r = (int)pr; + *c = (int)pc; + } + return 1; + } + + if (loc_cmd == 2) { *mode = *mode==1?0:1; return 1; } + if (loc_cmd == 3) { *mode = *mode==2?0:2; return 1; } + if (loc_cmd == 4) { *mode = *mode==3?0:3; return 1; } + + create_cmd_list(CMD_LED,(char*[]){"temp","brg","r","g","b","type","mode","speed","sscale"},9); + char wich_cmd = cmd_buff(_buff,CMD_LED) - 1; + + if (wich_cmd >= 0) + *wich = (*wich != wich_cmd && wich_cmd+1) ? wich_cmd : *wich; + + return 0; +} +void edit_matrix(unsigned char n) { + int rows = matrix_l.list[n]->rows; + int cols = matrix_l.list[n]->cols; + char inbuff; + char _buff[BUFF_MAX]; + + RGB_LED*** led = matrix_l.list[n]->led; + + int r = 0, c = 0; + char mode = 0; + char wich = 0; + + while (r < rows) { + char input = buff_input(&inbuff,_buff); + if (mode == 3) break; + if (input == -1) break; + + if(edit_is_cmd(_buff,inbuff,n,&r,&c,&mode,&wich)) continue; + + long num = 0; + int i = 0, sign = 1; + + if (inbuff > 0 && _buff[0] == '-') { sign = -1; i++; } + for (; i < inbuff; i++) { + if (_buff[i] >= '0' && _buff[i] <= '9') + num = num * 10 + (_buff[i] - '0'); + } + num *= sign; + + uint64_t old = 0; + switch(wich){ + case LED_TEMP: + old = (led[r][c]->l >> LED_PADD_TEMP) & + ((1ULL<l >> LED_PADD_BR) & + ((1ULL<l >> LED_PADD_R) & + ((1ULL<l >> LED_PADD_G) & + ((1ULL<l >> LED_PADD_B) & + ((1ULL<l >> LED_PADD_TYPE) & + ((1ULL<l >> LED_PADD_MODE) & + ((1ULL<l >> LED_PADD_SPEED)& + ((1ULL<l >> LED_PADD_SSCALE)& + ((1ULL<= cols) { + c = 0; + r++; + } + } +} + +long long int get_matrix_cost(unsigned char n){ + int rows = matrix_l.list[n]->rows; + int cols = matrix_l.list[n]->cols; + RGB_LED*** led = matrix_l.list[n]->led; + + long long int cost=0; + + for(int r = 0;rl, LED_PADD_R, LED_SIZE_R); + uint64_t G = extract(l->l, LED_PADD_G, LED_SIZE_G); + uint64_t B = extract(l->l, LED_PADD_B, LED_SIZE_B); + uint64_t TEMP = extract(l->l, LED_PADD_TEMP, LED_SIZE_TEMP); + uint64_t BR = extract(l->l, LED_PADD_BR, LED_SIZE_BR); + uint64_t MODE = extract(l->l, LED_PADD_MODE, LED_SIZE_MODE); + + cost += ((R + G + B) + - (TEMP * (((long double)BR)/50))) + * MODE; + } + } + + return cost; +} + +void logic_matrix(unsigned char n1,unsigned char n2){ + char inbuff; + char _buff[BUFF_MAX]; + + char cmd = 0; + { + buff_input(&inbuff,_buff); + char* cmds[] = {"==","!=",">=","<=",">","<"}; + create_cmd_list(CMD_LOGIC,cmds,6); + + cmd = cmd_buff(_buff,CMD_LOGIC); + del_cmd_list(CMD_LOGIC); + } + + long long int cost1 = get_matrix_cost(n1); + long long int cost2 = get_matrix_cost(n2); + + switch(cmd){ + case 0: putchar('-');putchar('1'); break; + case 1: putchar(cost1==cost2?'1':'0'); break; + case 2: putchar(cost1!=cost2?'1':'0'); break; + case 3: putchar(cost1>=cost2?'1':'0'); break; + case 4: putchar(cost1<=cost2?'1':'0'); break; + case 5: putchar(cost1>cost2?'1':'0'); break; + case 6: putchar(cost1rows; + int cols = matrix_l.list[n]->cols; + RGB_LED*** led = matrix_l.list[n]->led; + + for (int r = 0; r < rows; r++){ + for(int c = 0; c < cols; c++){ + modify_led(led[r][c], LED_R, get_rand(0,255)); + modify_led(led[r][c], LED_G, get_rand(0,255)); + modify_led(led[r][c], LED_B, get_rand(0,255)); + modify_led(led[r][c], LED_TEMP, get_rand(2000,6000)); + modify_led(led[r][c], LED_BR, get_rand(0,255)); + modify_led(led[r][c], LED_TYPE, get_rand(0,63)); + modify_led(led[r][c], LED_MODE, get_rand(0,3)); + } + } +} + +void copy_matrix(unsigned char n1, unsigned char n2){ + int rows = matrix_l.list[n1]->rows; + int cols = matrix_l.list[n1]->cols; + RGB_LED*** led = matrix_l.list[n1]->led; + + create_matrix(rows,cols); + + RGB_LED*** led2 = matrix_l.list[matrix_l.n-1]->led; + + for(int r = 0; rl = led[r][c]->l; + } + } + + if(n2 < matrix_l.n){ + MATRIX* dst = matrix_l.list[n2]; + MATRIX* src = matrix_l.list[matrix_l.n-1]; + + for(int r=0;rled[r][c]->l = src->led[r][c]->l; + + free_matrix(matrix_l.n-1); + } +} + +unsigned char is_Matrix_Exist(unsigned char n){ + + if(matrix_l.n == 0){ + create_matrix(4,4); + rand_matrix(0); + return 0; + } + + if(n >= matrix_l.n){ + return matrix_l.n - 1; + } + + return n; +} + diff --git a/1Y-2H/prog/.cache/clangd/index/FILE.h.846F156B181C5A07.idx b/1Y-2H/prog/.cache/clangd/index/FILE.h.846F156B181C5A07.idx index 8c9d886..237b3b6 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/FILE.h.846F156B181C5A07.idx and b/1Y-2H/prog/.cache/clangd/index/FILE.h.846F156B181C5A07.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/__stdarg___gnuc_va_list.h.7217896C9E30D544.idx b/1Y-2H/prog/.cache/clangd/index/__stdarg___gnuc_va_list.h.7217896C9E30D544.idx deleted file mode 100644 index 77478da..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/__stdarg___gnuc_va_list.h.7217896C9E30D544.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/__stddef_null.h.A6C2510F9DEDD93F.idx b/1Y-2H/prog/.cache/clangd/index/__stddef_null.h.A6C2510F9DEDD93F.idx deleted file mode 100644 index 70ecee7..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/__stddef_null.h.A6C2510F9DEDD93F.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/__stddef_size_t.h.F1D94434A92155DB.idx b/1Y-2H/prog/.cache/clangd/index/__stddef_size_t.h.F1D94434A92155DB.idx deleted file mode 100644 index 504428a..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/__stddef_size_t.h.F1D94434A92155DB.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/__stddef_wchar_t.h.32383FC23AD34D3D.idx b/1Y-2H/prog/.cache/clangd/index/__stddef_wchar_t.h.32383FC23AD34D3D.idx deleted file mode 100644 index 1a359aa..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/__stddef_wchar_t.h.32383FC23AD34D3D.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx b/1Y-2H/prog/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx index 6e5e6cc..14f6fd8 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx and b/1Y-2H/prog/.cache/clangd/index/alloca.h.793370BF9878CFB6.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/clock_t.h.D43CAB77D0D0D2BD.idx b/1Y-2H/prog/.cache/clangd/index/clock_t.h.D43CAB77D0D0D2BD.idx index 5003397..73f028d 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/clock_t.h.D43CAB77D0D0D2BD.idx and b/1Y-2H/prog/.cache/clangd/index/clock_t.h.D43CAB77D0D0D2BD.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/clockid_t.h.4E370254AE2D9FBB.idx b/1Y-2H/prog/.cache/clangd/index/clockid_t.h.4E370254AE2D9FBB.idx index cd724c4..2895e16 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/clockid_t.h.4E370254AE2D9FBB.idx and b/1Y-2H/prog/.cache/clangd/index/clockid_t.h.4E370254AE2D9FBB.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/cookie_io_functions_t.h.E3E6C5414DB00C0C.idx b/1Y-2H/prog/.cache/clangd/index/cookie_io_functions_t.h.E3E6C5414DB00C0C.idx index f785d65..11845b1 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/cookie_io_functions_t.h.E3E6C5414DB00C0C.idx and b/1Y-2H/prog/.cache/clangd/index/cookie_io_functions_t.h.E3E6C5414DB00C0C.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/head.h.4FEEA9FF37D089D9.idx b/1Y-2H/prog/.cache/clangd/index/head.h.4FEEA9FF37D089D9.idx deleted file mode 100644 index 6d563a0..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/head.h.4FEEA9FF37D089D9.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/io.c.273DFC38D4DC7C48.idx b/1Y-2H/prog/.cache/clangd/index/io.c.273DFC38D4DC7C48.idx index e2a165d..c5916d5 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/io.c.273DFC38D4DC7C48.idx and b/1Y-2H/prog/.cache/clangd/index/io.c.273DFC38D4DC7C48.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/libc-header-start.h.1C0FBEF85547B680.idx b/1Y-2H/prog/.cache/clangd/index/libc-header-start.h.1C0FBEF85547B680.idx index f627c9f..faec39f 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/libc-header-start.h.1C0FBEF85547B680.idx and b/1Y-2H/prog/.cache/clangd/index/libc-header-start.h.1C0FBEF85547B680.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/limits.h.57BAFCB3AC3E49E9.idx b/1Y-2H/prog/.cache/clangd/index/limits.h.57BAFCB3AC3E49E9.idx deleted file mode 100644 index 404666d..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/limits.h.57BAFCB3AC3E49E9.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/main.c.2164EA87086CF11E.idx b/1Y-2H/prog/.cache/clangd/index/main.c.2164EA87086CF11E.idx index c8200dc..87f4a45 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/main.c.2164EA87086CF11E.idx and b/1Y-2H/prog/.cache/clangd/index/main.c.2164EA87086CF11E.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/matrix.c.2046B175A9A87ACE.idx b/1Y-2H/prog/.cache/clangd/index/matrix.c.2046B175A9A87ACE.idx deleted file mode 100644 index 5b22f4a..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/matrix.c.2046B175A9A87ACE.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/pthreadtypes.h.078F29FDF072791A.idx b/1Y-2H/prog/.cache/clangd/index/pthreadtypes.h.078F29FDF072791A.idx index a44d1c3..f47b4c1 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/pthreadtypes.h.078F29FDF072791A.idx and b/1Y-2H/prog/.cache/clangd/index/pthreadtypes.h.078F29FDF072791A.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/select.h.B782DFA7AF82626C.idx b/1Y-2H/prog/.cache/clangd/index/select.h.B782DFA7AF82626C.idx index 2e08b16..05794e3 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/select.h.B782DFA7AF82626C.idx and b/1Y-2H/prog/.cache/clangd/index/select.h.B782DFA7AF82626C.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/sigset_t.h.90E8434286D517E1.idx b/1Y-2H/prog/.cache/clangd/index/sigset_t.h.90E8434286D517E1.idx index 8c2abef..c9dad12 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/sigset_t.h.90E8434286D517E1.idx and b/1Y-2H/prog/.cache/clangd/index/sigset_t.h.90E8434286D517E1.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/stdarg.h.438E4EAC47BF2772.idx b/1Y-2H/prog/.cache/clangd/index/stdarg.h.438E4EAC47BF2772.idx deleted file mode 100644 index 1509308..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/stdarg.h.438E4EAC47BF2772.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/stddef.h.D85191973F11BD22.idx b/1Y-2H/prog/.cache/clangd/index/stddef.h.D85191973F11BD22.idx deleted file mode 100644 index af759d8..0000000 Binary files a/1Y-2H/prog/.cache/clangd/index/stddef.h.D85191973F11BD22.idx and /dev/null differ diff --git a/1Y-2H/prog/.cache/clangd/index/stdint-intn.h.1B33604E07F2EC64.idx b/1Y-2H/prog/.cache/clangd/index/stdint-intn.h.1B33604E07F2EC64.idx index dc2c3e1..acfd46e 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/stdint-intn.h.1B33604E07F2EC64.idx and b/1Y-2H/prog/.cache/clangd/index/stdint-intn.h.1B33604E07F2EC64.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx b/1Y-2H/prog/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx index 8fc102a..81488ac 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx and b/1Y-2H/prog/.cache/clangd/index/stdio.h.6919C07CB89D47AD.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx b/1Y-2H/prog/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx index 4b61c1b..a0742be 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx and b/1Y-2H/prog/.cache/clangd/index/stdlib.h.61AA7B9EED10C430.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/struct_timespec.h.84E4D8A674C22D31.idx b/1Y-2H/prog/.cache/clangd/index/struct_timespec.h.84E4D8A674C22D31.idx index 4a3eb90..7e86814 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/struct_timespec.h.84E4D8A674C22D31.idx and b/1Y-2H/prog/.cache/clangd/index/struct_timespec.h.84E4D8A674C22D31.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/struct_timeval.h.E5EFAE6351E57E37.idx b/1Y-2H/prog/.cache/clangd/index/struct_timeval.h.E5EFAE6351E57E37.idx index 6224b51..afe841a 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/struct_timeval.h.E5EFAE6351E57E37.idx and b/1Y-2H/prog/.cache/clangd/index/struct_timeval.h.E5EFAE6351E57E37.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/time_t.h.BAF6123CBDB646D6.idx b/1Y-2H/prog/.cache/clangd/index/time_t.h.BAF6123CBDB646D6.idx index 39bdbed..abdb62b 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/time_t.h.BAF6123CBDB646D6.idx and b/1Y-2H/prog/.cache/clangd/index/time_t.h.BAF6123CBDB646D6.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/timer_t.h.DE52AF3543DCC14B.idx b/1Y-2H/prog/.cache/clangd/index/timer_t.h.DE52AF3543DCC14B.idx index 05c9153..4b3d231 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/timer_t.h.DE52AF3543DCC14B.idx and b/1Y-2H/prog/.cache/clangd/index/timer_t.h.DE52AF3543DCC14B.idx differ diff --git a/1Y-2H/prog/.cache/clangd/index/types.h.A9C854B704566561.idx b/1Y-2H/prog/.cache/clangd/index/types.h.A9C854B704566561.idx index de8b000..4f07551 100644 Binary files a/1Y-2H/prog/.cache/clangd/index/types.h.A9C854B704566561.idx and b/1Y-2H/prog/.cache/clangd/index/types.h.A9C854B704566561.idx differ diff --git a/1Y-2H/prog/.obj/io.o b/1Y-2H/prog/.obj/io.o index 0f09441..ad9a21a 100644 Binary files a/1Y-2H/prog/.obj/io.o and b/1Y-2H/prog/.obj/io.o differ diff --git a/1Y-2H/prog/.obj/main.o b/1Y-2H/prog/.obj/main.o index 60ae059..eb30ca8 100644 Binary files a/1Y-2H/prog/.obj/main.o and b/1Y-2H/prog/.obj/main.o differ diff --git a/1Y-2H/prog/.obj/matrix.o b/1Y-2H/prog/.obj/matrix.o deleted file mode 100644 index 63fd6e2..0000000 Binary files a/1Y-2H/prog/.obj/matrix.o and /dev/null differ diff --git a/1Y-2H/prog/Makefile b/1Y-2H/prog/Makefile new file mode 100644 index 0000000..600fc5f --- /dev/null +++ b/1Y-2H/prog/Makefile @@ -0,0 +1,40 @@ +CC = gcc + +CFLAGS = -I./include -g -Wall -Wextra -Wpedantic -g -O0 +LDFLAGS = + +TARGET = matrix + +SRC_DIR = src +OBJ_DIR = .obj + +SRC = $(wildcard $(SRC_DIR)/*.c) +OBJ = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC)) + +all: $(TARGET) + +$(TARGET): $(OBJ) + $(CC) $(OBJ) -o $(TARGET) $(LDFLAGS) + +# Компиляция .c -> .o в .obj/ +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR) + $(CC) $(CFLAGS) -c $< -o $@ + +# Создание папки для объектов +$(OBJ_DIR): + mkdir -p $(OBJ_DIR) + +run: + ./matrix < input > output + +clean: + rm -rf $(OBJ_DIR) $(TARGET) output + +.cc: $(OBJ) + mkdir -p $(OBJ_DIR) + @for src in $(SRC); do \ + obj=$(OBJ_DIR)/$$(basename $$src .c).o; \ + bear -- $(CC) $(CFLAGS) -c $$src -o $$obj; \ + done + mv ./compile_commands.json .build/ || true + diff --git a/1Y-2H/prog/docs/docs.md b/1Y-2H/prog/docs/docs.md deleted file mode 100644 index 03c3617..0000000 --- a/1Y-2H/prog/docs/docs.md +++ /dev/null @@ -1,111 +0,0 @@ -## Matrix - -Когда вы запускаете програму она будет ожидать одну из следующих коммнад. -Ввод чисел будет проигнорирован но, адм символы приведут к завершению программы. - -При вводе символов весь ввод является строкой. -Делителем строк являются - Space Enter EOT -Также каждый 10 символ - новая строка -При вводе, каждое запрашиваемое значение должно заканчиваться делителем - -###### Пример: - -create -0 -10 20 -getmatrix -exit - -Номер матрицы ограничен их возможным колличеством установленным в header.h -По умолчанию = 20 - -Если вы пытаетесь манипулировать несуществующей матрицей -То будет создана матрица 4 X 4 со случайными значениями от -100 до 100 - -## - -Далее будет описыватся только ожидаеммый ввод после команды. -Функцианал коммнады понятен из названия. - -#### create - -(Ожидается 3 числа) -номер-матрицы -коллво-строк -коллво-колон - -#### input - -(Ожидается 1 число) -номер-матрицы -(далее будет ввод матрицы X на Y необходимо ввести X\*Y значений) -int1 int2 int3 ... int(x\*y) - -#### getmatrix - -(Ожидается 1 число) -номер-матрицы - -#### logic - -(Ожидается 2 числа) -номер-матрицы1 -номер-матрицы2 -(Ожидается логическая операция > < >= <= != == ) -Логическа-операция - -#### edit - -(Ожидается 1 число) -номер-матрицы -(Далее принимает X\*Y чисел и заменяет предыдущие) -(Так же может принять 3 буквенных выражения, -add - все последующие введёные числа будут добавлены к имеющимся -sub - от всех имеющихся чисел будут отняты последующие введёные -point - указать на точку в массиве начиная с которой продолжить заполнение, row:col для разделения могут использоваться , . :) - - -#### random - -(Ожидается 1 число) -номер-матрицы - -#### copy - -(Ожидается 2 числа) -номер-матрицы-откуда-копировать -номер-матрицы-куда-копировать - -#### destruct - -(Ожидается 1 число) -номер-матрицы - -#### getcolum - -(Ожидается 2 числа) -номер-матрицы -номер-столбца - -#### getrow - -(Ожидается 2 числа) -номер-матрицы -номер-строки - -#### transp - -(Ожидается 1 число) -номер-матрицы - -#### determ - -(Ожидается 1 число) -номер-матрицы - -#### obr - -(Ожидается 1 число) -номер-матрицы - -#### exit diff --git a/1Y-2H/prog/docs/nPractic3.pdf b/1Y-2H/prog/docs/nPractic3.pdf new file mode 100644 index 0000000..ef55f4c Binary files /dev/null and b/1Y-2H/prog/docs/nPractic3.pdf differ diff --git a/1Y-2H/prog/docs/nPractic4-1.pdf b/1Y-2H/prog/docs/nPractic4-1.pdf new file mode 100644 index 0000000..5e70f1d Binary files /dev/null and b/1Y-2H/prog/docs/nPractic4-1.pdf differ diff --git a/1Y-2H/prog/docs/nPractic5.pdf b/1Y-2H/prog/docs/nPractic5.pdf new file mode 100644 index 0000000..b34b0b4 Binary files /dev/null and b/1Y-2H/prog/docs/nPractic5.pdf differ diff --git a/1Y-2H/prog/include/head.h b/1Y-2H/prog/include/head.h deleted file mode 100644 index d0583b5..0000000 --- a/1Y-2H/prog/include/head.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef Head -#define Head - -// INCLUDE - #include - #include - #include - -// DEFINE - #define BUFF_MAX 10 //(char) <= 254 - #define IN_BUFF_CHARS 10 //(char) <= 254 - -//TypeDef - -// FUNC - // === io.c === - MATRIX2D* create_matrix2d(int rows, int cols); - char buff_input(char *inbuff, char *_buff); - char cmd_buff(char* _buff,char** _charCommands,char NUM_OF_CHAR_COMMANDS); - char get_matrix_num(void); - int get_num(void); - -#endif diff --git a/1Y-2H/prog/include/include.h b/1Y-2H/prog/include/include.h new file mode 100644 index 0000000..bda7607 --- /dev/null +++ b/1Y-2H/prog/include/include.h @@ -0,0 +1,15 @@ +// ===<>===<>===-< <<< include/include.h >>> >-===<>===<>=== + +#ifndef INCLUDEH +#define INCLUDEH + + #include + #include + #include + #include + #include + + #define QUERRY_MAX 10 //(char) <= 254 + #define IN_QUERRY_CHARS 10 //(char) <= 254 + +#endif diff --git a/1Y-2H/prog/include/io.h b/1Y-2H/prog/include/io.h new file mode 100644 index 0000000..efc1156 --- /dev/null +++ b/1Y-2H/prog/include/io.h @@ -0,0 +1,23 @@ +// ===<>===<>===-< <<< include/io.h >>> >-===<>===<>=== + +#ifndef IOH +#define IOH + + typedef struct{ + unsigned int n; + char** str; + }CMD_LIST; + + typedef struct{ + unsigned int n; + CMD_LIST** list; + }CMD_GRP_LIST; + + + void init_io(void); + [[nodiscard]] int create_cmd_list(char* get[],int n); + void del_cmd_list(int id); + char querry_input(char *inbuff, char *_buff); + [[nodiscard]] char cmd_querry(char* _querry,int id); + [[nodiscard]] int get_int(void); +#endif diff --git a/1Y-2H/prog/src/bitstruct.c b/1Y-2H/prog/include/matrix.h similarity index 100% rename from 1Y-2H/prog/src/bitstruct.c rename to 1Y-2H/prog/include/matrix.h diff --git a/1Y-2H/prog/include/matrixstruct.h b/1Y-2H/prog/include/matrixstruct.h deleted file mode 100644 index 0703c1d..0000000 --- a/1Y-2H/prog/include/matrixstruct.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef Head -#define Head - - #define MAX_MATRIX_ALIVE 21 - - typedef struct { - int rows; - int cols; - int** data; - } MATRIX2D; - - void create_matrix(MATRIX2D** addr, unsigned char n, int rows, int cols); - void input_matrix(MATRIX2D** addr, unsigned char n); - void get_matrix(MATRIX2D** addr, unsigned char n); - void logic_matrix(MATRIX2D** addr, unsigned char n1, unsigned char n2); - void edit_matrix(MATRIX2D** addr, unsigned char n); - void matrix_random(MATRIX2D** addr, unsigned char n); - void copy_matrix(MATRIX2D** addr, unsigned char n1, unsigned char n2); - void free_matrix(MATRIX2D** addr, unsigned char n); - void get_matrix_col(MATRIX2D** addr, unsigned char n, int c); - void get_matrix_row(MATRIX2D** addr, unsigned char n, int r); - void transp_matrix(MATRIX2D** addr, unsigned char n); - long long int determ_matrix(MATRIX2D** addr, unsigned char n); - void obr_matrix(MATRIX2D** addr, unsigned char n); - void is_Matrix_Exist(MATRIX2D** addr, unsigned char n); - - -#endif diff --git a/1Y-2H/prog/input b/1Y-2H/prog/input deleted file mode 100644 index 4b4c318..0000000 --- a/1Y-2H/prog/input +++ /dev/null @@ -1,38 +0,0 @@ -create 0 3 3 -input 0 -1 2 3 -4 5 6 -7 8 9 -getmatrix 0 -n n -transp 0 -getmatrix 0 -n n -create 1 3 3 -random 1 -getmatrix 1 -n -logic 0 1 >= n -logic 0 0 == n -edit 0 -add -1 1 1 -1 1 1 -1 1 1 -getmatrix 0 -n -edit 0 -point 1:1 -sub -10 10 -getmatrix 0 -n -getcolum 0 1 -getrow 0 2 -n -copy 0 5 -getmatrix 5 -n -determ 5 -destruct 5 -exit diff --git a/1Y-2H/prog/matrix b/1Y-2H/prog/matrix index 196524e..1bbadff 100755 Binary files a/1Y-2H/prog/matrix and b/1Y-2H/prog/matrix differ diff --git a/1Y-2H/prog/src/io.c b/1Y-2H/prog/src/io.c index 57a21bb..f581eae 100644 --- a/1Y-2H/prog/src/io.c +++ b/1Y-2H/prog/src/io.c @@ -1,108 +1,155 @@ -#include "head.h" +// ===<>===<>===-< <<< src/io.c >>> >-===<>===<>=== -char buff_input(char *inbuff, char *_buff){ - - *inbuff = 0; - { // INPUT - char ch; - while((ch=getchar())>' '&&*inbuff +#include + +#include "include.h" +#include "io.h" + +static CMD_GRP_LIST cmd_list = {0, NULL}; + +void init_io(void){ + cmd_list.list = NULL; + cmd_list.n = 0; +} + +[[nodiscard]] int create_cmd_list(char* get[], int n){ + if (n <= 0) return -1; + + CMD_LIST* newlist = malloc(sizeof(CMD_LIST)); + if (!newlist) return -1; + + newlist->n = n; + newlist->str = malloc(n * sizeof(char*)); + + if (!newlist->str) { + free(newlist); + return -1; + } + + for (int i = 0; i < n; i++) { + newlist->str[i] = malloc(strlen(get[i]) + 1); + + if (!newlist->str[i]) { + for (int j = 0; j < i; j++) + free(newlist->str[j]); + + free(newlist->str); + free(newlist); + return -1; } - if(ch<= 4)return -1; + + strcpy(newlist->str[i], get[i]); } + CMD_LIST** tmp = realloc(cmd_list.list, (cmd_list.n + 1) * sizeof(CMD_LIST*)); - if (_buff[0]>='a' && _buff[0] <= 'z') - { // Is input - command? - const char NUM_OF_CHAR_COMMANDS = 15; - char * _charCommands[NUM_OF_CHAR_COMMANDS]; // _charCommands[*]["char"] - _charCommands[0] = (char[]){"input"}; - _charCommands[1] = (char[]){"getmatrix"}; - _charCommands[2] = (char[]){"logic"}; - _charCommands[3] = (char[]){"edit"}; - _charCommands[4] = (char[]){"random"}; - _charCommands[5] = (char[]){"copy"}; - _charCommands[6] = (char[]){"destruct"}; - _charCommands[7] = (char[]){"getcolum"}; - _charCommands[8] = (char[]){"getrow"}; - _charCommands[9] = (char[]){"transp"}; - _charCommands[10] = (char[]){"determ"}; - _charCommands[11] = (char[]){"obr"}; - _charCommands[12] = (char[]){"create"}; - _charCommands[13] = (char[]){"n"}; - _charCommands[14] = (char[]){"exit"}; + if (!tmp) { + for (int i = 0; i < n; i++) + free(newlist->str[i]); - - char cmd = cmd_buff(_buff,_charCommands,NUM_OF_CHAR_COMMANDS); - if(cmd==15)return -1; //exit - return cmd; //Вернуть комману + free(newlist->str); + free(newlist); + return -1; } + cmd_list.list = tmp; + cmd_list.list[cmd_list.n] = newlist; + + cmd_list.n++; + + return cmd_list.n - 1; +} + +void del_cmd_list(int id){ + if (id < 0 || (unsigned int)id >= cmd_list.n) + return; + + CMD_LIST* list = cmd_list.list[id]; + + if (list == NULL) + return; + + for (unsigned int i = 0; i < list->n; i++) { + free(list->str[i]); + } + + free(list->str); + free(list); + + for (unsigned int i = id; i + 1 < cmd_list.n; i++) { + cmd_list.list[i] = cmd_list.list[i + 1]; + } + + cmd_list.n--; + + if (cmd_list.n == 0) { + free(cmd_list.list); + cmd_list.list = NULL; + return; + } + + CMD_LIST** tmp = realloc(cmd_list.list, cmd_list.n * sizeof(CMD_LIST*)); + + if (tmp != NULL) { + cmd_list.list = tmp; + } +} + +char querry_input(char *inquerry, char *_querry){ + int ch; + *inquerry = 0; + + memset(_querry, 0, QUERRY_MAX); + + while ((ch = getchar()) > ' ' && *inquerry < QUERRY_MAX - 1) { + _querry[(int)*inquerry] = (char)ch; + (*inquerry)++; + } + + _querry[(int)*inquerry] = '\0'; + + if (ch == EOF) + return -1; + return 0; } -char cmd_buff(char* _buff,char** _charCommands,char NUM_OF_CHAR_COMMANDS){ - for (int i = 0;i= cmd_list.n) + return -1; + + CMD_LIST* list = cmd_list.list[id]; + + if (!list) + return -1; + + for (unsigned int i = 0; i < list->n; i++) { + if (strcmp(_querry, list->str[i]) == 0) + return i; } - return 0; + + return -1; } -char get_matrix_num(void){ - char inbuff; - char _buff[BUFF_MAX]; - while(buff_input(&inbuff,_buff)>0&&*_buff>' '); +[[nodiscard]] int get_int(void){ + char inquerry; + char _querry[QUERRY_MAX]; + while(querry_input(&inquerry,_querry) > 0 && *_querry > ' '); long int num = 0; char flagIsDec = 1; { // GetNum int i = 0; - if(_buff[0]=='-'){i++;flagIsDec = -1;} - - for(; i= '0' && _buff[i] <= '9') - num = (num*10) + (_buff[i]-'0'); - num *= flagIsDec; - } - if (num>MAX_MATRIX_ALIVE)num = MAX_MATRIX_ALIVE; - if (num<0)num = 0; - return num; -} + if(_querry[0]=='-'){i++;flagIsDec = -1;} - -int get_num(void){ - char inbuff; - char _buff[BUFF_MAX]; - while(buff_input(&inbuff,_buff)>0&&*_buff>' '); - - long int num = 0; - char flagIsDec = 1; - { // GetNum - int i = 0; - if(_buff[0]=='-'){i++;flagIsDec = -1;} - - for(; i= '0' && _buff[i] <= '9') - num = (num*10) + (_buff[i]-'0'); + for(; i= '0' && _querry[i] <= '9') + num = (num*10) + (_querry[i]-'0'); num *= flagIsDec; } if (num>INT_MAX)num = INT_MAX; if (num===<>===-< <<< src/main.c >>> >-===<>===<>=== -int main(void){ +#include "include.h" +#include "io.h" + +enum{ + CMD_MAIN_CREATE, + CMD_MAIN_INPUT, + CMD_MAIN_DEL, + CMD_MAIN_SHOW, + CMD_MAIN_LOGIC, + CMD_MAIN_EDIT, + CMD_MAIN_RAND, + CMD_MAIN_COPY, + CMD_MAIN_EXIT, + CMD_MAIN_TEST, + + CMD_MAIN_COUNT +}CMD_MAIN_ENUM; + +void declarete_cmd_main(void); + +int main(){ + //declarete_cmd_main(); + init_io(); + char mode = 1; + char inquerry; + char querry[QUERRY_MAX]; - MATRIX2D** __matrixAddr = (MATRIX2D**)calloc(MAX_MATRIX_ALIVE,sizeof(MATRIX2D*)); - if(__matrixAddr == NULL) {printf("ERROR.__matrixAddr NotExist");return 1;} + int main_cmd_id = create_cmd_list((char*[]){ + "create", "input", "del", "show", + "logic", "edit", "rand", "copy", + "exit", "test" + }, 10); + + if (main_cmd_id < 0) { + printf("Failed to create command list\n"); + return 1; + } - char mode; do{ - char inbuff; - char _buff[BUFF_MAX]; - char n1,n2; - int num1,num2; - mode = buff_input(&inbuff,_buff); - { - switch(mode){ - case 1: - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - input_matrix(__matrixAddr,n1); - break; - - case 2: // output - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - get_matrix(__matrixAddr,n1); - - break; - - case 3: // logic - n1 = get_matrix_num(); - n2 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - is_Matrix_Exist(__matrixAddr,n2); - logic_matrix(__matrixAddr,n1,n2); - break; - - case 4: // edit - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - edit_matrix(__matrixAddr,n1); - break; - - case 5: // random - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - matrix_random(__matrixAddr,n1); - break; - - case 6: // copy - n1 = get_matrix_num(); - n2 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - free_matrix(__matrixAddr,n2); - copy_matrix(__matrixAddr,n1,n2); - break; - - case 7: // destroy - n1 = get_matrix_num(); - free_matrix(__matrixAddr,n1); - break; - - case 8: // get colum - n1 = get_matrix_num(); - num1 = get_num(); - is_Matrix_Exist(__matrixAddr,n1); - get_matrix_col(__matrixAddr,n1,num1); - break; - - case 9: // get row - n1 = get_matrix_num(); - num1 = get_num(); - is_Matrix_Exist(__matrixAddr,n1); - get_matrix_row(__matrixAddr,n1,num1); - break; - - case 10: // transp - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - transp_matrix(__matrixAddr,n1); - break; - - case 11: // determ - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - printf("%lld",determ_matrix(__matrixAddr,n1)); - - break; - - case 12: //obr - n1 = get_matrix_num(); - is_Matrix_Exist(__matrixAddr,n1); - obr_matrix(__matrixAddr,n1); - break; - - case 13: - n1 = get_matrix_num(); - num1 = get_num(); - num2 = get_num(); - free_matrix(__matrixAddr,n1); - create_matrix(__matrixAddr,n1,num1,num2); - break; - - case 15: - putchar('\n'); - putchar('\n'); - break; - - case 0: // wrong input - break; - - case -1: return 0; - } - } - }while(mode>=0); + querry_input(&inquerry, querry); + int cmd = cmd_querry(querry,main_cmd_id); + //printf("CMD = %d\n",cmd); + switch(cmd){ + case CMD_MAIN_CREATE: + + break; + case CMD_MAIN_INPUT: + + break; + case CMD_MAIN_DEL: + + break; + case CMD_MAIN_SHOW: + + break; + case CMD_MAIN_LOGIC: + + break; + case CMD_MAIN_EDIT: + + break; + case CMD_MAIN_RAND: + + break; + case CMD_MAIN_COPY: + + break; + case CMD_MAIN_EXIT: + mode = 0; + break; + } + }while(mode); + del_cmd_list(main_cmd_id); return 0; } diff --git a/1Y-2H/prog/src/matrix.c b/1Y-2H/prog/src/matrix.c index 3addade..e69de29 100644 --- a/1Y-2H/prog/src/matrix.c +++ b/1Y-2H/prog/src/matrix.c @@ -1,375 +0,0 @@ -#include "matrixstruct.h" -#include "head.h" - -MATRIX2D* create_matrix2d(int rows,int cols) { - MATRIX2D* m = (MATRIX2D*)malloc(sizeof(MATRIX2D)); - m->rows = rows; - m->cols = cols; - - m->data = (int**)malloc(rows * sizeof(int*)); - - for (int i = 0; i < rows; i++){ - m->data[i] = (int*)malloc(cols * sizeof(int)); - } - - return m; -} - -void create_matrix(MATRIX2D** __addr,unsigned char n,int rows,int cols){ - __addr[n] = create_matrix2d(rows,cols); - for (int i = 0;idata[i][j] = 0; - } - } -} - -void input_matrix(MATRIX2D** __addr,unsigned char n){ - int** data = __addr[n]->data; - - for(int rows = 0; rows < __addr[n]->rows;rows++){ - for(int cols = 0; cols < __addr[n]->cols;cols++){ - int num = get_num(); - data[rows][cols] = num; - } - } - } - - void get_matrix(MATRIX2D** __addr,unsigned char n){ - int rows = __addr[n]->rows; - int cols = __addr[n]->cols; - - //printf("\tМассив №%d",n); - //printf("Колл-во строк %d\nКолл-во колон %d\n\n",rows,cols); - for(int r = 0;rdata[r][c]); - } - putchar('\n'); - } -} - -void logic_matrix(MATRIX2D** __addr,unsigned char n1,unsigned char n2){ - char inbuff; - char _buff[BUFF_MAX]; - int** data1 = __addr[n1]->data; - int** data2 = __addr[n2]->data; - - char cmd = 0; - { - buff_input(&inbuff,_buff); - - const char NUM_OF_CHAR_COMMANDS = 6; - char * _charCommands[NUM_OF_CHAR_COMMANDS]; // _charCommands[*]["char"] - _charCommands[0] = (char[]){"=="}; - _charCommands[1] = (char[]){"!="}; - _charCommands[2] = (char[]){">="}; - _charCommands[3] = (char[]){"<="}; - _charCommands[4] = (char[]){">"}; - _charCommands[5] = (char[]){"<"}; - - cmd = cmd_buff(_buff,_charCommands,NUM_OF_CHAR_COMMANDS); - } - - long long int cost1 = 0; - { - for(int r = 0;r<__addr[n1]->rows;r++) - for(int c = 0;c<__addr[n1]->cols;c++) - cost1 += data1[r][c]; - } - long long int cost2 = 0; - { - for(int r = 0;r<__addr[n2]->rows;r++) - for(int c = 0;c<__addr[n2]->cols;c++) - cost2 += data2[r][c]; - } - - switch(cmd){ - case 0: //Null - putchar('-');putchar('1'); - break; - case 1: // == - putchar(cost1==cost2?'1':'0'); - break; - case 2: // != - putchar(cost1!=cost2?'1':'0'); - break; - case 3: //>= - putchar(cost1>=cost2?'1':'0'); - break; - case 4: //<= - putchar(cost1<=cost2?'1':'0'); - break; - case 5: // > - putchar(cost1>cost2?'1':'0'); - break; - case 6: // < - putchar(cost1data; - int r = 0, c = 0; - char mode = 0; - - char* _locStrings[3]; - _locStrings[0] = (char[]){"point"}; - _locStrings[1] = (char[]){"add"}; - _locStrings[2] = (char[]){"sub"}; - - while (r < __addr[n]->rows) { - char res = buff_input(&inbuff, _buff); - if (res == -1) break; - - if (_buff[0] == 'n' && inbuff == 1) break; - - char loc_cmd = cmd_buff(_buff, _locStrings, 3); - - if (loc_cmd == 1) { - buff_input(&inbuff, _buff); - long pr = 0, pc = 0; - int i = 0; - for (; i < inbuff && (_buff[i] != ':' && _buff[i] != ',' && _buff[i] != '.'); i++) - if (_buff[i] >= '0' && _buff[i] <= '9') pr = pr * 10 + (_buff[i] - '0'); - for (i++; i < inbuff; i++) - if (_buff[i] >= '0' && _buff[i] <= '9') pc = pc * 10 + (_buff[i] - '0'); - - if (pr < __addr[n]->rows && pc < __addr[n]->cols) { - r = (int)pr; - c = (int)pc; - } - continue; - } - - if (loc_cmd == 2) { mode = 1; continue; } - if (loc_cmd == 3) { mode = 2; continue; } - - long val = 0; - int i = 0, sign = 1; - if (inbuff > 0 && _buff[0] == '-') { sign = -1; i++; } - for (; i < inbuff; i++) { - if (_buff[i] >= '0' && _buff[i] <= '9') - val = val * 10 + (_buff[i] - '0'); - } - val *= sign; - - if (mode == 1) { - long res_val = (long)data[r][c] + val; - data[r][c] = (res_val > INT_MAX) ? INT_MAX : (res_val < INT_MIN) ? INT_MIN : (int)res_val; - } else if (mode == 2) { - long res_val = (long)data[r][c] - val; - data[r][c] = (res_val > INT_MAX) ? INT_MAX : (res_val < INT_MIN) ? INT_MIN : (int)res_val; - } else { - data[r][c] = (val > INT_MAX) ? INT_MAX : (val < INT_MIN) ? INT_MIN : (int)val; - } - - if (++c >= __addr[n]->cols) { - c = 0; - r++; - } - } -} - -int get_rand(int min, int max) { - return (double)rand() / (RAND_MAX + 1.0) * (max - min) + min; -} - -void matrix_random(MATRIX2D** __addr,unsigned char n){ - unsigned int lo, hi; - __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); - srand(((unsigned long long)hi << 32) | lo); - - for (int r = 0; r < __addr[n]->rows; r++){ - for(int c = 0; c < __addr[n]->cols; c++){ - __addr[n]->data[r][c] = get_rand(-100, 100); - } - } -} - -void copy_matrix(MATRIX2D** __addr,unsigned char n1, unsigned char n2){ - // n2 = n1 - __addr[n2] = create_matrix2d(__addr[n1]->rows,__addr[n1]->cols); - - for(int i = 0; i<__addr[n1]->rows;i++){ - for(int j = 0; j<__addr[n1]->cols;j++){ - __addr[n2]->data[i][j] = __addr[n1]->data[i][j]; - } - } -} - -void free_matrix(MATRIX2D** __addr,unsigned char n){ - if (__addr[n] == NULL) return; - - MATRIX2D* m = __addr[n]; - for (int i = 0; i < m->rows; i++) { - free(m->data[i]); - } - free(m->data); - free(m); - - __addr[n] = NULL; -} - -void get_matrix_col(MATRIX2D** __addr,unsigned char n,int c){ - //printf("colum %d - ",c); - if(c >= __addr[n]->cols)c = __addr[n]->cols - 1; - if(c<0)c = 0; - for(int i = 0;i<__addr[n]->rows;i++){ - printf("%d ",__addr[n]->data[i][c]); - } - putchar('\n'); -} - -void get_matrix_row(MATRIX2D** __addr,unsigned char n,int r){ - //printf("row %d - ",r); - if(r >= __addr[n]->rows)r = __addr[n]->rows - 1; - if(r<0)r = 0; - for(int i = 0;i<__addr[n]->cols;i++){ - printf("%d ",__addr[n]->data[r][i]); - } - putchar('\n'); -} - -void transp_matrix(MATRIX2D** __addr,unsigned char n){ - MATRIX2D* tr = create_matrix2d( - __addr[n]->cols,__addr[n]->rows); - - - int** dataDef = __addr[n]->data; - int** dataRes = tr->data; - - for(int r = 0;r<__addr[n]->rows;r++) - for(int c = 0;c<__addr[n]->cols;c++) - dataRes[c][r] = dataDef[r][c]; - - free_matrix(__addr,n); - - __addr[n] = tr; -} - -long long int determ_matrix(MATRIX2D** __addr, unsigned char n) { - int size = __addr[n]->rows; - int** data = __addr[n]->data; - - if (size == 1) return data[0][0]; - if (size == 2) return (long long int)data[0][0] * data[1][1] - (long long int)data[0][1] * data[1][0]; - - double det = 1.0; - double** temp = (double**)malloc(size * sizeof(double*)); - for (int i = 0; i < size; i++) { - temp[i] = (double*)malloc(size * sizeof(double)); - for (int j = 0; j < size; j++) temp[i][j] = (double)data[i][j]; - } - - for (int i = 0; i < size; i++) { - int pivot = i; - for (int j = i + 1; j < size; j++) { - double val1 = temp[j][i] < 0 ? -temp[j][i] : temp[j][i]; - double val2 = temp[pivot][i] < 0 ? -temp[pivot][i] : temp[pivot][i]; - if (val1 > val2) pivot = j; - } - - if (pivot != i) { - double* swap = temp[i]; - temp[i] = temp[pivot]; - temp[pivot] = swap; - det *= -1; - } - - double current_val = temp[i][i] < 0 ? -temp[i][i] : temp[i][i]; - if (current_val < 1e-9) { - for (int k = 0; k < size; k++) free(temp[k]); - free(temp); - return 0; - } - - det *= temp[i][i]; - - for (int j = i + 1; j < size; j++) { - double factor = temp[j][i] / temp[i][i]; - for (int k = i + 1; k < size; k++) { - temp[j][k] -= factor * temp[i][k]; - } - } - } - - long long int final_det; - if (det >= 0) final_det = (long long int)(det + 0.5); - else final_det = (long long int)(det - 0.5); - - for (int i = 0; i < size; i++) free(temp[i]); - free(temp); - - return final_det; -} - -void obr_matrix(MATRIX2D** __addr, unsigned char n) { - int size = __addr[n]->rows; - if (size != __addr[n]->cols) return; - - long long int d = determ_matrix(__addr, n); - if (d == 0) return; - - double** temp = (double**)malloc(size * sizeof(double*)); - for (int i = 0; i < size; i++) { - temp[i] = (double*)malloc(2 * size * sizeof(double)); - for (int j = 0; j < size; j++) { - temp[i][j] = (double)__addr[n]->data[i][j]; - temp[i][j + size] = (i == j ? 1.0 : 0.0); - } - } - - for (int i = 0; i < size; i++) { - int pivot = i; - for (int j = i + 1; j < size; j++) { - double v1 = temp[j][i] < 0 ? -temp[j][i] : temp[j][i]; - double v2 = temp[pivot][i] < 0 ? -temp[pivot][i] : temp[pivot][i]; - if (v1 > v2) pivot = j; - } - - double* row_ptr = temp[i]; - temp[i] = temp[pivot]; - temp[pivot] = row_ptr; - - double divisor = temp[i][i]; - for (int j = i; j < 2 * size; j++) { - temp[i][j] /= divisor; - } - - for (int k = 0; k < size; k++) { - if (k != i) { - double factor = temp[k][i]; - for (int j = i; j < 2 * size; j++) { - temp[k][j] -= factor * temp[i][j]; - } - } - } - } - - for (int i = 0; i < size; i++) { - for (int j = 0; j < size; j++) { - double val = temp[i][j + size]; - if (val >= 0) __addr[n]->data[i][j] = (int)(val + 0.5); - else __addr[n]->data[i][j] = (int)(val - 0.5); - } - } - - for (int i = 0; i < size; i++) free(temp[i]); - free(temp); -} - -void is_Matrix_Exist(MATRIX2D** __addr,unsigned char n){ - if(n > MAX_MATRIX_ALIVE) n = MAX_MATRIX_ALIVE-1; - if(__addr[n] == NULL){ - //printf("Матрица №%d не существует, создана новая матрица 4x4\n",n); - __addr[n] = create_matrix2d(4,4); - matrix_random(__addr,n); - } - - return; -} - diff --git a/tmp.out b/1Y-2H/tmp.out old mode 100755 new mode 100644 similarity index 59% rename from tmp.out rename to 1Y-2H/tmp.out index 74d62d1..d957088 Binary files a/tmp.out and b/1Y-2H/tmp.out differ diff --git a/1Y-2H/trpo/gui-quizsolver b/1Y-2H/trpo/gui-quizsolver new file mode 160000 index 0000000..8073c2a --- /dev/null +++ b/1Y-2H/trpo/gui-quizsolver @@ -0,0 +1 @@ +Subproject commit 8073c2af18a0988c3eb9bebaea90b9d837d6cf50 diff --git a/1Y-2H/trpo/lab-rodionov-iv522s18 b/1Y-2H/trpo/lab-rodionov-iv522s18 index ff0e5e4..7b29ec3 160000 --- a/1Y-2H/trpo/lab-rodionov-iv522s18 +++ b/1Y-2H/trpo/lab-rodionov-iv522s18 @@ -1 +1 @@ -Subproject commit ff0e5e45aa8363816ab78d6931369467ec67d7fe +Subproject commit 7b29ec3b7470245fc0bce34ea41b4a20ce770fdd diff --git a/procxmos/.env b/procxmos/.env deleted file mode 100644 index 039d3d4..0000000 --- a/procxmos/.env +++ /dev/null @@ -1,4 +0,0 @@ -USERNAME=iv522s18@freeipa -PASSWORD='513218Az!' -ADDR=91.196.245.217 - diff --git a/procxmos/manip.sh b/procxmos/manip.sh deleted file mode 100755 index 2bf1504..0000000 --- a/procxmos/manip.sh +++ /dev/null @@ -1,178 +0,0 @@ -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Load the .env file that lives beside the script -set -a # automatically export assignments -source "${SCRIPT_DIR}/.env" -set +a - -# ---- login ---- -login=$(curl -s -k -d "username=${USERNAME}&password=${PASSWORD}" \ - "https://${ADDR}:8006/api2/json/access/ticket") -echo "=== LOGIN RESPONSE ===" -echo "$login" -echo "======================" - -# Extract ticket & CSRF -TICKET=$(echo "$login" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4) -CSRF=$(echo "$login" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4) - -echo "Ticket: $TICKET" -echo "CSRF : $CSRF" -echo "-------------------" - -# ------------------------------------------------- -# Helper: wait for a Proxmox task to finish -# ------------------------------------------------- -wait_task() { - local upid="$1" - local timeout=${2:-40} # seconds (default 2 min) - local interval=2 - local elapsed=0 - - while (( elapsed < timeout )); do - result=$(curl -s -k \ - -b "PVEAuthCookie=${TICKET}" \ - -H "CSRFPreventionToken: ${CSRF}" \ - "https://${ADDR}:8006/api2/json/nodes/${ADDR}/tasks/${upid}/status") - status=$(echo "$result" | jq -r '.data.status') - exitstatus=$(echo "$result" | jq -r '.data.exitstatus') - - if [[ "$status" == "stopped" ]]; then - if [[ "$exitstatus" == "OK" ]]; then - return 0 - else - echo "Task $upid finished with error: $exitstatus" >&2 - return 1 - fi - fi - - sleep "$interval" - (( elapsed += interval )) - done - - echo "Task $upid timed out after $timeout seconds" >&2 - return 1 -} -# ------------------------------------------------- - -force_stop_vm_ssh() { - local vmid=$1 - local node=$2 # e.g. pve01 - - # SSH to the node (assumes key‑based auth or passwordless login) - ssh root@"${node}" bash </dev/null | awk '{print \$1}') - [[ -n "\$pid" ]] && kill -9 "\$pid" - rm -f "\$lock" - fi - - # Stop the VM - qm stop "${vmid}" - # Wait until it reports stopped - while qm status "${vmid}" | grep -q running; do sleep 1; done -EOF - echo "VM $vmid on node $node is now stopped." -} - -while true; do - echo "Select an option:" - echo "1) get nodes" - echo "2) get vm" - echo "3) create vm" - echo "4) power vm" - echo "5) delete vm" - echo "6) Exit" - printf "Enter choice [1-6]: " - - read choice -case $choice in - 1) -# Show only VM IDs and names -curl -s -k -b "PVEAuthCookie=${TICKET}" -H "CSRFPreventionToken: ${CSRF}" \ - "https://${ADDR}:8006/api2/json/cluster/resources?type=vm" | -jq '.data[] | {vmid, name, status, node}' - - ;; - 2) - curl -s -k -b "PVEAuthCookie=${TICKET}" -H "CSRFPreventionToken: ${CSRF}" \ - "https://${ADDR}:8006/api2/json/cluster/resources?type=vm" | jq . - ;; - 3) - echo "PrintID:" - read id - echo "PintNAME:" - read name - curl -k -X POST \ - -b "PVEAuthCookie=${TICKET}" \ - -H "CSRFPreventionToken: ${CSRF}" \ - -d "vmid=${id}&name=${name}&memory=2048&net0=virtio,bridge=vmbr0" \ - https://${ADDR}:8006/api2/json/nodes/${ADDR}/qemu - ;; - 4) - echo "PrintID:" - read id - curl -k -X POST \ - -b "PVEAuthCookie=${TICKET}" \ - -H "CSRFPreventionToken: ${CSRF}" \ - https://${ADDR}:8006/api2/json/nodes/${ADDR}/qemu/${id}/status/start - ;; - 5) - echo "PrintID:"; read id - - # ------------------------------------------------- - # 1️⃣ Find the node that actually hosts the VM - # ------------------------------------------------- - VM_INFO=$(curl -s -k -b "PVEAuthCookie=${TICKET}" \ - -H "CSRFPreventionToken: ${CSRF}" \ - "https://${ADDR}:8006/api2/json/cluster/resources?type=vm") - VM_NODE=$(echo "$VM_INFO" | jq -r --arg id "$id" \ - '.data[] | select(.vmid == ($id|tonumber)) | .node') - if [[ -z "$VM_NODE" ]]; then - echo "Could not locate VM $id" - continue - fi - echo "VM $id is on node $VM_NODE" - - # ------------------------------------------------- - # 2️⃣ Stop the VM via API and wait for the task - # ------------------------------------------------- - stop_resp=$(curl -s -k -X POST \ - -b "PVEAuthCookie=${TICKET}" \ - -H "CSRFPreventionToken: ${CSRF}" \ - "https://${ADDR}:8006/api2/json/nodes/${VM_NODE}/qemu/${id}/status/stop") - stop_upid=$(echo "$stop_resp" | jq -r '.data') - echo "Stop task UPID: $stop_upid" - - if ! wait_task "$stop_upid"; then - echo "Failed to stop VM $id – aborting delete." - continue - fi - echo "VM $id is now stopped." - - # ------------------------------------------------- - # 3️⃣ Destroy the VM via API and wait for the task - # ------------------------------------------------- - destroy_resp=$(curl -s -k -X POST \ - -b "PVEAuthCookie=${TICKET}" \ - -H "CSRFPreventionToken: ${CSRF}" \ - "https://${ADDR}:8006/api2/json/nodes/${VM_NODE}/qemu/${id}/destroy") - destroy_upid=$(echo "$destroy_resp" | jq -r '.data') - echo "Destroy task UPID: $destroy_upid" - - if wait_task "$destroy_upid"; then - echo "VM $id successfully removed." - else - echo "Failed to destroy VM $id." - fi - ;; - 6) - echo "Goodbye!"; exit 0 - ;; - *) - echo "Invalid choice, try again." - ;; - esac -done diff --git a/wayland/day1/1.c b/wayland/day1/1.c deleted file mode 100644 index d33c11d..0000000 --- a/wayland/day1/1.c +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include - -// 1. Обработчик глобальных объектов (Global Registry) -static void global_registry_handler(void *data, struct wl_registry *registry, - uint32_t id, const char *interface, uint32_t version) { - - // Выводим имя интерфейса, чтобы показать, какие сервисы доступны - printf("Обнаружен глобальный объект: id: %u, интерфейс: %s, версия: %u\n", - id, interface, version); - - // В реальном приложении здесь происходит привязка к нужным интерфейсам - // (например, wl_compositor, xdg_wm_base) для создания окон. -} - -// 2. Обработчик удаления глобальных объектов -static void global_registry_remover(void *data, struct wl_registry *registry, uint32_t id) { - printf("Объект удален: id: %u\n", id); -} - -// 3. Структура для слушателей реестра -static const struct wl_registry_listener registry_listener = { - .global = global_registry_handler, - .global_remove = global_registry_remover, -}; - -int main(int argc, char *argv[]) { - // 4. Установка соединения с Wayland-дисплеем - struct wl_display *display = wl_display_connect(NULL); - if (display == NULL) { - fprintf(stderr, "Не удалось подключиться к Wayland-дисплею.\n"); - return 1; - } - - printf("Успешное подключение к Wayland-дисплею.\n"); - - // 5. Получение реестра глобальных объектов - struct wl_registry *registry = wl_display_get_registry(display); - if (registry == NULL) { - fprintf(stderr, "Не удалось получить реестр.\n"); - wl_display_disconnect(display); - return 1; - } - - // 6. Добавление слушателя к реестру - wl_registry_add_listener(registry, ®istry_listener, NULL); - - // 7. Ожидание ответа от композитора (обработка всех глобальных объектов) - // Wayland работает асинхронно, wl_display_dispatch_pending() обрабатывает - // все сообщения, включая список глобальных объектов, который присылает композитор. - wl_display_dispatch(display); - wl_display_roundtrip(display); // Убеждаемся, что все сообщения обработаны - - // 8. Очистка ресурсов - wl_registry_destroy(registry); - wl_display_disconnect(display); - - return 0; -} diff --git a/wayland/tmp b/wayland/tmp deleted file mode 100755 index 5e0ab3f..0000000 Binary files a/wayland/tmp and /dev/null differ