- •Министерство образования и науки российской федерации
- •Содержание
- •Введение
- •Лабораторная работа № 1. Среда разработки приложений Microsoft Visual Studio .Net 2010
- •Основные сведения
- •Создание консольного приложения
- •Содержание файла «TestProject.Cpp»
- •Содержание файла «stdafx.Cpp»
- •Содержание файла «stdafx.H»
- •Задание на работу
- •Текст II
- •Текст III
- •Содержание отчета
- •Лабораторная работа № 2. Представление данных в эвм
- •Задание на работу
- •Входные данные
- •Пример выполнения задания
- •Классы выделяемых литер
- •Классы выделяемых лексем
- •Диаграмма (граф) переходов
- •Входной файл
- •Выходной файл
- •Содержание отчета
- •Лабораторная работа № 4. Работа со стеком
- •Задание на работу
- •Пример содержимого заголовочного файла lab_stack.H
- •Алгоритмы для реализации атд «Стек» на языке Си
- •Реализация при помощи массива
- •Реализация при помощи связанных структур
- •Содержание отчета
- •Контрольные вопросы для допуска к лабораторной работе
- •Лабораторная работа № 5. Работа с очередью
- •Задание на работу
- •Пример содержимого заголовочного файла lab_queue.H
- •Алгоритмы для реализации атд «Очередь» на языке Си
- •Реализация при помощи массива
- •Реализация при помощи связанных структур
- •Содержание отчета
- •Контрольные вопросы для допуска к лабораторной работе
- •Лабораторная работа № 6. Хеширование
- •Задание на работу
- •Пример индивидуального задания на работу
- •Входные данные
- •Выходные данные
- •Содержание отчета
- •Пример входных данных
- •Краткая теоретическая справка
- •Задача о программисте Пете
- •Входные данные
- •Выходные данные
- •Математическая модель
- •Решение задачи о программисте Пете полным перебором
- •Текст программы
- •Генератор тестовых наборов
- •Текст программы
- •Литература
Алгоритмы для реализации атд «Стек» на языке Си
Реализация при помощи массива
// включение элемента в стек
int push(int *stack, const int StkSiz, int& StkTop, int Data)
{
if (StkTop >= StkSiz)
return 0;
else
{
stack[StkTop] = Data;
++StkTop;
return 1;
}
}
// исключение элемента из стека
int pop(int* stack, const int StkSiz, int& StkTop, int& Data)
{
if (StkTop != 0)
{
Data = stack[StkTop];
--StkTop;
return 1;
}
else return 0;
}
// инициализация стека
int StkInit(int* stack, const int StkSiz, int& StkTop)
{
for (int i = 0; i < StkSiz; ++i)
{
stack[i] = 0;
}
StkTop = 0;
return 1;
}
Реализация при помощи связанных структур
struct Stack // Структура
{
Int tData;
Stack* pNext;
}
*Point;
// включение элемента в стек
int push(int &StkSiz, int MaxSiz, int Data, Stack **point)
{
if (StkSiz >= MaxSiz) return 0;
else
{
Stack *point1 = new Stack();
point1->tData = Data;
point1->pNext = *point;
*point = point1;
StkSiz++;
return 1;
}
}
// исключение элемента из стека
int pop(int &StkSiz, int MaxSiz, int& Data, Stack **point)
{
if (StkSiz == 0) return 0;
else
{
Stack *point1 = *point;
Data = point1->tData;
*point = (**point).pNext;
delete point1;
StkSiz--;
return 1;
}
}
// инициализация стека
int StkInit(int& StkSiz, Stack **point)
{
*point = NULL;
StkSiz = 0;
return 1;
}
// пример выполнения приложения
int main()
{
int MaxSize = 5;
int StkSize, i;
printf("Dynamic Stack testing\n\n");
StkInit(StkSize, &point);
for (i = 1; i < 10; i++)
{
if (push(StkSize, MaxSize, i, &point))
printf("Added: %i, result - true\n", i,);
else
printf("Added: %i, result - false\n", i,);
}
Int dat = -1;
for (i = 1; i < 10; i++)
{
If (pop(StkSiz, MaxSiz, Dat, &point))
printf("Removed: %i, result - true\n", dat);
else
printf("Removed: %i, result - false\n", dat);
}
return 0;
}
Содержание отчета
1. Текст задания.
2. Описание основных алгоритмов, реализованных в программе.
3. Тексты программ.
4. План тестирования и отладки.
5.Оценка эффективности алгоритмов.
6. Результаты тестирования.
7. Выводы по работе.
Контрольные вопросы для допуска к лабораторной работе
Дайте характеристику АТД «Стек».
Нарисуйте модель, использованную при реализации АТД «Стек» с помощью массива.
Нарисуйте модель, использованную при реализации АТД «Стек» посредством динамических переменных.
Напишите функцию для инициализации АТД «Стек».
Напишите список параметров-переменных функции Push.
Напишите список параметров-переменных функции Pop.
Сравните затраты оперативной памяти при различных способах реализации АТД «Стек».
Лабораторная работа № 5. Работа с очередью
Целью работы является изучение основных операций при работе с очередью и приобретение навыков программной реализации очереди с использованием языка программирования C++ и его стандартной библиотеки.
Задание на работу
Изучить способы реализации очереди при использовании массивов и связанных структур.
Получить индивидуальное задание.
Написать два варианта программы на языке программирования Си. В программе инициализируется очередь и затем выполняется заданная последовательность операций с очередью с данными заданной структуры. Первый вариант использует для организации очереди массив, второй использует для организации очереди реализацию из стандартной библиотеки C++ - std::queue<>.
Входные данные должны поступать из файла с именем «input.txt», результат записываться в файл с именем «output.txt».
Программа должна состоять из следующих частей:
Заголовочный файл с объявлениями функций работы с очередью (lab_queue.h).
Два файла с реализациями функций работы с очередью (lab_queue.cpp)
Файл с алгоритмом решения предложенной задачи (main.cpp)
Файл с алгоритмом решения должен работать с очередью только через функции, описанные в заголовочном файле. Программа должна быть спроектирована таким образом, чтобы способ реализации очереди можно было бы изменить, заменив только файл lab_queue.cpp.
Определение структуры Queue должно находиться в файле lab_queue.cpp. Структура включает в себя данные, необходимые для реализации очереди выбранным способом (массив в одном случае или объект std::queue в другом). Программа пользователя библиотеки (main.cpp) не имеет доступа к определению структуры и пользуется функциями, объявленными в lab_queue.h.
Имена функций и параметров в lab_queue.hмогут отличаться от предложенных ниже, но принцип организации интерфейса должен оставаться тем же.
В начале своей работы программа должна создать очередь с помощью функции queue_create, а в конце – удалить с помощью queue_clear. Для работы с очередью (добавление элементов, удаление элементов и т.п.) используются соответствующие функции, объявленные в lab_queue.h.