- •Оглавление
- •Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические
- •1. Понятия алгоритма: рекурсивные функции системы текстовых замен
- •2. Системы счисления, переводы чисел из одной позиционной системы счисления в другую
- •4. Понятие подпрограммы, функции, не возвращающие значения, описание и использование
- •5. Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу
- •6. Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры
- •8. Статистические и динамические переменные, динамическая память, работа с динамическими переменными
- •10. Использование динамических переменных для представления и работы со стеком
- •Int pop(tstack *&sp) { // удаление элемента из стека
- •11. Очередь, реализация очереди массивом
- •Добавить элемент в очередь:
- •12. Очередь, представление и реализация основных операций с помощью динамических переменных
- •14. Деревья, основные операции над деревьями, представление дерева массивом Деревья.
- •2. Обход бинарного дерева:
- •If(!t) { //такого элемента нет, включаем его
- •Void Del_node (int X, tnode *&t) { //удаление из дерева поиска
- •Матрица инциденции
- •Матрица смежности
- •Список инцидентности 4) список списков
- •18. Представление графа списком инцидентности, алгоритм обхода графа в глубину
- •2) Обход графа в ширину.
- •If (not b) then //добавляем новую вершину в стек
- •19. Представление графа списком списка, алгоритм обхода графа в ширину
- •21. Основные понятия ооп: абстракция, инкапсуляция, полиморфизм
- •22. Понятие объекта, его состояние и поведение, классы, определение класса и объявление класса
- •23. Статические, дружественные и виртуальные поля и методы, особенности их использования
- •Void DisplayMoney(); // вывод на экран
- •Понятие области видимости: общие, личные, защищённые поля и методы
- •Указатель this и перегрузка методов
- •Использование классов, различные способы инициализации
- •Int CompareMoney(const Tmoney &b); //сравнение сумм
- •Void ReadMoney(); void DisplayMoney(); // ввод и вывод
- •Использование классов, работа с массивами и указателями на объекты
- •Наследование, пример использования наследования
- •Конструкторы и деструкторы, их назначение и использование
- •Архитектура пк, основные функциональные устройства и их назначение
- •Мп с точки зрения программиста, регистры общего назначения
- •Оперативная память, понятие исполняемого и физического адреса, сегментные регистры
- •Регистр флажков, его назначение и использование
- •Форматы данных и форматы команд
4. Понятие подпрограммы, функции, не возвращающие значения, описание и использование
Смотри пункт 3 +
Если же подпрограмма выдает несколько результатов, то обращение к функции – самостоятельный оператор. Это функции, невозвращающие значение – процедуры. C=n!*(m!*(n-m)!): #include <stdio.h> void pfakt (int k, int *f)
{int j; *f=1; for (j=2; j<=k; j++)
*f=*f*j; return;} void main (void)
{int n, m, c; int f1, f2, f3;
print (“\n введите два исходных целых числа”); scanf (“%d%d”, &n, &m); pfact (n, &f1); pfact (n, &f2); pfact (n-m, &f3); c=f1/f2/f3; print (“\nc=%d”, c);}
5. Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу
Параметры, указанные в описании подпрограммы, называются формальными, а указанные в обращении к ней – фактическими.
Передача параметров – подстановка фактических параметров вместо формальных при обращении к подпрограмме.
При вызове подпрограммы (обращении к ней) в начале вычисляется выражения, являющиеся формальными параметрами, затем в стеке выделяется память для хранения формальных параметров в соответствии с их типом и каждому из них присваивается значение фактического параметра.
Существует 2 способа передачи параметров – по значению и по адресу.
При передаче по значению в стеке сохраняются копии значений фактических параметров и доступ к исходным значениям их становится невозможным, так что значения в подпрограмме не могут быть изменены.
Для передачи по адресу в стеке сохраняются адреса аргументов, и подпрограмма обращается по этим адресам к фактическим параметрам и т.е. можно изменить их первоначальные значения.
В С/С++ параметры по адресу могут передаваться с помощью указателей и с помощью ссылок.
Формальные параметры делятся на входные и выходные.
Значения входных параметров должны быть известны до обращения к подпрограмме. Входные параметры могут передаваться как по значению, так и по адресу. Входными параметрами могут быть выражения, в том числе константы и переменные. Выходные параметры могут передаваться только по адресу.
6. Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры
Параметры, указанные в описании подпрограммы, называются формальными, а указанные в обращении к ней – фактическими.
Все величины, описанные в подпрограмме, а также формальные параметры являются локальными величинами, областью их действия является только тело функции. При обращении к функции в стеке выделяется память под все локальные величины, записываются значения регистров процессора, а также адрес возврата из подпрограммы – адрес команды, которая должна выполниться следующей после выхода из подпрограммы
При выходе из подпрограммы этот участок стековой памяти очищается, это значит, что значения локальных величин не сохраняются между обращениями к одной и той же подпрограмме.
Если значение какого-то локального параметра необходимо сохранить между вызовами, то этот параметр нужно описать статически (static int n=0). Такая статическая переменная сохраняется не в стеке, а в сегменте данных и инициализируется один раз при первом обращении к подпрограмме.
Глобальные параметры описываются вне функций, в том числе и вне main, поэтому они видны во всех функциях программы и могут использоваться для передачи данных между всеми функциями. Если имена глобальных и локальных параметров совпадают, то внутри функций локальные переменные «заменяют» глобальные, а после выхода из функции значение глобальной переменной восстанавливается. Однако с помощью операции доступа к области видимости (::) можно получить доступ к одноименной глобальной переменной.
7. Рекурсивные подпрограммы, примеры рекурсивных функций в С/С++
Рекурсия (от recursion – возвращение) – самовложение, определяющее объект или явление, внутри которого содержится подобный ему объект или явление. Функцию называют рекурсивной, если она вызывает сама себя в качестве вспомогательной
n!=1 при n=0 и n!=1*2*3*...*n при n>0 это итерационное (итеративное) определение n!=1
при n=0 n!=(n-1)!*n при n>0 – определение рекурсивное
Если подпрограмма обращается сама к себе, то такая рекурсия называется прямой. Если несколько подпрограмм обращаются друг к другу, то такое обращение называется косвенной рекурсией
long fact (long n) { if (n==0 || n==1) return 1; return n*fact (n-1); } long fact (long n) {
return (n>1) ? n*fact(n-1) : 1; }
