Доделать задачу, чтобы в матрице остались строки только с нулевой характеристикой - C (СИ)
Формулировка задачи:
Не знаю как это все до конца довести(фотка снизу)=)
вот код:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h> void f1(int **a,int n,int m) { int i,j; for (i=0;i<n;i++) for (j=0;j<m;j++) { *(*(a+i)+j)=rand()%8+1; } } void f2(int **a,int n,int m) { int i,j; for (i=0;i<n;i++) {for (j=0;j<m;j++) { printf("%i ",*(*(a+i)+j)); } printf("\n"); } printf("\n"); } int col_del(int b) { int i,p; p=0; for(i=2;i<b;i++) if (b%i==0) p++; return p; } int kolvpr(int *p) {int c=0,i,n; for (i=0;i<n;i++) if (col_del(*(p+i)==0)) c++; return c; } int harakt(int **a,int j,int n) { int i,s=0; for (i=0;i<n;i++) { if (kolvpr(*(*(a+i)+j))==1) s++; } return s; } void zamen(int **a,int n,int j,int j1) { int i,tmp; for (i=0;i<n;i++) { tmp=*(*(a+i)+j); *(*(a+i)+j)=*(*(a+i)+j1); *(*(a+i)+j1)=tmp; } } void st(int **a,int n,int m) { int i,j,k; for (k=0;k<n*m;k++) for (j=0;j<m-1;j++) { if (harakt(a,j,n)>(harakt(a,j+1,n))) zamen(a,n,j,j+1); } } int main() { int **a,n,m,i,j; srand((unsigned)time(NULL)); scanf("%i %i", &n,&m); a=(int*)malloc(n*sizeof(int)); for (i=0;i<n;i++) *(a+i)=(int*)malloc((m)*sizeof(int)); f1(a,n,m); f2(a,n,m); st(a,n,m); printf("\n"); f2(a,n,m); return 0; }
Решение задачи: «Доделать задачу, чтобы в матрице остались строки только с нулевой характеристикой»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> int IsSimpleNumber(int n) { if (n <= 2) return 0; int i; for (i = 2; i * i <= n; i++) if (n % i == 0) return 0; return 1; } void SwapColumns(int **matrix, size_t column_a, size_t column_b, size_t matrix_height) { size_t i; int tmp; for (i = 0; i < matrix_height; ++i) { tmp = matrix[i][column_a]; matrix[i][column_a] = matrix[i][column_b]; matrix[i][column_b] = tmp; } } size_t SumOfSimpleNumbers(int **matrix, size_t column, size_t matrix_height) { size_t result = 0, i; for (i = 0; i < matrix_height; ++i) if (IsSimpleNumber(matrix[i][column])) result += matrix[i][column]; return result; } void Sort(int **matrix, size_t matrix_height, size_t matrix_width) { size_t i, j; for (i = 0; i < matrix_height - 1; ++i) for (j = i + 1; j < matrix_width; ++j) if (SumOfSimpleNumbers(matrix, i, matrix_height) > SumOfSimpleNumbers(matrix, j, matrix_height)) SwapColumns(matrix, i, j, matrix_height); } int main(int argc, char* argv[]) { srand(time(NULL)); // You might want to input them manually size_t matrix_height = 10 + rand() % 5; size_t matrix_width = 10 + rand() % 5; size_t i, j; int **matrix = (int**)malloc(sizeof(int*) * matrix_height); printf("Source:\n"); for (i = 0; i < matrix_height; ++i) { matrix[i] = (int*)malloc(sizeof(int) * matrix_width); for (j = 0; j < matrix_width; ++j) printf("%4d", matrix[i][j] = rand() % 100); printf("\n"); } Sort(matrix, matrix_height, matrix_width); printf("\nSorted columns:\n"); for (i = 0; i < matrix_height; ++i) { for (j = 0; j < matrix_width; ++j) printf("%4d", matrix[i][j]); printf("\n"); } printf("\nCharacteristics:\n"); for (i = 0; i < matrix_width; ++i) printf("%4d", SumOfSimpleNumbers(matrix, i, matrix_height)); for (i = 0; i < matrix_height; ++i) free(matrix[i]); free(matrix); return 0; }
Объяснение кода листинга программы
Код решает задачу сортировки столбцов матрицы по сумме простых чисел в этих столбцах. Список функций и их назначение:
- IsSimpleNumber - функция проверяет, является ли число простым.
- SwapColumns - функция меняет местами два столбца в матрице.
- SumOfSimpleNumbers - функция вычисляет сумму простых чисел в столбце.
- Sort - функция сортирует матрицу по сумме простых чисел в столбцах. Описание алгоритма:
- Создается матрица случайных целых чисел.
- Выводится исходная матрица.
- Столбцы матрицы сортируются по сумме простых чисел в них.
- Выводится отсортированная матрица.
- Выводится сумма простых чисел в каждом столбце.
- Все ресурсы, выделенные под матрицу, освобождаются. Код реализует алгоритм, описанный в задаче.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д