![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Mambakremen |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Задание
Найти сумму Y=F1(x)/F2(x), где a<=x<=b, x менятется с шагом h=c. Задано F1(x)=exp((1/5)*ln(6*x-x*x)), F2(x)=sin(exp(2*x)*ln(x))-cos(x), a=3.5, b=6.5, c=0.2.(Сам писал функции может ошибся ![]() Цикл for - ошибка 207 program summa; Цикл repeat - ошибка 207 program summa; |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Добавь строчку:
for i:=1 to n do , и запусти программу. А потом подумай, почему при таком значении аргумента Ln программа вылетает. И исправляй ![]() |
Mambakremen |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Добавь строчку: for i:=1 to n do , и запусти программу. А потом подумай, почему при таком значении аргумента Ln программа вылетает. И исправляй ![]() Блин, добавил, та же дрянь 207 и все, извини, но не пойму... ![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Я не сказал "добавь и эта ошибка уйдет". Я сказал "добавь и посмотри, что печатается, это поможет решить проблему". Это разные вещи. Ну, хорошо, если тебе лень самому посмотреть, я тебе покажу, что выведет твоя программа:
Summa funrcuu y=F1(x)/F2(x) , и после этого будет "Биг бада бум". Почему - еще не понятно? Потому что ты вызываешь Ln(отрицательное_число). Этого делать нельзя. Это понятно, почему? А ведь написано в FAQ-е ( Общие вопросы по математике. ) : Цитата Способ x^a = Exp(a*Ln(x)) не подходит, т.к. для вычисления по этой формуле основание степени x должно быть положительным Придется тебе возводить в степень по другому... |
Mambakremen |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Ребята, извините, не знаю как по другому...
![]() Какие ещё способы? Из FAQ не пойму этих строк... Код Function minusOnePower(n: Integer): Integer; Begin minusOnePower := (1 - 2*Byte(Odd(n))); End; |
TarasBer |
![]()
Сообщение
#6
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> Из FAQ не пойму этих строк...
F1 нажми, там всё написано и про функцию Odd и про приведение к byte Только вот в какой-то версии ФПЦ разве True не приведётся к 255? Добавлено через 1 мин. По делу - чтобы взять корень пятой степени, надо разобрать три случая: икс меньше нуля, равен ему, или больше него. Каждый из них обрабатывать надо немного по-своему. -------------------- |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
У нас не FAQ по FPC. Огромное количество программ оттуда в FPC вообще не компилируются.
Это было первое. Второе: Mambakremen, каким боком тебе вообще нужна функция minusOnePower? Она возводит минус единицу в степень, тебе надо возвести отрицательное число в степень. Разницу видишь? Ну, хорошо, совсем на пальцах: у тебя есть число X, тебе его надо возвести в степень 1/A (извлечь корень). Твои действия? Не надо никаких программ, ты просто скажи, на словах, что будешь делать, если тебе надо извлечь корень четной степени из числа? Проверишь на отрицательность, так? Если число под корнем отрицательное - ошибка. Если положительное - то все прекрасно, возводишь в степень через Exp(a*Ln(x)). А теперь - что будешь делать, если надо извлечь корень НЕчетной степени? Проверил число на отрицательность, оно отрицательное, дальше что? Ошибки-то нет, вся разница - в том, что тебе надо в случае корня нечетной степени запомнить знак числа, потом вычислить корень из его модуля, и результату присвоить знак исходного выражения: было число (-27), степень (1/3) -> число отрицательное, корень нечетной степени, запоминаем знак. Вычисляем (Abs(-27))1/3 = 3, и добавляем тот знак, который запомнили. Ответ = (-3). Что не так? Теперь - что тебе делать. Надо написать функцию: function GetNthRoot(X: real; Power: integer): real; , и при вычислениях вызывать эту функцию. За тебя этого делать я не буду. Нужно - пиши. Не нужно - лови RTE 207 дальше. |
Mambakremen |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Спасибо
![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата Только вот в какой-то версии ФПЦ разве True не приведётся к 255? Кстати, таки не приведется:Цитата(rtl.pdf (стр. 1080)) 37.9.144 Odd Synopsis: Is a value odd or even ? Declaration: function odd(l: LongInt): Boolean Visibility: default Description: Odd returns True if X is odd, or False otherwise. , то есть, как видишь, все варианты этой функции вернут именно значение типа Boolean. А теперь смотрим сюда: Цитата(ref.pdf (стр.24)) Table 3.3: Boolean types Что гарантирует: результат Ord(Boolean) будет либо 0, либо 1. А с какой стати приведение Byte(1) может дать 255 - непонятно совершенно. |
Mambakremen |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 12 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Решил не мучатся с функцией, простой усл. оператор вот, что получилось.
writeln('Summa funrcuu y=F1(x)/F2(x)'); |
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Неправда. Число в нулевой степени - не ноль, а единица. Это во-первых. Во-вторых, не надо вещественное число сравнивать с 0, лучше сделать так:
t := (6*x-x*x); |
TarasBer |
![]()
Сообщение
#12
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Возводим не в нулевую степень, а в 1/5.
0^(1/5)=0 Ноль должен быть, всё правильно там написано. И почему с нулём в данном случае нельзя сравнивать? -------------------- |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Вещественное с нулем нельзя сравнивать НИКОГДА. Равно как и с другими вещественными числами. Только больше/меньше/не_равно. Я бы вообще запретил для вещественных типов операцию сравнения, по крайней мере сделал бы предупреждение при попытке применить операцию "=" к операндам таких типов. Количество глюков (причем, далеко не всегда безобидных) в программах резко бы поубавилось.
Цитата всё правильно там написано. В таком случае, это делается еще проще:var Flag: Integer; |
TarasBer |
![]()
Сообщение
#14
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Что случится в этом примере из-за сравнения с нулём? Что плохого здесь может сделать случайно вылезший бит погрешности?
-------------------- |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 2:19 |