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

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

Форум «Всё о Паскале» _ Задачи _ массивы

Автор: jenka 28.10.2006 4:48

Есть такие задачи:
1. Сжать массив, удалив из него все элементы, модуль которых
находится в интервале [a, b]. Освободившиеся в конце массива элементы
заполнить нулями.
2. Преоброзовать массив таким образом, чтобы в первой его половине
распологались элементы, стоявшие в нечетных позициях, а во второй
половине-элементы, стоявшие в четных позициях.
3. Заполнить массив из пятнадцати элементов случайным образом
вещественными значениями х (0<х<105).

Очень нужна помощь с их решением. Помогите, плиз.

Автор: lapp 28.10.2006 5:48

Цитата(jenka @ 28.10.2006 1:48) *
1. Сжать массив, удалив из него все элементы, модуль которых
находится в интервале [a, b]. Освободившиеся в конце массива элементы
заполнить нулями.

Словами сказано - интервал, а обозначено как отрезок. Дальнейшее сделано для отрезка - примерно так, но я не проверял.
var 
a,b,c:tElement;
w:array[1..n] of tElement;
.............
j:=0;
for i:=1 to n do begin
c:=w[i]
if (a>c)and(c<b) then begin
Inc(j);
w[j]:=c
end
end;
for i:=j+1 to n do w[i]:=0;

Автор: volvo 28.10.2006 6:05

no1.gif Почти... Нужно обратное действие:

if NOT( (a<c)and(c<b) ) then begin
Знак тоже надо исправить на a<c...

Автор: lapp 28.10.2006 6:12

Недремлющий volvo всегда на посту smile.gif. Спасибо!
Сначала я использовал конструкция с NOT, потом решил ее упростить, но забыл сменить and на or sad.gif.
Исправленная версия:

var 
a,b,c:tElement;
w:array[1..n] of tElement;
.............
j:=0;
for i:=1 to n do begin
c:=w[i]
if (a>c)or(c<b) then begin
Inc(j);
w[j]:=c
end
end;
for i:=j+1 to n do w[i]:=0;

Автор: volvo 28.10.2006 6:38

Так... А вот теперь у меня вопрос: кто-нибудь сможет написать программу, выполняющую второе задание, без использования доп. массива (если ответ "Да" - то просьба тоже скрывать программу, теги [ SPOILER ] [ /SPOILER ], дайте подумать остальным)... Мое решение:

Спойлер (Показать/Скрыть)

Автор: lapp 28.10.2006 8:07

Цитата(volvo @ 28.10.2006 3:38) *

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

Вот мое решение.
Пара оговорок:
1. предполагаю, что длина массива четная;
2. сохраняю порядок внутри четных/нечетных групп (в задании это требование отсутствует, но я счел его логичным).
Спойлер (Показать/Скрыть)

Автор: volvo 28.10.2006 8:21

lapp, если ты добавишь в самом конце программы:

  for i := 1 to n do
write(w[i]:4);
writeln;
, то у тебя распечатается вот такой массив:
Цитата
1 3 5 7 8 11 13 15 17 2 4 6 8 11 12 14 16 18
, а значит, он запорчен, ибо 8-ка и 11 не должны быть в двух местах...

Автор: lapp 28.10.2006 8:26

volvo, в твоем решении используется рекурсия.. Ничего особенно против нее не имею, но..

1. Если идет речь о неиспользовании массива, то это скорее всего экономия памяти. Рекурсия же использует память очень активно.

2. Последовательными вызовами рекурсивной процедуры возможно сохранить в памяти весь массив, не организуя его.

smile.gif


С твоим замечанием согласен.
Вот исправленная версия..

Спойлер (Показать/Скрыть)

Автор: Bokul 28.10.2006 8:27

Вот мой вариант.

Спойлер (Показать/Скрыть)

Автор: lapp 28.10.2006 8:42

Цитата(Bokul @ 28.10.2006 5:27) *

Вот мой вариант.

Bokul, для n=12 у тебя непорядок.. sad.gif
При n=10 тоже не очень здорово - не сохраняется порядок. Это, правда, не требуется в задаче..

