Автор: Пользователь скрыл имя, 29 Марта 2012 в 10:31, контрольная работа
Язык Си, созданный Денисом Ритчи в начале 70-х годов в Bell Laboratory американской корпорации AT&T, является одним из универсальных языков программирования. Язык Си считается языком системного программирования, хотя он удобен и для написания прикладных программ. Среди преимуществ языка Си следует отметить переносимость программ на компьютеры различной архитектуры и из одной операционной системы в другую, лаконичность записи алгоритмов, логическую стройность программ, а также возможность получить программный код, сравнимый по скорости выполнения с программами, написанными на языке ассемблера. Последнее связано с тем, что хотя Си является языком высокого уровня, имеющим полный набор конструкций структурного программирования, он также обладает набором низкоуровневых средств, обеспечивающих доступ к аппаратным средствам компьютера. С 1989 года язык Си регламентируется стандартом Американского института национальных стандартов ANSI С. В настоящее время, кроме стандарта ANSI C разработан международный стандарт ISO C (International Standard Organization C).
Введение
1 Постановка задачи
1.1 Общая характеристика задачи
1.2 Двоичные деревья
Конструкторы и деструкторы
Поиск
Удаление элементов
2 Разработка алгоритма задачи
2.1 Описание данных, используемых для решения задачи
2.2 Описание схемы программы
3 Кодирование программы
3.1 Описание структуры разрабатываемого пакета
4 Тестирование программы
4.1 Внешний вид программы
Заключение
Список используемой литературы:
Приложение А
В данной задаче использовались следующие данные:
исходные (входные) данные:
struct traine { //структура - дерево
unsigned long time; //время отправления в секундах
unsigned short number; //номер поезда
char *station; //имя станции
traine *left,*right;}; //указатели на левую и правую ветку дерева
выходные результаты решения:
• производит вывод всего дерева;
• вводит номер поезда и выводит все данные об этом поезде;
• вводит название станции назначения и выводит данные о всех поездах, следующих до этой станции.
Схема алгоритма отображает последовательность операций в программе.
Произведено выделение основных этапов в виде подпрограмм, выполняющих следующие действия:
ввод исходных данных;
вывод полученных результатов (поиск удовлетворяющей заявки, вывод всего списка) на экран .
Все подпрограммы выполнены в виде процедур. Основные процедуры и программа выполнены на листе. При этом описание функционального назначения блоков алгоритма приведено в комментариях.
Программа курсовой работы разработана в среде визуального программирования С++ и состоит из исполняемого файла с расширением .cpp.
Программа выполнена на основе структурного программирования(в виде бинарного дерева) и содержит следующие процедуры и функции:
struct traine { //структура - дерево
void show_all(traine *temp){ //функция вывода всего дерева - рекурсивный обход
void show_number(traine *temp, unsigned short number){ //поиск элемента с нужным номером, с учётом отсортированности дерева
void show_station(traine *temp, char st[50],bool &f){ //переменная f нужна для определения, был ли найден хотя бы 1 поезд, т.к. обход производится «втупую», т.к. дерево сортировано не по имени станции
int main() { //главная функция
Запуск программы производится из среды C++ нажатием клавиш F5. При запуске программа сама просит ввести все необходимые данные и сохраняет результаты в текстовый файл.
Основное окно программы имеет вид:
Рис. 1 – Основное окно программы
это диалоговое окно-меню, где выбирается необходимая операция;
При выборе первой операции (ввод данных) программа будет выглядеть следующим образом:
Рис. 2 – Выбор первой операции
При выборе второй операции программа будет выглядеть следующим образом:
Рис. 3 – Выбор второй операции
Рис. 4 – Выбор третьей операции
Рис. 5 – Выбор четвертой операции
В данной курсовой работе разработана программа ввода данных о поезда с различными типами полей, поиска поезда, соответствующей условиям задания, вывода всего дерева поездов на экран.
При работе над программой пройдены все этапы создания программных продуктов. Получены навыки в описании бинарного дерева, разработке алгоритма программы, составлении текста программы и проведении тестирования программы. Использована среда программирования C++.
6. S.Dewhurst, K.Stark. Programming in C++. - Prentice Hall, 1989.
7. M.Ellis, B.Stroustrup. The annotated C++ Reference Manual. - Addison-Wesley, 19
8. ТО 04-2008
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
struct traine { //структура - дерево
unsigned long time; //время отправления в секундах
unsigned short number; //номер поезда
char *station; //имя станции
traine *left,*right;}; //указатели на левую и правую ветку дерева
traine* add(traine *beg, unsigned short number, unsigned long time, char station[50]) //функция добавления элемента в дерево
{
if (!beg) { //если дерево пустое
traine *temp=new traine;
temp->number=number;
temp->time=time;
temp->station = new char[];
temp->station=station;
temp->left=0;
temp->right=0;
return temp;
} //если дерево не пустое, начинается рекурсивный вход в него
else if ((number)>(beg->number)) { //бОльшие номера идут в правое поддерево
beg->right=add(beg->right,
return beg;
}
else { //меньшие номера идут в левое поддерево
beg->left=add(beg->left,
return beg;}
}
void show_all(traine *temp){ //функция вывода всего дерева - рекурсивный обход слева направо
unsigned long d,h,m,s,t;
if (temp){
show_all(temp->left);
t=temp->time;s=t%60;t=(t-s)/
cout << “Train number:” << temp->number << endl << “Start time(d/h/m/s):” << d << “:” << h << “:” << m << “:” << s << endl << “Station:” << temp->station << endl;
show_all(temp->right);}
}
void show_number(traine *temp, unsigned short number){ //поиск элемента с нужным номером, с учётом отсортированности дерева
unsigned long d,h,m,s,t;
if (temp){
if (temp->number<number) {show_number(temp->right,
else if (temp->number>number) {show_number(temp->left,
else{
t=temp->time;s=t%60;t=(t-s)/
cout << “Train number:” << temp->number << endl << “Start time(d/h/m/s):” << d << “:” << h << “:” << m << “:” << s << endl << “Station:” << temp->station << endl;
return;}
}
cout << “There is no such records\n”;}
void show_station(traine *temp, char st[50],bool &f){ //переменная f нужна для определения, был ли найден хотя бы 1 поезд, т.к. обход производится «втупую», т.к. дерево сортировано не по имени станции
if (temp){
if (st == (temp->station)) //если найден подходящий поезд
{
f=1;
unsigned long d,h,m,s,t,f;
t=temp->time;s=t%60;t=(t-s)/
cout << “Train number:” << temp->number << endl << “Start time(d/h/m/s):” << d << “:” << h << “:” << m << “:” << s << f<<endl << “Station:” << temp->station << endl << endl;
}
show_station(temp->right,st,f)
show_station(temp->left,st,f);
}
}
int main() { //главная функция
char k; //временная переменная для чтения 1 символа для выбора пунктов меню
bool f; //переменная для использования с функцией поиска по имени станции
char strtmp[80]; //временная переменная для чтения с клавиатуры
traine *list=0; //дерево, изначально являющееся пустым
unsigned short d,h,m,s; //переменные для разложения времени на дни, часы, минуты и секунды
unsigned short number; //временный номер
char station[30]; //временная станция
do{//главный цикл меню
cout << “Enter your choice:\n[1] Add new record\n[2] View all records\n[3] View a specific train number\n[4] View all trains aimed to a specified station\n[0] Exit program\n”;
do{
cin >> k;//ввод выбора (а далее всё понятно и так)
if (k==’1’){
do{
cout << “Train number:\n”;
cin >> strtmp;
number=atoi(strtmp);
}while (!(number>0));
do{
cout << “Number of days:\n”;
cin >> strtmp;
d=atoi(strtmp);
cout << “Number of hours:\n”;
cin >> strtmp;
h=atoi(strtmp);
cout << “Number of minutes:\n”;
cin >> strtmp;
m=atoi(strtmp);
cout << “Number of seconds:\n”;
cin >> strtmp;
s=atoi(strtmp);
}while(d==0 && h==0 && m==0 && s==0);
cout << “Station name:\n”;
cin >> station;
list=add(list,number,s+m*60+h*
}
else if (k==’2’){
if (list){
show_all(list);}
else {cout << “There is no trains\n”;}}
else if (k==’3’){
cout << “Enter a train number:”;
do{
cin >> strtmp;
number=atoi(strtmp);
}while (!(number>0));
show_number(list,number);}
else if (k==’4’){
cout << “Enter a station name:”;
cin >>station;
f=0;
show_station(list,station,f);
if (!f) {cout << “There is no trains\n”;}
}
}while (!((k==’4’)||(k==’3’)||(k==’2’
}while (!(k=='0'));
return 1;}
Информация о работе Контрольная по "Программированию бинарных деревьев на языке СС++"