1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Еще раз здраствуйте! и еще раз 10000 извинений! вот тут задали, помогите кто чем может...плиз...
Цитата
Задан отсортированный одномерный массив чисел. Добавить введенное пользователем число в массив таким образом, чтобы массив остался отсортированным. Использовать минимальное количество сравнений.
так вот, вроде по условию массив уже отсортирован, на крайняк отсортирую, проблема со вставкой и минимальным кол-вом сравнений...если мона то сразу дайте процедуру, если нет...то хотя бы на словах и по доступней. Поиск не помог, мож не те слова вводил... ...
Цитата
Ввести массив строк. Отсортировать строки в алфавитном порядке.
2-я залачка, знаю что должна тут быть где-то, но не нашел, уж не ругайте пожалуйста...а в инете, какие то сложные программы... Помогите плиз... ...
Volvo Пасибо огромное за ответы, что все по полочкам разложил, за строки отдельно пасибо... ... Только вот как с прогой быть, Я думаю придется условие усложнять, про то как ты писал
Цитата
Или придется усложнять программу проверками, во-первых, вообще, упорядочен ли он, а во-вторых - как именно..
просто как быть с бинарным поиском ума не приложу... ... Поэтому если можешь дай алгоритм как это условие усложнить, или если где процедура завалялась... ... Или мож есть другие варианты, как нибудь бинарный поиск передлать и т.д. Просто массив 100% преподаватель будет вводить как по убыванию, так и наоборот...и тут надо чтото придумать, чтобы прога работала... ...
begin (* write('vvedite size'); readln(size); writeln('vvedite elementi'); for i:=1 to size do readln(a[i]); *) writeln ('vvedite X'); readln (x);
{ Для начала - найдем 2 различных элемента, чтобы определить, как отсортирована последовательность... } i := 1; while (i < size) and (a[i] = a[i+1]) do inc(i); { Если разные элементы найдены - делаем заключение о том, НЕубывающая это последовательность или НЕвозрастающая, если не найдены - нам же проще, значит, вообще ВСЕ элементы - одинаковые, и достаточно сравнить с граничными } is_ascend := (a[i] < a[i+1]);
{ А вот начиная отсюда - просто ВСЕ сравнения, которые делаются между элементами последовательности, надо еще сравнивать с is_ascend, тогда независимо от направления сортировки мы получим одинаковый (и правильный) результат... } if (x>a[size]) = is_ascend then a[size+1]:=x else if (x<a[1]) = is_ascend then begin for j:=size downto 1 do a[j+1]:=a[j]; a[1]:=x; end else begin left := 1; right := size; repeat
center := (right + left) div 2; inc(count); { "Двойное" сравнение придется разбить на 2 "одинарных" } if ((a[ center ] > X) = is_ascend) or (a[ center ] = X) then right := center else left := center;
until (right - left = 1) or (a[ center ] = X);
{ Это добавлено, чтобы пофиксить глючок, который я раньше не заметил... } while (a[ center ] < X) = is_ascend do inc(center);
for i := size + 1 downto center do a[i] := a[i - 1]; a[ center ] := X; end;
writeln('count = ', count); for i:=1 to size+1 do write (' ',a[i]); writeln;
readln; end.
Вот и все... Проверялось на двух приведенных массивах (просто закомментируй один и раскомметнируй другой), если надо проверять на вводимой последовательности - убери Const-описания массивов, и раскомментируй описание size и массива A...