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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2014, 21:55   #1
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию Отсортировать цифры числа!

Задано натуральное число, отсортировать цифры числа в любой последовательности! просто хочу понять суть! как это делается!
Виталик124 вне форума Ответить с цитированием
Старый 20.02.2014, 22:26   #2
PathTheir
Пользователь
 
Аватар для PathTheir
 
Регистрация: 14.04.2013
Сообщений: 62
По умолчанию

Читаем число как строку, и сортируем ее с помощью любого алгоритма сортировки.
PathTheir вне форума Ответить с цитированием
Старый 20.02.2014, 22:45   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от PathTheir Посмотреть сообщение
Читаем число как строку, и сортируем ее с помощью любого алгоритма сортировки.
или с помощью N mod 10 / N := N div 10; "разбираем" число на отдельные цифры, которые помещаем в тот же массив, массив сортируем. Результат либо переводим в число, либо банально выводим.
Профит.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2014, 22:51   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Добавлю.. Использовать лучше сортировку подсчетом..
Poma][a вне форума Ответить с цитированием
Старый 20.02.2014, 23:02   #5
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

а можно поподробней, про этот способ! просто я как раз сейчас над ним сижу! у меня выбивает ошибку : Нельзя преобразовать тип integer к array [1..100] of integer

Цитата:
Сообщение от PathTheir Посмотреть сообщение
Читаем число как строку, и сортируем ее с помощью любого алгоритма сортировки.
Да, но этот способ не воспринимает мой препод! я то понял как сортировать
с помощью строк - это действительно легче и понятней (мне так кажется), но он говорит, что нужно через mod и div!

Если что, то вот прога :

Код:
program sortirovka_cifr;

var
  err, n: integer;
  s: string; 
  ch: char;
  i, j: integer;

begin
  writeln('vvedite_chislo');
  readln(n);
  str(n, s);
  for i := 1 to length(s)  do
  begin
    for j := i + 1 to length(s) do
      if s[j] > s[i] then 
      begin
        ch := s[i];
        s[i] := s[j];
        s[j] := ch;
      end;
  end;
  val(s, n, err);
  writeln('otsortirovannoe_chislo ', n);
end.
... и единственный вопрос, что такое err?

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
или с помощью N mod 10 / N := N div 10; "разбираем" число на отдельные цифры, которые помещаем в тот же массив, массив сортируем. Результат либо переводим в число, либо банально выводим.
Профит.
а можно поподробней, про этот способ! просто я как раз сейчас над ним сижу! у меня выбивает ошибку : Нельзя преобразовать тип integer к array [1..100] of integer...

Последний раз редактировалось Stilet; 21.02.2014 в 09:14.
Виталик124 вне форума Ответить с цитированием
Старый 20.02.2014, 23:27   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Виталик124 Посмотреть сообщение
а можно поподробней, про этот способ! просто я как раз сейчас над ним сижу! у меня выбивает ошибку : Нельзя преобразовать тип integer к array [1..100] of integer...
примерно так:
Код:
program sortirovka_cifr;

var
  n: integer;
  digits: array[1..20] of byte; { дадим массиву "говорящее" имя }
  i, j, k, NN: integer;

begin
  writeln('vvedite_chislo');
  readln(n);

  {сначала поместим все цифры числа в массив digits, каждая цифра отдельно}
  k := 0; {индекс в массиве чисел}
  NN := n;
  while NN > 0 do begin
    inc(k);
    digits[k] := NN mod 10;
    NN := NN div 10;
  end;

  {отсортируем массив}
  for i := 1 to k-1  do
  begin
    for j := i + 1 to k do
      if digits[j] > digits[i] then
      begin
        NN := digits[i];
        digits[i] := digits[j];
        digits[j] := NN;
      end;
  end;

  {выведем цифры из массива на экран}
  Write('otsortirovannoe_chislo ');
  for i:=1 to K do Write(digits[i]);
  WriteLn;
  Readln
end.
p.s. при необходимости можно обратно "собрать" элементы массива в число.
Делать это удобнее от младших разрядов к старшим.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.02.2014, 00:03   #7
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Вот у меня возник вопрос.
А что, сам процесс сортировки обязателен как отдельный процесс?
Представление данных до сортировки и после может быть ведь различным.
У меня получилось так:
Код:
var n, NN : integer;
   i : integer;
   digits : array[0..9] of byte;
begin
   write('Vvedite chislo: ');
   readln(n);
   NN := n;
   while NN > 0 do
   begin
      inc(digits[NN mod 10]);
      NN := NN div 10;
   end;
   writeln('Otsortirovannoe chislo');
   for i := 0 to 9 do
      while digits[i] > 0 do
      begin
         write(i:3);
         dec(digits[i]);
      end;
      readln;
end.
Вроде и покороче и попроще.

Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 21.02.2014, 09:08   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Именно это я и имел ввиду..

Можно еще так :
Код:
ReadLn(s);
for i := 1 to Length(s) do
   Inc(digits[s[i]]);

for ch := '0' to '9' do
    while digits[ch] > 0 do begin
           Write(ch);
           Dec(digits[i])
    end;
И всё же.. лучше проинициализировать digits, несмотря на глобальные переменные в данном случае
Poma][a вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить произведение разности первых двух цифр трехзначного числа и младшей цифры этого числа. Hoginat Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 22:13
Отсортировать числа в ConsoleAplication C# Sniper16 C# (си шарп) 0 26.03.2012 18:40
задача - найти произведение первой цифры целой части и третей цифры дробной части вещественного числа. LAZARUS maks22 Lazarus, Free Pascal, CodeTyphon 2 30.01.2012 19:53
VisualBasic.Исключить из числа цифры, стоящие между первой и последней цифрой числа. ride013 Помощь студентам 0 03.05.2011 21:20
Отсортировать числа по алфавиту Scorpil Общие вопросы C/C++ 3 18.10.2008 01:32