Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2012, 20:59   #1
Sweet-_-Orange
Пользователь
 
Регистрация: 10.01.2012
Сообщений: 32
По умолчанию Процедурный тип

Помогите найти ошибку
Определенный массив из 4-х функций на отрезке [1, 10]: y=(x-2)2+1, y=x-cos(2x)2, y=2x-1, y=lnx-x.
Определить методом табулирования имеют ли функции математический экстремум на этом интервале.
Sweet-_-Orange вне форума Ответить с цитированием
Старый 01.02.2012, 21:00   #2
Sweet-_-Orange
Пользователь
 
Регистрация: 10.01.2012
Сообщений: 32
По умолчанию

Код:
uses
  SysUtils,math;

type
  func = function(x:real):real;

const
  Step : real = 1;
  Xmin : real = 1;
  Xmax : real = 10;

var
  Steps : integer;
  mas   : array[1..4] of func;

function func1(x : real):real;
begin
  func1 := power(x-2,2)+1;
end;

function func2(x : real):real;
begin
  func2 := x-cos(power(2*x,2));
end;

function func3(x : real):real;
begin
  func3 := power(2,x)-1;
end;

function func4(x : real):real;
begin
  func4 := ln(x)-x;
end;

function funcName(N : integer):string;
begin
  case N of
    1: funcName := 'y=(x-2)^2+1';
    2: funcName := 'y=x-cos(2x)^2';
    3: funcName := 'y=2x-1';
    4: funcName := 'y=lnx-x';
  end;
end;

procedure Extremum;
var
  i,j            : integer;
  FunUp          : boolean;
  FirstX,SecondX : real;
begin
  for j:=1 to 4 do           //цыкл 4ех фунций
    begin
      if (mas[j](Xmin + Step) - mas[j](Xmin))> 0 then  //направление функии(вверх,вниз)
        FunUp := true
      else
        FunUp := false;

      for i:=1 to Steps - 1 do

        begin
          FirstX := mas[j](Xmin + Step*i);       //значение У в первой точке
          SecondX:= mas[j](Xmin + Step*(i+1));   //значение У во второй точке
          if ((SecondX - FirstX) < 0) and (FunUp) then  //если функия меняет направление вниз
            begin
              Writeln(funcName(j), ' max: x:',(Xmin + Step*i):4:1 ,' y:', FirstX:4:2);
              FunUp := false;
            end
          else if ((SecondX - FirstX) > 0) and not FunUp then    //если функция меняет направление вверх
            begin
              Writeln(funcName(j), ' min: x:',(Xmin + Step*i):4:1 ,' y:', FirstX:4:2);
              FunUp := true;
            end;
        end;
    end;
end;

var
  i : integer;
begin
  WriteLn('Extremums of functions :');
  mas[1] := func1;
  mas[2] := func2;
  mas[3] := func3;
  mas[4] := func4;
  Steps:=Round((Xmax-Xmin)/Step + 1);    //считаем количество шагов
  Extremum;
  Writeln('Press Enter to Exit');
  Readln;
end.

Последний раз редактировалось Sweet-_-Orange; 01.02.2012 в 21:09.
Sweet-_-Orange вне форума Ответить с цитированием
Старый 01.02.2012, 21:00   #3
Sweet-_-Orange
Пользователь
 
Регистрация: 10.01.2012
Сообщений: 32
По умолчанию

у меня выдает только вторую функцию
Sweet-_-Orange вне форума Ответить с цитированием
Старый 01.02.2012, 21:16   #4
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
uses
  SysUtils,math;

type
  func = function(x:real):real; // wtf? Что это и зачем?

const
  Step : real = 0.1;
  Xmin : real = 1;
  Xmax : real = 10;

var  // первый var
  Steps : integer;
  mas   : array[1..4] of func;

function func1(x : real):real;
begin
  func1 := power(x-2,2)+1;
end;

function func2(x : real):real;
begin
  func2 := x-cos(power(2*x,2));
end;

function func3(x : real):real;
begin
  func3 := power(2,x)-1;
end;

function func4(x : real):real;
begin
  func4 := ln(x)-x;
end;

function funcName(N : integer):string;
begin
  case N of
    1: funcName := 'y=(x-2)^2+1';
    2: funcName := 'y=x-cos(2x)^2';
    3: funcName := 'y=2x-1';
    4: funcName := 'y=lnx-x';
  end;
end;

procedure Extremum;
var
  i,j            : integer;
  FunUp          : boolean;
  FirstX,SecondX : real;
begin
  for j:=1 to 4 do           //цыкл 4ех фунций
    begin
      if (mas[j](Xmin + Step) - mas[j](Xmin))> 0 then  //направление функии(вверх,вниз)
        FunUp := true
      else
        FunUp := false;

      for i:=1 to Steps - 1 do

        begin
          FirstX := mas[j](Xmin + Step*i);       //значение У в первой точке
          SecondX:= mas[j](Xmin + Step*(i+1));   //значение У во второй точке
          if ((SecondX - FirstX) < 0) and (FunUp) then  //если функия меняет направление вниз
            begin
              Writeln(funcName(j), ' max: x:',(Xmin + Step*i):4:1 ,' y:', FirstX:4:2);
              FunUp := false;
            end
          else if ((SecondX - FirstX) > 0) and not FunUp then    //если функция меняет направление вверх
            begin
              Writeln(funcName(j), ' min: x:',(Xmin + Step*i):4:1 ,' y:', FirstX:4:2);
              FunUp := true;
            end;
        end;
    end;
end;

var  // второй var... как так то?
  i : integer;
begin
  WriteLn('Extremums of functions :');
  mas[1] := func1;//функция без входных параметров и не объявленный массив
  mas[2] := func2;
  mas[3] := func3;
  mas[4] := func4;
  Steps:=Round((Xmax-Xmin)/Step + 1);    //считаем количество шагов
  Extremum;
  Writeln('Press Enter to Exit');
  Readln;
end.
Цитата:
Сообщение от Sweet-_-Orange
у меня выдает только вторую функцию
Учитывая коментарии в коде, тот факт, что что-то работает - вообще чудо

Update: Даааа, программа рабочая. Но из-за жутко оформленного кода и офигительного числа глобальных переменных, я даже не буду пробовать понять...
Все тривиальное просто

Последний раз редактировалось whatever; 01.02.2012 в 21:26.
whatever вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедурный тип. Интегралы. kuy Паскаль, Turbo Pascal, PascalABC.NET 2 26.11.2011 00:11
Процедурный тип в Delphi <Maria> Помощь студентам 1 14.11.2010 18:03
Процедурный тип в C++Builder sneksnek2006 C++ Builder 4 14.10.2010 10:46
Процедурный Brainfuck tunyash Софт 0 17.06.2010 08:55
Процедурный тип в паскале tanyhaftv Помощь студентам 0 24.03.2010 09:07