- •1. Понятие алгоритма: рекурсивные функции, системы текстовых замен.
- •2.Системы счисления, переводы чисел из одной позиционной системы в другую.
- •3/4.Понятие подпрограммы, функции, возвращающей/не возвращающей значение в
- •5.Передача параметров в подпрограмму,параметры входные и выходные,параметры,передаваемые по значению и по адресу.
- •6.Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.
- •8.Статические и динамические переменные,динамическая память,работа с динамическими переменными.
- •9.Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.
- •10.Использование динамич. Переменных для представл. И работы со стеком.
- •11.Очередь,реализация очереди массивом.
- •12.Очередь, представление и реализация основных операций с помощью динамических переменных.
- •13.Реализация основных операций со списком:добавление, удаление, поиск.
- •14.Деревья,основные операции над деревьями, представление дерева массивом.
- •15.Двусвязные линейные списки, построение и обход бинарного дерева.
- •16.Операции поиска и удаления в бинарном дереве.
- •17.Понятие графа, представление графа в эвм.
- •18.Представление графа списком инцидентности,алгоритм обхода графа в глубину.
- •19.Представление графа списком списков,алгоритм обхода графа в ширину.
- •20.Технологии программирования,концепции,заложенные в ооп.
- •21.Основные понятия ооп:абстракция, инкапсуляция,полиморфизм.
- •22.Понятие объекта,его состояние и поведение,классы,определение класса и объявление класса.
- •23.Статистические,дружественные и виртуальные поля и методы,особенности их использования.
- •24.Абстрактные классы,их назначение и использование.
- •25.Понятие области видимости:общие,личные,защищенные и опубликованные поля и методы объекта.
- •26.Указатель This и перегрузка методов.
- •27.Использование классов,различные способы инициализации.
- •28.Использование классов,работа с массивами и указателями на объекты.
- •29.Наследование,пример использования наследования.
- •30.Конструкторы и деструкторы, их значение и использование.
- •31.Архитектура пк, основные функциональные устройства и их значения.
- •32.Мп с точки зрения программиста,регистры общего назначения.
- •33.Оперативная память,понятие исполняемого и физического адреса,сегментные регистры.
- •34.Регистр флажков, его назначение и использование.
- •35.Форматы данных и форматы команд.
- •36.Адресация операндов,способы адресации,примеры команд с различными способами адресации.
- •37.Структура программы на Ассемблере.Стандартные директивы сегментации.
- •38.Формат команды и директивы на Ассемблере.Примеры команд и директив.
- •39.Алфавит,слова,константы,переменные и выражения в Ассемблере.
- •40.Директивы определения данных и памяти.
- •41.Команды прерывания, команды работы со стеком.
10.Использование динамич. Переменных для представл. И работы со стеком.
Struct tstack { int inf; tstack*next}; //описание стека
tstack *init_stack() {return NULL; } //инициализация стека
void push(tstack *&sp, init item) {tstack *r=new tstack; r->inf=item; r->next=sp; sp=r; } //добавление эл-та
int pop(tstack*&sp){ tstack*r=sp; int i=r->inf; sp=r->next; delete r; return i;} //удаление эл-та
int peek(tstack *sp){return sp->inf;} //просмотр эл-та, расположенного на вершине стека
int empty_stack(tstack*s) { return(s)&0:1;}; // определение стека на пустоту: 0, если пуст
Объединив все функции в файл stackint.h и сохранив его в папке INCLUDE, можно подключить его к любой программе с помощью #include<stackint.h>
Пример: Переписать из h в g в обратной последовательности.
# include <stdio.h> # include “stackint.h” #include <iostream> using namespace std;
FILE*h=fopen(“input_stack.txt”, “r”); FILE*g=fopen(“output.txt”, “w”);
int i; tstack*sp=init_stack(); sp=NULL while (!feof(h)) { fscanf (h, “%d”, &i);
push (sp, i); printf(“%d\t”, i); }; cout<<”\n”; while (!empty_stack(sp)) { i=pop (sp);
printf (“%d\t”, i); fprintf (g, “%d\t”, i); } ;
11.Очередь,реализация очереди массивом.
Очередь — линейный список, где все включения производится с одной стороны, а исключения и всякий доступ с другой; абстрактная структура данных, работающая по принципу FIFO. Доступ возможен с двух концов, существуют 2 переменные: head и tail.
Можно описать с помощью массива:
Const int n=100; float Queue[n], x; int head, tail;
Основные операции:
1)Инициализация очереди. Пусть head=0, tail=0. Head указывает на 1-ый элемент в очереди,tail – на последний или на 1-ю свободную ячейку. Сначала tail head чтобы не переполнить массив, присвоить tail значение 1 и заполнять очередь с начала массива, т.о. закольцованная структура. Чтобы отличить пустую ячейку от непустой, оставляем 1 ячейку свободной. Если пуста, то head=tail,если полна, то head = tail+1.
2) Взятие элементов. If (head == tail) cout<<”Очередь пуста”; else {x=Queue[head];
head=head+1; if (head == n) head = 0;}
3) Добавление элемента. r=tail +1; if (r==n) r=0; if (r==head) cout<<”Очередь полна”;
else {Queue[tail] = x; tail = r;}
12.Очередь, представление и реализация основных операций с помощью динамических переменных.
Графическое представление очереди: имеет две точки доступа. Head – для удаления элементов,tail – для добавления элементов. Описание: struct tqueue{int inf;tqueue*next};
1)Инициализация очереди: head=NULL, tail=NULL;
2)Добавление элемента в очередь: r=new tqueue; r->inf=x;r->next=NULL; if(head==NULL) {head=r; tail=r;}; else{tail->next=r; tail=r};
3)Взятие элемента из очереди: if(head!=NULL) {r=head;x=head->inf;head=head->next; delete r;}/*удаление первого элемента. r - указатель на 1-ый элемент. (r=NULL).*/
4)Освобождение динамической памяти, занятой очередью:
void clear_queue(tqueue*&head) {tqueue *r; while(head!=NULL) {r=head;head=head->next; delete r;};}