Нельзя преобразовать тип real к integer с функцией синуса
Условие задачи: Определить количество тех членов последовательности Ak=SIN(K`2+C), K=1,2,….,10, которые удовлетворяют условию 0≤AK≤1/2.
var
K : array [1..10] of real;
C : real;
SUM : integer;
a : real;
begin
for var i := 1 to 10 do
begin
read(K[i]);
read(C);
a := Sin((power(K[i],2))+C);
if a >= 0 and a <= 0.5 then
SUM += 1
end;
writeln(SUM)
end.
Не могу понять откуда берётся этот integer, который я нигде не объявляю. Что не так с этим кодом?
Ответы (2 шт):
Нужно просто добавить скобки в условии
if (a >= 0) and (a <= 0.5) then
Ошибка происходит при попытке вычислить выражение if'а a >= 0 and a <= 0.5
Порядок действий слева направо:
>=and<=
После первого действия получаем результат типа Boolean
Дальше идёт попытка вычислить and между булевым результатом и a.
В pascal оператор and имеет два разных действия:
- между двумя
Boolean- логическое «И» - между целочисленными типами - побитовое «И».
Так как a - не Boolean, то идет попытка применить побитовое «И». Boolean легко преобразуется в Integer, а вот при попытке преобразовать a к Integer получаем ошибку из заголовка.
Решение - явно задать порядок действий правильной расстановкой скобок: (a >= 0) and (a <= 0.5)