![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
mary1010 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.12.2012 Репутация: нет Всего: нет |
Я новичок в с++...поэтому оооочень нужна Ваша помощь!!!
Необходимо написать программу, которая удаляет столбец матрицы, содержащий максимальный ее элемент. Элементы вводятся с клавиатуры и еще нужно использовать функции. У меня почему-то не получается вызвать функции и ошибки в DeleteColumn типа: 1.[C++ Error] Unit1.cpp(29): E2188 Expression syntax 2.[C++ Error] Unit1.cpp(46): E2451 Undefined symbol 'i' ..... 3.[C++ Warning] Unit1.cpp(71): W8004 't' is assigned a value that is never used ..... вот собственно код:
Это сообщение отредактировал(а) mary1010 - 22.2.2013, 00:15 |
|||
|
||||
Arks |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Доброго времени суток.
Внимательно смотрим: на 29-ой строке вместо вызова функции Вы ввели её описание. На 46-ой: "Undefined symbol 'i'" переводится как "неопределённый символ i". И правда, ведь он неопределён ни в функции ни в глобальной области. Лабу делаете? По-моему, слишком сложно написано. Если у Вас по заданию матрица квадратная, то мучиться с массивом массивов смысла нет. Достаточно один массив int* matrix, вмещающий все её элементы. Например matrix[2][3] (2-ая строка, 3-ий столбец) в данном случае можно получить так: matrix[N*2 + 3], где N - размерность матрицы. Понятно, как это получается? Удалить столбец j тогда тоже просто: Создаём новую матрицу на N элементов короче и проходим по старой матрице и копируем из неё в новую все элементы кроме matrix[N*i+j], осталось очистить память от старой матрицы и заменить указатель. И никаких вложенных друг в друга аж 4 раза циклов не надо. |
|||
|
||||
mary1010 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.12.2012 Репутация: нет Всего: нет |
Arks, спасибо Вам!
но функции не вызываются...те программа ничего не делает |
|||
|
||||
Arks |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
mary1010, функции-то вызываются, не могут они тут не вызываться, другое дело что они у Вас делают.
Отлаживайте код: в дебагере по шагам, с просмотром значений переменных, или в уме, или на бумажке и сразу увидите почему функции не отрабатывают или делают не то, что Вы ожидали. Удаление исправили? Оно в коде выше было страшным и неработоспособным монстром. Если зануляете значения в удалённых столбцах, то достаточно один раз обойти матрицу и каждый раз проверять стоблец j равен искомому? Если да, то зануляем. Если удалете столбец физически, то аналогично алгоритму, который я писал для одномерного массива в сообщении выше, только на сей раз надо будет создать новые массивы длинной меньше старых на 1 для каждой строки матрицы:
Кстати, логически правильнее было бы вынести удаление столбца по индексу в отдельную функцию, тогда её сможете отдельно от поиска проверить на работоспособность. Да и по смыслу удаление - отдельное от поиска действие. |
|||
|
||||
mary1010 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.12.2012 Репутация: нет Всего: нет |
Arks, спасибо)
функции действительно вызывались, только работали не корректно, а именно заполнение матрицы. Я забыла задать размерность как-то не доганяю с удалением...по Вашему примеру:
ошибка во 2 строке:[C++ Error] Unit1.cpp(62): E2040 Declaration terminated incorrectly и еще, правильно ли так искать столбец?
|
||||
|
|||||
mary1010 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 20.12.2012 Репутация: нет Всего: нет |
Arks, самое важное для меня сейчас - это понять как из findMax поучить номер столбца с макс. элементом и передать его в DeleteColumn!!!
|
|||
|
||||
Arks |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 7.5.2006 Где: Барнаул Репутация: нет Всего: нет |
Мда, уведомление при ответах не включил... Если ещё актуально, отвечаю.
Про ошибку "во 2 строке:[C++ Error] Unit1.cpp(62): E2040 Declaration terminated incorrectly": Компилятор c++ (visual studio по крайней мере) практически всегда ругается не на ту строку, в которой ошибка, а на следующую или даже через на много строк позже. Я сам давно не писал на c++ и, например, получил подобную ошибку на строке: static std::ofstream file("filename.txt"); // ошибка: использование переменной не полностью определённого типа Оказалось (спасибо поиску в инете), что я в начале файла забыл включить нужный заголовок: #include <fstream>. Так что смотрите выше. (В данном случае, в строке 1). Если не знаете, что сообщение об ошибке значит, сами не можете найти, то в первую очередь попробуйте поиск в интернете: declaraion terminated incorrectly - первая же ссылка из гугла идёт на форум, где есть ответ на Вашу проблему.
Как-нибудь по-проще: например, findMax может возвратить номер столбца, а DeleteColumn принять третьим параметром, который я забыл указать в описании функции ![]()
Это зависит от контекста... Если max[j] - это глобально определённый массив булевых значений (что-то вроде bool max[width]), где для каждого столбца j выполняется следующее условие:
Другой вопрос, зачем так сложно? |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |