Помощь - Поиск - Пользователи - Календарь
Полная версия: Последоватеоьность и процедура.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
DLF
Ввести неупорядоченную последовательность из 20 элементов.Написать процедуры упорядочивания последовательности и вставки К новых элементов на правильное место в упорядоченную последовательность.Вывести результаты всех обработок последовательности.

Заранее спасибо.=)
Texas
<censored>
WebMoney или Яндекс.Деньги
100рублей
 ! 
Здесь не доска объявлений! Уважаем правила...
-- мисс_граффити



 ! 
И не Задачи На Заказ! -1.
--Lapp

DLF
Ну так что,идей нет? unsure.gif
Lapp
Цитата(DLF @ 30.11.2007 9:33) *

Ну так что,идей нет? unsure.gif
А у тебя?..
Или задание не тебе?

А идеи тут не нужны. Стандартные методы, тысячу раз было на Форуме. Используй поиск..
DLF
У меня идея сначала создать массив,в нём сделать сортировку,а потом всё это запихать в процедуру,вот такие мои мысли...
мисс_граффити
а как ты в массив будешь вставлять произвольное количество элементов?
имхо, нужен список
DLF
мисс_граффити
Дело просто в том,что списки у нас только через две темы,и мне кажется,что препод не стал бы давать задачку на ту тему,которую мы ещё не проходили...воть... cool.gif
Lapp
Если предполагать, что размер массива взят с большим запасом, то есть он заведомо больше 20+К, то, имхо, можно не заморачиваться со списками.

DLF, мысли твои в целом правильные. Начинай писать программу. Для действий, предусмотренных в задании, можешь использовать примерно такие фрагменты:

1. Упорядочивание методом пузырька:
for j:=2 to n do for i:=n downto j do if a[i-1]>a[i] then begin
b:=a[i];
a[i]:=a[i-1];
a[a-1]:=b
end;

2. Вставка числа b на правильное место:
i:=1;
while (i<=n) and (a[i]<=b) do begin
for j:=n downto i do a[j+1]:=a[j];
a[j]:=b;
Inc(n)
end;


Здесь n - реальное количество чисел в последовательности. Предполагается, что оно всегда меньше размерности массива a[1..m]. То есть если, скажем, в начале n=20, а K=10, то в конце работы программы n увеличится до 30. Если взять m=100, то все будут довольны smile.gif.
volvo
Цитата
Если предполагать, что размер массива взят с большим запасом, то есть он заведомо больше 20+К
Коли уж тут прозвучали высказывания, что тусуются на форуме в основном школьники и студенты, то для них этот подход неприменим! Не надо учить начинающих программистов выделять массивы "с большим запасом". Потом от этой привычки очень сложно избавиться... (Администратор форума программистов - это не только закрытие, удаление и перемещение тем, но и обдумывание вот таких вопросов тоже, не так ли?)

const K = 5;
Var Arr = array[1 .. 20 + K] of integer; { <--- тип менять по желанию }
...

если K известно заранее, или
type 
pArrType = ^arrType;
arrType = array[1 .. 1] of integer;
var
K: integer;
arr: pArrType;
...
readln(K);
getmem(arr, 20 + K * sizeof(integer));
...

если его надо вводить по ходу выполнения программы.
Lapp
Цитата(volvo @ 1.12.2007 11:05) *

но и обдумывание вот таких вопросов тоже, не так ли?)

Верно, но только я их обдумываю по-своему, не всегда как ты. И если ты считаешь, что такой подход неприменим, то это (простите за тавтологию) твое имхо.
Предлагаешь свой способ - и предлагай.
-1
DLF
Попробую написать,гляну,что получится... smile.gif по +1 вам за помощь=))Спасибо.
Altair
Я считаю, что все задачи так или иначе решаются в каких-то ограничениях, условиях.
Если условия известны точно, или могут быть точно определены какими-либо действиями, то решение может быть жестко привязано к этим условиям.
Если условия точно не известны, решение должно быть более гибким.

В данном случае в задаче ограничения не указаны на размер параметра K.
Значит решение должно быть гибким.
Вариант volvo использует указатели. Если студент уже изучил их, то однозначно стоит применить этот метод.
Но если нет, получается, что студенту придется одновременно изучать более сложную тему "указатели" кроме темы "массивы" и сложность задачи возрастет.

Цитата
Не надо учить начинающих программистов выделять массивы "с большим запасом"

Вообще - согласен.
Lapp
Цитата(Altair @ 1.12.2007 15:04) *

Вообще - согласен.
Ведь ничего не бывает само по себе, все в определенных условиях. И ограничения есть всегда. Когда решается задача про текст и слова, никто особо не протестует против использования строк, не акцентируя внимания на том, что их лимит 255 символов. И в данном случае "с запасом" означает фактически "думай сам, поскольку точные условия не даны". Отсутствие знаний об указателях не значит, что все задачи, подобные этой, не решаются. Да, нужно брать запас, НО нужно это делать разумно. Я не понимаю, слов о привычке, от которой "очень сложно избавиться". Ко всему нужно подходить с разумных позиций в данных условиях. И если сейчас они проходят простые вещи, не нужно лишних усложнений. "Нельзя объять необъятное" © Козьма Прутков. Если бы при объяснении законов Ньютона начинали говорить про Общуюю теорию относительности Эйнштейна - то что бы это было? Нет, уж путь лучше появится привычка к законам Ньютона, а потом, кому понадобится - разберется и с ОТО, и искоренит привычку делить силу на массу (простите за пример, который мне близок).
А тот, кто не пробьется через законы Ньютона (читай: не поймет, как упорядочивать массив) - тому стоит ли вообще думать об ОТО (читай: динамической памяти).

PS
Интересно было бы все же узнать, какое решение предполагалось преподавателем smile.gif.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.