Страница 1 из 1
Двумерные массивы
Добавлено: 18 май 2015, 07:11
Dimonserg1996
Ребят спасайте 1 задание 1 лабы осталось с прошлого семестра. вообще не пойму как её сделать. В общем Задать двумерный массив размерности NXM натуральных случайных чисел из интервала (-10; 10). Предусмотреть автоматический и ручной способ ввода элементов массива. Вывести на экран в виде таблицы исходный массив и преобразованный с соответствующими заголовками. Ну тут все понятно а вот само задание В матрице первый элемент каждой строки – шифр детали, остальные элементы – ее характеристики. Выявить и удалить из матрицы номера строк с совпадающими шифрами и несовпадающими характеристиками. Вывести матрицу после резекции. Если скинете сразу код будет очень круто!
Re: Двумерные массивы
Добавлено: 18 май 2015, 14:18
Romeo
Во-первых, строки матрицы можно не удалять, а просто их не выводить, если они нам не подходят. Это упростит алгоритм.
Во-вторых, понятно, что нам понадобится цикл в цикле для того, чтобы найти строки с совпадающими шифрами. В идеале внутренний цикл должен начинаться от индекса наружного цикла + 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;
}
}
Re: Двумерные массивы
Добавлено: 27 авг 2015, 10:07
Сионист
А что ты делал в прошлом семестре?
Re: Двумерные массивы
Добавлено: 27 авг 2015, 10:10
Сионист
Dimonserg1996 писал(а):натуральных случайных чисел из интервала (-10; 10).
Уж что нибудь одно. Или от минус десяти, или натуральных. Ноль ещё можно причислить к натуральным на том основании, что в first floor - это второй этаж, под ним ещё ground floor, который, если его обозначить числовым номером, и будет нулевой. Но отрицательных номеров не бывает.
Re: Двумерные массивы
Добавлено: 27 авг 2015, 10:11
Сионист
Romeo писал(а):Во-первых, строки матрицы можно не удалять, а просто их не выводить, если они нам не подходят. Это упростит алгоритм.
То есть
У меня есть решение, но к задаче оно не подходит.
. Сказано удалить, а не вывести без.