Автор: Bokul 28.10.2006 8:58

Да, такой способ не идет при количестве кратном 4-ом. unsure.gif

Автор: Malice 28.10.2006 14:46

Цитата(volvo @ 28.10.2006 3:38) *

Так... А вот теперь у меня вопрос: кто-нибудь сможет написать программу, выполняющую второе задание, без использования доп. массива (если ответ "Да" - то просьба тоже скрывать программу, теги

Может я чего не понял, но вроде все просто:
Спойлер (Показать/Скрыть)

Хотя можно еще стек заиспользовать для хранения вместо массива..

Автор: мисс_граффити 28.10.2006 15:55

раз сохранение порядка необязательно:

Спойлер (Показать/Скрыть)

Автор: volvo 28.10.2006 16:04

Цитата
раз сохранение порядка необязательно:
, что значит, необязательно? Смысл-то какой в этом тогда? Единственно логичной была бы такая перестановка, после которой массив
<1 2 3 4 5 6 7 8 9 10>
становится таким:
<1 3 5 7 9 2 4 6 8 10>...

excl.gif Автору: Давайте будем полностью и корректно приводить задания... Видите, сколько в них недомолвок и неясностей?

Автор: lapp 28.10.2006 16:11

Цитата(мисс_граффити @ 28.10.2006 12:55) *

раз сохранение порядка необязательно:

Что-та не таво-та...
sad.gif
Running "c:\home\home\ak\pas\th\th014\th014-miss-gr.exe "
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 15 3 13 5 11 7 8 9 10 6 12 4 14 2

Автор: мисс_граффити 28.10.2006 16:20

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

Malice, проверь при нечетной длине массива...

Цитата(lapp @ 28.10.2006 13:11) *

Что-та не таво-та...
sad.gif
Running "c:\home\home\ak\pas\th\th014\th014-miss-gr.exe "
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 15 3 13 5 11 7 8 9 10 6 12 4 14 2

сорри.
разбираюсь...

Автор: lapp 28.10.2006 16:24

Цитата(мисс_граффити @ 28.10.2006 13:20) *

в задании про это ни слова.
...
Malice, проверь при нечетной длине массива...

А что такое первая и вторая половины массива при нечетной его длине?
В задании про это ни слова.. Будем фантазировать или подождем автора? smile.gif

Хотя, сумлеваюсь я, что автор что-то прояснит.. smile.gif

Автор: Malice 28.10.2006 17:06

Цитата(мисс_граффити @ 28.10.2006 13:20) *

Malice, проверь при нечетной длине массива...

а где в таком случае половина ?
2Volvo, задание такое, какое оно есть. Зачем склонять автора к своему варианту ?
Хотя я думаю, что нашим способом тоже можно порядок не нарушить, нужно только добавить еще 1 цикл перестановок по второй части массива. Тогда совсем честно будет, даже честней чем у Volvo, так что мы с мисс_граффити тоже победим smile.gif Попробую сейчас, некогда только - сервер проапгрейдил, перестанавливаю все smile.gif

Автор: lapp 28.10.2006 17:14

Цитата(Malice @ 28.10.2006 14:06) *

даже честней чем у Volvo,

?????????? ? ? ?? blink.gif
Цитата(Malice @ 28.10.2006 14:06) *

так что мы с мисс_граффити тоже победим smile.gif

Победит, как обычно дружба! smile.gif smile.gif smile.gif

Автор: volvo 28.10.2006 17:23

Цитата
задание такое, какое оно есть
А его никакого нет... Пока Автор не соизволит написать, что ИМЕННО ему нужно...

Автор: jenka 29.10.2006 0:18

Всем огромное спасибо за поддержку.
Задания такие и есть, написано все слово в слово (проверила еще раз), По идее задача должна быть легкой, т.к мы только этому учимся, сложных задач нам не могли дать.
Единственное, что вместо слова "располагались"(задание 2) написано "располагаюсь", но это скорее всего опечатка в тексте.