Минимум среди максимумов матрицы, Использовать процедуры или функции |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Минимум среди максимумов матрицы, Использовать процедуры или функции |
Айра |
8.12.2007 22:27
Сообщение
#1
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Привет!
В общем нужно было найти минумум среди максимумов каждой строки матрицы и вывести его вместе с его координатами.. Использовать процедуры, либо функции.. (делала через процедуры) Задача конечно очень "сложная" и редкая)), аж самой противно , но не могли бы проверить, представляя себя очень строгим и дотошным преподом
еще.. мне кажется, чет я намудрила там с переменными.. с их глобальностью и локальностью.. Мне это не кажется? Заранее спасибо))) Сообщение отредактировано: Айра - 8.12.2007 22:30 |
Michael_Rybak |
9.12.2007 0:11
Сообщение
#2
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Вообще все хорошо. У меня было бы два таких небольших замечания.
Первое - матрицу как параметр лучше передавать всегда по ссылке, а не по значению (т.е. через var-параметр), т.к. иначе при каждом вызове создается дополнительная копия матрицы в стеке, и при больших размерах матрицы это существенно влияет на производительность. И второе - лучше инициализацию выходных параметров инкапсулировать внутри процедур. Ты заполняешь min, str и stl, и передаешь их функции, которая при этом расчитывает на то, str и stl обнулены, а min - достаточно большое. Пусть лучше процедура внутря себя обеспечит эти условия, а снаружи ты ее только вызываешь, полагаясь, что параметры будут заполнены правильно. То же самое и для mx, передаваемой в poisk_max - пусть сам poisk_max ее и обнуляет. |
Айра |
9.12.2007 0:39
Сообщение
#3
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Спасибо!))
Все поняла, исправила. Только один вопрос.. "инкапсулировать" - значит "производить/проводить"? (буду пополнять свой словарный запас ) |
Michael_Rybak |
9.12.2007 0:49
Сообщение
#4
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
Инкапсулировать - это значит собирать в капсулу, дословно То есть вбирать в себя то, что другим знать необязательно.
Допустим, ты этой функцией хочешь поделиться со мной. Ты мне эту функцию даешь, и говоришь - параметр min нужно сделать очень большим, а параметры str и stl - обнулить, и тогда функция вычислит минимум максимумов и запишет в min. А на самом деле гораздо удобнее для меня как для пользователя твоего кода, чтобы я знал только, что надо ее вызвать, и что при этом получится минимум максимумов. А обнуление пусть за меня выполнит сама функция. Таким образом ты прячешь часть зависимостей внутрь функции, по возможности изолируешь детали реализации от внешнего мира. Это есть инкапсуляция. Хотя чаще это слово используется в отношении классов (а не функций). Но это уже совсем другая история |
volvo |
9.12.2007 0:53
Сообщение
#5
|
Гость |
Цитата "инкапсулировать" - значит "производить/проводить"? Инкапсулировать - от слова "капсула" - скрывать, закрывать оболочкой...Теперь о программе... Если быть Цитата очень строгим и дотошным преподом - то я бы порекомендовал:1. Все переменные, описанные в самом начале перенести так, чтоб они были описаны прямо перед началом основной программы (это к тому, что "меньше знаешь - лучше спишь", чем меньше процедур/функций "знают" о существовании глобальных переменных - есть меньше возможностей получить побочные эффекты)... 2. То же самое касается и вложенной процедуры - секция Var должна быть не ДО нее, а после... 3. Еще нечто, что у тебя во вложенной процедуре не совсем понятно: procedure poisk_max(b: matr; l: integer; var t,v: integer);Зачем ты еще раз передаешь матрицу? У тебя же сама матрица "А", переданная в процедуру poisk_min, доступна... (передавай матрицу по константной ссылке, если не будешь запускать программу на TP ниже 7 версии: procedure poisk_min(const a: matr; var mn,st,sl: integer);- это даст тебе дополнительную гарантию безопасности данных) |
Айра |
9.12.2007 0:55
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
to Michael_Rybak Понятно. Еще раз спасибо за подробное объяснение!
Сообщение отредактировано: Айра - 9.12.2007 0:57 |
Michael_Rybak |
9.12.2007 0:59
Сообщение
#7
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
|
мисс_граффити |
9.12.2007 1:01
Сообщение
#8
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
может, я сейчас скажу не совсем правильные вещи...
это скорее на уровне не "правильно/неправильно", а "мне так удобнее". если что - надеюсь, меня поправят ) 0) я бы минимизировала работу с глобальными константами. размерность матрицы - передавала процедурам. имхо, это несколько упрощает отладку. 1) названия переменных... l,v,w... хотелось бы побольше информативности 2) зачем хранить и значение элемента, и его индексы? по индексу всегда можно обратиться к элементу... -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Michael_Rybak |
9.12.2007 1:02
Сообщение
#9
|
Michael_Rybak Группа: Модераторы Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: 32 |
|
Айра |
9.12.2007 1:20
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
to volvo: тоже разобралась, спасибо!
to мисс_граффити: 0) я тоже об этом думала.. (вспоминается одна из лекций по информатике) наверно так и сделаю.. 1) тоже согласна, что запутанно, скорее всего и препод придерется.. придется выдумавать понятные обозначения.. 2) получается можно было сделать процедуру поиска минимума без передачи туда переменной min? а просто потом по индексам выводить элемент массива.. но раз я там уже нахожу минимальное, так пусть оно потом и поработает |
мисс_граффити |
9.12.2007 2:09
Сообщение
#11
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
нумерация пунктов та же
1) комментарии напиши... добавлять их к программкам - вообще хорошая привычка. хотя обычно лень... особенно если что-то совсем простенькое пишешь. 2) ну, по сути, да. то есть, грубо говоря, существует 2 банально-примитивно-классически-рассматривающихся везде способа поиска минимума: а) min:=очень_большое_число; б) min:=ar[1]; поскольку тебе все равно нужны индексы, я бы опиралась на второй вариант. то есть: min_ind:=1; насколько я понимаю, здесь даже нет вопроса быстродействие vs экономия памяти.... доступ к элементам массива прямой. это, кстати, позволит тебе переделать poisk_max из процедуры в функцию. что, на мой взгляд, с учетом учебной, а не практической направленности данной задачи будет плюсом - ты покажешь преподу, что умеешь работать с обоими видами подпрограмм. З.Ы. Если бы преподы ТАК принимали лабораторные Сообщение отредактировано: мисс_граффити - 9.12.2007 2:22 -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Айра |
9.12.2007 2:55
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Т.е. получится что-то типа такого:
А реализовать поиск_мин через индекс чет у меня не получается.. поздно наверно уже.. Сообщение отредактировано: Айра - 9.12.2007 2:55 |
volvo |
9.12.2007 3:24
Сообщение
#13
|
Гость |
Оля, смотри, что можно сделать:
const |
Айра |
10.12.2007 0:28
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
volvo, спасибо!
У меня были мысли про массив векторов, но реализовать не удалось(( Кстати, он ведь по идее считается одномерным, или как? |
volvo |
10.12.2007 0:36
Сообщение
#15
|
Гость |
Вектор - одномерный, массив векторов - уже двумерный... У тебя же не возникает вопроса: массив
array[1 .. n, 1 .. n] of integer - двумерный или нет? А согласно синтаксису Паскаля это объявление аналогично array[1 .. n] of array[1 .. n] of integer, ну а я ввел промежуточный тип (для удобства)... |
Айра |
10.12.2007 0:40
Сообщение
#16
|
Профи Группа: Пользователи Сообщений: 731 Пол: Женский Репутация: 25 |
Точно!
Еще раз пасибо)) |
Текстовая версия | 11.05.2024 13:37 |