Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- typedef struct
- {
- size_t capacity;
- size_t size;
- int* data;
- }vector;
- typedef struct
- {
- size_t size;
- vector** rows;
- }matrix;
- vector* vec_new()
- {
- vector* vec = (vector*)malloc(sizeof(vector));
- vec->size = 0;
- vec->capacity = 5;
- vec->data = (int*)malloc(vec->capacity * sizeof(int));
- return vec;
- }
- void vec_insert(vector* vec, int a)
- {
- if (vec->size == vec->capacity) {
- vec->capacity = vec->capacity * 2;
- vec->data = (int*)realloc(vec->data, vec->capacity * sizeof(int));
- }
- vec->data[vec->size] = a;
- vec->size++;
- }
- void vec_free(vector* vec)
- {
- free(vec->data);
- free(vec);
- }
- void vec_print(vector* vec)
- {
- for (int i = 0; i < vec->size; i++) {
- printf("[%d] %d\n", i, vec->data[i]);
- }
- }
- matrix* matrix_new(int row_count)
- {
- matrix* m = (matrix*)malloc(sizeof(matrix));
- m->rows = (vector**)malloc(row_count * sizeof(vector*));
- m->size = row_count;
- return m;
- }
- void matrix_print(matrix* m)
- {
- for (int i = 0; i < m->size; i++) {
- printf("[%d] ", i);
- vector* row = m->rows[i];
- for (int j = 0; j < row->size; j++) {
- printf("%d ", row->data[j]);
- }
- printf("\n");
- }
- }
- void matrix_free(matrix* m)
- {
- for(int i = 0; i < m->size; i++) {
- vec_free(m->rows[i]);
- }
- free(m->rows);
- free(m);
- }
- vector* row_get()
- {
- char a[100];
- if (fgets(a, 100, stdin) == NULL) {
- return NULL;
- }
- vector* v = vec_new();
- char *p = strtok(a, " \t");
- while (p != NULL)
- {
- if (p[strlen(p)-1] == '\n') {
- p[strlen(p)-1] = '\0';
- }
- int num = atoi(p);
- if (num != 0 || strcmp(p, "0") == 0) {
- vec_insert(v, num);
- }
- p = strtok(NULL, " \t");
- }
- return v;
- }
- float row_avg(vector* v)
- {
- int avg = 0;
- for (int i = 0; i < v->size; i++) {
- avg += v->data[i];
- }
- return avg / v->size;
- }
- int row_max(vector *v)
- {
- int max = v->data[0];
- for (int i = 0; i < v->size; i++) {
- if (v->data[i] > max) {
- max = v->data[i];
- }
- }
- return max;
- }
- int main()
- {
- int count = 0;
- char num[5];
- printf("Введите количество строк: ");
- fgets(num, 5, stdin);
- count = atoi(num);
- if (count <= 0) {
- return 1;
- }
- matrix* m = matrix_new(count);
- for (int i = 0; i < count; i++)
- {
- printf("Введите %d строку: ", i+1);
- vector* v = row_get();
- if (v) {
- m->rows[i] = v;
- }
- }
- //bi = s1 - s2, где s1 - сумма четных, а s2 - сумма нечетных элементов
- vector* res = vec_new();
- for (int i = 0; i < count; i++)
- {
- vector* v = m->rows[i];
- int even_sum = 0;
- int uneven_sum = 0;
- for (int j = 0; j < v->size; j++)
- {
- if (v->data[j] % 2 == 0) {
- even_sum += v->data[j];
- } else {
- uneven_sum += v->data[j];
- }
- }
- vec_insert(res, even_sum - uneven_sum);
- }
- printf("Исходная матрица: \n");
- matrix_print(m);
- printf("---------------------------\nРезультирующий вектор: \n");
- vec_print(res);
- vec_free(res);
- matrix_free(m);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement