Одномерный массив., поиск максимального элемента |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Одномерный массив., поиск максимального элемента |
Allise1 |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
кто-нибудь может помочь?очень нужно!
Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным максимумом, ни локальным минимумом(локальный минимум-это элемент, который меньше любого из своих соседей).Если таких элементов в массиве нет, вывести об этом сообщение. упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений. для отладки программы числа последовательности сформировать с помощью генератора случайных чисел. |
Krjuger |
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Помочь можем, но именно помочь, а не сделать за вас! Покажите свои идеи и наработки,тогда, если что неверно, поправим и доведем до ума.
|
Гость |
Сообщение
#3
|
Гость |
Помочь можем, но именно помочь, а не сделать за вас! Покажите свои идеи и наработки,тогда, если что неверно, поправим и доведем до ума. var a: array [1..100] of integer; i,max,N: integer; begin randomize; write('N (<=100)= '); readln(N); for i:= 1 to n do a[i]:=-25+random(101); writeln('Initial array: '); for i:=1 to N do write(a[i]:4); writeln; max:=-80; for i:=2 to N-1 do if (a[i]>max) and not((a[i]>a[i+1]) and (a[i]>a[i-1])) and not((a[i]<a[i+1]) and (a[i]<a[i-1])) then max:=a[i]; writeln('Result: '); if max=-80 then writeln('No such elements') else writeln('Max= ',max); readln end. но эта только первая часть задания, как вторую сделать вообще понятия не имею( нужна сортировка массива, чтоб сравнить соседние элементы и при выполнении условия поменять их местами |
Krjuger |
Сообщение
#4
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Цитата нужна сортировка массива, чтоб сравнить соседние элементы и при выполнении условия поменять их местами Можно воспользоваться любой сортировкой, просто чуть изменить условие.Ладно щас придумаем. Вроде сортировка пузырьком.
Только проверьте условие, а то Цитата упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений. сколько раз я не перечитывал, все равно не мог понять что хотят. Если то, что я сделал не совсем удовлетворяет условию, то напишите входной массив и то , что должно получиться на выходе после сортировки, я тогда поправлю. |
Allise1 |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
var a: array [1..100] of integer; i,max,N: integer; begin randomize; write('N (<=100)= '); readln(N); for i:= 1 to n do a[i]:=-25+random(101); writeln('Initial array: '); for i:=1 to N do write(a[i]:4); writeln; max:=-80; for i:=2 to N-1 do if (a[i]>max) and not((a[i]>a[i+1]) and (a[i]>a[i-1])) and not((a[i]<a[i+1]) and (a[i]<a[i-1])) then max:=a[i]; writeln('Result: '); if max=-80 then writeln('No such elements') else writeln('Max= ',max); readln end. но эта только первая часть задания, как вторую сделать вообще понятия не имею( нужна сортировка массива, чтоб сравнить соседние элементы и при выполнении условия поменять их местами спасибо! я делала эту часть немного по другому Program mass; uses crt; const N=10; var a,d:array [1..n] of integer; k,i,c,b,min,max:integer; begin clrscr; randomize; write ('Nachaln massiv'); writeln ('Vvedite interval [b, c]'); readln (b,c); for i:=1 to n do begin a[i]:=random (c-b+1)+b; write (a[i], ' '); end; writeln; max:=b; min:=c; k:=0; for i:=2 to n-1 do begin if (not((a[i]>a[i+1]) and (a[i]>a[i-1]))) or (not((a[i]<a[i+1]) and (a[i]<a[i-1]))) then begin k:=k+1; d[k]:=a[i]; end; end; if k=0 then writeln ('Net ') else begin writeln ('Massiv new'); for i:=1 to k do write (d[i]:4); writeln ; end; readkey; end. то есть создала новый массив из подходящих нам эл-в и среди них уже ищу макс.Только видимо с условием что-то не то, он в новый массив лок-е макс и минимумы собирает(Не могли бы посмотреть в чем ошибка? |
Krjuger |
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Ну чтож начнем.
Во-первых, зачем вам максимум и минимум,если вы их нигде не используете? Во-вторых, зачем такие сложности в условии, тем более что и оно не совсем верное.
Зачем здесь столько отрицаний?
Вот и все. Сообщение отредактировано: Krjuger - |
Allise1 |
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
Ну чтож начнем. Во-первых, зачем вам максимум и минимум,если вы их нигде не используете? Во-вторых, зачем такие сложности в условии, тем более что и оно не совсем верное.
Зачем здесь столько отрицаний?
Вот и все. спасибо исправила, работает.Нам же нужно теперь из нового, образовавшегося массива найти максимальный элемент.Для этого я его и описала.только как это сделать? Сообщение отредактировано: Allise1 - |
Krjuger |
Сообщение
#8
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
При условии, что к не меньше 2 иначе бессмысленно искать максимум. Сообщение отредактировано: Krjuger - |
Allise1 |
Сообщение
#9
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
|
Krjuger |
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Господи, вы там что то у себя исправили, теперь массив d у вас правильно заполняется, сразу же после того, как он окончательно заполнился, вы ищите максимум, что тут сложного.
|
Allise1 |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
|
Krjuger |
Сообщение
#12
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Находит, вы его просто не выводите на экран........
А вообще, когда проверяете программу, пользуйтесь дебагом, там можно построчно смотреть все значения всех интересующих вас переменных. |
Allise1 |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
|
Krjuger |
Сообщение
#14
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Взял написал обычную сортировку пузырьком, в интернете про них много написано.
Давайте так, вы говорите в какой строке и что непонятно, и я обьясняю. Если не понятен сам принцып, то в гугле вбейте "сортировка пузырьком", потому что полностью писать принцып я не хочу. |
Allise1 |
Сообщение
#15
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
Взял написал обычную сортировку пузырьком, в интернете про них много написано. Давайте так, вы говорите в какой строке и что непонятно, и я обьясняю. Если не понятен сам принцып, то в гугле вбейте "сортировка пузырьком", потому что полностью писать принцып я не хочу. метод мне понятен.почему вы используете оператор div? не нужно использовать swap? |
Krjuger |
Сообщение
#16
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Потому что вы писали
Цитата элементы второй половины массива Операция div возвращает частное от деления, я поделил длинну массива пополам, чтобы узнать с какого места сортировать. Единственное, я еще раз прочитал ваше условие и увидел, что сортировать надо только положительные элементы, поэтому
|
Allise1 |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
[quote name='Krjuger' date='15.11.2012 0:21' post='161373']
Операция div возвращает частное от деления, я поделил длинну массива пополам, чтобы узнать с какого места сортировать. мы же задаем const N:=10 нельзя написать for i:=5 to n-1 ? |
Krjuger |
Сообщение
#18
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Встречный вопрос, зачем выносить N:=10, если можно написать for i:=5 to 9 ?
Ответ: Можно, но практика программирования показывает, что любые константы лучше в самом начале записывать.Есть несколько причин. Во-первых,если преподаватель или заказчик, в общем если понадобиться изменить число элементов в массиве, вам придется ползать по всему коду программы и менять все эти числа, у вас код маленький, а представльте, если в нем тысяча строк.... или 10 тысяч...., велика вероятность где то забыть и будут неверные результаты, а потом лазий и ищи. По этой же причине середина массива у меня не число, а вычисляемая величина, достаточно изменить длинну массива и она сама вычислиться и станет правильной и не надо ползать по программе и искать. Отсуда же следует некий подводный камень, допустим у вас 2 цикла for i:=5 to 9 for i:=2 to 9 Первый работает с массивом а, второй с b, возможно так, что вы возьмете и машинально измените в обоих случаях 9 на 12, например.А по заданию вас попросили поменять длинну лиш массива а, опять таки у вас появитсья ошибка.А зачастую, когда код более сложный, просто так с ходу не сообразиш за что отвечают те или иные цифры, а вот если записать for i:=5 to n for i:=2 to m Сразу видно что величины никак не зависят друг от друга. Во-вторых, когда через какое то время возвращается к коду ооочень сложно понять, что это за магические цифры в циклах функциях и тд. А если есть переменные, с более менее вменяемыми названиями,то намного проще понять что происходит. Это повышает читаемость вашего кода другими людьми, да и вами самими по прошествии времени, в учебном процессе это мало актуально, а вот дальше весьма помогает. Сообщение отредактировано: Krjuger - |
Allise1 |
Сообщение
#19
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: 0 |
Встречный вопрос, зачем выносить N:=10, если можно написать for i:=5 to 9 ? Ответ: Можно, но практика программирования показывает, что любые константы лучше в самом начале записывать.Есть несколько причин. Во-первых,если преподаватель или заказчик, в общем если понадобиться изменить число элементов в массиве, вам придется ползать по всему коду программы и менять все эти числа, у вас код маленький, а представльте, если в нем тысяча строк.... или 10 тысяч...., велика вероятность где то забыть и будут неверные результаты, а потом лазий и ищи. По этой же причине середина массива у меня не число, а вычисляемая величина, достаточно изменить длинну массива и она сама вычислиться и станет правильной и не надо ползать по программе и искать. Отсуда же следует некий подводный камень, допустим у вас 2 цикла for i:=5 to 9 for i:=2 to 9 Первый работает с массивом а, второй с b, возможно так, что вы возьмете и машинально измените в обоих случаях 9 на 12, например.А по заданию вас попросили поменять длинну лиш массива а, опять таки у вас появитсья ошибка.А зачастую, когда код более сложный, просто так с ходу не сообразиш за что отвечают те или иные цифры, а вот если записать for i:=5 to n for i:=2 to m Сразу видно что величины никак не зависят друг от друга. Во-вторых, когда через какое то время возвращается к коду ооочень сложно понять, что это за магические цифры в циклах функциях и тд. А если есть переменные, с более менее вменяемыми названиями,то намного проще понять что происходит. Это повышает читаемость вашего кода другими людьми, да и вами самими по прошествии времени, в учебном процессе это мало актуально, а вот дальше весьма помогает. нам же нужно упорядочить по убыванию модулей обратных значений? .почему мы не пишем 1/a[i]? |
Krjuger |
Сообщение
#20
|
Профи Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: 20 |
Возможно потому что в тот момент, когда я читал, у меня слово "обратные" ассоциировалось не с 1/x, а с -x.Но от этого кординально ничег оне меняется.
Как бы я сразу сказал, что само условие нечетко понял, поэтому, если что, поправьте. Сообщение отредактировано: Krjuger - |
Текстовая версия | 19.05.2024 7:51 |