Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Массивы! Помогите пожалуйста!

Автор: bestlover 7.12.2008 15:10

Упорядочить каждые вторы элементы всего массива по убыванию квадратов значений wacko.gif

Автор: Unconnected 7.12.2008 18:17

<delеtеd by mе> <здесь был камень>

Автор: bestlover 8.12.2008 13:36

Цитата
begin
writeln('Введите элемент массива №',c);
readln(mas1[c]);
end;
можно было через генератор значений массива сделать randomize, а так огромное спасибо!!! smile.gif smile.gif smile.gif

Автор: Lapp 8.12.2008 14:11

Unconnected, ты полагаешь, что это:


for c:=1 to b-1 do
begin
if ((mas2[c]*mas2[c])>(mas2[c+1]*mas2[c+1])) then begin
buf:=mas2[c];
mas2[c]:=mas2[c+1];
mas2[c+1]:=buf;
end;
end;
readln;
end.
- есть сортировка?.. blink.gif

Зачем сортировать по возрастанию, а потом выводить сзаду наперед??
  writeln('Массив, отсортированный по убыванию квадратов значений каждого второго элемента');
for c:=1 to b do
begin
write(mas2[b-c+1],' ');
end;

Кроме того, задании сказано упорядочить массив, а не вывести упорядоченный.

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

Самое последнее: если заменить квдраты на Abs - то, может, сэкономится немного времени.. И заведомо расширится область применимости программы smile.gif

Автор: Unconnected 8.12.2008 20:24

Цитата
Unconnected, ты полагаешь, что это:

for c:=1 to b-1 do
begin
if ((mas2[c]*mas2[c])>(mas2[c+1]*mas2[c+1])) then begin
buf:=mas2[c];
mas2[c]:=mas2[c+1];
mas2[c+1]:=buf;
end;
end;
readln;
end.
- есть сортировка?..


Полагаю, да.

Цитата
Зачем сортировать по возрастанию, а потом выводить сзаду наперед??


Меня притягивают нестандартные и ресурсоёмкие решения smile.gif

Цитата
Кроме того, задании сказано упорядочить массив, а не вывести упорядоченный.


Сделал ручной ввод и вывод массива на экран для большей наглядности...


Автор: Lapp 8.12.2008 21:54

Цитата(Unconnected @ 8.12.2008 16:24) *
Полагаю, да.
Ты ошибаешься. Про сортировку есть тема в FAQ, посмотри.

Цитата(Unconnected @ 8.12.2008 16:24) *
Меня притягивают нестандартные и ресурсоёмкие решения smile.gif
Ты предупреждай об этом того, кому отвечаешь, заранее.

Большая просьба выполнять п.7 Правил раздела Задачи.
Сможешь сам исправить решение или тебе помочь?

Автор: Unconnected 9.12.2008 0:46

Насколько я понял, ТС остался доволен решением,поэтому, хоть оно и не на 100% соответствует условию, переписывать его у меня нет никакого желания. Можете даже "помочь".

Автор: Lapp 9.12.2008 0:59

Цитата(Unconnected @ 8.12.2008 20:46) *
Насколько я понял, ТС остался доволен решением,поэтому, хоть оно и не на 100% соответствует условию, переписывать его у меня нет никакого желания. Можете даже "помочь".

Оно ровно на 0% соответствует условию. А желание писать неверное решение у тебя было? А потом еще бравировать своим невежеством. Чем остался (или не остался) доволен автор - его дело, но только на этом форуме тебе не позволят выдавать черное за белое. Берешься помогать человеку - не давай ему камень вместо хлеба..

Лично от меня -1 в репутацию.



Автор: bestlover 10.12.2008 0:23

Уважаемый Lapp! Вы как предложете написать данную программу? Предложите свой вариант?

Автор: Lapp 10.12.2008 2:43

Цитата(bestlover @ 9.12.2008 20:23) *
Предложите свой вариант?
- на конкурс?
В такой задаче не может быть вариантов. Может быть верное решение.

Выкладывай свои соображения. Тогда будут варианты..

Автор: amega 10.12.2008 3:40

в каждой сортировки есть 2 цикла я ток видел 1

вот то что предлагаю я:


i:=1;
repeat
j:=i+2;
repeat
if sqr(a[i])<sqr(a[j]) then //проверяем условие
begin
x:=a[i];
a[i]:=a[i];
a[j]:=x;
end;
j:=j+2; //увеличуем на 2 поскольку через 1
until j>=count; //условие выхода из цикла
i:=i+2; //увеличуем на 2 поскольку через 1
until i>=count;