Здесь располагается содержимое class "clearfloat" id "рамка"

Учебный комплекс "Основы программирования и БД"

У р о к и
  1. Этапы решения задач на компьютере. Разработка программы.
  2. Понятие алгоритма. Свойства алгоритма.
  3. Формы представления алгоритмов. Графический способ записи алгоритмов. Школьный алгоритмический язык.
  4. Базовые алгоритмические структуры: базовая структура следование.
  5. Базовые алгоритмические структуры: базовая структура ветвление.
  6. Базовые алгоритмические структуры: базовая структура ЦИКЛ.
  7. Эволюция языков программирования. Классификация языков программирования.
  8. Язык Си++. Эволюция языка и его преимущества.
  9. Синтаксис языка Си++.
  10. Константы и переменные в С++. Преобразование типов данных.
  11. Операторы используемые в С++.
  12. Некоторые визуальные компоненты С++Builder.
  13. Лабораторная работа № 1 Создание простого приложения в С++Builder.
  14. Основные константы и математические функции. Команда форматированного вывода строки.
  15. Лабораторная работа № 2 Создание программы вычисления значения функции.
  16. Условные операторы выбора if.
  17. Лабораторная работа № 3 Создание программы с разветвленной структурой.
  18. Условный оператор множественного выбора switch. Безусловный переход.
  19. Лабораторная работа № 4 Создание программы со структурой ВЫБОР.
  20. Оператор цикла for (цикл со счетчиком).
  21. Лабораторная работа № 5 Создание программы c циклом ДЛЯ.
  22. Операторы цикла с условием. Прерывание цикла.
  23. Лабораторная работа № 6 Создание программы c циклом ПОКА.
  24. Одномерные массивы. Обработка строк.
  25. Лабораторная работа № 7 Создание программы обработки строк.
  26. Многомерные массивы.
  27. Лабораторная работа № 8 Создание программы обработки двумерного массива.
  28. Указатели и ссылки.
  29. Функции: объявление, описание и использование.
  30. Лабораторная работа № 9 Создание и использование функций в C++.
  31. Файлы и потоки. Файловый ввод/вывод с помощью компонентов.
  32. Лабораторная работа № 10 Работа с файлами с помощью компонентов С++Builder.
  33. Файловый вывод/вывод в двоичном режиме.
  34. Лабораторная работа № 11 Запись и чтение блоков из двоичного файла (произвольный доступ).
  35. Лабораторная работа № 12 Запись, дописывание и чтение потоков из файла.
  36. База данных, основные понятия.
  37. Классификация баз данных.
  38. Организация данных в реляционной базе данных.
  39. Проектирование БД. Нормализация данных в реляционных БД.
  40. Системы управления базами данных.
  41. Лабораторная работа № 13 Создание таблицы БД средствами MS Access.
  42. Манипуляция данными. Язык запросов SQL.
  43. Лабораторная работа № 14 Построение простых запросов в MS Access.
  44. Создание приложений работы с базами данных.
  45. Визуальные компоненты доступа к БД в C++ Builder.
  46. Лабораторная работа № 15 Создание приложения доступа к БД в С++Builder.
Дополнения

21. Функции: объявление, описание и иcпользование.

