Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2016, 18:44   #1
NikiToZz_
Пользователь
 
Регистрация: 23.04.2016
Сообщений: 75
По умолчанию Сортировка цифр в строке.

Доброго времени суток.. Сегодня задался вопросом, как сортировать цифры в строке от большей к меньшей.

Возникло 2 идеи:

1) Как в массивах, сравнивать соседей, с помощью boolean реализовывается неплохо и быстро.

2) Сравнивать каждую цирфу с каждой непосредственно. И самую большую выносить вперед и так далее.. Этот вариант я реализовать не смог, потому и пришел за помощью.

Код:
  read(a);
  str(a,st1);
  k:=length(st1);
  while length(st2)<k do
    for i:=1 to length(st1) do   begin
        for j:=1 to length(st1) do
            if ord(st1[i])<ord(st1[j]) then
               break;
               st2:=st2+st1[i];
               delete(st1,i,1);
            end;
Все основывается на том, что, допустим, '9' по ord больше, чем '5'.

Паскаль берет цифру , сравнивает ее со всеми другими по тому же ord, и если он находит любую , что по орду больше его, прерывает цикл, в котором находится, он берет 2 цифру из первого цикла.... Тем самым он найдет цифру, которая больше всех по орду, тогда условие его пропустит дальше и эту цифру он занесет во вторую строку.

Может, реализую не так.. Что скажете?
NikiToZz_ вне форума Ответить с цитированием
Старый 13.07.2016, 19:01   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
  s:=Label1.Caption;
  for i:=1 to Length(s)-1 do
    for j:=i+1 to Length(s) do
      if s[j]>s[i] then begin
        c:=s[i];
        s[i]:=s[j];
        s[j]:=c;
      end;
  Label2.Caption:=s;
Чтобы не понятней было можно свап такой использовать
Код:
        s[i]:=Chr(Ord(s[i]) xor Ord(s[j]));
        s[j]:=Chr(Ord(s[i]) xor Ord(s[j]));
        s[i]:=Chr(Ord(s[i]) xor Ord(s[j]));
Лэйблы убери, то ж у меня для делфи
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.07.2016 в 19:05.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение цифр в строке Praud Помощь студентам 4 02.05.2014 18:11
Проверка на отсутствие букв-цифр в строке DeveloPerchik Общие вопросы Delphi 6 08.04.2012 20:10
Удаление цифр в символьной строке Vigo1603 Общие вопросы C/C++ 4 27.09.2010 12:45
сложение цифр в строке от 1 до 5 buba3230 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 04.06.2009 23:53
Поиск последовательности цифр в строке mmx310 Microsoft Office Excel 14 05.02.2009 11:19