// 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.
// Внимание! Если программа не работает, обновите версию!
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.
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.
Пример:
a, b, h:
-0.5 0.5 0.1
-0.5 -0.479
-0.4 -0.389
-0.3 -0.296
-0.2 -0.199
-0.1 -0.100
-0.0 -0.000
0.1 0.100
0.2 0.199
0.3 0.296
0.4 0.389
0.5 0.479
k = 6
PS. Значения, очень близкие к 0, можно не учитывать. В этом случае вместо y<0 можно написать, например, условие abs(y)<eps, где eps - малое число.