Ошибка с синусом! Помогите пожалуйста!program calculator; uses crt; label...

0 голосов
67 просмотров

Ошибка с синусом! Помогите пожалуйста!
program calculator;
uses crt;
label beg,znak,mem,okr;
var a,b,m:real;i,y,r,n:integer;c,o,f,h:char;cos,sin,tan:string;
begin
okr:writeln('Округлять ответ? Если да введите 2, иначе 1.');
readln(o);
while not((o='1')or(o='2'))do begin
writeln('Неправильное значение. Введите правильное.');
readln(o);
end;
if o='2'then begin
writeln('До скольки знаков после запятой округлять?');
readln(n);
end;
if c='n' then goto znak;
mem:writeln('|//////////////ПАМЯТКА:Cначала вводите первое число,потом знак,потом по необходимости второе число(Калькулятор зациклен,можно вводить знак и второе число много раз),Всегда читайте заданный программой вопрос прежде чем вводить!');
writeln('|Доступные знаки:+,-,*,/,cos,sin,tan; а также:1-корень,2-степень,3-остаток от деления,c-поменять знак числа,n-опции округления результата,r-округление числа,t-отбрасывание дробной части,a-ввод первого числа заново,b-вызвать памятку,0-конец программы:ПАМЯТКА\\\\\\\\\\\\\\|');
if c='b' then goto znak;
beg:writeln('Первое число?');
readln(a);
znak:
for i:=0 to 999999999 do begin
writeln('Знак?');
readln(c);
if c='n' then goto okr;
if c='0' then break;
if c='a' then goto beg;
if c='b' then goto mem;
while not(c in['+','-','*','/','1','2','3','r','t','c','sin','cos','tan'])do begin
writeln('Знак не поддерживается! Введите правильный знак!');
readln(c);
end;
if c='c'then a:=-a;
if c='r'then a:=round(a);
if c='t'then a:=trunc(a);
if c in['1','2']then begin
if c='2'then begin
writeln('В какую степень возвеcти желаете?');
readln(m);
a:=power(a,m);
end
else a:=sqrt(a)
end;
if c in['sin','cos','tan']then begin
writeln('Радианы(r)или градусы(g)? Введите пожалуйста');
readln(h);
if c='sin' then begin
if h='r' then a:=sin(a);
if h='g' then a:=sin(a*pi/180)
end;
if c='cos' then begin
if h='r' then a:=cos(a);
if h='g' then a:=cos(a*pi/180)
end;
if c='tan' then begin
if h='r' then a:=tan(a);
if h='g' then a:=tan(a*pi/180)
end;
end;
if not(c in['r','t','c','sin','cos','tan','1','2'])then begin
writeln('Второе число?');
readln(b);
if c='3'then begin
while b<>trunc(b)do begin
writeln('Второе число должно быть целым! Введите заново!');
readln(b)
end;
if a<>trunc(a)then begin
writeln('Округлить a(введите r) или оставить целую часть от a(введите t)?');
readln(f);
case f of
'r':a:=round(a);
't':a:=trunc(a);
end;
end;
r:=trunc(b);
y:=trunc(a);
y:=y mod r;
a:=y
end;
case c of
'+':a:=a+b;
'-':a:=a-b;
'*':a:=a*b;
'/':a:=a/b;
end;
end;
writeln('[{<:ОТВЕТ:>}]');
case o of
'2':writeln('=',a:0:n);
'1':writeln('=',a);
end;
end;
end.

Паскаль ABC.
В строке 49(if h='r' then a:={МЕСТО ОШИБКИ}sin(a);) выдает ошибку:Ожидалось имя процедуры или функции. Чем ему синус не нравится? Помогите пожалуйста!


Информатика (15 баллов) | 67 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Могу Вас обрадовать (или огорчить): программе не понравится также cos(a); и tan(a);
Вы сначала объявляете посредством
var a,b,m:real;i,y,r,n:integer;c,o,f,h:char;cos,sin,tan:string;
имена sin, cos, tan, как строки, а потом пытаетесь обратиться к ним, как к функциям, употребляя запись объявленных переменных в формате вызова функций с параметром.

(142k баллов)
0

Спасибо большое! Просто наверное меня переклинило, надо же просто с сделать string? Конечно глупая ошибка, но я только начал в школе паскаль проходить:)