Функции представляют собой программные блоки, которые могут вызываться из разных частей программы. При вызове в них передаются некоторые переменные, константы, выражения, являющиеся аргументами, которые в самих процедурах и функциях воспринимаются как формальные параметры. При этом функции возвращают значение определенного типа, которое замещает в вызвавшем выражении имя вызванной функции.
Например, оператор
I = 5  *  F(X);
вызывает функцию F с аргументом X, умножает возвращенное ею значение на 5 и присваивает результат переменной I.
Допускается также вызов функции, не использующий возвращаемого ею значения. Например:
F(X);
В этом случае возвращаемое функцией значение игнорируется. Функция описывается следующим образом:
тип_возвращаемого значения    имя_функции(список параметров)
{
операторы тела функции
}
Первая строка этого описания, содержащая тип возвращаемого значения, имя функции и список параметров, называется заголовком функции. Тип возвращаемого значения может быть любым, кроме массива и функции. Могут быть также функции, не возвращающие никакого значения. В заголовке таких функций тип возвращаемого значения объявляется void.
Если тип возвращаемого значения не указан, он по умолчанию считается авным int.
Список параметров, заключаемый в скобки, в простейшем случае  представляет собой разделяемый запятыми список вида:
тип_параметра идентификатор_параметра
Например, заголовок:
double  FSum(double X1,double X2,   int A)
объявляет функцию с именем FSum, с тремя параметрами X1, X2 и A, из которых первые два имеют тип double, а последний — int. Тип возвращаемого результата — double. Имена параметров X1, X2 и A — локальные, т.е. они имеют значение только внутри данной функции и никак не связаны с именами аргументов, переданных при вызове функции. Значения этих параметров в начале выполнения функции равны значениям аргументов на момент вызова функции.
Ниже приведен заголовок функции, не возвращающей никакого значения:
void SPrint(AnsiString S)
Она принимает один параметр типа строки и, например, отображает его в каком-нибудь окне приложения.
Если функция не принимает никаких параметров, то скобки или оставляются пустыми, или в них записывается ключевое слово void. Например:
void F1(void)
или
void F1()
В  C++ пустой список означает отсутствие аргументов.
Как правило (хотя формально не обязательно), помимо описания функции в текст программы включается также прототип функции — ее предварительное объявление. Прототип представляет собой тот же заголовок функции, но с точкой с запятой ";" в конце. Кроме того, в прототипе можно не указывать имена параметров. Если вы все-таки указываете имена, то их областью действия является только этот прототип функции. Вы можете использовать те же идентификаторы в любом месте программы в любом качестве. Таким образом, указание имен параметров в прототипе обычно преследует только одну цель — документирование программы, напоминание вам или сопровождающему программу человеку, какой параметр,  что именно обозначает.
Примеры прототипов приведенных выше заголовков функций:
double  FSum(double X1,double X2,   int A);
void SPrint(AnsiString S);
void F1(void);
или
double  FSum(double,   double,   int);
void SPrint(AnsiString);
void F1();
Введение в программу прототипов функций позволяет использовать в данном модуле функцию, описанную в каком-нибудь другом модуле. Тогда из прототипа компилятор получает сведения, сколько параметров, какого типа и в какой последовательности получает данная функция. Во-вторых, если в начале модуля вы определили прототипы функций, то последовательность размещения в модуле описания функций безразлична. При отсутствии прототипов любая используемая функция должна быть описана до ее первого вызова в тексте. Это прибавляет вам хлопот, а иногда при взаимных вызовах функций друг из друга вообще невозможно. И, наконец, прототипы, размещенные в одном месте (обычно в начале модуля), делают программу более наглядной и самодокументированной. Особенно в случае, если вы снабжаете прототипы хотя бы краткими комментариями.
Если предполагается, что какие-то из описанных в модуле функций могут использоваться в других модулях, прототипы этих функций следует включать в заголовочный файл. Тогда в модулях, использующих данные функции, достаточно будет написать директиву #include , включающую данный заголовочный файл, и не надо будет повторять прототипы функций.

Тело функции пишется по тем же правилам, что и любой код программы, и может содержать объявления типов, констант, переменных и любые выполняемые операторы. Не допускается объявление и описание в теле других функций. Таким образом, функции не могут быть вложены друг в друга.
Надо иметь в виду, что все объявления в теле функции носят локальный характер. Объявленные переменные доступны только внутри данной функции. Если их идентификаторы совпадают с идентификаторами каких-то глобальных переменных модуля, то эти внешние переменные становятся невидимыми и недоступными. В этих случаях получить доступ к глобальной переменной можно, поставив перед ее именем два двоеточия, т.е. применив унарную операцию разрешения области действия.
Локальные переменные не просто видны только в теле функции, но по умолчанию они и существуют только внутри функции, создаваясь в момент вызова функции и уничтожаясь в момент выхода из функции. Если требуется этого избежать, соответствующие переменные должны объявляться со спецификацией static .
Выход из функции может осуществляться следующими способами. Если функция не должна возвращать никакого значения, то выход из нее происходит или по достижении закрывающей ее тело фигурной скобки, или при выполнении оператора return. Если же функция должна возвращать некоторое значение, то нормальный выход из нее осуществляется оператором return выражение, где выражение должно формировать возвращаемое значение и соответствовать типу, объявленному в заголовке функции.
Например:
double  FSum(double X1,double X2,   int A)
{
return A * (X1 + X2);
}
Возвращаемое функцией значение может включать в себя вызов каких-то функций. В том числе функция может вызывать и саму себя, т.е. допускается рекурсия. В качестве примера приведем функцию, рекурсивно вычисляющую факториал. Как известно, значение факториала равно n! = n • (n-1) • (n-2) • ... • 1, причем считается, что 1! = 1 и 0! = 1... Тогда функция factorial вычисления факториала может быть описана следующим образом:
unsigned long factorial   (unsigned long n)
{    if (n <= 1)
return 1;
else
return n *  factorial(n-1);}

Если значение параметра n равно 0 или 1, то функция возвращает значение 1. В противном случае функция умножает текущее значение n на результат, возвращаемый вызовом той же функции factorial, но со значением параметра n, уменьшенным на единицу. Поскольку при каждом вызове значение параметра уменьшается, рано или поздно оно станет равно 1. После этого цепочка рекурсивных вызовов начнет свертываться и в конце концов вернет значение факториала.