Программа с постусловием не правильно считает результат - Pascal

Узнай цену своей работы

Формулировка задачи:

Добрый день! Согласно задания: Разработать алгоритм и программу, имеющих структуру цикла с постусловием и осуществляющих табулирование заданной функции при изменении аргумента x от начального значения x0 с постоянным шагом hx , т.е. x = x0 (hx) xn. Дана сложная функция f(x): f(x)= 2sin^2(Pi/4 – x/2), если - Pi/2<=x<= - Pi/4 (1-cos2x)/sin2x, если - Pi/4<x< - Pi/8 x/(2+cosx), если - Pi/8<=x<= 0 При других значениях x функция f(x) не определена. написал программу. Но почему-то при значениях x0=-1.5, шаге hx=0.5 и конечном значении xn=0 программа считает постоянно по первой формуле. Подскажите пожалуйста что не так. Огромное спасибо.
{************************************************}
{Программа: Tab, лаб.раб. №5, вар.15             }
{Цель:табулирование функции y=f(x) с помощью     }
{     оператора цикла с постусловием.            }
{Описание параметров и переменных:               }
{x - аргумент функции;                           }
{x0,xn - начальное и конечное значения аргумента;}
{hx - шаг изменения аргумента;                   }
{y - значение функции.                           }
{Требуемые подпрограммы: нет.                    }
{Программист: **********                        }
{Дата написания: 07 иая 2016 г.                  }
{************************************************}
Program Tab;
  Var
     hx,x,x0,xn,y:Real;
  Begin {Tab}
     {Ввод и эхо-печать исходных данных}
     Writeln('ВНИМАНИЕ! При x<-Pi/2(-1.5707) и x>0 функция f(x) не определена');
     Write('x0=');
     Read (x0);
     Write('hx=');
     Read (hx);
     Write('xn=');
     Read (xn);
     Writeln('X0=',x0,' HX=',hx,' XN=',xn);
     {Табулирование функции}
     x:=x0;
     repeat {начало цикла}
     if(x<-Pi/2) or (x>0) then
       Writeln('При x=',x:6:4,' функция f(x) не определена')
       else
         begin
          if (x>=-Pi/2) or (x<=-Pi/4) then y:=2*sqr(sin(Pi/4-x/2))
            else if (x>-Pi/4) or (x<-Pi/8) then y:=(1-cos(2*x))/sin(2*x)
              else if (x>=-Pi/8) or (x<=0) then y:=x/(2+cos(x));
          Writeln('X=',x,' Y=',y);{эхо-печать}
         end;
       x:=x+hx
     until x>xn+hx/2 {конец цикла}
End.{Tab}

Решение задачи: «Программа с постусловием не правильно считает результат»

textual
Листинг программы
if (x>=-Pi/2) and (x<=-Pi/4) then

Объяснение кода листинга программы

  1. Условие проверки диапазона значений переменной x:
    • Переменная x должна быть больше либо равна -Pi/2 и одновременно меньше либо равна -Pi/4.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы