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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2013, 20:10   #1
Inesto
Новичок
Джуниор
 
Регистрация: 22.05.2013
Сообщений: 3
По умолчанию Программа нахождения степеней

Помогите. Нужно составить программу для нахождения степеней числа
3:P = 3^n (3 в n-ой степени).

Спасибо
Inesto вне форума Ответить с цитированием
Старый 22.05.2013, 20:18   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

как-то так:
Код:
read(n);
k:=1;

for i:=1 to n do
k:=k*3;

write(k);
Вадим Мошев вне форума Ответить с цитированием
Старый 22.05.2013, 20:48   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
3 в n-ой степени
Код:
...:=exp(n*ln(3));
Если не опшибаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2013, 20:59   #4
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Виталий, не ошибаешься, всё верно.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.05.2013, 21:06   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Только в первом случае результат - целое, а во втором - вещественное.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 22.05.2013, 21:08   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Только в первом случае результат - целое, а во втором - вещественное.
Да, но можно взять от результата функцию round()
Вадим Мошев вне форума Ответить с цитированием
Старый 22.05.2013, 21:29   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
3:P = 3^n
А шо такое P?

Кстати, стоит упомянуть что вариант Вадима, вычисляет степень только для положительных, целых N.
Вариант Виталия вычисляет для любых N.

Еще можно делать так :
Код:
uses
      Math;

...

 := Power (3, n)
Poma][a вне форума Ответить с цитированием
Старый 22.05.2013, 21:34   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Я только по сути результата.
Тогда уж можно и так:
Код:
k:=trunc(exp(n*ln(3)));
поскольку дробная часть равна нулю.


Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 23.05.2013, 07:11   #9
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Я только по сути результата.
Тогда уж можно и так:
Код:
k:=trunc(exp(n*ln(3)));
поскольку дробная часть равна нулю.


Как-то так, ...
Не могу согласиться.
Дробные числа в компьютере предстают всегда не в том виде, в которым мы ожидаем их увидеть, так как имеются погрешности перевода дробей из двоичной системы счисления в десятичную. Именно поэтому вещественные числа не рекомендуется проверять на равенство, так как результат может оказаться совсем не таким, каким мы бы хотели его видеть.

Что же касается процитироанного мной выражения, то его результатом может быть такое число: 7,9999999999999999994 вместо девяти (ошибся, вместо восьми, Sorry). Вот и получим, что два в кубе равно 7, а не 8 как надо.

Последний раз редактировалось Вадим Мошев; 23.05.2013 в 07:52.
Вадим Мошев вне форума Ответить с цитированием
Старый 23.05.2013, 07:41   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
вместо девяти
Наверное, вместо восьми
Вадим, ты уж извини, что влезаю в разговор, но не могу удержаться..

Теперь по поводу Trunc.. Квадратный корень - функция действительного типа, считается на компьютере с некоторой точностью. Что это значит? Что результат вычисления, например, Sqrt(4) может быть равен 2, а может 1.999999999999. При этом, второе число ДОЛЖНО считаться ПРАВИЛЬНЫМ. Почему? Потому что, если точность вычислений равна d, то два числа, отличающиеся меньше, чем на d, ДОЛЖНЫ считаться РАВНЫМИ. Это - смысл концепции ТОЧНОСТЬ ВЫЧИСЛЕНИЙ. Без понимания этого разговоры про точность - пустой звук.

Далее. Если в некоторый момент ты получаешь, например, Sqrt(100000000) равным не 10000, как ожидается, а 9999.9999999 (и этот результат, повторюсь, ПРАВИЛЬНЫЙ), то что произойдет? Trunc тупо отбросит дробную часть, и конечный результат будет меньше нужного аж на 1!! И вот тогда you're in trouble.. (с) TinMan

Цитата:
Именно поэтому вещественные числа не рекомендуется проверять на равенство
Ага.
Но всё-таки действительные числа можно сравнивать (знаю, что всё это знают, но напишу для будущих поколений) :
Код:
const 
    eps = 00000000.1 // например
x, y : Real;

Abs (x-y) <= eps
(Хотя опять же спорный вопрос про знак равно..)
Так же имеет место быть этот замечательный пост : тыц

И правильнее будет (имхо) не использовать транков и раундов, а оставить результат в первозданном виде
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа нахождения суммы. maris Паскаль, Turbo Pascal, PascalABC.NET 0 01.12.2011 19:45
программа нахождения суммы Pchelka1992 Помощь студентам 8 05.04.2011 19:18
Программа нахождения kolega007 Фриланс 3 16.06.2010 11:15
Программа нахождения последовательностей Влад-mego Общие вопросы C/C++ 4 21.12.2008 22:40
Программа нахождения дубликатов MP3 mutabor Софт 4 20.10.2008 20:36