IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Выполнение программы простой структуры
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Помогите пожалуйста разобраться, задание на рисунке, вот что у меня получилось
Var x,x1,y,y1,y2:real;T:Boolean;
Begin
Writeln('введите число для вычисления выражения1');
Read(x);
Writeln('Результат задания а');
If x>0 then writeln('')else
Begin
y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));
Writeln ('при х=',x:6:3,' y=',y:6:3);
y1:=abs(y);
Writeln('Абсолютное значение y1=', y1:6:3);
y2:=sqr(y);
Writeln('Квадрат у=',y2:6:3);
End;
Writeln('Введите координаты точки');
Readln(x1,y1);
T:=(sqr(x1)+sqr(y1)<=1);
Writeln('Результат задания б:',t);
End.


Что мне нужно написать в строке if?Прикрепленное изображение


М
Тэги!!
Правила Форума, п.5, и правила раздела задачи, п.2.
Lapp



Сообщение отредактировано: Lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(cruising @ 11.04.2010 23:28) *
If x>0 then writeln('')else

...
Что мне нужно написать в строке if?
А зачем там что-то писать? Она вообще не нужна. Я не знаю, что у вас там подразумевается под "системой тестов", но твое данное выражение вычислимо всегда, поэтому никаких ограничений на x вообще не нужно. Можешь вывести фразу типа: "выражение ... определено при любом значении аргумента x".


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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Или, может, имются в виду вычислительные возможности компьютера?..

Вы имели в виду ограничения стандартных вещественных типов? А то возможности компьютера по умножению чисел - они значительно превосходят то, что может понадобиться обычному пользователю.

> y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));

Такой записью вы себя ограничиваете. Возводить в целую степень и извлекать нечётные корни можно и из отрицательных чисел. И из нуля.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Если я убираю строку с оператором if, запускаю программу, вставляю числло, у меня выдает: ошибка! вещественное деление на 0. А когда в формуле y:=exp(1/3*ln(x-x*x))+exp(5*ln(x)) меняю минус на плюс y:=exp(1/3*ln(x+x*x))+exp(5*ln(x)), всё считает верно, а с минусом ни как не хочет работать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Для извлечения кубического корня надо разбирать два случая (больше нуля или меньше). Даже три.


function Root3(e: extended): extended;
begin
if e = 0 then Root3 := 0
else if e > 0 then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Цитата(TarasBer @ 12.04.2010 15:50) *

Для извлечения кубического корня надо разбирать два случая (больше нуля или меньше). Даже три.


function Root3(e: extended): extended;
begin
if e = 0 then Root3 := 0
else if e > 0 then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;



После function выдаёт ошибка! ожидался оператор
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
После function выдаёт ошибка! ожидался оператор

Наверняка ошибка до, а не после. Проверь, стоит ли ; после оператора, стоящего перед function
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Мой код надо вставить перед первым begin.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Цитата(TarasBer @ 12.04.2010 16:03) *

Мой код надо вставить перед первым begin.

вот что получилось, но сейчас выдает ошибка: неизвестное имя типа extended
Var x,x1,y,y1,y2:real;T:Boolean;
function Root3(e: extended): extended;
begin
if e = 0 then Root3 := 0
else if e > 0 then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;
Begin
Writeln('введите число для вычисления выражения1');
Read(x);
Writeln('Результат задания а');
Begin
y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));
Writeln ('при х=',x:6:3,' y=',y:6:3);
y1:=abs(y);
Writeln('Абсолютное значение y1=', y1:6:3);
y2:=sqr(y);
Writeln('Квадрат у=',y2:6:3);
End;
Writeln('Введите координаты точки');
Readln(x1,y1);
T:=(sqr(x1)+sqr(y1)<=1);
Writeln('Результат задания б:',t);
End.


М
Я не понимаю - сколько раз нужно повторить? Тэги!!
В след. раз закрою тему.
Lapp

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


1. Вы эту функцию вставили в код, но никак не используете.
2. В Турбо Паскале по умолчанию пользоваться типом extended нельзя. Options->Compiler, там ищете галочку у надписи что-то вроде "8087", справа снизу окна где-то, ставите туда галочку, убираете галочку с "Emulation", как-то так.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Цитата(TarasBer @ 12.04.2010 17:02) *

