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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Выполнение программы простой структуры
cruising
сообщение 11.04.2010 22:28
Сообщение #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 - 12.04.2010 3:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 12.04.2010 3:55
Сообщение #2


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

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

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


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

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


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


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


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

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

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


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

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

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

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cruising
сообщение 12.04.2010 15:42
Сообщение #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 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 12.04.2010 15:50
Сообщение #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 
 К началу страницы 
+ Ответить 
cruising
сообщение 12.04.2010 15:59
Сообщение #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 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 12.04.2010 16:03
Сообщение #7


Гуру
*****

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

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


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

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


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

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

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


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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
cruising
сообщение 12.04.2010 16:21
Сообщение #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 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 12.04.2010 17:02
Сообщение #10


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

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

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


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


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





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

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


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

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

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


Гуру
*****

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

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


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

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





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

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


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

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

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

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


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

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

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


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

Плохо.

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

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

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


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





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

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


TarasBer, ну да так то, руки дойдут, разбирусь как-нибудь, спасибо зо то что, хотя бы попытался мне помочь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 25.04.2010 13:53
Сообщение #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... в паскале я мало грамотен, помогите, а?
 К началу страницы 
+ Ответить 
volvo
сообщение 25.04.2010 14:05
Сообщение #17


Гость






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


Гость






В блок схеме я писал в том месте ...Аh[1,n-1]
 К началу страницы 
+ Ответить 
Tau
сообщение 30.05.2010 15:16
Сообщение #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
 К началу страницы 
+ Ответить 
volvo
сообщение 30.05.2010 15:34
Сообщение #20


Гость






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

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

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

 



- Текстовая версия 18.07.2025 4:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"