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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2009, 18:19   #1
gnom63
Пользователь
 
Регистрация: 08.03.2009
Сообщений: 12
Печаль задачка на множества

вывести в возрастающем порядке все цифры входящие в десятичную запись
некоторого натурального числа N

как это сделать при помощи множеств???????
вообще ничего не могу сделать
gnom63 вне форума Ответить с цитированием
Старый 08.03.2009, 23:25   #2
Jean-Esther
Пользователь
 
Аватар для Jean-Esther
 
Регистрация: 15.01.2009
Сообщений: 69
По умолчанию

Ты знаешь, как выделять из числа цифры?
Код:
procedure DoIt;
var figures:array[0..9] of word; {figures[i] — количество вхождений цифры i в число}
begin
fillchar(figures,sizeof(figures),0);
readln(N);
while N>0 do
begin
    inc(figures[N mod 10]);
    N:=N div 10;
end;
for n:=1 to 9 do
  for i:=1 to figures[n] do
    write(n);
end;
P.S. массив — это упорядоченное множество.
Silence is of great value...
Jean-Esther вне форума Ответить с цитированием
Старый 09.03.2009, 00:44   #3
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

забавный и интересный алгоритм + вам, правда если я вижу слово множества, в голове сразу представляется тип "set of" - может именно это имел в виду автор
capta1n вне форума Ответить с цитированием
Старый 09.03.2009, 01:53   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от capta1n
я вижу слово множества, в голове сразу представляется тип "set of"
+1
согласен.

Имхо, должно быть что-то вроде такого:
Код:
var s : string;
      i, N : longint;
      my_set : set of char;
      c : char;
begin
 WriteLn('VVedite chislo');
 Readln(N);
 str(N, s);
 for i:=1 to length(s) do
    my_set := my_set + [ s[i]];  { проверять на то, что s[i] уже содержится }
                                              { в my_set необязательно }
 for c:='0' to '9' do
    if c in my_set then
       writeln(c);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2009, 13:56   #5
gnom63
Пользователь
 
Регистрация: 08.03.2009
Сообщений: 12
По умолчанию

спасибо огромное)))))))))
gnom63 вне форума Ответить с цитированием
Старый 09.03.2009, 14:17   #6
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

интересено, а если ввести число 5533 - он выведет 3 и 5, а надо 3 3 5 5

вот подкорректированная программа:
Код:
var s : string;
      i, N : longint;
      my_set : set of char;
      a : array ['0'..'9'] of byte;
      c : char;
begin
 WriteLn('VVedite chislo');
 Readln(N);
 str(N, s);
 for i:=1 to length(s) do
 begin
    inc(a[s[i]]);
    my_set := my_set + [s[i]]
 end;
 for c:='0' to '9' do
    if c in my_set then
     for i:=1 to a[c] do writeln(c);
 readln;
end.

Последний раз редактировалось capta1n; 09.03.2009 в 14:25.
capta1n вне форума Ответить с цитированием
Старый 09.03.2009, 14:41   #7
gnom63
Пользователь
 
Регистрация: 08.03.2009
Сообщений: 12
По умолчанию

Program dodelay;
uses crt;
Const
Nmax=10; Type
Matrics=array[1..Nmax,1..Nmax] of integer;
Masiv=array[1..Nmax] of integer;
Var
X,Y,Z,A,B:matrics;
M,N:masiv;
i,j,t:integer;
Procedure Vvod (t:integer; Var X:matrics);
Var
i,j:integer;
Begin
For i:=1 to t do
For j:=1 to t do
Begin
Write ('[',i,',',j,']=');
Read (X[i,j]);
End;
For i:=1 to t do
Begin
For j:=1 to t do
Write (X[i,j]:5);
Writeln
End
End;
Procedure Echo (t:integer; X:matrics);
var
i,j:byte;
begin
For i:=1 to t do
Begin
For j:=1 to t do
Write (X[i,j]:5);
Writeln
End
end;
Procedure Umn (X,Y:matrics; t:integer; Var Z:matrics);
var
i,j,k,s:integer;
begin {Umno}
for i:=1 to t do
for j:=1 to t do
begin
S:=0;
for k:=1 to t do
s:=s+X[k,i]*Y[j,k];
Z[i,j]:=s;
end;
end;
begin
clrscr;
writeln('введите размерность матрицы X,Y:');read(t);
writeln('введите,t*t,' элементов каждой матрицы:');
writeln('матрица X:');vvod(t,X);
writeln('матрица Y:');vvod(t,Y);
Echo(t,A);
Echo(t,B);
writeln('произведение матрицп:');
Umn(x,y,t,z) ;
echo(t,z)
end.

********************
в чём ошибка после выаода второй матрицы выводятся ещё нули как это убрать?????????
gnom63 вне форума Ответить с цитированием
Старый 09.03.2009, 14:42   #8
gnom63
Пользователь
 
Регистрация: 08.03.2009
Сообщений: 12
По умолчанию

не туда!!!!!!!!!!!
извиняюся)))))))))))
gnom63 вне форума Ответить с цитированием
Старый 09.03.2009, 15:18   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
интересено, а если ввести число 5533 - он выведет 3 и 5, а надо 3 3 5 5
Вопрос спорный...
я, например, не согласен:
Цитата:
все цифры входящие в десятичную запись
имхо, например, Ваше число 5533 образовано ДВУМЯ цифрами (3 и 5, просто повторёнными несколько раз!)

Хотя, в Ваших словах заключена определённая логика.
Пусть теперь автор вопроса сам решает, как ему больше подходит :-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.03.2009, 15:36   #10
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Цитата:
вывести в возрастающем порядке все цифры входящие в десятичную запись
я не понимаю, с чем вы не согласны и в чем спорный вопрос
capta1n вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множества Zid@ne Помощь студентам 16 20.01.2008 10:19
Множества в Си Иллидан Общие вопросы C/C++ 14 17.01.2008 15:58
множества xxxPascalxxx Помощь студентам 1 27.12.2007 21:54
Множества stydent M Паскаль, Turbo Pascal, PascalABC.NET 3 13.12.2007 22:00