Отправляет email-рассылки с помощью сервиса Sendsay

Инвестирование с нуля

  Все выпуски  

Программирование на Си и С++ с нуля: Функции


Школа программирования

150) Программирование на С++: Функции

Пока мы вводили команды С++ в обработчики, основные тексты которых формировались средой автоматически. Мы лишь вносили команды между фигурными скобками. Теперь мы научимся создавать функции - автономные наборы команд, которые впоследствии можно вызывать по имени такого набора. Например, функция расчета случайной величины, или функция определения времени, или функция вычисления размера зарплаты - это набор команд, который может быть вызван по имени, как переменная. Такой набор готовится заранее, и существует множество стандартных библиотек функций на почти все случаи разработческой жизни. Почти все, но не все.

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

Про функции уже немножко говорилось в N 138.

В качестве примера рассмотрим создание функции-виртуального кубика. Пока для расчета случайного значения в диапазоне от 1 до 6 нам приходилось использовать не очень наглядную запись (random(6) + 1). Удобнее иметь функцию, которая моделирует виртуальный кубик, причем не только с шестью, но и с любым другим числом граней. Это число мы будем передавать в функцию в качестве параметра.

Функция записывается в программе так:

  тип имя ( список-параметров )
  {
   команды
  }

Тип - это тип вычисляемого функцией значения. В нашем случае типом виртуального кубика будет тип int (целое число). Имя - это обычный идентификатор, как при определении переменной. Например, пусть это будет VirtKyb.

Список параметров - это список вида

тип идентификатор , ....

Он напоминает определения переменных. В эти параметры и будут записываться конкретные значения, передаваемые при вызове функции. Внутри функции (говорят - в ее теле) эти параметры используются как обычные локальные переменные.

Вот как запишется в первом приближении наша функция:

  int VirtKyb( int grani )
  {
   // тело функции
  }

grani - это параметр (название его выбираем сами), в который запишется значение при конкретном вызове данной функции. Например, когда мы вызовем данную функцию: VirtKyb(6) , то значение 6 запишется в параметр grani, который будет доступен в теле функции.

Функция нужна для того, чтобы возвращать (вычислять) некоторое значение, результат. Возвращаемый, вычисляемый результат определяется внутри тела функции с помощью оператора return :

return выражение ;

Значение выражения и будет значением, возвращаемым функцией. С учетом вышесказанного полностью наша функция запрограммируется так:

  int VirtKyb( int grani )
  {
   int n;
   n = random( grani ) + 1;
   return n ;
  }

Мы ввели промежуточную переменную n, в которую заносится случайное значение от 1 до верхнего порога, заданного в параметре grani (фактически он определяет число граней виртуального кубика).

Где размещать данную запись функции? Это надо сделать до первого к ней обращения, то есть лучше всего в первой части файла, до начала описания обрабочиков:

Создадим проект, добавим кнопку, метку и поле ввода. В поле ввода будем указывать число граней кубика, а по нажатию на кнопку этот кубик будем "бросать".

  void __fastcall TForm1::Button1Click(TObject *Sender)
  {
   int Gran, Rez;
   Gran = StrToInt( Edit1->Text ); // число граней кубика
   Rez = VirtKyb( Gran ); // бросаем кубик с заданным числом граней
   Label1->Caption = IntToStr(Rez); // выводим результат

  }

Попробуйте сделать функции, которые: а) складывают два числовых параметра; б) подсчитывают число пробелов в строке-параметре.

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


(c) 2004-2007 Сергей Бобровский bobrovsky as russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Мои учебные курсы "Технологии Delphi / C++ / C#. Разработка приложений для бизнеса".
http://shop.piter.com/display.phtml?a_id=17681&web_ok=all

Все эти учебные курсы рассчитаны не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книгах описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив один учебный курс, вы существенно сэкономите :) В книгах полностью описаны:
- Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET;
- C# (новый язык Microsoft, на котором базируется платформа .NET и все новые версии Windows);
- C++ для платформы Win32.
Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книги.

Мои книги, которые пока доступны в продаже:


Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное