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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2016, 21:27   #1
юля123321
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 15
По умолчанию Возвращаемое значение функций не определено

Требуется разработать диалоговую многофайловую программу табулирования функций, алгоритм вычисления которых задаётся отрезком ряда Тейлора. Программа должна обеспечивать выбор функций из числа реализованных (меню), задание расчетных параметров (граница изменения аргумента, количество значений аргумента, количество суммированных членов ряда), вывод таблицы (значения аргумента, функции, погрешности).
Возвращаемое значение функции 'exponenta' не определено
Возвращаемое значение функции 'sinus' не определено
Возвращаемое значение функции 'cosinus' не определено
Возвращаемое значение функции 'arctangens' не определено
Код:
unit func;

interface

var
  a, b: real;   //границы аргумента
  narg: word;   //кол-во значений аргумента
  nadd: word;   //кол-во слагаемых ряда
  m, n: word;//описание формата

procedure input(nadd, narg: word; a, b: real);
function exp(x: real; nadd: word; var err: real): real;
function sin(x: real; nadd: word; var err: real): real;
function cos(x: real; nadd: word; var err: real): real;
function arctg(x: real; nadd: word; var err: real): real;
implementation

procedure input(nadd, narg: word; a, b: real);
begin
  writeln('Введите количество слагаемых ряда');
  readln(nadd);
  writeln('Введите количество значений аргумента');
  readln(narg);
  writeln('Введите нижнюю границу аргумента');
  readln(a);
  writeln('Введите верхнюю границу аргумента');
  readln(b);
end;

function exp(x: real; nadd: word; var err: real): real;
var
  i: word;
  ad: real;
  sum: real;
begin
  sum := 1;
  ad := 1;
  for i := 1 to nadd do
  begin
    ad := ad * x / i;
    sum := sum + ad;
  end;
  err := ad;
  exp := sum;  
end;


function sin(x: real; nadd: word; var err: real): real;
var
  i: word;
  ad: real;
  sum: real;
begin
  sum := x;
  ad := x;
  for i := 1 to nadd do
  begin
    ad := ad * (-1) *  x * x / ((2 * i) * (2 * i + 1));
    sum := sum + ad;
  end;
  err := ad;
  sin := sum;  
end;

function cos(x: real; nadd: word; var err: real): real;
var
  i: word;
  ad: real;
  sum: real;
begin
  sum := 1;
  ad := 1;
  for i := 1 to nadd do
  begin
    ad := ad * (-1) * x * x / ((2 * i) * (2 * i - 1));
    sum := sum + ad;
  end;
  err := ad;
  cos := sum;  
end;

function arctg(x: real; nadd: word; var err: real): real;
var
  i: word;
  ad: real;
  sum: real;
begin
  sum := x;
  ad := x;
  for i := 1 to nadd do
  begin
    ad := ad * (-1) * (2 * i - 1)  * x * x / (2 * i + 1);
    sum := sum + ad;
  end;
  err := ad;
  arctg := sum;  
end;
end.







program main;

uses func;


const
  Smax = 6;

type
  Tstring = array[1..Smax] of string;

const
  str: TString = ('1.input', '2.exp', '3.sin', '4.cos', '5.arctg', '6.exit');

var
  a, b: real;
  nadd: word;
  narg: word;


function menu(s: TString; ns: word): word;
var
  i: word;
  k: word;
begin
  for i := 1 to ns do
    writeln(s[i]);
  writeln('Введите номер пункта');
  readln(k);
  result := k;
end;




function exponenta(var x, y, err: real): real;
var
  i: word;
  nadd, narg: word;
begin
  writeln('        x   ', '       exp   ', '      err   ');
  for i := 1 to narg do
  begin
    x := i;
    y := exp(x, nadd, err);
    writeln(x:12:5, y:12:5, err:12:5);
  end;
end;

function sinus(x, y, err: real): real;
var
  i: word;
  nadd, narg: word; a, b: real;
begin
  writeln('        x   ', '       sin   ', '      err   ');
  for i := 1 to narg do
  begin
    x := a + (b - a) * i / narg;
    y := sin(x, nadd, err);
    writeln(x:12:5, y:12:5, err:12:5);
  end;
end;

function cosinus(x, y, err: real): real;
var
  i: word;
  nadd, narg: word; a, b: real;
begin
  writeln('        x   ', '       cos   ', '      err   ');
  for i := 1 to narg do
  begin
    x := a + (b - a) * i / narg;
    y := cos(x, nadd, err);
    writeln(x:12:5, y:12:5, err:12:5);
  end;
end;

function arctangens(x, y, err: real): real;
var
  i: word;
  nadd, narg: word; a, b: real;
begin
  writeln('        x   ', '       arctg   ', '      err   ');
  for i := 1 to narg do
  begin
    x := a + (b - a) * i / narg;
    y := arctg(x, nadd, err);
    writeln(x:12:5, y:12:5, err:12:5);
  end;
end;

var
  k: word;
  x, y, err: real;

begin
  
  repeat
    k := menu(str, Smax);
    case k of
      1: input(nadd, narg, a, b);
      2: exponenta(x, y, err);
      3: sinus(x, y, err);
      4: cosinus(x, y, err);
      5: arctangens(x, y, err);
      6: exit;
    end;
  until k = Smax;
end.
юля123321 вне форума Ответить с цитированием
Старый 21.12.2016, 21:31   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну так определите для указанных функции возвращаемое значение или сделайте их процедурами.
p51x вне форума Ответить с цитированием
Старый 21.12.2016, 21:32   #3
юля123321
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 15
По умолчанию

ну а как сделать?
юля123321 вне форума Ответить с цитированием
Старый 21.12.2016, 21:41   #4
юля123321
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 15
По умолчанию

Когда я вводила границы, кол-во значений и кол-во членов ряда прямо в функции, всё было нормально. Таблица выводилась.
Например
Код:
function exponenta(x, y, err: real): real;
var
  i: word;
begin
  a := 1;
  b := 1;
  narg := 10;
  nadd := 7;
  writeln('        x   ', '       exp   ', '      err   ');
  for i := 1 to narg do
  begin
    x := i;
    y := exp(x, nadd, err);
    writeln(x:12:5, y:12:5, err:12:5);
  end;
end;
Но по заданию нужно вводить их после запуска программы, поэтому пришлось сделать input. Только не знаю, как их связать теперь между собой
юля123321 вне форума Ответить с цитированием
Старый 21.12.2016, 21:53   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Переименуйте эти 4 функции в процедуры. Вы же их используете, как процедуры, они у вас ничего не возвращают.
Вместо
Код:
function cosinus(x, y, err: real): real;
вот так
Код:
procedure cosinus(x, y, err: real);
type_Oleg вне форума Ответить с цитированием
Старый 21.12.2016, 21:58   #6
юля123321
Пользователь
 
Регистрация: 28.11.2016
Сообщений: 15
По умолчанию

В списке ошибок эта ошибка не появляется, но на экран выводится только одна строчка x exp err
юля123321 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция и возвращаемое значение dmiter Общие вопросы по Java, Java SE, Kotlin 1 17.09.2015 13:10
Массив структур, как возвращаемое значение функции BadProgrammer Общие вопросы C/C++ 1 08.11.2010 17:49
Возвращаемое значение функции в c++ sleevman Помощь студентам 2 19.10.2009 23:21
Возвращаемое функцией значение = находившемуся в ячейке значению motorway Microsoft Office Excel 8 14.07.2009 08:53