- •Понятие алгоритма: рекурсивные функции, системы текстовых замен.
- •Системы счисления, переводы чисел из одной позиционной системы в другую.
- •Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу.
- •Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.
- •Статические и динамические переменные, динамическая память, работа с динамическими переменными.
- •Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.
- •Использование динамических переменных для представления и работы со стеком.
- •Очередь, реализация очереди массивом.
- •Очередь, представление и реализация основных операций с помощью динамических переменных.
- •Реализация основных операций со списком: добавление, удаление, поиск.
- •Деревья, основные операции над деревьями, представление дерева массивом.
- •Двусвязные линейные списки, построение и обход бинарного дерева.
- •Операции поиска и удаления в бинарном дереве.
- •Понятие графа, представление графа на эвм.
- •Представление графа списком инцидентности, алгоритм обхода графа в глубину.
- •Представление графа списком списков, алгоритм обхода графа в ширину.
- •Технологии программирования, концепции, заложенные в ооп.
- •Основные понятия ооп: абстракция, инкапсуляция, полиморфизм.
- •Понятие объекта, его состояние и поведение, классы, определение класса и объявление класса.
- •Статические, дружественные и виртуальные поля и методы, особенности их использования.
- •Абстрактные классы, их назначение и использование.
- •Понятие области видимости: общие, личные, защищённые и опубликованные поля и методы объекта.
- •Указатель this и перегрузка методов.
- •Использование классов, различные способы инициализации.
- •Использование классов, работа с массивами и указателями на обьекты.
- •Наследование, пример использования наследования.
- •Конструкторы и деструкторы, их назначение и использование.
- •Архитектура пк, основные функциональные устройства и их назначение.
- •Мп с точки зрения программиста, регистры общего назначения.
- •Оперативная память, понятие исполняемого и физического адреса, сегментные регистры.
- •Регистр флажков, его назначение и использование.
- •Форматы данных и форматы команд, машинный формат двухадресной машины.
- •Адресация операндов, способы адресации, примеры команд с различными способами адресации.
- •Понятие команды и директивы в Ассемблере, формат команды и директивы.
- •Структура программы на Ассемблере с использованием стандартных директив сегментации.
- •Основные элементы языка Ассемблер: имена, константы, переменные, выражения.
- •Директивы определения данных и памяти, примеры.
- •Команда прерывания, команды работы со стеком.
- •Упрощённые директивы сегментирования, структура программы с использованием точечных директив, пример программы.
- •Этапы выполнения Ассемблерной программы на эвм, понятие com-файла.
- •Различие между exe - и com – файлами, требования, предъявляемые к исходному модулю, предназначенному для создания com – файла, примеры программ.
- •Понятие структурного программирования, этап проектирования – композиция и декомпозиция, понятие статической и динамической структуры программы, спецификация программы.
- •Понятие частичной и полной корректности программы, правила вывода – общий вид, правила консеквенции.
- •Правила вывода для операторов: пустого, присваивания, составного.
- •Правила вывода для операторов ветвления.
- •Правила вывода циклов с предусловием и посусловием.
Использование классов, работа с массивами и указателями на обьекты.
С массивами объектов можно работать также, как и с масивами любых других объектов.
Пример:
int main()
{Tmoney a[5], sa; // объявление массива а и переменной sa;
for (int i=0;i<5;i++) // инициализация элементов массива;
a[i].Init(i);
for (int i=0;i<5;i++) a[i].DisplayMoney(); // вывод элементов массива;
sa.Init(0.0); // обнуление sa.summa = 0;
for (int i=0;i<5;i++) sa = sa.AddMoney(a[i]); // суммирование элементов массива;
sa.DisplayMoney(); // вывод вывод полученной суммы на экран;
sa.Init(0.0);
for (int i=0;i<5;i++) sa = a[i].AddMoney(sa); sa.DisplayMoney(); // 2-ой вариант;
return 0;}
Работа с указателями на объекты.
int main()
{Tmoney *pt = new Tmoney(), *pp, *ps; // объявление указателей;
pp = new Tmoney(); ps = new Tmoney(); // создание объектов;
pt → Init(1000.24); pt → DisplayMoney(); // инициализация и вывод;
pp → Init(2000.25); pp → DisplayMoney();
ps → Init(0.0); ps → DisplayMoney();
ps = (*pt).AddMoney(*pp); // сложение;
ps → DisplayMoney();
ps → ReadMoney(); ps → DisplayMoney(); // ввод и вывод;
delete ps; delete pt; delete pp;
return 0;}
Для работы с указателями используется операция доступа ( → ) и операция разыменования ( * ). Простые скобки после имени конструктора можно не писать, но при наличии ( ) созданный объект инициализируется нулями, а при их отсутствии значения полей данных не определены.
Наследование, пример использования наследования.
В ООП существует возможность создания иерархии классов, при которых создаваемые производные классы — потомки, могут наследовать свойства базовых родительских классов. При этом свойства могут изменяться.
Простое наследие — когда класс-потомок имеет одного родителя. При множественном он может наследовать свойства 2-х и более классов.
class <имя производного класса>:<ключ доступа><имя базового класса>{<тело класса>}, где ключ доступа — public, private, protected.
Пример: class X {…}; class Y {…}; class Z {…}; class W: X, protected Y, public Z {…}.
Ключ доступа в базовом классе в потоке
private нет доступа
private protected private
public private
private нет доступа
protected protected protected
public protected
private нет доступа
public protected public
public public
Если родительский класс наследуется с ключом private, то некоторые элементы можно сделать доступными в потоке, описав его в теле потока с нужным ключом доступа
class roditel {… public: int method_1(); …};
class potok: private roditel {… public: roditel::int method_1(); …};
Метод с именем method_1 класса родитель будет общедоступным в объектах класса potok.
Пример наследования: class xmax{protected : static const int n = 2; int x[n]; int max_x (int x[n])
{int I;s = x[0]; for (i=0; i<n; i++) if (s<x[i]) s = x[i]; // поиск максимума;
return s;};
class tabl: public xmax;
{pubic: int sum_max (int y[n][n]) //сумма максимумов строк;
{int i, j, sum; sum = 0;
for (i=0; i<n; i++) {for (j=0; j<n; j++) x[j] = y[i][j];
sum+=max_x(x);};
return sum;};};
int main()
{const int m = 2; tabl obj1, obj2; int i, j, rez; int arr1[m][m] = {{7,5},{3,4}};
int arr2[m][m];
rez = obj1.sum_max(arr1);
for (i=0; i<m; i++) for(j=0; j<m; j++) cin>>arr2[i][j];
rez = obj2.sum_max(arr2);
cout<<rez;
return 0;}
Конструкторы не наследуются. Если в конструкторе потомка явно не вызывается конструктор предка, то он вызывается автоматически. При иерархии вызываются с самого верхнего.
Деструкторы не наследуются, также создается автоматически. Имеет обратный порядок ( т.е. последний деструктор базового класса).