Помогите написать программу на Паскале для решения данной задачи или хотя бы подскажите алгоритм решения.
Дано три натуральных числа, не превышающих 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.
Таким образом, надо всего лишь проверить на равенство значения 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.
Переведи int в string (или char, что там у вас) и измерь длину строки.
Или можешь в цикле делить на 10 сдвигая разряды вправо, как только получишь значение меньше нуля выходишь из цикла и смотришь сколько итераций выполнил цикл.
Или можешь в цикле делить на 10 сдвигая разряды вправо, как только получишь значение меньше нуля выходишь из цикла и смотришь сколько итераций выполнил цикл.
// 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.
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.
Похожие вопросы
- Помощь по информатике. 9 класс. Программирование .Язык Паскаль. Ветвление
- Информатика 10 класс. Программирование на Паскаль
- Информатика. Программирование. Обработка массивов данных. Помогите составить алгоритм и прог. код к нему.
- Программирование на Паскале Помогите, пожалуйста , написать программу на паскале
- Умные люди есть тут?;)) ) Помогите, пожалуйста, с домашней работой по информатике. Нужно в Паскале составить алгоритм реш
- Вопрос к программистам. Легкая задачка по информатике на языке Паскаль.
- Кто знает очень сложные задачи по информатике, для программы Паскаль?? ? Напишите несколько задач...
- помогите решить задачи с циклом по информатике в программе паскаль
- Информатика. Delphi (язык "Паскаль"). Помогите с матрицей, а то до автомата-тройки (ну, как бы экзамена) не допустят
- Задание_Кто соображает в программировании на паскале? Надо написать небольшую программу, а я в предмете плохо понимаю))
Можно пользоваться командами div,mod и условным оператором IF
Var count :integer =0;
While value > 0 do
Begin
value := value div 10;
Count = count + 1;
End
Print "количество цифр в значении " + value + " = " + count
Чтототипа такого