Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
haydar
6 лет назад

18 FreeBASIC - Подпрограммы, процедуры, функции

С увеличением размера программы(количества строк) часто появляются идентичные участки кода или весьма схожие, но с разными параметрами. Такие части программ можно перенести в определённое место, (например вверх или вниз кода) и обращаться к ним из основной программы. Их называют подпрограммой(процедурами, функциями). Функция отличается от процедуры тем, что вычисляет значение и возвращает его в место вызова функции.
Например y=sin(x). Функция вычисляет значение синуса и подставляет его вместо себя справа от символа "=" при выполнении программы(это вольное такое объяснение). Необходимые функции можно составить самому, они ничем не будут отличаться от "встроенных" стандартных. Да и они-то ведь тоже кем-то были составлены.
Изначально подпрограммы появились с целью сэкономить память, которая тогда стоила очень дорого, а было её всегда очень мало. С помощью подпрограмм можно было один раз написав код вызывать его многократно по мере надобности. Сейчас же главное назначение подпрограмм - улучшение её структурированности, что облегчает понимание и отладку.
Во FreeBASIC нет оператора который рисует треугольник. На этом примере и рассмотрим подпрограмму которая его рисует.
Без подпрограмм это выглядело бы так:
line(a1,b1)-(a2,b2)
line(a2,b2)-(a3,b3)
line(a3,b3)-(a1,b1)
с применением подпрограммы
triangle(a1,b1,a2,b2,a3,b3)
Но где-то ведь нужно "рассказать" как рисовать этот треугольник по команде triangle(a1,b1,a2,b2,a3,b3)
Делается это обычно в начале программы, до основной её части.
Начинается подпрограмма со слова sub заканчивается end sub. После sub идёт идентификатор - "имя" программы, далее перечисляются параметры, что их программа передаёт в подпрограмму. Эти параметры называются формальными. Тогда как при вызове этой подпрограммы из основной программы параметры передаются значения переменных - фактические параметры.
Теперь можно вызывать нану процедуру сколько угодно раз.
Здесь в процедуре triangle при описании параметров есть новое ключевое слово ByVal это значит что в процедуру передаётся значение переменной, а не сама переменная(это мы рассмотрим позже).

Когда теперь посмотреть на программу можно увидеть, что она рисует треугольники, а как она это делает скрыто в самой процедуре, в которую можно даже и не смотреть, если её написали вы но очень давно, или кто другой. Так даже делают целые библиотеки процедур. Вам достаточно лишь знать имя процедуры, какие параметры она принимает и что делает, а как она это делает знать не обязательно.

Такие библиотеки вы можете даже строите сами, а потом использовать в своих программах. Уже не отвлекаясь на эти мелочи(реализованные в процедурах). Далее всё это не раз рассмотри на примерах, будет понятней.
Это пример объявления функции вычисляющей квадрат числа
вычисляем квадрат xx и присваиваем его "переменной" имя которой совпадает с именем функции. f=xx

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

Сначала я забыл написать, указать тип возвращаемого функцией значения за что и "получил" от компилятора... сообщение -
О функциях и процедурах мы ещё поговорим по ходу использования.

17 Поиск минимального элемента
16 Игра "Прыгающие шашки"
15 Игра "Быки и коровы"
14 Тасуем карты (массивы-задачи ч2)
13 Массивы(задачи)
12 Массивы
11 Задачки
10 Игра угадай число
09 Случайные числа, RND
08 Случайные числа, RND
07 Циклы
06 Условный оператор
05 Первые простые задачки
04 Графика
03 Текстовые переменные и операции с ними
02 Переменные в Бейсике
01 Начинаем изучать FreeBasic
00 FreeBASIC лучший из диалектов бейсика

@sergiy

2
0.000 GOLOS
На Golos с June 2018
Комментарии (0)
Сортировать по:
Сначала старые