Задача с матрицей -- C++
Primary tabs
условие задачи:
Элемент матрицы назовем седловой точкой, если он является наименьшим в
своей строке и одновременно наибольшим в своем столбце или, наоборот,
является наибольшим в своей строке и наименьшим в своем столбце. Для
заданной целой матрицы размером 10 ? 15 напечатать индексы всех ее
седловых точек.
попытка решения:
#include "stdio.h" #define _USE_MATH_DEFINES #include "math.h" #include "string" #include "conio.h" #include "iostream" #include "time.h" using std::cout; using std::cin; using std::endl; int main(){ int a = 0, b = 0; int mass[10][15]; int ind_a [256]; int ind_b [256]; int ind1_a [256]; int ind1_b [256]; //как вариант, ввод массива с клавиатуры /* while (a<= 10 && b <= 15){ cout << "введите очередной элемент массива: "; cin >> mass[a][b]; b++; if(b == 15){ a++; } } */ // заполнение случайными числами time_t; int i, j; for (int i= 0; i < 10; i ++){ for (int j = 0; j < 15; j++){ mass[i][j] = 0 + rand( ); } } int a1 = 0, b1 = 0, n1 = 0; //цикл1 поиск максимума в столбцах (первый номер элемента -номер строки, второй номер - номер столбца) найденый максимум записывается в строку while (a1 <= 10 && b1 <= 15){ if(a1 < 10){ if(mass[a1][b1] < mass[a1++][b1]){ ind_a[n1] = a1++; ind_b[n1] = b1; } a1++; } else b1++; n1++; } //цiкл2 минимум в строках int a2 = 0, b2 = 0, n2 = 0; while (a2 <= 10 && b2 <= 15){ if(b2 < 15){ if(mass[a2][b2] > mass[a2][b2++]){ ind1_a[n2] = a2; ind1_b[n2] = b2; } b2++; } else a2++; n2++; } //цикл3 - сравнение результатов цикла1 и цикла2, вывод результатов int a3 = 0, b3 = 0, n3 = 0; while (n3 <= 256){ if(mass[ind_a[n3]][ind_b[n3]] == mass[ind1_a[n3]][ind1_b[n3]]) { cout << ind_a[n3] << ind_b[n3] << endl; n3++; } } getch () ; return 0 ; }
код ошибки:
1>------ Построение начато: проект: chernovik 6 task, Конфигурация:
Debug Win32 ------
1> body.cpp
1>c:\documents and settings\грш\мои документы\visual studio
2010\projects\chernovik\chernovik 6 task\chernovik 6
task\body.cpp(90): warning C4996: 'getch': The POSIX name for this
item is deprecated. Instead, use the ISO C++ conformant name: _getch.
See online help for details.
1> c:\program files\microsoft visual studio
10.0\vc\include\conio.h(128): см. объявление "getch"
1>c:\documents and settings\грш\мои документы\visual studio
2010\projects\chernovik\chernovik 6 task\chernovik 6
task\body.cpp(44): warning C4101: i: неиспользованная локальная
переменная
1>c:\documents and settings\грш\мои документы\visual studio
2010\projects\chernovik\chernovik 6 task\chernovik 6
task\body.cpp(43): warning C4101: t: неиспользованная локальная
переменная
1>c:\documents and settings\грш\мои документы\visual studio
2010\projects\chernovik\chernovik 6 task\chernovik 6
task\body.cpp(44): warning C4101: j: неиспользованная локальная
переменная
1> LINK : не найден или не выполнена сборка C:\Documents and
Settings\Грш\Мои документы\Visual Studio
2010\Projects\chernovik\chernovik 6 task\Debug\chernovik 6 task.exe
при последней инкрементной компоновке; выполняется полная компоновка
1> chernovik 6 task.vcxproj -> C:\Documents and Settings\Грш\Мои
документы\Visual Studio 2010\Projects\chernovik\chernovik 6
task\Debug\chernovik 6 task.exe
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0,
пропущено: 0 ==========
господа, че делать, почему не работает??
- Log in to post comments
- 30422 reads
vedro-compota
Wed, 01/16/2013 - 08:55
Permalink
в каком смысле "не работает"?
в каком смысле "не работает"? программа на запускается?
как таковой ошибки в предупреждения студии нет - если вы хотите избавиться от всех предупреждения - поищите в гугл каждое из них - и вынесете его отдельной ссылкой начиная со слов "ошибка " (потом тексn) - можно и наоборот.
если не понимаете в чём дело - при этом пути к компилируемым файлам из заголовков убираются - т.к. общей смысловой нагрузки не несут.
_____________
матфак вгу и остальная классика =)
baton
Wed, 01/16/2013 - 16:26
Permalink
понимаете в чем дело -
понимаете в чем дело - программа строится успешно.
вылетает пустая консоль и подвисает - ее приходится завершат через диспетчер.
посмотрите пожалуйста код - может быть косяк в чем-то несложном - я в первый раз использую двумерный массив - может что-то напутал при инициализации, например?
хотя я так подозреваю, не срабатывает один из циклов - я не могу понять, почему.
да, еще : при завершении через диспетчер выводится системный отчет об ошибке (который предлагают отправить Биллу)
"AppName: chernovik 6 task.exe AppVer: 0.0.0.0 ModName: chernovik 6 task.exe ModVer: 0.0.0.0 Offset: 000116eb"
vedro-compota
Wed, 01/16/2013 - 23:01
Permalink
как мы выяснили сегодня
как мы выяснили сегодня проблема (которая вызывала ошибку) была в строке:
потому что к сожалению элемент - по номеру подобному по величине этому:
отсутствовал =)))
_____________
матфак вгу и остальная классика =)
baton
Thu, 01/17/2013 - 22:58
Permalink
ну и что бы вы думали - заработала задача?
а вот хрен мне на дизельном топливе. все-таки я себе не изменил и неповторимо криво написал третий цикл.
ниже привожу полностью код задачи:
третий цикл (ПРОВЕРКА и ВЫВОД) работать должен дословно так:
внешний цикл и первое условие вложенного цикла - сравниваются координаты мин и макс по строкам, вложенный цикл и второе условие - сравниваются координаты мин и макс по столбцам.
еще хотел сделать проверку значений минимумов и максимумов - но пока эту строку (после второго условия вложенного цикла) закомментил.
проблема - ни одной седловой точки не находит.
устранение проблемы - завтра вручную проверю результаты заполнения строк координатами и если седловые точки есть, перепишу ПРОВЕРКУ заново с вынесением первого условия во внешний цикл
vedro-compota
Fri, 01/18/2013 - 18:54
Permalink
здесь два момента:
здесь два момента:
1) Вы проверяли правильность работы первых двух циклов? (выводили ли полученные массивы на экран - это действительно максимумы/минимумы)
2) далее - комментарий -
не соответствует действительности - хотя надо отметить что уровень написания комментариев значительно повышен (поздравляю)
это нуждается в обосновании - хотя бы и не имеет его , как и всякая ошибка. в первом условии есть элемент ,который изменяется в каждом витке внутреннего цикла, а потому перенесён быть не может.
_____________
матфак вгу и остальная классика =)
baton
Fri, 01/18/2013 - 22:44
Permalink
нашел косяк
вообще для меня уже сомнительно существование седловых точек в матрице заполняемой рандомным способом - и я ради эксперимента заполнил матрицу так:
при этом выявилось, что третья и четвертая строки (координаты минимумов строк матрицы) - не заполняются.
над косяком работаю - хотя я без понятия - в чем он.
vedro-compota
Fri, 01/18/2013 - 22:54
Permalink
задайте вручную (в коде)
задайте вручную (в коде) матрицу 5 на 5 - в которой будет пара седловых точек
выведите её (матрицу) на экран
выведите найденные точки
измените число седловых точек - и ещё раз запустите программу.
действительно - наличие седловых точек - не столь уж вероятное событие.
_____________
матфак вгу и остальная классика =)
baton
Sat, 01/19/2013 - 00:47
Permalink
косяк определен точно
дело именно во втором цикле. я не знаю в чем именно - где в трех строках ошибка - но она там.
привожу код, который срабатывает, полностью - его особенность заключается в кастрации второго цикла (который совершает поиск минимума в строках). прилагаю скриншоты экрана до и после кастрации:
до кастрации:
после:

