// PascalABC.NET 3.2, сборка 1425 от 22.04.2017 // Внимание! Если программа не работает, обновите версию!
begin var a,b,h,fi:real; Write('Укажите границы интервала табуляции и шаг: '); Read(a,b,h); var k:=0; fi:=a; while fi<=b+0.1*h do begin if sin(fi)<0 then k+=1; fi+=h end; Writeln('Отрицательных значений- ',k) end.
Пример Укажите границы интервала табуляции и шаг: -6 5 0.2 Отрицательных значений- 25
Вариант для большого количества промежуточных точек, снижающий влияние накапливающейся из-за возможной неточности представления вещественных чисел, погрешности:
// PascalABC.NET 3.2, сборка 1425 от 22.04.2017 // Внимание! Если программа не работает, обновите версию!
begin var a,b,h,fi:real; Write('Укажите границы интервала табуляции и шаг: '); Read(a,b,h); var n:=Trunc((b-a)/h)+1; var k:=0; for var i:=1 to n do begin fi:=a+h*(i-1); Println(fi,sin(fi)); if sin(fi)<0 then k+=1 end; Writeln('Отрицательных значений- ',k) end.
Var a,b,h,fi,y:real; k,i:integer; begin writeln('a, b, h:'); readln(a,b,h); k:=0; fi:=a-h; for i:=1 to round((b-a)/h)+1 do begin fi:=fi+h; y:=sin(fi); if y<0 then k:=k+1; writeln(fi:4:1,' ',y:5:3); end; writeln('k = ',k); end.
for (i=0;i<n;i++)
{
вывод k
}
вывод реализуй через case, глянь примеры в гугельме