1. Вы эту функцию вставили в код, но никак не используете.
2. В Турбо Паскале по умолчанию пользоваться типом extended нельзя. Options->Compiler, там ищете галочку у надписи что-то вроде "8087", справа снизу окна где-то, ставите туда галочку, убираете галочку с "Emulation", как-то так.

да я не в турбопаскале делаю, а в pascal abc, может в этом ещё причина
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
да я не в турбопаскале делаю, а в pascal abc, может в этом ещё причина

Да.
Неужели трудно догадаться extended поменять на real?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


Цитата(Ozzя @ 12.04.2010 17:55) *

Да.
Неужели трудно догадаться extended поменять на real?

Да я не волоку вообще в этом, я заочник, разбираться надо долго с этим, времени нет!
Поменял extended на real, всё равно ошибка: вещественное деление на 0, что ещё может быть?

Добавлено через 2 мин.
Главное когда под корнем минус меняю на плюс, всё прекрасно работает, а с минусом ошибка и всё тут
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> Да я не волоку вообще в этом, я заочник, разбираться надо долго с этим, времени нет!

Плохо.

> Главное когда под корнем минус меняю на плюс, всё прекрасно работает, а с минусом ошибка и всё тут

Да потому что ты тупо добавил в код новую функцию, но ваще её не используешь, ты считаешь по-старому (y:=exp(1/3*ln(x-x*x))+exp(5*ln(x));). Программа по-прежнему пытается делать то, что тут написано, то есть взять логарифм от отрицательного числа (ты, надеюсь, в курсе, что у отрицательного числа нельзя взять вещественный логарифм?).

Как использовать функцию - вообще интуитивно очевидно должно быть, но раз ты не "волочешь" и не хочешь разбираться, то толку тебе помогать.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15





Группа: Пользователи
Сообщений: 7
Пол: Мужской
Реальное имя: Иван

Репутация: -  0  +


TarasBer, ну да так то, руки дойдут, разбирусь как-нибудь, спасибо зо то что, хотя бы попытался мне помочь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






program khorolets8;
var
ah: array[1..10,1..10] of real;
i,j,m,n,s: integer;
begin
writeln('Vod m,n'); readln(m,n); writeln('Vod matrix');
for i:=1 to m do
for j:=1 to n do read(ah[i,j]);
s:=0;
for i:=1 to m do
for j:=1 to n do
IF (ah[i,j]>0)and(ah[i,j]<ah[j-1])
then s:=s+ah[i,j];
writeln(' ':4,'s=',s:3);
end.


выбивает 26ой error, ошибка в строчке с if... в паскале я мало грамотен, помогите, а?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Ah - двумерный массив, значит для обращения к нему требуется 2 индекса. В той строчке везде по два, как положено, но последнее обращение - с одним индексом. Куда второй потерялся?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






В блок схеме я писал в том месте ...Аh[1,n-1]
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






Цитата(TarasBer @ 12.04.2010 15:50) *

Для извлечения кубического корня надо разбирать два случая (больше нуля или меньше). Даже три.


function Root3(e: extended): extended;
begin
if e = 0 then Root3 := 0
else if e > 0 then Root3 := exp(1/3 * ln(e))
else Root3 := -exp(1/3 * ln(-e));
end;




По правилам структурирования программ, функция должна иметь один выход, а у вас 3. nea.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гость






Цитата
функция должна иметь один выход, а у вас 3
Научитесь сначала читать код, потом возьметесь за критику. Где 3 выхода? Я вижу только один выход из подпрограммы. Перед последним End-ом. Все остальное - не более чем запоминание результата, который функция может вернуть (а может и НЕ вернуть, как повезет).

Кстати, ссылку на "правила структурирования программ" можно получить? (с указанием автора, желательно - не Васи Пупкина)... И заодно объяснение, чем подобная функция нарушает правила структурирования... Иначе - все, что я вижу в этом посте - это поднятие старой темы, причем необоснованное. Если ответа не последует в течении 12 часов - пост №18 будет просто удален. Как и все последующие.
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.04.2024 6:42
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name