![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Спасибо за написаные коды, но удаляет только когда 2 одинаковых элемента, это про второй код, а первый работает так же как и мой впервом посте. То есть у меня неправильно условие поставленно?
|
|
#17
|
||||
|
||||
|
Только когда два? у меня из того массива, что ты приводил, второй код удалил все ненужное, и получилось то, что написал в ответе...
|
|
#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; |
|
#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 - то вообще ниче не снесет. Ну это я так понял. |
|
#22
|
|||
|
|||
|
Спасибо, сам принцип как это делать я понял, а вот как реализовать это не получалось.
|
|
#23
|
|||
|
|||
|
Доброго времени суток, как узнать код i-го элемента массива?
При такой записи выдает ошибку о несовместимости типов Код:
if (ord(a[i]))<(ord(a[i+1])) then |
|
#24
|
||||
|
||||
|
код I-го элемента? во-первых, для сравнения коды не нужны. Можно и так сравнивать.
А во-вторых - пиши byte(a[i]) и не парься ![]() |
|
#25
|
|||
|
|||
|
Мне нужно отсортировать по алфавиту полученные строки, вот я и спрашиваю как узнать код элемента массива.
|
|
#26
|
||||
|
||||
|
это как раз можно и без кодов:
Код:
if a[i]>a[i+1] then ... Более того, для строк тоже применимо сравнение по крайней мере в паскале. Сравнивалось там в алфавитном порядке. Думаю, тут то же самое. |
|
#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; |
|
#29
|
|||
|
|||
|
Пузырьком, но у меня обязательное условие вставкой, я бы пузырьком и делал.
И сравнение идет только по первым символам, а что дописать для сравнения по остальным символам, если предыдущие одинаковы? |
|
#30
|
||||
|
||||
|
мм.. сча подумаю
З.Ы. Кстати нет, линейная) Попробуй условие в скобки взять Последний раз редактировалось Bargest, 23.11.2010 в 22:06. |