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.
// 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 i,x1,x2:integer; begin for i:=10 to 99 do begin x1:=i mod 10; x2:=i div 10; if (sqr(x1)+sqr(x2)) mod 13=0 then writeln(i); end; end.
//1б Var i,x1,x2:integer; begin for i:=10 to 99 do begin x1:=i mod 10; x2:=i div 10; if x1+x2+sqr(x1+x2)=i then writeln(i); end; end.
//2 Var i,n,a,k1,k2:integer; begin readln(n); for i:=1 to n do begin readln(a); if a<1985 then k1:=k1+1; if a>1990 then k2:=k2+1; end; writeln('Родившиеся до 1985:',k1); writeln('Родившиеся после 1990:',k2); end.
Var i,x1,x2:integer; begin for i:=10 to 99 do begin x1:=i mod 10; x2:=i div 10; if (sqr(x1)+sqr(x2)) mod 13=0 then writeln(i); end; end.
//1б Var i,x1,x2:integer; begin for i:=10 to 99 do begin x1:=i mod 10; x2:=i div 10; if x1+x2+sqr(x1+x2)=i then writeln(i); end; end.
//2 Var i,n,a,k1,k2:integer; begin readln(n); for i:=1 to n do begin readln(a); if a<1985 then k1:=k1+1; if a>1990 then k2:=k2+1; end; writeln('Родившиеся до 1985:',k1); writeln('Родившиеся после 1990:',k2); 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 - малое число.