Доделать задачу, чтобы в матрице остались строки только с нулевой характеристикой - 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;
}

Объяснение кода листинга программы

Код решает задачу сортировки столбцов матрицы по сумме простых чисел в этих столбцах. Список функций и их назначение:

  1. IsSimpleNumber - функция проверяет, является ли число простым.
  2. SwapColumns - функция меняет местами два столбца в матрице.
  3. SumOfSimpleNumbers - функция вычисляет сумму простых чисел в столбце.
  4. Sort - функция сортирует матрицу по сумме простых чисел в столбцах. Описание алгоритма:
  5. Создается матрица случайных целых чисел.
  6. Выводится исходная матрица.
  7. Столбцы матрицы сортируются по сумме простых чисел в них.
  8. Выводится отсортированная матрица.
  9. Выводится сумма простых чисел в каждом столбце.
  10. Все ресурсы, выделенные под матрицу, освобождаются. Код реализует алгоритм, описанный в задаче.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы