Двумерные массивы

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Dimonserg1996
Сообщения: 5
Зарегистрирован: 14 дек 2014, 10:04

Ребят спасайте 1 задание 1 лабы осталось с прошлого семестра. вообще не пойму как её сделать. В общем Задать двумерный массив размерности NXM натуральных случайных чисел из интервала (-10; 10). Предусмотреть автоматический и ручной способ ввода элементов массива. Вывести на экран в виде таблицы исходный массив и преобразованный с соответствующими заголовками. Ну тут все понятно а вот само задание В матрице первый элемент каждой строки – шифр детали, остальные элементы – ее характеристики. Выявить и удалить из матрицы номера строк с совпадающими шифрами и несовпадающими характеристиками. Вывести матрицу после резекции. Если скинете сразу код будет очень круто!
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Во-первых, строки матрицы можно не удалять, а просто их не выводить, если они нам не подходят. Это упростит алгоритм.

Во-вторых, понятно, что нам понадобится цикл в цикле для того, чтобы найти строки с совпадающими шифрами. В идеале внутренний цикл должен начинаться от индекса наружного цикла + 1 и бежать до количества строк, однако в этом случае, если мы решили, что строку следует не показывать, нам нужно не показывать как текущую строку (индекс наружного цикла), так и подбираемую строку (индекс внутреннего цикла), так что понадобится некоторый вспомогательный массив, чтобы помнить, что строка должна быть проигнорирована, когда текущая строка доберётся до значения подбираемой. Поэтому, дабы ещё раз упростить алгоритм, предлагаю бежать оба цикла с самого начала. Это замедлит работу программы, зато улучшит её понимание.

Предоставляю код на изобретённом мной алгоритмическом языке, чтобы дать идею, но не дать готового решения.

Код: Выделить всё

Константа N = 100;
Константа M = 10;

Массив Arr[N][M];

Считать(Arr);

Цикл по i от 0 do N-1
{
   Print = истина;

   Цикл по j от 0 до N-1
   {
      // В этом месте i - это индекс текущей строки, а j - индекс подбираемой строки.
      // Печатаем или пропускаем строку мы исключительно по индексу i, индекс j используется только для
      // для определения есть ли ещё строки с таким шифром или нет.

      Если (i не равно j) // это условие необходимо, чтобы мы не сравнивали строку с самой собой
      и (Arr[i][0] равно Arr[j][0]) // проверка равенства шифров текущей и подбираемой строки
      {
         // Если шифры равны, то задача проверить равны ли все характеристики
 
         column = 1;
         Цикл пока column < M
         {
            Если (Arr[i][column] не равно Arr[j][column])
            {
               Прервать цикл;
            }
            Инкремент column;
         }

         Если (column не равно M) // значит найдены неравные характеристики
         {
            Print = ложь;
            Прервать цикл;
         }
      }
   }

   Если (Print)
   {
      Напечатать строку i;
   }
}
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

А что ты делал в прошлом семестре?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Dimonserg1996 писал(а):натуральных случайных чисел из интервала (-10; 10).
Уж что нибудь одно. Или от минус десяти, или натуральных. Ноль ещё можно причислить к натуральным на том основании, что в first floor - это второй этаж, под ним ещё ground floor, который, если его обозначить числовым номером, и будет нулевой. Но отрицательных номеров не бывает.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Romeo писал(а):Во-первых, строки матрицы можно не удалять, а просто их не выводить, если они нам не подходят. Это упростит алгоритм.
То есть
У меня есть решение, но к задаче оно не подходит.
. Сказано удалить, а не вывести без.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить