Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2013, 21:51   #1
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию условие равенство

Код:
var
n,say,cem,buf:integer;          k,rez:real;
begin
readln(n);      rez:=n;
while n<>0 do begin
 buf:=n mod 10;
 cem:=cem+buf;
 say:=say+1;
 n:=n div 10;
end;

writeln(exp(ln(cem)*say),'-значение1      значение 2- ',rez); {для диагностики смотрю на значения обоих перемен и все правильно}
if (exp(ln(cem)*say)=rez) then writeln('цифра Армстронга') else
writeln('Не повезло');
end.
собственно проблема в том что
Код:
 (exp(ln(cem)*say)=rez)
первое и второе точно получает значение 3 допустим но оператор не пишет нужное т.е. " цифра армстронга".если вы про то что тип экспы при выводе реал а тип реза целое то я даже проверял преобразуя рез на реал не помогло.сорри за уг руский в чем может быть проблема?глючит паскаль?)
Я в тупике потому что если они оба имеют значения 3 тогда не цифра армстронга.а когда 6 например тогда условие нормально рабоает.втф)паскалабц

Последний раз редактировалось Тамерлан Абилов; 10.07.2013 в 22:00.
Тамерлан Абилов вне форума Ответить с цитированием
Старый 10.07.2013, 22:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
преобразуя рез на реал
Зачем?
Цитата:
rez:real;
Цитата:
но оператор не пишет нужное
Ну а отладка что показывает? Может проявляется эффект неточности вычисления плавающей точки? Или сам алгоритм в корне не верен.
Цитата:
cem:=cem+buf;
Кстати эти переменные нигде не инициализируются. Не исключено что нарвешься на проблемы в дальнейшем.
I'm learning to live...

Последний раз редактировалось Stilet; 10.07.2013 в 22:28.
Stilet вне форума Ответить с цитированием
Старый 10.07.2013, 22:28   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А почему же я не удивлен? Для сравнения вещественных чисел пишем так :

Код:
const
    eps = 0.00001;

<..>
a := exp (<..>);
if Abs(a-rez) <= eps then
Но числа Армстронга (насколько я помню (а лезть в вики - лень)) - это целые числа, поэтому :
Код:
if Trunc((exp(ln(cem)*say))=rez) then writeln('цифра Армстронга') else
Poma][a вне форума Ответить с цитированием
Старый 10.07.2013, 22:58   #4
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

не инициализируются?т.е. не используются или я не понял сор.отладка?

транк не помогло(
Тамерлан Абилов вне форума Ответить с цитированием
Старый 10.07.2013, 23:11   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Код:
if Trunc((exp(ln(cem)*say))=rez) then writeln('цифра Армстронга') else
Тут, как минимум, проблема со скобками:
Код:
if (Trunc(exp(ln(cem)*say))=rez) then writeln('цифра Армстронга') else
А вообще-то, алгоритм реализован не верно, так как число Армстронга - сумма цифр возведенных в степень, равную числу этих цифр в числе.
В алгоритме выполняется подсчет числа цифр и при этом находится сумма этих цифр:
Код:
cem:=cem+buf;
Сумма цифр числа возводится в степень say, которая равна числу цифр в числе:
Код:
say:=say+1;
Рекомендую посмотреть тут: http://acmp.ru/article.asp?id_text=198


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 10.07.2013, 23:14   #6
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

да разобраться с армстронгом не трабл но вот подводит условие. скобки я по правил само собой а вот в чем трабл тогда если я юзаю транк и при этом опять та же проблема если оба значение 7 то пишет цира арм-а если 3 то пишет не повезло.сам не понимаю
Тамерлан Абилов вне форума Ответить с цитированием
Старый 10.07.2013, 23:20   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Тоже поделюсь ссылкой (тыц)
Цитата:
Тут, как минимум, проблема со скобками
Ага. Мой косяк.
Poma][a вне форума Ответить с цитированием
Старый 11.07.2013, 08:19   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не инициализируются?т.е. не используются или я не понял сор.отладка?
Не инициализируются значит в начале их использования их значения могут быть отличными от нуля, и полагаться на мусор в памяти. http://yandex.ua/yandsearch?text=%D0...oc=10&lr=20554
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.07.2013, 08:57   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Тамерлан, вещественные числа (числа с десятичной запятой - например, тип real) НЕЛЬЗЯ сравнивать друг с другом просто так.

почему это так, для изучения и понимания сути вопроса, рекомендую ознакомиться:

Числа с плавающей запятой (Wikipedia)

статья Антона Григорьева "Неочевидные особенности вещественных чисел"

Загадки округления



updated - добавлено зеркало
статью Антона Григорьева можно почитать и на сайте королевства Дельфи:
Антон Григорьев. "Неочевидные особенности вещественных чисел"

Последний раз редактировалось Serge_Bliznykov; 02.10.2013 в 08:47.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.07.2013, 19:30   #10
Тамерлан Абилов
Пользователь
 
Регистрация: 03.03.2013
Сообщений: 70
По умолчанию

вот теперь я догадываюсь)Спс болшое ато парадокс уже снился мне)
Тамерлан Абилов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Банальное равенство парсинга bulldog5293 Общие вопросы Delphi 2 29.03.2011 00:29
Равенство какому-то промежутку Hemul Общие вопросы C/C++ 5 23.01.2011 12:18
условие на равенство дат segail Microsoft Office Excel 26 29.08.2010 21:31
Равенство трех переменных k1r1ch Общие вопросы C/C++ 3 23.02.2010 20:54
Равенство по цвету snakezx Microsoft Office Excel 1 30.03.2009 12:11