@Inna04

Как инициализировать n так что бы оно работало для всех введенных n,а не только для 2?

Задание:Упорядочить содержащие нули строки матрицы S(n, m) в порядке возрастания их количества.
Код полностью рабочий , можете вставить в кампилятор и увидеть ,что код работает только для 2 строк , а как записать что бы для всех которые будет вводить пользователь?
#include <stdio.h>
#include <stdlib.h>
int main(){
  int arr_S[100][100]; 
   
  int m; //кількість стовпців
  int n=2; //рядків
  int k[2]={};
  
  printf("Уведіть кількість рядків масиву n = ");
  while (1)
  {
    if (scanf("%d", &n)!=1 || n <= 0)
    {
      //якщо не виконуються умови-виведення запиту на повторне введення
      printf("Ви ввели неправильне значення. Спробуйте ще раз:\n");
      while(getchar() != '\n') //очистка буфера вводу та очікуання на правильний результат
      continue;
    }
    else if (n > 100)
    {
      //якщо переповнення масиву-виведення запиту на повторне введення
      printf("Забагато рядків. Спробуйте ще раз:\n");
      while(getchar() != '\n') //очистка буфера вводу та очікуання на правильний результат
      continue;
    } 
    else
      break;
  }
//введення кількості стовпців
printf("Уведіть кількість стовпців масиву m = ");
while (1)
  {
    if (scanf("%d", &m)!=1  || m <= 0)
    {
      //якщо не виконуються умови-виведення запиту на повторне введення
      printf("Ви ввели неправильне значення. Спробуйте ще раз:\n");
      while(getchar() != '\n') //очистка буфера вводу та очікуання на правильний результат
      continue;
    }
    else if (m > 100)
    {
      //якщо переповнення масиву-виведення запиту на повторне введення
      printf("Забагато стовпців. Спробуйте ще раз:\n");
      while(getchar() != '\n') //очистка буфера вводу та очікуання на правильний результат
      continue;
    } 
    else
      break;
  }
//введення елементів масиву
for(int i = 0; i < n; i++)
  for(int j = 0; j < m; j++)
  {
    printf("arr_S[%d][%d] = ", i, j);
    while (scanf("%d", &arr_S[i][j])!=1)
    {
      //якщо не виконуються умови-виведення запиту на повторне введення
      printf("Ви ввели неправильне значення. Спробуйте ще раз:\n");
      while(getchar() != '\n') //очистка буфера вводу та очікуання на правильний результат
      continue;
    } 
  }
    printf("\nПочаткова матриця: \n");
    for(int i = 0; i < n; i++){
      for(int j = 0; j < m; j++){
        printf(" %d ", arr_S[i][j]);  
      }
    printf("\n");
    }
int i,j;
{
for( i = 0 ; i < n ; i++ )
    for( j = 0 ; j < m ; j++ )if(arr_S[i][j]==0)k[i]++;
 
for( i = 0 ; i < n -1 ; i++ )
      for( j = i + 1 ; j < n ; j++)
          if(k[j]<k[i]){   
          int tmp = k[i];
          k[i]=k[j];
          k[j] = tmp;
          int p;
          for( p = 0 ; p < m ; p++ ){
          tmp = arr_S[i][p];
          arr_S[i][p]=arr_S[j][p];
          arr_S[j][p]=tmp;
          }
        
    }
    printf("\nВідсортована матриця: \n");
    for(int i = 0; i < n; i++){
      for(int j = 0; j < m; j++){
        printf(" %d ", arr_S[i][j]);  
      }
    printf("\n");
    
}
}
   

}
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
код работает только для 2 строк , а как записать что бы для всех которые будет вводить пользователь?

заменить
int k[2]={};
на
int k[100]={};
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Между вводом и проверкой в if-e надо поставить логическую операцию или (||).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы