![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
TOPEHTO |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Еще раз здраствуйте! и еще раз 10000 извинений!
вот тут задали, помогите кто чем может...плиз... Цитата Задан отсортированный одномерный массив чисел. Добавить введенное пользователем число в массив таким образом, чтобы массив остался отсортированным. Использовать минимальное количество сравнений. так вот, вроде по условию массив уже отсортирован, на крайняк отсортирую, проблема со вставкой и минимальным кол-вом сравнений...если мона то сразу дайте процедуру, если нет...то хотя бы на словах и по доступней. Поиск не помог, мож не те слова вводил... ![]() Цитата Ввести массив строк. Отсортировать строки в алфавитном порядке. 2-я залачка, знаю что должна тут быть где-то, но не нашел, уж не ругайте пожалуйста...а в инете, какие то сложные программы... Помогите плиз... ![]() |
TOPEHTO |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите пожалуйста...
![]() |
klem4 |
![]()
Сообщение
#3
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Полагаю, нужно основываться на методе деления отрезка пополам ...
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
-Екатерина- |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 82 Пол: Женский Репутация: ![]() ![]() ![]() |
задача: 42. Дан одномерный упорядоченный по неубыванию массив А(N). Вставить элемент Х в этот массив таким образом, чтобы не нарушить упорядоченность массива А.
var i,n,x,j: integer; A: array [1..100] of integer; begin write ('vvedite n'); readln (n); writeln ('vvedite elementi'); for i:=1 to n do read (a[i]); writeln ('vvedite X'); readln (x); if x>a[n] then a[n+1]:=x; if x<a[1] then begin for j:=n downto 1 do a[j+1]:=a[j]; a[1]:=x; end else begin i:=n; while x<a[i] do begin a[i+1]:=a[i]; i:=i-1; end; a[i+1]:=x; end; for i:=1 to n+1 do write (' ',a[i]); readkey; end. у тебя кажется примерно такая же |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Цитата у тебя кажется примерно такая же Только примерно... У тебя в программе производится далеко не минимум сравнений... В худшем случае переберутся все элементы...klem4 уже написал, куда смотреть - надо делать аналог бинарного поиска: Бинарный (двоичный) поиск , с небольшим изменением: если элемента НЕТ в массиве, надо возвращать не отрицательное число, а позицию, в которую надо этот элемент занести (в зависимости от того, упорядочен ли массив по убыванию или по возрастанию)... |
TOPEHTO |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo
А мона переделаеть программу, которую дала Екатерина, но переделав, просто она попонятней, чем та которую дал ты...Если мона переделать, скажи плиз что и как...Если нет, то нет... |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ну, скажем, так:
varНе забудь, массив упорядочен. Мой пример - для случая, когда он упррядочен по неубыванию... |
TOPEHTO |
![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo
Несколько вопросов: 1- Цитата Мой пример - для случая, когда он упррядочен по неубыванию... А как? Просто Я вообще не понял по какому принципу твоя прога вставляет элемент 2-Массив может быть отсортирован толлько по возрастанию или убыванию, других принципов надеюсь нет? 3-Если нет, то Я немного догадываюсь как переделать жту прогу чтобы она массив сохраняла отсортированным...но все равно помогите плиз... 4-ЧТо там насчет строк в алфавитном порядке...?... ![]() И еще, Я заметил у Екатерина, когда вводиш массив по убыванию все ОК...а вот с если по возрастаню-беда... ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата по какому принципу твоя прога вставляет элемент методом бинарного поиска ищет позицию, на которой новый элемент должен стоять (или уже стоит элемент с таким же значением), и все остальные СПРАВА от этой позиции сдвигает на один еще правее, на "освободившееся" место ставится элемент X...Цитата Массив может быть отсортирован толлько по возрастанию или убыванию, других принципов надеюсь нет? Отсортирован - да, только так. Я говорил про "упорядочен". То есть, после сортировки массив упорядочен как-то, верно? Ибо его элементы идут в определенном порядке. Вот для того, чтобы моя программа работала, требуется, чтобы массив был упорядочен по НЕубыванию, то есть, для каждого элемента массива (кроме последнего) выполнялось условие: A[i] <= A[i+1]Я проверял программу на таком массиве: const Цитата Я немного догадываюсь как переделать жту прогу чтобы она массив сохраняла отсортированным А тебе не надо ничего сохранять... У тебя по условию уже Цитата Задан отсортированный одномерный массив чисел , вот и вводи его уже отсортированный в программу.Цитата ЧТо там насчет строк в алфавитном порядке Есть в FAQ-е раздел "Методы Сортировок", вот оттуда возьми любой способ, и он будет работать с массивом строк...Цитата когда вводиш массив по убыванию все ОК...а вот с если по возрастаню-беда... А я тебя предупреждал, что надо заранее знать, как будет упорядочен массив. Или придется усложнять программу проверками, во-первых, вообще, упорядочен ли он, а во-вторых - как именно... |
TOPEHTO |
![]()
Сообщение
#10
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo
Пасибо огромное за ответы, что все по полочкам разложил, за строки отдельно пасибо... ![]() Только вот как с прогой быть, Я думаю придется условие усложнять, про то как ты писал Цитата Или придется усложнять программу проверками, во-первых, вообще, упорядочен ли он, а во-вторых - как именно.. просто как быть с бинарным поиском ума не приложу... ![]() Поэтому если можешь дай алгоритм как это условие усложнить, или если где процедура завалялась... ![]() Или мож есть другие варианты, как нибудь бинарный поиск передлать и т.д. Просто массив 100% преподаватель будет вводить как по убыванию, так и наоборот...и тут надо чтото придумать, чтобы прога работала... ![]() |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Цитата(TOPEHTO @ 24.11.2006 14:00) Просто массив 100% преподаватель будет вводить как по убыванию, так и наоборот...и тут надо чтото придумать, чтобы прога работала... Ну, раз будет проверять - пусть проверяет ![]() Используется очень простой принцип работы - см. комментарии: var Вот и все... ![]() |
TOPEHTO |
![]()
Сообщение
#12
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Volvo
СпасиБо, тебе огромное...ВЫручил...сейчас буду заценять прогу... ![]() Слушай, в чем ошибка ввода, знаю что в чемто простом, но никак не соображу Цитата uses crt; Type arrType = Array[1 .. 100] Of string; var ar: arrType;i,n:integer; Procedure Bubble(Var ar: arrType; n: integer); Var i, j: Integer; t:string; Begin For i := 1 To n Do For j := n DownTo i+1 Do If ar[Pred(j)] > ar[j] Then { < } Begin T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T End End; begin clrscr; readln(n); for i:=1 to n do read(ar[i]); Bubble(ar,n); for i:=1 to n do write(ar[i]); readln; end. |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Не знаю... У меня нормально работает (после того, как я поменял Read на ReadLN)
|
TOPEHTO |
![]()
Сообщение
#14
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 87 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ага, спасибо...во всем разобрался...
![]() Тут еще 1 беда есть...есть такая вот задачка: Цитата В заданной строке символов найти все вхождения заданной подстроки. На экран вывести номер позиции символа, с которого начинается данное вхождение, или сообщение о том, что такого вхождения не существует. есть решение, причем правильное Цитата Program Lab_3_3; uses crt; var x,y:string; i,k:word; h,d,t:boolean; begin ClrScr; Write('Enter string1: '); Readln(x); Write('Enter string2: '); Readln(y); i:=1; t:=true; While (Ord(x[i])<>0) do begin h:=true;{vxojdenie} While (h and(Ord(x[i])<>0)) do begin k:=1; d:=true;{podstroka so strokoi} While (d and(Ord(y[k])<>0)) do begin d:=(y[k]=x[i+k-1])and(Ord(x[i+k-1])<>0); k:=k+1; End; h:=not(d); i:=i+1; End; if not(h) then begin Writeln('N simvola: ',i-1); t:=false; End; End; if t then Writeln('Vhogdenii net'); Write('Press any button for exit'); Readkey; End. Народ или помогите с алгоритмом разобраться или упростить, потому что тут черт голову сломит цикл на цикле, может у кого что попроще есть, или это упроститься... ![]() |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Зааешь, что? Я, конечно, понимаю, что у тебя может быть бесконечное количество "задачек", но во-первых, первоначально речь шла о двух, а это - уже третья... Во вторых, ЭТА тема тоже должна была быть как минимум закрыта, как неправильно оформленная, ее не закрыли. Так вот ТЕПЕРЬ ("благодаря" твоей тенденции садиться на шею) МАЛЕЙШИЙ конфликт с правилами будет приводить к закрытию твоих тем. Все понятно?
Изначальный вопрос решен, тема закрыта. |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 14:44 |