- •Понятие алгоритма: рекурсивные функции, системы текстовых замен.
- •Системы счисления, переводы чисел из одной позиционной системы в другую.
- •Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу.
- •Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.
- •Статические и динамические переменные, динамическая память, работа с динамическими переменными.
- •Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.
- •Использование динамических переменных для представления и работы со стеком.
- •Очередь, реализация очереди массивом.
- •Очередь, представление и реализация основных операций с помощью динамических переменных.
- •Реализация основных операций со списком: добавление, удаление, поиск.
- •Деревья, основные операции над деревьями, представление дерева массивом.
- •Двусвязные линейные списки, построение и обход бинарного дерева.
- •Операции поиска и удаления в бинарном дереве.
- •Понятие графа, представление графа на эвм.
- •Представление графа списком инцидентности, алгоритм обхода графа в глубину.
- •Представление графа списком списков, алгоритм обхода графа в ширину.
- •Технологии программирования, концепции, заложенные в ооп.
- •Основные понятия ооп: абстракция, инкапсуляция, полиморфизм.
- •Понятие объекта, его состояние и поведение, классы, определение класса и объявление класса.
- •Статические, дружественные и виртуальные поля и методы, особенности их использования.
- •Абстрактные классы, их назначение и использование.
- •Понятие области видимости: общие, личные, защищённые и опубликованные поля и методы объекта.
- •Указатель this и перегрузка методов.
- •Использование классов, различные способы инициализации.
- •Использование классов, работа с массивами и указателями на обьекты.
- •Наследование, пример использования наследования.
- •Конструкторы и деструкторы, их назначение и использование.
- •Архитектура пк, основные функциональные устройства и их назначение.
- •Мп с точки зрения программиста, регистры общего назначения.
- •Оперативная память, понятие исполняемого и физического адреса, сегментные регистры.
- •Регистр флажков, его назначение и использование.
- •Форматы данных и форматы команд, машинный формат двухадресной машины.
- •Адресация операндов, способы адресации, примеры команд с различными способами адресации.
- •Понятие команды и директивы в Ассемблере, формат команды и директивы.
- •Структура программы на Ассемблере с использованием стандартных директив сегментации.
- •Основные элементы языка Ассемблер: имена, константы, переменные, выражения.
- •Директивы определения данных и памяти, примеры.
- •Команда прерывания, команды работы со стеком.
- •Упрощённые директивы сегментирования, структура программы с использованием точечных директив, пример программы.
- •Этапы выполнения Ассемблерной программы на эвм, понятие com-файла.
- •Различие между exe - и com – файлами, требования, предъявляемые к исходному модулю, предназначенному для создания com – файла, примеры программ.
- •Понятие структурного программирования, этап проектирования – композиция и декомпозиция, понятие статической и динамической структуры программы, спецификация программы.
- •Понятие частичной и полной корректности программы, правила вывода – общий вид, правила консеквенции.
- •Правила вывода для операторов: пустого, присваивания, составного.
- •Правила вывода для операторов ветвления.
- •Правила вывода циклов с предусловием и посусловием.
Указатель this и перегрузка методов.
Рассмотрим на примере: Tmoney Tmoney::AddMoney (const Tmoney &b)
{Tmoney a = *th; s; // локальному параметру а присвоим значение текущего объекта;
a.summa+=b.summa; // сложим с суммой объекта параметр а;
return a;}
С помощью указателя this инициализировали локальную переменную а текущим объектом, т.е. тем объектом, для которого этот метод будет вызван (присвоим полям локального объекта значения полей текущего объекта).
Ключевое слово this – указатель на объект для которого вызван метод, т.о. метод получает дополнительный неявный параметр - указатель на текущий объект, который используется для обращения к полям объекта так: this → summa.
Один из основных принципов ООП — полиморфизм, а его принцип — переопределение функций — перегрузка. Методы этой функции — члены класса и они могут перегружаться. Рассмотрим на примере AddMoney: определим с этим же именем метод суммирования денег с числом, где число денежная сумма — константа.
Tmoney Tmoney::AddMoney (const double &b)
{Tmoney a; // объявим локальный объект;
a.Init (b); // инициализируем локальный объект формальным параметром;
return a.AddMoney (*this);} // сложим с суммой текущего объекта и возвратим его в качестве результата.
Возврат результата суммирования можно реализовать так:
return (*this).AddMoney(a);
Использование классов, различные способы инициализации.
Принципы различный способов реализации:
typedef unsigned int, tint;
class Tmoney {public: // чтобы можно было использовать cout<<t.summa;
double summa;
double round (const double &r)
{double t = fabs(r);
t = (t – floor(t) < 0.5)? floor(t): cell(t);
return (r<0)? -t: t;};
void init (const doudle &t) // метод инициализации: Void Tmoney::Init (const double &t)
{summa = round (t*100);}
int main {char c1;
Tmoney t, p, s, z;
t.Init (100.55); p.Init (1000.66); // инициализация методом (t.summa = 100.55;)
Tmoney x = t; // инициализация другой переменной (x.summa = t.summa);
cout<<s.summa<<”/t”<<p.summa<<”/t”;
s.Init (0.0); z.Init (0.0); // обнуление s.summa = 0.0 и z.summa = 0.0;
cout<<x.summa<<”t”<<s.summa<<”t”<z.summa<<”t”;
c1 = cin.get(); return 0;}.
Пример 2:
int main()
{Tmoney t, p, s, z;
t.Init (100.55); p.Init (100.66); Tmoney x = t;
z = t.AddMoney(p); // z.summa = t.summa + p.summa;
z.DisplayMoney();
s.Init (0.0); z.Init (0.0); // обнуление s.summa и z.summa;
s = t.AddMoney(p);
s.DisplayMoney();
t.AddMoney(p).DisplayMoney(); // суммирование и вывод s.summa + p.summa;
s = t.DivByNum(2); s.DisplayMoney();
z = p.MultByNum(3.15); z.DisplayMoney();
s.ReadMoney(); s.DisplayMoney();
double d = p.DivMoney(s);
cout<<d<<endl; return 0;}
Наш метод инициализации не позволяет определить поля объекта Tmoney обычным образом
(Tmoney u = 250.00). Это будет возможно, если в определении класса ввести описание специального метода — конструктора.
Рассмотрим еще вариант метода инициализации:
Tmoney Tmoney::Init (const double &t)
{summa = round (t*100);
return *this;}
Кроме этих методов инициализации можно записать:
Tmoney t= z.Init (200.00); // инициализация 2-х объектов: z и t;
Это значит, что остается правильной конструкция t.Init (200.00)
Операторы t.AddMoney(p).DisplayMoney() работает так: вычисляется сумма полей объектов p и t (создается временный объект) и сразу выводятся на экран.