Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 22.11.2010, 18:32
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Спасибо за написаные коды, но удаляет только когда 2 одинаковых элемента, это про второй код, а первый работает так же как и мой впервом посте. То есть у меня неправильно условие поставленно?
Ответить с цитированием
  #17  
Старый 22.11.2010, 20:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Только когда два? у меня из того массива, что ты приводил, второй код удалил все ненужное, и получилось то, что написал в ответе...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #18  
Старый 22.11.2010, 22:56
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Вот, смотри как работает.
В принципе все зависит от того как рандом числа выкинет. Если только по 2, то все нормально будет.
Изображения
Тип файла: jpg 1.JPG (24.0 Кбайт, 6 просмотров)
Ответить с цитированием
  #19  
Старый 22.11.2010, 23:13
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Кажись понял в чем бага:
Код:
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;
Массив ведь сортирован? тогда он перескакивает через одну из 6-рок.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #20  
Старый 22.11.2010, 23:21
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Да, массив сортирован, а если можно пояснение для чего нам булеан ну и что именно у меня было неправильно кроме как я понял условия.
Всем Большущее спасибо за помощь.
Ответить с цитированием
  #21  
Старый 22.11.2010, 23:26
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Что делает этот код:
Идем от конца массива к началу. Берем элемент a[i]. Сравниваем его со всеми из a[1..i-1]. Если есть хоть одно совпадение - удаляем найденный элемент, ставим флаг, что текущий элемент a[i] имеет повторки и идем дальше сносить повторки (если еще есть).
Потом смотрим: если повторки были (fl=true), значит и сам текущий элемент надо снести.

А в каком смысле
Цитата:
Сообщение от flips
и что именно у меня было неправильно кроме как я понял условия.
Что было неправильно в самом начале? Там получалось, что сравниваются только соседние элементы (a[i]=a[i+1]). Т.е. если массив вида
1 2 3 4 4 5 6 - то он снесет одну четверку, а у второй уже не будет пары. а если 1 2 3 4 5 4 6 - то вообще ниче не снесет.
Ну это я так понял.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #22  
Старый 22.11.2010, 23:29
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Спасибо, сам принцип как это делать я понял, а вот как реализовать это не получалось.
Ответить с цитированием
  #23  
Старый 23.11.2010, 20:22
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Доброго времени суток, как узнать код i-го элемента массива?
При такой записи выдает ошибку о несовместимости типов
Код:
if (ord(a[i]))<(ord(a[i+1])) then
Массив типа строка
Ответить с цитированием
  #24  
Старый 23.11.2010, 20:52
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

код I-го элемента? во-первых, для сравнения коды не нужны. Можно и так сравнивать.
А во-вторых - пиши byte(a[i]) и не парься
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #25  
Старый 23.11.2010, 20:58
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Мне нужно отсортировать по алфавиту полученные строки, вот я и спрашиваю как узнать код элемента массива.
Ответить с цитированием
  #26  
Старый 23.11.2010, 21:00
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

это как раз можно и без кодов:
Код:
if a[i]>a[i+1] then ...
Сравнение символов вполне прокатывает. Сравниваются они автоматически по кодам.
Более того, для строк тоже применимо сравнение по крайней мере в паскале. Сравнивалось там в алфавитном порядке. Думаю, тут то же самое.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #27  
Старый 23.11.2010, 21:31
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Что нужно дописать для сортировки по алфавиту сравнивая не только первые символы, а и по остальным?
Вот код сортировки методом вставки:
Код:
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  
Старый 23.11.2010, 21:48
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

не знаю, что не так. Но могу предложить другой вариант, проще и быстрее.
если я верно понимаю, то
Код:
     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  
Старый 23.11.2010, 21:56
flips flips вне форума
Новичок
 
Регистрация: 04.11.2010
Сообщения: 60
Репутация: 10
По умолчанию

Пузырьком, но у меня обязательное условие вставкой, я бы пузырьком и делал.
И сравнение идет только по первым символам, а что дописать для сравнения по остальным символам, если предыдущие одинаковы?
Ответить с цитированием
  #30  
Старый 23.11.2010, 21:59
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

мм.. сча подумаю

З.Ы. Кстати нет, линейная)

Попробуй условие в скобки взять
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 23.11.2010 в 22:06.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:02.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter