В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География
BandiMatrix
BandiMatrix
13.03.2023 20:44 •  Информатика

Программирование циклических алгоритмов. вычислить количество отрицательных значений sin(fi)на интервале [а,b] с заданным шагом

Показать ответ
Ответ:
daeinam095
daeinam095
06.10.2020 04:23
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.

Пример:
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 - малое число.
0,0(0 оценок)
Ответ:
cnejniyrayp08ixm
cnejniyrayp08ixm
06.10.2020 04:23
// 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.
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота