![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Allise1 |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
кто-нибудь может помочь?очень нужно!
Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным максимумом, ни локальным минимумом(локальный минимум-это элемент, который меньше любого из своих соседей).Если таких элементов в массиве нет, вывести об этом сообщение. упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений. для отладки программы числа последовательности сформировать с помощью генератора случайных чисел. |
![]() ![]() |
Krjuger |
![]()
Сообщение
#2
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Помочь можем, но именно помочь, а не сделать за вас! Покажите свои идеи и наработки,тогда, если что неверно, поправим и доведем до ума.
|
Гость |
![]()
Сообщение
#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 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Цитата нужна сортировка массива, чтоб сравнить соседние элементы и при выполнении условия поменять их местами Можно воспользоваться любой сортировкой, просто чуть изменить условие.Ладно щас придумаем. Вроде сортировка пузырьком.
Только проверьте условие, а то Цитата упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений. сколько раз я не перечитывал, все равно не мог понять что хотят. Если то, что я сделал не совсем удовлетворяет условию, то напишите входной массив и то , что должно получиться на выходе после сортировки, я тогда поправлю. |
Allise1 |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
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 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Ну чтож начнем.
Во-первых, зачем вам максимум и минимум,если вы их нигде не используете? Во-вторых, зачем такие сложности в условии, тем более что и оно не совсем верное.
Зачем здесь столько отрицаний?
Вот и все. Сообщение отредактировано: Krjuger - 13.11.2012 20:47 |
Allise1 |
![]()
Сообщение
#7
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
Ну чтож начнем. Во-первых, зачем вам максимум и минимум,если вы их нигде не используете? Во-вторых, зачем такие сложности в условии, тем более что и оно не совсем верное.
Зачем здесь столько отрицаний?
Вот и все. спасибо исправила, работает.Нам же нужно теперь из нового, образовавшегося массива найти максимальный элемент.Для этого я его и описала.только как это сделать? Сообщение отредактировано: Allise1 - 13.11.2012 22:47 |
Krjuger |
![]()
Сообщение
#8
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
При условии, что к не меньше 2 иначе бессмысленно искать максимум. Сообщение отредактировано: Krjuger - 13.11.2012 23:18 |
Allise1 |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
|
Krjuger |
![]()
Сообщение
#10
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Господи, вы там что то у себя исправили, теперь массив d у вас правильно заполняется, сразу же после того, как он окончательно заполнился, вы ищите максимум, что тут сложного.
|
Allise1 |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
|
Krjuger |
![]()
Сообщение
#12
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Находит, вы его просто не выводите на экран........
А вообще, когда проверяете программу, пользуйтесь дебагом, там можно построчно смотреть все значения всех интересующих вас переменных. |
Allise1 |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
|
Krjuger |
![]()
Сообщение
#14
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Взял написал обычную сортировку пузырьком, в интернете про них много написано.
Давайте так, вы говорите в какой строке и что непонятно, и я обьясняю. Если не понятен сам принцып, то в гугле вбейте "сортировка пузырьком", потому что полностью писать принцып я не хочу. |
Allise1 |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
Взял написал обычную сортировку пузырьком, в интернете про них много написано. Давайте так, вы говорите в какой строке и что непонятно, и я обьясняю. Если не понятен сам принцып, то в гугле вбейте "сортировка пузырьком", потому что полностью писать принцып я не хочу. метод мне понятен.почему вы используете оператор div? не нужно использовать swap? |
Krjuger |
![]()
Сообщение
#16
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Потому что вы писали
Цитата элементы второй половины массива Операция div возвращает частное от деления, я поделил длинну массива пополам, чтобы узнать с какого места сортировать. Единственное, я еще раз прочитал ваше условие и увидел, что сортировать надо только положительные элементы, поэтому
|
Allise1 |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
[quote name='Krjuger' date='15.11.2012 0:21' post='161373']
Операция div возвращает частное от деления, я поделил длинну массива пополам, чтобы узнать с какого места сортировать. мы же задаем const N:=10 нельзя написать for i:=5 to n-1 ? |
Krjuger |
![]()
Сообщение
#18
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 652 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Встречный вопрос, зачем выносить 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 - 15.11.2012 19:00 |
Allise1 |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Женский Репутация: ![]() ![]() ![]() |
Встречный вопрос, зачем выносить 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 Пол: Мужской Реальное имя: Алексей Репутация: ![]() ![]() ![]() |
Возможно потому что в тот момент, когда я читал, у меня слово "обратные" ассоциировалось не с 1/x, а с -x.Но от этого кординально ничег оне меняется.
Как бы я сразу сказал, что само условие нечетко понял, поэтому, если что, поправьте. Сообщение отредактировано: Krjuger - 18.11.2012 22:31 |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 23:34 |