- •1 Билет.
- •2 Билет.
- •3 Билет.
- •4 Билет.
- •5 Билет.
- •6 Билет. Способы описания языков программирования: бнф-нотации, синтаксические диаграммы.
- •7 Билет.
- •8 Билет. Переменные, область действия, время жизни, класс памяти.
- •10 Билет.
- •19 Билет. Ввод/вывод данных на c.
- •21 Билет. Производные типы данных, массивы, работа с массивами.
- •26 Билет. Файлы прямого и последовательного доступа к данным. Форматизированный и неформатизированный ввод/вывод.
- •28 Билет. Понятие подпрограммы, назначение подпрограммы, использование подпрограмм.
- •30 Билет. Передача параметров в подпрограмму. Параметры входные и выходные, параметры передаваемые по значению и по адресу.
- •1) По значению.
- •2) По адресу.
- •31 Вопрос. Использование подпрограмм. Параметры формальные, локальные, глобальные, обращение к подпрограммам, фактические параметры.
- •32 Билет. Передача параметров-массивов в подпрограмму. Примеры.
- •33 Билет. Передача параметров-функций в подпрограмму.
- •34 Билет. Рекурсивные функции. Примеры.
- •35 Билет. Понятие структурного программирования, этап проектирования - композиция и декомпозиция, понятие статической и динамической структуры программы, спецификация программы.
- •36 Билет. Понятие частичной и полной корректности программы, правила вывода - общий вид, правила консеквенции.
- •2 Способа создания динамической переменной:
- •42. Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.
- •43. Использование динамических переменных для представления и работы со стеком.
- •44. Очередь, реализация очереди массивом.
- •45. Очередь, представление и реализация основных операций с помощью динамических переменных.
- •46. Реализация основных операций со списком: добавление, удаление, поиск.
- •47. Деревья, основные операции над деревьями, представление дерева массивом.
- •48. Двусвязные линейные списки, построение и обход бинарного дерева.
- •49. Операции поиска и удаления в бинарном дереве.
43. Использование динамических переменных для представления и работы со стеком.
44. Очередь, реализация очереди массивом.
Очередь – абстрактная структура данных, работающая по принципу FIFO (First In – First Out, первый пришел – первый ушел). Доступ к очереди возможен с двух концов, поэтому для работы с очередью необходимы 2 переменные, определяющие вход и выход. Наиболее часто используются имена tail-хвост и head-голова или front-начало и rear-конец. Очередь, так же как и стек, можно реализовать с помощью динамических переменных и массива. Операции с очередью – инициализация очереди, добавить элемент в очередь и удалить из очереди. Например, очередь, рассчитанная на 100 элементов описывается так:
const int n=100;
float Queue [n], x;
int head, tail;
Элементы массива (очереди), так же как и у стека, могут быть любого типа, в том числе и комбинированного. Инициализация очереди в данном случае это присваивание локальных значений head и tail. Если очередь пустая, то можно положить указатели, равные 0 в С++ (1 в паскале)
45. Очередь, представление и реализация основных операций с помощью динамических переменных.
Очередь - линейно связанный список, в котором все добавления компонент производятся с одной стороны, а все исключения и обработка данных - с другой стороны списка.
Дек - очередь с двумя концами.
Очередь можно описать и реализовать с помощью массива.
очередь из 100элементов:
const int n = 100;
float Queue[n],x;
int head,tail;
основные операции:
инициализация очереди
добавить элемент в очередь
удалить элемент из очереди
Инициализация очереди заключается в присваивании значений указателей head и tail
если очередь пустая, то head = 0 ; tail = 0; head указывает на 1 элемент в очереди, а tail может указывает или на последний элемент в очереди, или на первую свободную ячейку в массиве, доступную для записи информации.
В начале работы tail >= head. Чтобы не прерывать работу массива мы можем присвоить переменной tail значение 0 и продолжить заполнять очередь с начала массива. Таким образом получается закольцованная структура очереди.
Чтобы отличить пустую очередь от заполненной, смоделированной при помощи закольцованного массива, приходится оставлять одну ячейку свободной и условием того, что очередь пустая использовать выражение head=tail, а условие полной очереди tail = head +1;
добавление элемента в очередь
tail = ((tail+1)%n);
if (tail =head) cout ''очередь полна"<<endl;
else Queuep[tail]=x;
Взятие элемента из очереди
if (head == tail )
cout <<"Очередь пуста" << endl;
else (head=((head+1)%n);
x=Queue[head];
}
Движение по кольцу
Если значение tail <n-1 , то tail увеличивается на единицу.
(1%100)=1; (2%100)= 2 и т.д., но когда tail=n-1 то (99+1)%100=0
46. Реализация основных операций со списком: добавление, удаление, поиск.
Линейный список - множество, состоящее из n>=0 компонент, структурные свойства которых ограничиваются линейным положением компонент.
добавление нового элемента new за i-тым узлом
if (i==l || i>l) printf("\n нельзя добавить");
else
{ for (j=l; j>i+1; j--) d[j+1]=d[j];
d[i+1]=new; l++;
}
удаление элемента, следующего за i-тым узлом
if (i>=l) printf("\n нет следующего ");
l--;
for (j=i+1;j=l) printf("\n нет соседа");
else printf("\n %d %d",d[i-1],d[i+1]);