Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 07.01.2010, 17:44   #1 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию Pascal, работа с функциями.

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

Старый 07.01.2010, 17:44
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Рекомендую почитать содержимое этих топиков

Задачка с функциями файловой системы ввода-вывода
Работа с текстовым файлом, Pascal

Старый 07.01.2010, 18:00   #2 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Функции и процедуры-это подпрограммы,имеет структуру очень схожую с программой.
Функции описываются так
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.

Последний раз редактировалось DDS; 07.01.2010 в 18:28
DDS вне форума   Ответить с цитированием
Старый 07.01.2010, 18:08   #3 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

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

Последний раз редактировалось Dram; 07.01.2010 в 18:11
Dram вне форума   Ответить с цитированием
Старый 07.01.2010, 18:25   #4 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Я уже подредактировал свой предыдуший пост.
DDS вне форума   Ответить с цитированием
Старый 07.01.2010, 18:32   #5 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Лучше так:
Код:
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)
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 07.01.2010, 18:34   #6 (permalink)
DDS
Member
 
Регистрация: 15.02.2009
Сообщений: 695
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 523
По умолчанию

Конечно вариант от AlexZir лучше, от более удобный и продуманный.
Я же писал просто пример использования функции.
DDS вне форума   Ответить с цитированием
Старый 07.01.2010, 18:41   #7 (permalink)
MrSTEP
一步一步地会到目的
 
Аватар для MrSTEP
 
Регистрация: 09.05.2009
Адрес: Черноземье
Сообщений: 10,939
Записей в дневнике: 10
Сказал(а) спасибо: 140
Поблагодарили 80 раз(а) в 33 сообщениях
Репутация: 28362
По умолчанию

Вот выдержка из моего отчета по практике, краткое описание процедур и функций:
Цитата:
Подпрограмма – самостоятельный программный блок.
Часто во время задач требуется несколько раз повторить одну и ту же группу команд. Такие группы команд принято оформлять самостоятельными блоками и называть подпрограммами. Подпрограммы являются основой модульного программирования.
К каждой подпрограмме можно обратиться по имени. Использование подпрограмм имеет ряд преимуществ, например, такие как: самостоятельный характер, позволяющий поручить их написание отдельным программистам; четкая логическая структура, позволяющая облегчить их отладку, и множество других. Подпрограммы делятся на процедуры пользователя и функции пользователя.
Процедура – это независимая, именованная часть программы, которую после однократного написания можно многократно вызывать по имени (использовать) их последующих частей программы. Процедура не может выступать как операнд в выражении. По структуре процедура повторяет основную программу, то есть состоит из заголовка и блока. В заголовке после имени через запятую приводится список формальных параметров. Но в некоторых процедурах формальные параметры могут отсутствовать.
Если результатом работы подпрограммы является только одно значение, то эту подпрограмму лучше оформить как функцию. Функция аналогична процедуре, но имеет два основных отличия: 1) функция в качестве результата своей работы передает одно значение; это значение присваивается имени функции. 2) функция может выступать как операнд в выражении, при этом она вернет свое значение в точку вызова.
В заголовке функции после имени и списка формальных параметров через двоеточие указывается тип функции (или сразу после имени, если формальных параметров нет). В блоке функции должен быть хотя бы один оператор, присваивающий имени функции значение, в противном случае значение функции считается неопределенным. Если таких операторов несколько, то в точку вызова вернется последнее присвоенное значение.
MrSTEP вне форума   Ответить с цитированием
Старый 07.01.2010, 18:48   #8 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Все правильно, в приведенном примере функция возвращает только одно значение, равное вычисленному s, совпадающему с именем функции. В примере от DDS к функции обращение 1 раз, в моем к функции 10 обращений внутри цикла. В принципе, оба варианта правильные.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 07.01.2010, 20:54   #9 (permalink)
Dram
Экономичный вид памяти
 
Аватар для Dram
 
Регистрация: 19.02.2008
Сообщений: 2,632
Записей в дневнике: 1
Сказал(а) спасибо: 6
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2794
По умолчанию

Цитата:
Сообщение от DDS Посмотреть сообщение

Ваш пример(примерно)
Код:
 
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) . Как эта функция вызовется для нескольких переменных?
Dram вне форума   Ответить с цитированием
Старый 07.01.2010, 21:03   #10 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.