Другие языки программирования и технологии

Информатика, программирование на Паскале

Помогите написать программу на Паскале для решения данной задачи или хотя бы подскажите алгоритм решения.
Дано три натуральных числа, не превышающих 32767. Определить, сколько из них имеют одинаковое количество цифр.
Кол-во цифр в натуральном числе N равно целой части десятичного логарифма этого числа плюс 1.

Таким образом, надо всего лишь проверить на равенство значения trunc(ln(a + 0.5) / ln(10)), trunc(ln(b + 0.5) / ln(10)) и trunc(ln(c + 0.5) / ln(10)).

+ 0.5 добавлено для того, чтобы не нарваться на ошибку точности вычислений с плавающей запятой.

А если вспомнить, что в Pascal ord(false) = 0 и ord(true) = 1, то всё решение задачи:

var a, b, c: integer;
begin
read(a, b, c);
a := trunc(ln(a + 0.5) / ln(10));
b := trunc(ln(b + 0.5) / ln(10));
c := trunc(ln(c + 0.5) / ln(10));
writeln(ord(a = b) + ord(b = c) + ord(a = c))
end.
*_
****aibek _ Sadenov***
73 802
Лучший ответ
Переведи int в string (или char, что там у вас) и измерь длину строки.

Или можешь в цикле делить на 10 сдвигая разряды вправо, как только получишь значение меньше нуля выходишь из цикла и смотришь сколько итераций выполнил цикл.
ЮН
Юрий Никитин
11 196
Фарафонов Сергей Мы это проходим на 1 курсе универа и пока такого ещё не изучали.
Можно пользоваться командами div,mod и условным оператором IF
Юрий Никитин Мод смотри остаток, а див делит одно число на другое?
Юрий Никитин Я не помню синтаксис паскаля, попробуй в цикле делить на 10
Юрий Никитин Var value: double = 32000;
Var count :integer =0;

While value > 0 do
Begin
value := value div 10;
Count = count + 1;
End

Print "количество цифр в значении " + value + " = " + count

Чтототипа такого
Юрий Никитин Только это прдсчет цифр которые составляют целую часть значения. Ессли вводить 32,67 то результат будет 2
Юрий Никитин У меня паскаль был 16 лет назад.
// DIVы и IFы
var a,b,c,s,d: integer;
begin
Readln(a,b,c);
d:=0;

s:=0;
if a div 10 = 0 then inc(s);
if b div 10 = 0 then inc(s);
if c div 10 = 0 then inc(s);
if s > 1 then d:=s;

s:=0;
if (a div 10 > 0) and (a div 10 < 10) then inc(s);
if (b div 10 > 0) and (b div 10 < 10) then inc(s);
if (c div 10 > 0) and (c div 10 < 10) then inc(s);
if s > 1 then d:=s;

s:=0;
if (a div 100 > 0) and (a div 100 < 10) then inc(s);
if (b div 100 > 0) and (b div 100 < 10) then inc(s);
if (c div 100 > 0) and (c div 100 < 10) then inc(s);
if s > 1 then d:=s;

s := 0;
if (a div 1000 > 0) and (a div 1000 < 10) then inc(s);
if (b div 1000 > 0) and (b div 1000 < 10) then inc(s);
if (c div 1000 > 0) and (c div 1000 < 10) then inc(s);
if s > 1 then d:=s;

s:=0;
if (a div 10000 > 0) and (a div 10000 < 10) then inc(s);
if (b div 10000 > 0) and (b div 10000 < 10) then inc(s);
if (c div 10000 > 0) and (c div 10000 < 10) then inc(s);
if s > 1 then d:=s;

writeln('==',d);
end.

Похожие вопросы