Нахождение min и max в массиве |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Нахождение min и max в массиве |
Вячеслав Л. |
27.10.2009 17:35
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: 3 |
Чему должно присваиваться значения min и max для программы нахождения максимального числа или минимального числа в массиве? То есть, меня интересует инициализация min и max до цикла. Ведь, по идеи чтобы найти max элемент мы должны первый элемент присвоить какому-то max, затем проверить если какой-то следующий элемент будет больше, чем тот который мы задали, тогда max присвоить этому элементу и т. д. (то есть все это в цикле)
... То же самое для минимального: ... Также ли надо было присваивать для просто введенных с клавы чисел, для которых нам надо было найти min и/или max? То есть: ... -------------------- Само знание есть сила
|
ammaximus |
27.10.2009 18:11
Сообщение
#2
|
Ночной волк Группа: Пользователи Сообщений: 103 Пол: Мужской Репутация: 1 |
В идеале max = INF, min = -INF т.е. самое большое и самое малое возможное число.
Для переменных - границы (например -32767 и 32768 для integer) Добавлено через 5 мин. Все наоборот В идеале max = -INF, min = INF т.е. самое малое для максимума и самое большое для минимума возможное число. Да кстати в паскале есть для этого специальные константы - MaxInt, MaxLongint -------------------- Не думай о белой обезьяне.
|
Вячеслав Л. |
27.10.2009 18:48
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: 3 |
Цитата идеале max = INF, min = -INF т.е. самое большое и самое малое возможное число. Для переменных - границы (например -32767 и 32768 для integer) Добавлено через 5 мин. Все наоборот В идеале max = -INF, min = INF т.е. самое малое для максимума и самое большое для минимума возможное число. Такой вариант считаю неправильным. Причина - не универсальность. -------------------- Само знание есть сила
|
volvo |
27.10.2009 18:54
Сообщение
#4
|
Гость |
Цитата Такой вариант считаю неправильным. Причина - не универсальность. Кто бы говорил про универсальность А я вот такой вариант считаю неправильным (если уж про универсальность заговорили): min:=a[1];причина - лишнее действие, которого очень легко избежать. И не только... Но что еще - это тебе задание на дом... |
Error 205 |
27.10.2009 20:22
Сообщение
#5
|
Группа: Пользователи Сообщений: 6 Пол: Мужской Реальное имя: Вадим Репутация: 0 |
min:=a[1];. зачем после присваивания минимуму первого лемента сразу сравниваем его с первым элементом |
Вячеслав Л. |
28.10.2009 14:44
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: 3 |
Цитата Кто бы говорил про универсальность Что ты имеешь в виду?Цитата зачем после присваивания минимуму первого лемента сразу сравниваем его с первым элементом Нда, простите, это действительно было глупо Цитата И не только... Но что еще - это тебе задание на дом... Да же не знаю, что еще не так... С дом. заданием я не справился... И все же по-моему такой вариант наиболее правильный: varИли я опять не прав? -------------------- Само знание есть сила
|
Lapp |
29.10.2009 3:31
Сообщение
#7
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
И все же по-моему такой вариант наиболее правильный:
varИли я опять не прав? Извиняюсь за встревание.. Если говорить о "наиболее правильном" варианте, то все же не так. 1. Запоминай не сам минимум, а его индекс. Соответственно, измени инициализацию, сравнение и вывод. Это повысит ту самую универсальность, о которой ты говорил. 2. Убери явное использование чисел из верхних границ циклов. Используй переменные или константы. 3. Пока ты не научишься нормально форматировать код, я бы на месте твоего преподавателя ставил не больше тройки. Считаю это ошибкой, причем грубой. Итого: двойка . -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
29.10.2009 3:59
Сообщение
#8
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Для переменных - границы (например -32767 и 32768 для integer) ... Да кстати в паскале есть для этого специальные константы - MaxInt, MaxLongint Константы есть, да - но все же не мешает помнить, что границы диапазона -32768 и 32767, а не как ты написал.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
andriano |
29.10.2009 9:00
Сообщение
#9
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
|
volvo |
29.10.2009 9:34
Сообщение
#10
|
Гость |
Цитата Я бы, например, не стал рекомендовать исправления, которые могут негативно сказаться на производительности. Если не внести это исправление, то вполне возможно (и даже вероятнее всего), что это скажется на производительности отрицательно. Миром byte, integer и longint, andriano, реальные программы не ограничены. Вот понадобится мне работать со своим типом данных, размером байт в 500-700, и что?Да и про негативное влияние на производительность при работе с индексами - тоже бабушка надвое сказала. Как ты же сам говорил? Цитата Ты хочешь конкретный совет, как можно решить проблему, или просто поговорить о несовершенстве Вселенной? Вот со мной о несовершенстве сферического компилятора в вакууме говорить не надо. Цифры и коды в студию. А я еще и посмотрю, выполняется ли то, о чем ты напишешь, на МОЕЙ машине (прецеденты, к сожалению, уже были, мне на Сурсах уже один раз говорили, что мой код работает медленнее, чем другой. Оказалось, что на древнем 386 процессоре) |
Вячеслав Л. |
29.10.2009 14:44
Сообщение
#11
|
Бывалый Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: 3 |
Так получается?
var -------------------- Само знание есть сила
|
Lapp |
29.10.2009 15:15
Сообщение
#12
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Зачем ты присваиваешь i единицу?.. Единицу надо присваивать min'у. При этом min превращается в индекс. Вот так:
Кроме самого кода, постарайся отсюда выудить максимум рекомендаций по форматированию. Добавлено через 6 мин. А почему? Что за спешка? Когда человеку потребуется скорость - тогда будет выжимать все возможное. Пока же такой цели не ставилось.Я бы, например, не стал рекомендовать исправления, которые могут негативно сказаться на производительности. Тем более в том месте, которое может существенно повлиять на время выполнения программы. Когда спрашивается про "макс/мин элемент массива", я всегда сомневаюсь, что же именно хотят: его значение или индекс. Предпочитаю быть готовым ко всему. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Вячеслав Л. |
29.10.2009 16:54
Сообщение
#13
|
Бывалый Группа: Пользователи Сообщений: 227 Пол: Мужской Реальное имя: Вячеслав Репутация: 3 |
Я до этого не додумался, думал все равно надо i:=1. Код посмотрел, спасибо большое за помощь.
-------------------- Само знание есть сила
|
andriano |
29.10.2009 22:35
Сообщение
#14
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Если не внести это исправление, то вполне возможно (и даже вероятнее всего), что это скажется на производительности отрицательно. Миром byte, integer и longint, andriano, реальные программы не ограничены. Вот понадобится мне работать со своим типом данных, размером байт в 500-700, и что? С программаи чуть проще - как оно там внутри устроено, никто не видит, а несколькомегагерцовый процессор в большинстве случаев зажует любую неоптимальность, что не заметишь. Правда, не всегда. Особенно, если данная неоптимальность угнездилась в теле самого вложенного цикла. Увы, сегодня все большую популярность приобретает метод программирования copy/paste, для которого, естественно, универскальность много важнее оптимальности. Я же консерватор, привык писать код ручками. Поэтому для каждой конкретной задачи выбираю тот путь, который соответствует именно ей, а не как можно более широкому кругу хотя бы отдаленно сходных задач. Если нужно найти максимум, я ищу ТОЛЬКО максимум. Еслм мне нужен индекс, - ищу индекс (не забывая, правда, заодно запомнить и максимум - чтобы было с чем сравнивать). Ну а если у нас есть структура байт эдак в 500-700, то поступаю по обстановке. Если скажем, у меня есть массив структур, в которых описаны ФИО, год рождения, место работы, тарифный разряд и т.д., и мне нажо найти человека, я буду запоминать индекс. А если мне нужно узнать лишь максимальны рост, то я и буду искать ТОЛЬКО рост. В подавляющем большинстве случаев операция сравнения на больше/меньше для структур объемом 500-700 байтов не определена. И проводится по некоторому полю этой структуры, тип которого допускает такую операцию. Соответственно, в некоторых случаях (ни в коей мере не утверждаю, что во всех) вполне достаточно запоминать лишь это поле. Зачем делать лишнюю работу? Цитата Да и про негативное влияние на производительность при работе с индексами - тоже бабушка надвое сказала. Добавлено через 3 мин. Когда человеку потребуется скорость - тогда будет выжимать все возможное. Пока же такой цели не ставилось. Ну да, сначала научим человека программировать, а потом будем переучивать программировать правильно...Цитата Когда спрашивается про "макс/мин элемент массива", я всегда сомневаюсь, что же именно хотят: его значение или индекс. Предпочитаю быть готовым ко всему. |
Lapp |
30.10.2009 0:10
Сообщение
#15
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Текстовая версия | 28.04.2024 5:28 |