Допомога - Пошук - Користувачі - Календар
Помогите с Паскалем
XJedi FORUM: Online lightsaber fighting game > Всяка всячина > Кантіна > Web, Hard & Soft
Malfurion
FPC компилятор, не хочет компилировать.

Помогите!!!


program srs6_17a;
var b,p,с,a,x,y,z,q:real;
begin
c=1.89;
a=4;
y:=0.1;
while y<=2.5
      do
        begin
             if (y=0.6) or (y=1.5) or (y=1.85) or (y=2.5)
                then
                    begin
                     x:=(cos(y-c)*(cos(y-c))+ln(c))/(sin(y-c));
                     if x<y
                        then b:=(ln(abs(x+1.45*y)))/(4.35*(sin(x*y)*sin(x*y)))
                        else b:=1.35*((sin(x)/cos(x))*(sin(x)/cos(x)))+sqrt(abs(x-y));
                     p:=0.3*sin(a)*sin(a)+cos(b)*cos(b);
                     z:=p+(0.5*b*b*a);
                     writeln('if y=',y:1:1,', z=',z:1:3);
                     y:=y+0.05;
                     end
                else y:=y+0.05
        end
readln;
end.




Nikooz
c=1.89;
a=4;

c:=1.89;
a:=4.0;
Malfurion
Ноль на массу

Реал может жить и без точки



Маленькие ошибки вроде двоеточий и точек с запятой не пишите, я их исправил.

Не могу понять почему компилировать не хочет


По-шагово тоже не дает пробежать
Nikooz
Выложи лог постройки - список ошибок. У меня скомпилировать нечем, чтоб проверить.

(Swin @ 18.12.2012, 1:13) *
Реал может жить и без точки
С точкой корректнее. И машина не во всех случая правильно воспринимает без точки.



program srs6_17a;
var a, b, c, p, x, y, z : real;
begin
c:=1.89;
a:=4.0;
y:=0.1;
while (y <= 2.5)
      do
        begin
             if ((y=0.6) or (y=1.5) or (y=1.85) or (y=2.5))
                then
                    begin
                     x:=(cos(y-c)*(cos(y-c))+ln(c))/(sin(y-c));
                     if x<y
                        then b:=(ln(abs(x+1.45*y)))/(4.35*(sin(x*y)*sin(x*y)))
                        else b:=1.35*((sin(x)/cos(x))*(sin(x)/cos(x)))+sqrt(abs(x-y));
                     p:=0.3*sin(a)*sin(a)+cos(b)*cos(b);
                     z:=p+(0.5*b*b*a);
                     writeln('if y=',y:1:1,', z=',z:1:3);
                     y:=y+0.05;
                     end
                else y:=y+0.05;
        end;
readln();
end.

Куча мелких ошибок... Скомпилировал прогу.
Malfurion
Все спасибо, дальше сам=)


if ((y=0.6) or (y=1.5) or (y=1.85) or (y=2.5))
then
...
else y:=y+0.05


он не вылазит из этого.

Возможна ли ошибка в параметрах Ифа?
Nikooz
Сделай вывод на экран значений после каждого действия. Так поймешь, где не правильно работает программа.
x:=(cos(y-c)*(cos(y-c))+ln(c))/(sin(y-c));
writeln('x = ', x);


Например, такие)
Malfurion
Протрассировал.

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


Решил ради интереса поменять местами Then и Else

Сработало... ПРавда выдал мне ВСЕ значения игрека
Nikooz
Попробуй взять в скобки мб...

                     if (x < y)
                        then b:=((ln(abs(x+1.45*y)))/(4.35*(sin(x*y)*sin(x*y))))
                        else b:=(1.35*((sin(x)/cos(x))*(sin(x)/cos(x)))+sqrt(abs(x-y)));
Вряд ли чем-то поможет, правда... Завтра стукни в аську, мб придумаю что-то.
Malfurion
Ладно, закрывай тему. Если ничего не родится за ночь, напишу
.
Invision Power Board © 2001-2025 IPS , Inc.