Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите с программой в паскале (http://www.tehnari.ru/f41/t48303/)

JCHacker 02.03.2011 21:21

Помогите с программой в паскале
 
Ссылка удалена
program A2;
var a,b,s,p:real;
begin
writeln ('vvedite p');
readln(p);
writeln('vvedite a');
readln(a);
writeln ('vvedite b');
readln(b);
if (p<=2.5) and (p<a) then
s:=(sqr(a)-p)/(b*(ln(b+p)/ln(2))
else if (p<4) and (p<=b) then
s:=(3.51*sqrt(p))/(a-1)
else writeln ('nevernoe uslovye');
writeln ('s=',s);
readln
end.

выдает ошибку else if (p<4) and (p<=b) then

Vladimir_S 02.03.2011 21:37

Цитата:

Сообщение от JCHacker (Сообщение 477644)
выдает ошибку else if (p<4) and (p<=b) then

Правильно выдает - потому что в предыдущей строке не хватает закрывающей скобки.
А еще у Вас неправильно заданы неравенства
(p<=2.5) and (p<a)
и
(p<4) and (p<=b)
В обеих строках неравенства в ПЕРВЫХ скобках должны быть обратными.

JCHacker 02.03.2011 21:44

Цитата:

Сообщение от Vladimir_S (Сообщение 477664)
Правильно выдает - потому что в предыдущей строке не хватает закрывающей скобки.
А еще у Вас неправильно заданы неравенства
(p<=2.5) and (p<a)
и
(p<4) and (p<=b)
В обеих строках неравенства в ПЕРВЫХ скобках должны быть обратными.

если так
(p<=2.5) and (p<a)
и
(p>4) and (p>=b)
то получается то же самое
а может ли так
(p>=2.5) and (p<a)
и
(p>4) and (p<=b)

Vladimir_S 02.03.2011 22:06

Цитата:

Сообщение от JCHacker (Сообщение 477679)
а может ли так
(p>=2.5) and (p<a)
и
(p>4) and (p<=b)

Вот именно ТАК! И только ТАК!
А вообще - в математике следует не гадать на кофейной гуще, а разобраться.
Двойное неравенство
2.5 ≤ p < a
читается, как "p больше или равно 2.5, но меньше а". В Паскале двойные неравенства не предусмотрены, поэтому условия нужно задать порознь и соединить их логическим отношением "и" ("and"). При этом, если мы меняем местами члены неравенства, то отношение их друг к другу должно остаться тем же, т.е. на кого из них "смотрело" острие знака "<", "≤", ">" или "≥", на того и должно смотреть, так же, как и "раструб". Поэтому указанное неравенство записываем так:
(p ≥ 2.5) and (p < a).

JCHacker 02.03.2011 22:13

все равно получается та же ошибка
 
Цитата:

Сообщение от Vladimir_S (Сообщение 477702)
Вот именно ТАК! И только ТАК!
А вообще - в математике следует не гадать на кофейной гуще, а разобраться.
Двойное неравенство
2.5 ≤ p < a
читается, как "p больше или равно 2.5, но меньше а". В Паскале двойные неравенства не предусмотрены, поэтому условия нужно задать порознь и соединить их логическим отношением "и" ("and"). При этом, если мы меняем местами члены неравенства, то отношение их друг к другу должно остаться тем же, т.е. на кого из них "смотрело" острие знака "<", "≤", ">" или "≥", на того и должно смотреть, так же, как и "раструб". Поэтому указанное неравенство записываем так:
(p ≥ 2.5) and (p < a).

если я делаю так
program A2;
var a,b,s,p:real;
begin
writeln ('vvedite p');
readln(p);
writeln('vvedite a');
readln(a);
writeln ('vvedite b');
readln(b);
if (p>=2.5) and (p<a) then
s:=(sqr(a)-p)/(b*(ln(b+p)/ln(2))
else if (p>4) and (p<=b) then
s:=(3.51*sqrt(p))/(a-1)
else writeln ('nevernoe uslovye');
writeln ('s=',s);
readln
end.
то все равно получается та же ошибка

Vladimir_S 02.03.2011 22:32

Цитата:

Сообщение от JCHacker (Сообщение 477709)
то все равно получается та же ошибка

Дорогой товарищ!
Может быть, Вы всё-таки соблаговолите ВНИМАТЕЛЬНО прочитать то, что я написал в #2? А написано там следующее - ладно уж, для особо рассеянных повторю:
1. В программе ошибка - не хватает закрывающей скобки в строке
s:=(sqr(a)-p)/(b*(ln(b+p)/ln(2))
Отсюда и ошибка.
2. Неправильно записаны неравенства. Это - дополнительное замечание, никакого отношения к ошибке не имеющее. Просто если не исправить, то программа будет работать неправильно.
Пункт первый Вы проигнорировали - так чего Вы от меня хотите?


Часовой пояс GMT +4, время: 18:11.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.