Консультация № 139328
06.06.2008, 15:05
0.00 руб.
0 1 1
Здравсвуйте, уважаемые эксперты! Сегодня две задачки:
1. У натурального числа вычисляют произведение цифр, после этого повторяют операцию, пока не получится однозначное число. Назовём это число характеристикой, а общее количество итераций - глубиной. Выведите в порядке возрастания все числа на отрезке [a, b] с нулевой характеристикой, у которых глубина максимальна.
10 80
55 59 69 78
2. С клавиатуры вводятся два натуральных числа a и b. Распечатайте все числа Армстронга на отрезке [a, b].
400 2000
407
1634
Какие ошибки у меня в решениях? Заранее благодарен. Коды в приложении.

Приложение:
1 ЗадачаVar a, b, i, max_glub: Integer;Procedure ReadDate;Begin ReadLn(a, b);End;Function ChipherHar(i: Integer): Integer;Var x: Integer;Begin x := 1; Repeat While (i <> 0) Do Begin x := (i Mod 10)*x; i := i Div 10; End; i := x; Until (i < 10); ChipherHar := x;End;Function ChipherGlub(i: Integer): Integer;Var x, k: Integer;Begin x := 1; k := 0; Repeat While (i <> 0) Do Begin x := (i Mod 10)*x; i := i Div 10; End; i := x; Inc(k); Until (i < 10); ChipherGlub := kEnd;Procedure WriteDate;Begin Write(i, );End;Begin max_glub := 0; For i := a To b do begin If ((ChipherHar(i) = 0) And (ChipherGlub(i) > max_glub)) Then begin max_glub := ChipherGlub(i); End; End; For i := a To b Do Begin If ((ChipherHar(i) = 0) And (ChipherGlub(i) = max_glub)) Then begin Write(i, ); End; End; ReadLn;End.2. задачаVar i, a, b: Integer;Procedure ReadDate;Begin ReadLn(a, b);End;Function Pow(i, k: Integer): Integer;Var t: Integer;Begin t := i; For i := 1 To k Do Begin i := i*t; End; Pow := i;End;Function ChipherCount(i: Integer): Integer;Var k: Integer;Begin k := 0; While (i <> 0) Do Begin Inc(k); i := i Div 10; End; ChipherCount := k;End;Function ChipherSum(i: Integer): Integer;Var sum: Integer;Begin sum := 0; While (i <> 0) Do Begin sum := sum+Pow(i Mod 10, ChipherCount(i)); i := i Div 10; End; ChipherSum := sum;End;Procedure WriteDate;Begin WriteLn(i);End;Procedure Solve;Begin For i := a To b Do Begin If (ChipherSum(i, ChipherCount(i)) = i) Then Begin WriteDate; End; End;End;Begin Solve; ReadLn;End.

Обсуждение

давно
Старший Модератор
31795
6196
06.06.2008, 17:49
общий
это ответ
Здравствуйте, Хощенко Артём Владимирович!

Вторая задача в приложении.
Ваши ошибки:
- Чему равны А и В когда начинается цикл? Кто будет вызывать п/п ReadDate;.
- п/п Pow - считает почти факториал, а не степень.
- п/п ChipherSum - проверьте параметры с какими вызывается п/п Pow на втором шаге цикла.
Код не коментировал т.к. это Ваша задача.
Удачи!

Приложение:
Var i, a, b: Integer; Procedure ReadDate; Begin write(‘A:‘);ReadLn(a); write(‘B:‘);readln(b); End; Function Pow(i, k: Integer): Integer; Var t: Integer; Begin t := 1; repeat t := i*t; dec(k); until k=0; Pow := t; End; Function ChipherCount(i: Integer): Integer; Var k: Integer; Begin k := 0; While (i <> 0) Do Begin Inc(k); i := i Div 10; End; ChipherCount := k; End; Function ChipherSum(i: Integer): Integer; Var sum,a: Integer; Begin sum := 0; a:=ChipherCount(i); While (i <> 0) Do Begin sum := sum+Pow(i Mod 10,a); i := i Div 10; End; ChipherSum := sum; End; Procedure WriteDate; Begin WriteLn(i); End; Procedure Solve; Begin For i := a To b Do Begin If (ChipherSum(i) = i) Then Begin WriteDate; End; End; End; Begin ReadDate; Solve; write(‘Stop‘); ReadLn; End.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа