Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 5 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 18.06.2020
Всем доброго времени суток! Задача состоит в том, что пользователь вводит количество элементов и заполняет сам массив, программа проверяет массив - являются ли все элементы одинаковыми. Моя реализация это конечно ошибка, выводит совершенно не тот результат.

Код:
int main()
{
   int M;// кол-во элементов
    scanf("%d", &M);// ввод элементов

   // ограничение на кол-во элементов
   if (M < 2 || M > 20)
   {
      printf("invalid input data");
      return 0;
   }


   int A[20];// массив, который будет заполняться

   // заполнение массива
   for (int i = 0; i < M; i++)
   {
      scanf("%d", &A[i]);
      // ограничение на размер элемента массива
      if (A[i] < -1000 || A[i] > 1000)
      {
         printf("invalid input data");
         return 0;
      }
   }

   int flag = 0;// костыль для проверки
   // вот это - моя идея, как проверить, что все элементы одинаковые
   for (int i = 0; i < M; i++)
   {
      for (int j = 0; j < M; j++)
      {
         //если элемент равен следующему
         if (A[j] == A[j + 1])
            flag = 1;
         else flag = 0;
      }
   }

   if (flag == 1)
      printf("Все элементы одинаковые");

   return 0;
}



Партнер
 

Member
Статус: Не в сети
Регистрация: 23.11.2015
Откуда: Москва
А зачем два цикла for при проверке? For по i не используется. В цикле по j ошибка, выход за границы диапазона (в последний проход j+1 равно М). Условие проверяет только последний элемент с элементом за границей массива... В общем, либо я чего-то не понимаю, либо это двойка...

Код:
for (int j = 1; j < M; j++) // т.к. минимум два элемента, можно начать с 1
      {
         //если элемент не равен предыдущему, выход
         if (A[j] != A[j - 1]) break;   //вариант: if (A[j] != A[0]) break;
      }

   if (j == M)
      printf("Все элементы одинаковые");


 

Junior
Статус: Не в сети
Регистрация: 18.06.2020
AlexRR77 писал(а):
В общем, либо я чего-то не понимаю, либо это двойка...

Двойка, похоже. Я сейчас исправил, выводит результат, что элементы одинаковые:
Код:
for (int i = 0; i < M; i++)
   {
      if ((A[i] == A[0]) && (A[i] == A[i - 1]))
         flag = 1;
      else flag = 0;
   }
   if (flag == 1)
      printf("все элементы одинаковые");


Но, как мне кажется, это все равно неправильно. Хотя я сравниваю текущий элемент с первым и с предыдущим, это мне кажется неправильным


 

Member
Статус: Не в сети
Регистрация: 23.11.2015
Откуда: Москва
Неправильно. У вас условие работает только один раз. Последний проход цикла. Что было в М-1 первые проходы, не учитывается. Одну из рализаций я вам написал.

Пройдите вручную пошагово массив из 4 элементов, поймёте, что не так.


 

Junior
Статус: Не в сети
Регистрация: 18.06.2020
AlexRR77 писал(а):
Неправильно. У вас условие работает только один раз. Последний проход цикла. Что было в М-1 первые проходы, не учитывается. Одну из рализаций я вам написал.

Пройдите вручную пошагово массив из 4 элементов, поймёте, что не так.


Понял, разобрался. Спасибо большое!


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 5 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  



Лаборатория














Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan