Решение задачи № 2 из главы 15 -- Поиск двух максимумов в массиве
Primary tabs
Решение задачи № 2 из главы 15
Пользователь вводит массив целых чисел из 7 элементов. Найдите из них два самых больших числа и выведите их на экран.
const n = 7; type mass = array [1..n] of integer; var A : mass; i , max, max1: integer; begin randomize; // запускаем процедуру генератора случайных чисел for i := 1 to n do // циклом заполняем массив данными begin A[i] := random(11); // присваиваем очередному элементу значение из диапазона 0...10 write(A[i], ' '); // выводим в строку перечень данных массива через пробел end; max := 0; // не стал этому имени присваивать значение 1-го элемента массива max1 := 0; // не стал этому имени присваивать значение i-го элемента массива, т.к. могут быть ошибки for i:= 1 to n do // цикл для нахождения макс. элемента массива begin if A[i] > max then max := A[i]; end; for i:= 1 to n do // цикл для нахождения предпосл. макс. элем. массива begin if A[i] = max then //max := A[i] // при условии истинности при отсутствии действий оператор if работает else if A[i] > max1 then max1 := A[i]; end; writeln; writeln('Макс элемент : ', max); // выводим результат writeln('Предпосл макс элемент : ', max1); // выводим результат end.
- Log in to post comments
- 17163 reads
vedro-compota
Mon, 01/28/2019 - 14:10
Permalink
оформление
добавьте обратную ссылку на урок и исправьте ключевые слова
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 01/28/2019 - 14:30
Permalink
оформление
уберите эту фразу из цитаты -- в цитате должно быть только то что написано кем-то или вами где-то выше (ранее)
_____________
матфак вгу и остальная классика =)
vedro-compota
Mon, 01/28/2019 - 14:31
Permalink
не стал этому имени
какие именно ошибки могут быть?
_____________
матфак вгу и остальная классика =)
Laven
Mon, 01/28/2019 - 14:41
Permalink
При тестировании были
При тестировании были неверные результаты при том, что остальная часть кода не менялась. Поэтому решил обнулить значение этих переменных на всякий случай. Хотя, итак, до этого, они имели значение "0".
Изначально в коде было написано так:
Почему были неверные результаты - пока не успел разобраться.
vedro-compota
Mon, 01/28/2019 - 14:48
Permalink
почему НЕ ноль (не подходит) при поиске максимума
ноль приводит к тому, что есть у вас массив будет полностью отрицательным, то программа даст неверные ответ (понятно почему)?
_____________
матфак вгу и остальная классика =)
Laven
Mon, 01/28/2019 - 15:38
Permalink
потому что нуль при
потому что нуль при отрицательных данных в массиве будет самым максимальным значением?
vedro-compota
Mon, 01/28/2019 - 15:47
Permalink
потому что нуль при
да, именно поэтому по умолчанию (при поиске максимума или минимума) берут реальные значения из множестве просматриваемых данных (в данном случае из массива)
_____________
матфак вгу и остальная классика =)
vedro-compota
Tue, 01/29/2019 - 08:05
Permalink
Неточно, и все варианты рассмотрены
перепишите под использование оператора if в неполной форме (без else)
Вы так и не измените значение по умолчанию, а это неправильно.
Т.е. вполне может быть так, что оба максимума будут одинаковыми, например, для набора чисел:
_____________
матфак вгу и остальная классика =)
Laven
Mon, 02/25/2019 - 23:03
Permalink
Уточненное решение задачи
vedro-compota
Mon, 03/25/2019 - 23:05
Permalink
именование
либо дайте переменным (тем что не просто счетчики) понятные имена, либо прокомментируйте назначение каждой. Напр. тут с ходу не ясно какой максимум у вас больший - max или max1
_____________
матфак вгу и остальная классика =)
Laven
Tue, 03/26/2019 - 15:40
Permalink
Исправил
vedro-compota
Thu, 03/28/2019 - 22:45
Permalink
альтернативное решение
хорошо, это работает, но теперь попробуем без:
(тем более что вы не совсем исключили, а просто сдвинули массив и стали просматировать его не до конца, хотя это тоже конечно, приём).
просто обнаружьте второй максимум за второй проход массива - подумайте как это сделать.
_____________
матфак вгу и остальная классика =)