Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Pascal, работа с функциями. (http://www.tehnari.ru/f43/t31788/)

Dram 07.01.2010 17:44

Pascal, работа с функциями.
 
Расскажите мне пожалуйста как правильно объявляется функция и еще кое какие нюансы.
скажем мне надо написать прогу с использованием функции y=cosx+ cos2x....cos10x
Как она на пишется с функцией?

DDS 07.01.2010 18:00

Функции и процедуры-это подпрограммы,имеет структуру очень схожую с программой.
Функции описываются так
Function имя(параметр - переменная:тип переменной):тип, в котором функция будет возращать своё значение;
var ...;
begin
...
имя функции :=...;
end;

Ваш пример(примерно)
Код:


var y:real;x:integer;
 Function s(x:integer):real;
    Begin
    s:=cos(x)+cos(x*2)+cos(x*3)+...+cos(x*10);
    end;
Begin
  read(x);
  y:=s(x);
  writeln(y:5:2);
 End.


Dram 07.01.2010 18:08

Цитата:

Сообщение от DDS (Сообщение 279174)
Функции и процедуры-это подпрограммы,имеет структуру очень схожую с программой.
Функции описываются так
Function имя(параметр - переменная:тип переменной):тип, в котором функция будет возращать своё значение;
var ...;
begin
...
имя функции :=...;
end;

А как в моем варианте она как может пригодится?
Я просто что то не очень место её нахожу когда и для чего её втыкать

DDS 07.01.2010 18:25

Я уже подредактировал свой предыдуший пост.

AlexZir 07.01.2010 18:32

Лучше так:
Код:

program func1;
var y,x:real; i:integer;

Function s(xx:real, k:integer):real;
    Begin
    s:=cos(xx*k);
    end;
 
Begin
  read(x);
  y:=0;
  for i:=1 to 10 do
  y:=y+s(x,i);
  writeln(y:5:2);
 End.

В данном случае в функции последовательно вычисляется 10 значений cos(i*x)

DDS 07.01.2010 18:34

Конечно вариант от AlexZir лучше, от более удобный и продуманный.
Я же писал просто пример использования функции.

MrSTEP 07.01.2010 18:41

Вот выдержка из моего отчета по практике, краткое описание процедур и функций:
Цитата:

Подпрограмма – самостоятельный программный блок.
Часто во время задач требуется несколько раз повторить одну и ту же группу команд. Такие группы команд принято оформлять самостоятельными блоками и называть подпрограммами. Подпрограммы являются основой модульного программирования.
К каждой подпрограмме можно обратиться по имени. Использование подпрограмм имеет ряд преимуществ, например, такие как: самостоятельный характер, позволяющий поручить их написание отдельным программистам; четкая логическая структура, позволяющая облегчить их отладку, и множество других. Подпрограммы делятся на процедуры пользователя и функции пользователя.
Процедура – это независимая, именованная часть программы, которую после однократного написания можно многократно вызывать по имени (использовать) их последующих частей программы. Процедура не может выступать как операнд в выражении. По структуре процедура повторяет основную программу, то есть состоит из заголовка и блока. В заголовке после имени через запятую приводится список формальных параметров. Но в некоторых процедурах формальные параметры могут отсутствовать.
Если результатом работы подпрограммы является только одно значение, то эту подпрограмму лучше оформить как функцию. Функция аналогична процедуре, но имеет два основных отличия: 1) функция в качестве результата своей работы передает одно значение; это значение присваивается имени функции. 2) функция может выступать как операнд в выражении, при этом она вернет свое значение в точку вызова.
В заголовке функции после имени и списка формальных параметров через двоеточие указывается тип функции (или сразу после имени, если формальных параметров нет). В блоке функции должен быть хотя бы один оператор, присваивающий имени функции значение, в противном случае значение функции считается неопределенным. Если таких операторов несколько, то в точку вызова вернется последнее присвоенное значение.

AlexZir 07.01.2010 18:48

Все правильно, в приведенном примере функция возвращает только одно значение, равное вычисленному s, совпадающему с именем функции. В примере от DDS к функции обращение 1 раз, в моем к функции 10 обращений внутри цикла. В принципе, оба варианта правильные.

Dram 07.01.2010 20:54

Цитата:

Сообщение от DDS (Сообщение 279174)

Ваш пример(примерно)
Код:


var y:real;x:integer;
 Function s(x:integer):real;
    Begin
    s:=cos(x)+cos(x*2)+cos(x*3)+...+cos(x*10);
    end;
Begin
  read(x);
  y:=s(x);
  writeln(y:5:2);
 End.


так вроде как разобрался. Но мы написали вункцию S в дальнейшем её вызываем для переменной (х). И что то я не очень понял ведь в саму функцию запихан весь пример.
разве нельзя написать просто y:=S
а если у меня будет не (х) переменная а допустим (z) . Как эта функция вызовется для нескольких переменных?

AlexZir 07.01.2010 21:03

Мы должны передать в функцию значения для вычисления, если же вы напишите без x, это будет неопределенной функцией и может выдать ошибку в вычислениях (тут действует принцип "вассал моего вассала - не мой вассал!").
В моем примере функция как раз вызывается для 2-х переменных, причем имена переменных при описании функции во избежание конфликтов определены отличные от имен переменных в основной программе.


Часовой пояс GMT +4, время: 14:56.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.