Консультация № 180047
26.09.2010, 15:01
0.00 руб.
0 5 2
Здравствуйте.помогите пож решить.Тема "модули".Дано натуральное число N.Сколько различных цифр встречается в его десятичной записи.

Обсуждение

Неизвестный
26.09.2010, 15:30
общий
28.09.2010, 18:59
это ответ
Здравствуйте, sannek2.
Я бы сделал так, как в приложении. Но так-как тема "модули", то я подозреваю, что функцию вычисление кол-ва цифр надо оформить в отдельном модуле. Если это действительно так, то создайте отдельный модуль, вынесите в него функцию CountAlpha и подключите этот модуль в разделе uses в главном модуле.

Программа:

Код:
program Prog;

uses UnitCnt;

var n:integer;
begin
Write('Введите натуральное число N: ');
Readln(n);
Write('Кол-во различных цифр = ', CountAlpha(n));
Readln;
end.


Модуль:

Код:
unit UnitCnt;

interface

function CountAlpha(N:integer):byte;

implementation

function CountAlpha(N:integer):byte;
var M:array[0..9] of boolean;
i, nn:integer;
begin
nn:=N;
for i:=0 to 9 do M[i]:=false;
while nn>0 do begin
M[nn mod 10]:=true;
nn:=nn div 10;
end;
Result:=0;
for i:=0 to 9 do
if M[i] then inc(Result);
end;

end.
5
Спс большое
Неизвестный
26.09.2010, 15:45
общий
это ответ
Здравствуйте, sannek2.
Программа. Проверял в FreePascal.
Код:
{$I-}
program DigitsInNumber;

uses MyUnit;

var
N:Word;
Digits:TDigitSet;
Count:Byte=0;
I:TDigitRange;

begin
{ Ввод числа }
Write('N='); ReadLn(N);

if IOResult=0 then begin

Digits:=ContainDigits(N);

Write('Contain digits:[');
for I:=Low(TDigitRange) to High(TDigitRange) do begin
if I in Digits then begin
Inc(Count);
Write(I,',');
end;
end;

WriteLn(#8,']');
WriteLn('Count:',Count);
end else begin
WriteLn('I/O Error');
end;

ReadLn;
end.

Модуль:
Код:
unit MyUnit;

interface

type
TDigitRange=0..9;
TDigitSet=set of TDigitRange;

function ContainDigits(Num:LongWord):TDigitSet;

implementation

function ContainDigits(Num:LongWord):TDigitSet;
var
Tmp:Byte;
Res:TDigitSet=[];
begin
{ Подсчет кол-ва различных цифр }
repeat
Tmp:=Num mod 10;
Num:=Num div 10;
if not (Tmp in Res) then begin
Res:=Res+[Tmp];
end;
until Num=0;
ContainDigits:=Res;
end;

end.

Пример работы:
Код:
N=44343
Contain digits:[3,4]
Count:2

5
Спасибо большое
давно
Старший Модератор
31795
6196
27.09.2010, 19:31
общий
Цитата: 313496
Тема "модули"

Уважаемые эксперты исправляйтесь. Ответы не соответсвуют теме вопроса.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Мастер-Эксперт
425
4118
28.09.2010, 16:59
общий
Alex1:
Цитата: 302939
Но так-как тема "модули", то я подозреваю, что функцию вычисление кол-ва цифр надо оформить в отдельном модуле.

Вы правильно подозревали, только отчего же свои подозрения не оформили в программе? Сделайте это. И чем быстрее, тем лучше. Исправленный код выложите в мини-форум и сообщите об этом модераторам (в поле "Выбрать адресата" - "=Модераторы="), чтобы можно было поправить Ваш ответ.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
28.09.2010, 19:06
общий
Alex1:
В следующий раз, при обращении к модераторам – уточняйте пожалуйста что надо сделать..
Форма ответа