• Найти значение функции y=√(x-1)/(sin 1/x)в промежутке [1.2;2] с шагом 0.1

Ответы 3

  • Рассуждали долго, но программа получилась короткой. так всегда и бывает. Конечно, обычно такие рассуждения не приводят и не повторяют - это сделано один раз, чтобы было понятно, что откуда.
  • i:1:1, ') = ', y:1:3 - в языке Паскаль первое число формата - ОБЩЕЕ количество отводимых позиций, второе - число позиций в дробной части.
    • Автор:

      pregomrt6
    • 5 лет назад
    • 0
  •      Как известно, нецелые числа в компьютере далеко не всегда представляются точно, поскольку большую часть их даже теоретически невозможно точно перевести в двоичную систему. Это порождает проблемы при проверках на точное равенство. Например, если мы попробуем перевести в двоичную систему число 0.1, то не сможем этого сделать и в компьютере вместо 0.1 будет храниться число, которое чуть-чуть, но все же меньше. Многократно увеличивая шагами какую-то величину на 0.1 мы все больше и больше будет удаляться от правильного (ожидаемого) значения и при проверка на точное равенство нас неприятно удивит. Поэтому в предыдущем ответе, несмотря на то, что диапазон задавался [1.2;2], проверка делается на 2.1 (можно и на 2.0000001 было делать).     Есть другой способ писать программы для табуляции функций.1) Находим, сколько значений нужно получитьДля этого от конечного значения вычитаем начальное, делим на шаг, берем целую часть результата и увеличиваем на единицу.(2-1.2)/0.1=8, 8+1=9 - именно столько раз выполнится цикл.Да-да, мы делаем традиционный цикл со счетчиком (for), в котором i будет меняться от 0 до 8.2) получим формулу для вычисления значения аргумента.При i=0 значение х(0)=1.2. При i=1 должно получиться x(1)=1.3.Легко найти зависимость: x(i)=1.2+i/10. Можно пожалеть компьютер и переписать это выражение в виде x(i)=(12+i)/10, потому что в первом случае будут операции а) перевод i в real б) сложение двух real в) деление двух real, а во втором - а) сложение двух integer б) перевод в real в) деление двух real и это быстрее.var  i:integer;  x,y:real;begin  for i:=0 to 8 do begin    x:=(12+i)/10;    y:=sqrt(x-1)/sin(1/x);    Writeln(x:3:1,y:10:6)    endend.Результат1.2  0.6041981.3  0.7874301.4  0.9654661.5  1.1435011.6  1.3238771.7  1.5077841.8  1.6958691.9  1.8884862.0  2.085830
    • Автор:

      joanlhv6
    • 5 лет назад
    • 0
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years