обратите внимание, что третий цикл (сравнение результатов цикла 1 и 2, вывод седловой точки) - срабатывает. как и первый цикл(поиск максимума в столбцах)
vedro-compota
Sat, 01/19/2013 - 00:54
Permalink
скриношоты это удобно - но
скриношоты это удобно - но вы уверены, что код "до изменения" выглядит именно так (а вы утверждаете именно это)?:
_____________
матфак вгу и остальная классика =)
baton
Sat, 01/19/2013 - 19:33
Permalink
та невже
это уже кастрированный код, с которого вы убрали часть
- суть кастрации заключаласть так же в
вся строка b насильно заполняется нулями, хотя цикл должен это делать самостоятельно.
код "до" приведен на два поста выше - см. полный код
кстати, ошибку так и не понял
baton
Sat, 01/19/2013 - 13:28
Permalink
эврика
ща выложу рабочий код
и объясню в чем на самом деле был косяк.
baton
Sat, 01/19/2013 - 18:36
Permalink
упс
опять криво
при рандомном заполнении матрицы находит несуществующие седловые точки.....
baton
Sun, 01/27/2013 - 15:37
Permalink
готовый рабочий код v2.0
вроде бы все работает исправно
baton
Sun, 01/27/2013 - 18:09
Permalink
код для матрицы 3 на 3
для того чтобы проверить код вручную запилил вариант с вводом матрицы 3Х3 с клавиатуры.
вроде бы все в порядке.
baton
Sun, 01/27/2013 - 18:12
Permalink
благодарствую
спасибо за помощь товарищ - ты часто выручаешь)))))
через сутки подкину еще один косяк.