Вопрос № 180047: Здравствуйте.помогите пож решить.Тема "модули".Дано натуральное число N.Сколько различных цифр встречается в его десятичной записи....
Вопрос № 180048: Здравствуйте.помогите пож решить.Тема динамические переменные.Дана последовательность из 1000 элементов.Найти все четные и показать....
Вопрос № 180047:
Здравствуйте.помогите пож решить.Тема "модули".Дано натуральное число N.Сколько различных цифр встречается в его десятичной записи.
Отвечает Alex1, 2-й класс :
Здравствуйте, 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.
Редактирование ответа - исправление автора
-----
∙ Отредактировал: Victor Pyrlik, Модератор
∙ Дата редактирования: 28.09.2010, 18:59 (время московское)
Ответ отправил: Alex1, 2-й класс
Ответ отправлен: 26.09.2010, 15:30
Номер ответа: 263203
Оценка ответа: 5 Комментарий к оценке: Спс большое
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263203
на номер 1151 (Россия) |
Еще номера »
Отвечает Micren, Профессионал :
Здравствуйте, 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:
39;,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; ContainDig
its:=Res; end;
end.
Пример работы:
Код:
N=44343 Contain digits:[3,4] Count:2
Ответ отправил: Micren, Профессионал
Ответ отправлен: 26.09.2010, 15:45
Номер ответа: 263204
Оценка ответа: 5 Комментарий к оценке: Спасибо большое
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263204
на номер 1151 (Россия) |
Еще номера »
Вопрос № 180048:
Здравствуйте.помогите пож решить.Тема динамические переменные. Дана последовательность из 1000 элементов.Найти все четные и показать.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.