|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Спасибо за написаные коды, но удаляет только когда 2 одинаковых элемента, это про второй код, а первый работает так же как и мой впервом посте. То есть у меня неправильно условие поставленно?
|
#17
|
||||
|
||||
Только когда два? у меня из того массива, что ты приводил, второй код удалил все ненужное, и получилось то, что написал в ответе...
jmp $ ; Happy End! The Cake Is A Lie. |
#18
|
|||
|
|||
Вот, смотри как работает.
В принципе все зависит от того как рандом числа выкинет. Если только по 2, то все нормально будет. |
#19
|
||||
|
||||
Кажись понял в чем бага:
Код:
procedure DelEvenElement1(var a:TArray100;var cnt:integer); var i,j,k:integer; fl:boolean; begin i:=cnt; while i>=1 do begin fl:=false; k:=1; while k<= i-1 do begin if a[i]=a[k] then begin fl:=true; for j:=k to cnt do a[j]:=a[j+1]; cnt:=cnt-1; dec(i); DEC(k); //!!! end; inc(k); end; if fl then begin for j:=i to cnt do a[j]:=a[j+1]; cnt:=cnt-1; end; dec(i); end; end; jmp $ ; Happy End! The Cake Is A Lie. |
#20
|
|||
|
|||
Да, массив сортирован, а если можно пояснение для чего нам булеан ну и что именно у меня было неправильно кроме как я понял условия.
Всем Большущее спасибо за помощь. |
#21
|
||||
|
||||
Что делает этот код:
Идем от конца массива к началу. Берем элемент a[i]. Сравниваем его со всеми из a[1..i-1]. Если есть хоть одно совпадение - удаляем найденный элемент, ставим флаг, что текущий элемент a[i] имеет повторки и идем дальше сносить повторки (если еще есть). Потом смотрим: если повторки были (fl=true), значит и сам текущий элемент надо снести. А в каком смысле Цитата:
1 2 3 4 4 5 6 - то он снесет одну четверку, а у второй уже не будет пары. а если 1 2 3 4 5 4 6 - то вообще ниче не снесет. Ну это я так понял. jmp $ ; Happy End! The Cake Is A Lie. |
#22
|
|||
|
|||
Спасибо, сам принцип как это делать я понял, а вот как реализовать это не получалось.
|
#23
|
|||
|
|||
Доброго времени суток, как узнать код i-го элемента массива?
При такой записи выдает ошибку о несовместимости типов Код:
if (ord(a[i]))<(ord(a[i+1])) then |
#24
|
||||
|
||||
код I-го элемента? во-первых, для сравнения коды не нужны. Можно и так сравнивать.
А во-вторых - пиши byte(a[i]) и не парься jmp $ ; Happy End! The Cake Is A Lie. |
#25
|
|||
|
|||
Мне нужно отсортировать по алфавиту полученные строки, вот я и спрашиваю как узнать код элемента массива.
|
#26
|
||||
|
||||
это как раз можно и без кодов:
Код:
if a[i]>a[i+1] then ... Более того, для строк тоже применимо сравнение по крайней мере в паскале. Сравнивалось там в алфавитном порядке. Думаю, тут то же самое. jmp $ ; Happy End! The Cake Is A Lie. |
#27
|
|||
|
|||
Что нужно дописать для сортировки по алфавиту сравнивая не только первые символы, а и по остальным?
Вот код сортировки методом вставки: Код:
procedure SortInsertByAlphabet(var A:TArrStr;cnt:integer); var i,j:integer;s:string; begin for i:=2 to cnt do begin if a[i]<a[i-1] then begin s:=a[i]; j:=i; repeat a[j]:=a[j-1]; j:=j-1; until (j=1) or (a[j-1]<=s); a[j]:=s; end; end; end; Код:
until (j=1) or (a[j-1]<=s); Последний раз редактировалось flips, 23.11.2010 в 21:36. |
#28
|
||||
|
||||
не знаю, что не так. Но могу предложить другой вариант, проще и быстрее.
если я верно понимаю, то Код:
repeat a[j]:=a[j-1]; j:=j-1; until (j=1) or (a[j-1]<=s); Я б сделал так: Код:
for i:=1 to cnt-1 do for j:=i+1 to cnt do if a[i]>a[j] then begin k:=a[i]; a[i]:=a[j]; a[j]:=k; end; jmp $ ; Happy End! The Cake Is A Lie. |
#29
|
|||
|
|||
Пузырьком, но у меня обязательное условие вставкой, я бы пузырьком и делал.
И сравнение идет только по первым символам, а что дописать для сравнения по остальным символам, если предыдущие одинаковы? |
#30
|
||||
|
||||
мм.. сча подумаю
З.Ы. Кстати нет, линейная) Попробуй условие в скобки взять jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 23.11.2010 в 22:06. |