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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 23:32   #1
lilywka
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 31
Сообщение процедурный тип

Задан массив линейных функций, найти уравнение прямой, для которой интеграл на отрезке [1, 10] приобретает наибольшее значение. Функции подобрать самостоятельно, 4 шт

может мне кто то помочь уменьшить программу? очень сильно надо. иначе препод придерется и все равно придется уменьшать ее.

Код HTML:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  Windows;

type

  TFunction = function(x: Integer): Real;    // Functional type definition
  TFunctionArray = array of TFunction;       // Functional array definition

var

  i : Integer;
  functionArray : TFunctionArray;

  //----------------------Linear functions----------------------------
  function linearFunction1(x: Integer): Real;
  begin
    linearFunction1 := 4*x+3;      //standart kx+b function
  end;

  function linearFunction2(x: Integer): Real;
  begin
    linearFunction2 := 2*x+7;      //standart kx+b function
  end;

  function linearFunction3(x: Integer): Real;
  begin
    linearFunction3 := 2*x+2;      //standart kx+b function
  end;

  function linearFunction4(x: Integer): Real;
  begin
    linearFunction4 := 5*x+4;      //standart kx+b function
  end;

  //-----------------------Endof Linear functions--------------------------

  procedure initLinearFunctionsArray(var functionArray :TFunctionArray);
  begin
    setLength(functionArray,4);
    functionArray[0] := linearFunction1;
    functionArray[1] := linearFunction2;
    functionArray[2] := linearFunction3;
    functionArray[3] := linearFunction4;
  end;

  function getVectorLength(x1,x2 :integer; y1,y2:real):real;
  begin
    getVectorLength := sqrt(sqr(x2-x1)+sqr(y2-y1));
  end;

  function getIntegral(linearFunction :TFunction):real;
  var
    i :Integer;
    x :array[1..10] of integer;
    y :array[1..10] of real;
    segmentSquare :real;
    totalSquare :real;
    
  begin
    totalSquare := 0;

    for i:=1 to length(x) do            // initialize x and y arrays
    begin
       x[i] := i;
       y[i] := linearFunction(x[i]);    //use linear function to obtain value
    end;

    for i:=1 to length(x)-1 do
    begin
       segmentSquare :=  getVectorLength(x[i],x[i],0,y[i]) * getVectorLength(x[i],x[i+1],0,0);
       totalSquare := totalSquare + segmentSquare;
    end;
    getIntegral := totalSquare;
  end;

  procedure findBiggestIntegral(functionArray :TFunctionArray);
  var
    i :Integer;
    maxIntegral :real;
    maxIntegralIndex :Integer;
  begin
    maxIntegral      := -999;
    maxIntegralIndex := 0;
    for i:=0 to length(functionArray)-1 do
    begin
       if getIntegral(functionArray[i]) > maxIntegral then
       begin
          maxIntegral := getIntegral(functionArray[i]);
          maxIntegralIndex := i+1;
       end;
    end;
    writeln('Maximal integral: ', maxIntegral:3:3,' found at function ', maxIntegralIndex);
  end;  
begin
  initLinearFunctionsArray(functionArray);

  writeln('Function 1 integral: ', getIntegral(functionArray[0]):3:3);
  writeln('Function 2 integral: ', getIntegral(functionArray[1]):3:3);
  writeln('Function 3 integral: ', getIntegral(functionArray[2]):3:3);
  writeln('Function 4 integral: ', getIntegral(functionArray[3]):3:3);

  findBiggestIntegral(functionArray);

  readln;

  { TODO -oUser -cConsole Main : Insert code here }
end.
lilywka вне форума Ответить с цитированием
Старый 02.12.2012, 23:51   #2
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Так, сходу - только наименования. Разве что:
Код:
for i:= 0 to 3 do
  writeln('Function ', i, ' integral: ', getIntegral(functionArray[i]):3:3);
А... сами функции:
Код:
function linearFunction(x, i: Integer): Real;
  begin
    linearFunction := k[i]*x+b[i];      //standart kx+b function
  end;
k,b - массивы.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 02.12.2012 в 23:57.
MihalNik вне форума Ответить с цитированием
Старый 03.12.2012, 00:16   #3
lilywka
Пользователь
 
Регистрация: 14.10.2012
Сообщений: 31
По умолчанию

спасибо)))
lilywka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедурный тип Sweet-_-Orange Помощь студентам 3 01.02.2012 21:16
Процедурный тип. Интегралы. 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
Процедурный тип в паскале tanyhaftv Помощь студентам 0 24.03.2010 09:07