Форум «Всё о Паскале» _ Задачи _ Последоватеоьность и процедура.
Автор: DLF 29.11.2007 0:12
Ввести неупорядоченную последовательность из 20 элементов.Написать процедуры упорядочивания последовательности и вставки К новых элементов на правильное место в упорядоченную последовательность.Вывести результаты всех обработок последовательности.
Заранее спасибо.=)
Автор: Texas 29.11.2007 1:11
<censored> WebMoney или Яндекс.Деньги 100рублей
!
Здесь не доска объявлений! Уважаем правила... -- мисс_граффити
!
И не Задачи На Заказ! -1. --Lapp
Автор: DLF 30.11.2007 13:33
Ну так что,идей нет?
Автор: Lapp 30.11.2007 16:34
Цитата(DLF @ 30.11.2007 9:33)
Ну так что,идей нет?
А у тебя?.. Или задание не тебе?
А идеи тут не нужны. Стандартные методы, тысячу раз было на Форуме. Используй поиск..
Автор: DLF 30.11.2007 20:47
У меня идея сначала создать массив,в нём сделать сортировку,а потом всё это запихать в процедуру,вот такие мои мысли...
Автор: мисс_граффити 30.11.2007 21:01
а как ты в массив будешь вставлять произвольное количество элементов? имхо, нужен список
Автор: DLF 1.12.2007 3:38
мисс_граффити Дело просто в том,что списки у нас только через две темы,и мне кажется,что препод не стал бы давать задачку на ту тему,которую мы ещё не проходили...воть...
Автор: Lapp 1.12.2007 10:53
Если предполагать, что размер массива взят с большим запасом, то есть он заведомо больше 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, то все будут довольны .
Автор: volvo 1.12.2007 15:05
Цитата
Если предполагать, что размер массива взят с большим запасом, то есть он заведомо больше 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 1.12.2007 15:14
Цитата(volvo @ 1.12.2007 11:05)
но и обдумывание вот таких вопросов тоже, не так ли?)
Верно, но только я их обдумываю по-своему, не всегда как ты. И если ты считаешь, что такой подход неприменим, то это (простите за тавтологию) твое имхо. Предлагаешь свой способ - и предлагай. -1
Автор: DLF 1.12.2007 17:09
Попробую написать,гляну,что получится... по +1 вам за помощь=))Спасибо.
Автор: Altair 1.12.2007 19:04
Я считаю, что все задачи так или иначе решаются в каких-то ограничениях, условиях. Если условия известны точно, или могут быть точно определены какими-либо действиями, то решение может быть жестко привязано к этим условиям. Если условия точно не известны, решение должно быть более гибким.
В данном случае в задаче ограничения не указаны на размер параметра K. Значит решение должно быть гибким. Вариант volvo использует указатели. Если студент уже изучил их, то однозначно стоит применить этот метод. Но если нет, получается, что студенту придется одновременно изучать более сложную тему "указатели" кроме темы "массивы" и сложность задачи возрастет.
Цитата
Не надо учить начинающих программистов выделять массивы "с большим запасом"