- •2. Методические указания к выполнению лабораторных работ
- •Лабораторная работа №1 Следование
- •Варианты индивидуальных заданий Выполнить поразрядные логические операции над машинными кодами
- •Пример программы
- •Лабораторная работа №2 Операторы ветвления
- •Варианты индивидуальных заданий
- •Пример разработки математической модели и схемы алгоритма решения задачи для варианта задания вида:
- •Текст программы
- •Лабораторная работа №3 Операторы цикла
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №4 Статические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку одномерного массива
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №5 Динамические массивы
- •Варианты индивидуальных заданий
- •Пример программы на обработку одномерного массива
- •Пример программы на обработку двумерного массива (матрицы)
- •Лабораторная работа №6 Методы сортировки
- •Варианты индивидуальных заданий Методы сортировки
- •Области сортировки элементов матриц
- •Примеры программ
- •Лабораторная работа №7 Передача имён функций в качестве параметров
- •Текст программы
- •Лабораторная работа №8 Строки и текстовые файлы
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №9 Структуры и файлы структур
- •Пример программы
- •Лабораторная работа №10 Линейные списки
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №11 Стек, дек, очередь
- •Варианты индивидуальных заданий
- •Пример программы
- •Лабораторная работа №12 Классы
- •Варианты индивидуальных заданий
- •Примеры программ
- •Литература
Пример программы
Пример №1
//Демонстрация работы со стеком
//Многофайловый проект
//Основной файл STEK_MOD.CPP
//
#include <iostream.h>
#include "MODUL_ST.H"
//main__Begin__________________________________________________________
int main()
{stek* head ;
t_elem ch ;
head = init_stek() ; //инициализируем стек
view_stek(head) ;
cout << "\n Вводите элементы стека сплошной строкой;"
"\n в конце - точка:" << endl ;
cin >> ch ;
while(ch != '.')
{head = push_stek(ch, head) ;
cin >> ch ;
}
cin.get() ;
cout << " Исходное содержимое стека:" << endl ;
if(!pu_stek(head)) view_stek(head) ;
else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
//Извлекаем первый элемент
if(!pu_stek(head)) head = pop_stek(head, ch) ;
else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
//Извлекли
cout << "\n Извлекли: " << ch << endl ;
//Осталось в стеке
cout << " Осталось:" << endl ;
if(!pu_stek(head)) view_stek(head) ;
else {cout << "Стек пуст. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
cout << "\n Демонстрация закончена. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
//main__End____________________________________________________________
//Заголовочный файл MODUL_ST.H
//Определение типов
typedef char t_elem ; //тип информационной части элемента стека
struct stek //тип элемента стека
{t_elem data ; //поле данных
stek* link ; //поле адреса
} ;
//Объявления (прототипы) функций
stek* init_stek() ; //инициализация стека
int pu_stek(stek*) ; //проверка стека на пустоту
stek* push_stek(t_elem, stek*) ; //добавление элемента в стек
stek* pop_stek(stek*, t_elem&) ; //извлечение элемента из стека
void view_stek(stek*) ; //вывод содержимого стека
//Исходный файл модуля работы со стеком MODUL_ST.CPP
//Содержит определения функций для работы со стеком
//
#include <iostream.h>
#include "MODUL_ST.H"
//view_stek__Begin________________________________________________________
//Просмотр содержимого стека
void view_stek(stek* head)
{stek* tec = head ;
while(!pu_stek(tec))
{cout << tec->data ;
tec = tec->link ;
}
return ;
}
//view_stek__End__________________________________________________________
//push_stek__Begin________________________________________________________
//Занесение нового элемента в стек
stek* push_stek(t_elem ch, stek* head)
{stek* nov = new(stek) ; //выделяем память под элемент стека
nov->data = ch ; //заполняем поля
nov->link = head ;
head = nov ; //указатель на начало стека
return(head) ;
}
//push_stek__End__________________________________________________________
//pop_stek__Begin_________________________________________________________
//Извлечение элемента из стека
stek* pop_stek(stek* head, t_elem& ch)
{stek* tec = head->link ;
ch = head->data ; //копируем информационную часть головного элемента
delete(head) ; //освобождаем память
return(tec) ;
}
//pop_stek__End___________________________________________________________
//init_stek__Begin________________________________________________________
//Инициализация стека
stek* init_stek()
{return(NULL) ; //в исходном состоянии стек пуст
}
//init_stek__End__________________________________________________________
//pu_stek__Begin__________________________________________________________
//Проверка стека на пустоту
int pu_stek(stek* head)
{return(head == NULL) ; //стек пуст - 0
//стек не пуст - не 0
}
//pu_stek__End____________________________________________________________
Пример №2
//Демонстрация работы с очередью
//Многофайловый проект
//Основной файл OCHER_MO.CPP
//
#include <iostream.h>
#include "mod_oche.h"
//main__Begin_____________________________________________________________
int main()
{ocher* o_beg,
* o_end ;
t_elem ch ;
init_ocher(&o_beg, &o_end) ; //инициализируем очередь
cout << "\n Вводите элементы очереди сплошной строкой;"
"\n в конце - точка:" << endl ;
cin >> ch ;
while(ch != '.')
{add_ocher(ch, &o_beg, &o_end) ;
cin >> ch ;
}
cin.get() ;
cout << " Исходное содержимое очереди:" << endl ;
if(!pu_ocher(o_beg)) view_ocher(o_beg) ;
else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
//Извлекаем первый элемент
if(!pu_ocher(o_beg)) o_beg = del_ocher(o_beg, ch) ;
else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
//Извлекли
cout << "\n Извлекли: " << ch << endl ;
//Осталось в очереди
cout << " Осталось:" << endl ;
if(!pu_ocher(o_beg))
view_ocher(o_beg) ;
else {cout << " Очередь пуста. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
cout << "\n Демонстрация закончена. Нажмите Enter->" ; cin.get() ;
return(0) ;
}
//main__End_______________________________________________________________
//Модуль работы с очередью
//Заголовочный файл MOD_OCHE.H
//
//Объявления типов
typedef char t_elem ; //тип информационной части элемента очереди
struct ocher //тип элемента очереди
{t_elem data ; //поле данных
ocher* link ; //поле адреса
} ;
//Объявления (прототипы) функций для работы с очередью
void init_ocher(ocher**, ocher**) ; //инициализация очереди
int pu_ocher(ocher*) ; //проверка очереди на пустоту
void view_ocher(ocher*) ; //вывод содержимого очереди
void add_ocher(t_elem, ocher**, ocher**) ; //добавление элемента
ocher* del_ocher(ocher*, t_elem&) ; //удаление элемента из очереди
//_______________________________________________________________________
//Исходный файл mod_oche.cpp
//
#include <iostream.h>
#include "mod_oche.h"
//view_ocher__Begin_______________________________________________________
//Просмотр содержимого очереди
void view_ocher(ocher* o_beg)
{ocher* tec = o_beg ;
while(!pu_ocher(tec))
{cout << tec->data ;
tec = tec->link ;
}
return ;
}
//view_ocher__End_________________________________________________________
//add_ocher__Begin________________________________________________________
//Занесение нового элемента в очередь
void add_ocher(t_elem ch, ocher** o_beg, ocher** o_end)
{ocher* nov = new(ocher) ; //выделяем память под элемент очереди
nov->data = ch ; //заполняем поля
nov->link = NULL ;
if(pu_ocher(*o_beg)) *o_beg = nov ; //если очередь пуста меняем адрес головы
else (*o_end)->link = nov ; //подсоединяем новый элемент
*o_end = nov ; //указатель на последний элемент очереди
return ;
}
//add_ocher__End__________________________________________________________
//del_ocher__Begin________________________________________________________
//Извлечение элемента из очереди
ocher* del_ocher(ocher* o_beg, t_elem& ch)
{ocher* tec = o_beg->link ; //меняем адрес головы
ch = o_beg->data ; //копируем информационную часть головного элемента
delete(o_beg) ; //освобождаем память
return(tec) ; //возвращаем новый адрес головы
}
//del_ocher__End__________________________________________________________
//init_ocher__Begin_______________________________________________________
//Инициализация очереди
void init_ocher(ocher** o_beg, ocher** o_end)
{*o_beg = NULL ; //в исходном состоянии очередь пуста
*o_end = NULL ;
return ;
}
//init_ocher__End_________________________________________________________
//pu_ocher__Begin_________________________________________________________
//Проверка очереди на пустоту
int pu_ocher(ocher* o_beg)
{return(o_beg == NULL) ; //очередь пуста - 0
//очередь не пуста - не 0
}
//pu_ocher__End___________________________________________________________
