Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 150
от 06.04.2006, 19:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 165, Экспертов: 46
В номере:Вопросов: 2, Ответов: 4


Вопрос № 39075: Здравствуйте! Можете привести пример программы на Pascal для просмотра различных изображений? Спасибо!...
Вопрос № 39125: Здравствуйте, уважаемые эксперты! Как в паскале вычислить x в степени i? И как корень i'той степени числа x? Спасибо....

Вопрос № 39.075
Здравствуйте!
Можете привести пример программы на Pascal для просмотра различных изображений?
Спасибо!
Отправлен: 31.03.2006, 19:51
Вопрос задал: [TiER] (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Артём Шегеда
Здравствуйте, [TiER]!

Вопрос этот меня задел, поэтому решил показать возможности БорландПаскаля...
Два часа убил на изучание структур и написание программы. Возможности, конечно, реализованы не все, но довести её до ума - Ваша забота ;)

Приложение:

Ответ отправил: Артём Шегеда (статус: 4-ый класс)
Ответ отправлен: 31.03.2006, 22:30


Вопрос № 39.125
Здравствуйте, уважаемые эксперты!
Как в паскале вычислить x в степени i? И как корень i'той степени числа x?
Спасибо.
Отправлен: 01.04.2006, 13:47
Вопрос задал: Москвин Роман Валерьевич (статус: 6-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Cheater76
Здравствуйте, Москвин Роман Валерьевич!

В Паскале нет функции возведения числа в произвольную степень, но зато есть функции для вычисления экспоненты и натурального логарифма (exp() и ln() соответственно).

Пусть надо вычислить X^V. Сделаем такую замену: X = e^ln(X). Тогда
X^V = e^(V* ln(X)).

Оформим это выражение в виде функции на Паскале:

Function pow(x, v : real) : real;
Begin
pow := exp(v*ln(x));
End;

Эта функция будет правильно работать только при положительных значениях X (при X=0 логарифм равен минус бесконечности).

Для X < 0 при дробном V решение является комплексным.

В вещественных числах можно найти решение для целых значений показателя степени. Используем свойство: Для отрицательного X и целого N выполняются следующие равенства:
XN = |X|N, если N - четное;
XN = -(|X|N), если N - нечетное.

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

* X0 = 1;
* 0V = 0 при V>0;
* 0V = бесконечность при V<0;

Заменим бесконечность нулем. При вычислениях надо будет избегать сочетания X=0,V<0.

Получилась такая функция:

Function pow1(x, v : real) : real;
Begin
if (v = 0.0) then
pow1 := 1
else
if (x = 0.0) then
pow1 := 0
else
if (x > 0.0) then
pow1 := exp(v*ln(x))
else
if (odd(trunc(v))) then
pow1 := -exp(int(v)*ln(-x))
else
pow1 := exp(int(v)*ln(-x));
End;

Заметим еще раз, что эта функция возвращает неверный результат при отрицательных V:

* когда X=0;
* когда V - дробное.
Ответ отправил: Cheater76 (статус: 5-ый класс)
Ответ отправлен: 01.04.2006, 14:13
Оценка за ответ: 5

Отвечает: sir henry
Здравствуйте, Москвин Роман Валерьевич!
Первый способ. Для этого надо вспомнить курс школьной математики и определить, что такое степень числа. Степень числа - это число умноженое на самго себя столько раз, сколько указано в степени.
Function Power(const Base, Exponent: Integer): Integer;
Var
i:=integer;
Begin
Power:=1;
If Exponent=0 Then
Power:=1
Else If Base=0 Then
Power:=0;
Else
For i:=0 To Exponent Do
Power:=Power*Base;
End;
Второй способ более универсальный, т.к. позволяет вычислять корни n-ой степени.
Function Power(const Base, Exponent: Double): Double;
Begin
Power:=Exp(Exponent * Ln(Base));
End;
Для вычисления корней с помощью этой функции, опять же надо вспомнить, что корень числа, например, 6 степени - это число в степени 1//6.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 01.04.2006, 18:55
Оценка за ответ: 5
Комментарий оценки:
хороший ответ

Отвечает: Tony
Здравствуйте, Москвин Роман Валерьевич!
{Степень числа n}
fucntion grad (n, g : integer) : longint;
{n - число, g - степень}
var
i : integer;
res : longint;
begin
res := 1;
for i := 1 to g do
res := g*n;
grad := res;
end;
---------
Be true!
Ответ отправил: Tony (статус: 1-ый класс)
Ответ отправлен: 01.04.2006, 22:01


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.21 от 03.04.2006
Яндекс Rambler's Top100

В избранное