IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Одномерный массив., поиск максимального элемента
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


кто-нибудь может помочь?очень нужно!
Дан массив размера N.
Найти максимальный из его элементов, не являющихся ни локальным максимумом, ни локальным минимумом(локальный минимум-это элемент, который меньше любого из своих соседей).Если таких элементов в массиве нет, вывести об этом сообщение.
упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений.
для отладки программы числа последовательности сформировать с помощью генератора случайных чисел.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Помочь можем, но именно помочь, а не сделать за вас! Покажите свои идеи и наработки,тогда, если что неверно, поправим и доведем до ума.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(Krjuger @ 9.11.2012 11:50) *

Помочь можем, но именно помочь, а не сделать за вас! Покажите свои идеи и наработки,тогда, если что неверно, поправим и доведем до ума.


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.
но эта только первая часть задания, как вторую сделать вообще понятия не имею(
нужна сортировка массива, чтоб сравнить соседние элементы и при выполнении условия поменять их местами
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Цитата

нужна сортировка массива, чтоб сравнить соседние элементы и при выполнении условия поменять их местами

Можно воспользоваться любой сортировкой, просто чуть изменить условие.Ладно щас придумаем.
Вроде сортировка пузырьком.

var
a: array [1..100] of integer;
i,j,max,N: integer;
p:integer;

procedure swap(var x,y: integer);
var t: integer;
begin
t := x;
x := y;
y := t
end;

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);

p:=N div 2;
for j:=1 to N-1 do
for i:=p to N-j do
if abs(-a[i]) <abs(-a[i+1]) then
swap(a[i],a[i+1]);
for i:=1 to N do
write(a[i]:4);
readln
end.


Только проверьте условие, а то
Цитата
упорядочить положительные элементы второй половины массива по убыванию модулей обратных значений.

сколько раз я не перечитывал, все равно не мог понять что хотят.
Если то, что я сделал не совсем удовлетворяет условию, то напишите входной массив и то , что должно получиться на выходе после сортировки, я тогда поправлю.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Гость @ 10.11.2012 18:37) *

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.
то есть создала новый массив из подходящих нам эл-в и среди них уже ищу макс.Только видимо с условием что-то не то, он в новый массив лок-е макс и минимумы собирает(Не могли бы посмотреть в чем ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Ну чтож начнем.
Во-первых, зачем вам максимум и минимум,если вы их нигде не используете?
Во-вторых, зачем такие сложности в условии, тем более что и оно не совсем верное.

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;

Зачем здесь столько отрицаний?

for i:=2 to n-1 do
begin
if not(((a[i]>a[i+1]) and (a[i]>a[i-1])) or ((a[i]<a[i+1]) and (a[i]<a[i-1]))) then
begin
k:=k+1;
d[k]:=a[i];
end;
end;


Вот и все.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Krjuger @ 13.11.2012 21:45) *

Ну чтож начнем.
Во-первых, зачем вам максимум и минимум,если вы их нигде не используете?
Во-вторых, зачем такие сложности в условии, тем более что и оно не совсем верное.

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;

Зачем здесь столько отрицаний?

for i:=2 to n-1 do
begin
if not(((a[i]>a[i+1]) and (a[i]>a[i-1])) or ((a[i]<a[i+1]) and (a[i]<a[i-1]))) then
begin
k:=k+1;
d[k]:=a[i];
end;
end;


Вот и все.


спасибо исправила, работает.Нам же нужно теперь из нового, образовавшегося массива найти максимальный элемент.Для этого я его и описала.только как это сделать?

Сообщение отредактировано: Allise1 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +



max:=d[1];
for i:=2 to k do
if (max<d[i]) then
mas:=d[i];


При условии, что к не меньше 2 иначе бессмысленно искать максимум.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Krjuger @ 14.11.2012 0:17) *


max:=d[1];
for i:=2 to k do
if (max<d[i]) then
mas:=d[i];


При условии, что к не меньше 2 иначе бессмысленно искать максимум.


если не трудно напишите полностью, пожалуйста.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Господи, вы там что то у себя исправили, теперь массив d у вас правильно заполняется, сразу же после того, как он окончательно заполнился, вы ищите максимум, что тут сложного.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Krjuger @ 14.11.2012 20:22) *

Господи, вы там что то у себя исправили, теперь массив d у вас правильно заполняется, сразу же после того, как он окончательно заполнился, вы ищите максимум, что тут сложного.



все поняла и сделала)спасибо!

Сообщение отредактировано: Allise1 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Находит, вы его просто не выводите на экран........

А вообще, когда проверяете программу, пользуйтесь дебагом, там можно построчно смотреть все значения всех интересующих вас переменных.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Krjuger @ 14.11.2012 23:20) *

Находит, вы его просто не выводите на экран........

А вообще, когда проверяете программу, пользуйтесь дебагом, там можно построчно смотреть все значения всех интересующих вас переменных.


а можете объяснить, как вторую часть делали?с сортировкой которая
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Взял написал обычную сортировку пузырьком, в интернете про них много написано.
Давайте так, вы говорите в какой строке и что непонятно, и я обьясняю.
Если не понятен сам принцып, то в гугле вбейте "сортировка пузырьком", потому что полностью писать принцып я не хочу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Krjuger @ 14.11.2012 23:44) *

Взял написал обычную сортировку пузырьком, в интернете про них много написано.
Давайте так, вы говорите в какой строке и что непонятно, и я обьясняю.
Если не понятен сам принцып, то в гугле вбейте "сортировка пузырьком", потому что полностью писать принцып я не хочу.


метод мне понятен.почему вы используете оператор div? не нужно использовать swap?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Потому что вы писали
Цитата
элементы второй половины массива

Операция div возвращает частное от деления, я поделил длинну массива пополам, чтобы узнать с какого места сортировать.
Единственное, я еще раз прочитал ваше условие и увидел, что сортировать надо только положительные элементы, поэтому

for j:=1 to N-1 do
for i:=p to N-j do
if (a[i]>0 and (abs(-a[i])<abs(-a[i+1])) then // <------ тут добавить в условие
swap(a[i],a[i+1]);

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


[quote name='Krjuger' date='15.11.2012 0:21' post='161373']


Операция div возвращает частное от деления, я поделил длинну массива пополам, чтобы узнать с какого места сортировать.

мы же задаем
const N:=10
нельзя написать for i:=5 to n-1 ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Женский

Репутация: -  0  +


Цитата(Krjuger @ 15.11.2012 19:58) *

Встречный вопрос, зачем выносить 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]?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Возможно потому что в тот момент, когда я читал, у меня слово "обратные" ассоциировалось не с 1/x, а с -x.Но от этого кординально ничег оне меняется.

for j:=1 to N-1 do
for i:=p to N-j do
if (a[i]>0 and (abs(1/a[i])<abs(1/a[i+1])) then
swap(a[i],a[i+1]);


Как бы я сразу сказал, что само условие нечетко понял, поэтому, если что, поправьте.

Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.05.2024 7:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name