* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
16
Министерство об разования и науки Р оссийской Федерации
Казанский государственный технический университет
имени А.Н.Туполева
-------------------------------------------------------------------------------------------
Кафедра АСОИУ
КУРСОВАЯ РАБОТА
по дисциплине
«П рограммирова ни е на языке выс окого уровня »
Исполнитель: ст. гр. 24278 Мустафин Р.Г.
Руководитель: ст. преп. Бикмурзина А.Р.
Оценка_________________
Подпись________________
“___” _____________ ___20 13 г.
АЛЬМЕТЬЕВСК 2013
СОДЕРЖАНИЕ
1. ЗАДАНИЕ 3
2. ОПИСАНИЕ ПРИМЕНЕНИЯ 4
2.1. Запуск программы 4
2.2. Входные данные 4
2.3 . Сообщения программы 4
3. ОПИСАНИЕ ПРОГРАММЫ 5
3. 1. Метод ре шения задачи 5
3.2. Структура программы 5
3.3. Описание функций 5
3.3.1. main – главная функция 5
3.3.2. F romToA – список маршрутов из пункта А или в пункт А 8
3.3.3. L ongA – номер самого д линного маршрута из А или в А 9
3.3.4. R outeA – количество маршрутов каждого вида транспорта, сле дующих из А или в А 10
ЛИТЕРАТУРА 11
Приложение 1. Текст програ ммы 1 2
Приложение 2. Пример входного файла route . txt 14
Приложение 3. Результа ты тестирования программы 1 4
1. ЗАДАНИЕ
Дан файл, содержащий ин формацию о маршрутах городского транспорта. Структура записи файла:
- номер маршрута;
- вид транспорта (а - автобус, т – трамвай, м - маршрутное такси),
- начальный пункт,
- конечный пункт,
- время в пути.
Написать программу, выдающую
- список всех маршрутов из пункта А или в пункт А;
- номер самого длинного маршрута из А или в А;
- количество маршрутов каждого вида тран спорта, следующих из А или в А.
2. ОПИСАНИЕ ПРИМЕНЕНИЯ
2.1. Запуск программы
Запуск программы (файл variant 3 . c pp ) можно выполнить из среды Borland C ++ 3.1, либо из командной строки MS DOS , введя variant 3 . exe .
2.2. Входные данные
Входные данные программы находятся в файле “ route . txt ”. Число стро к в файле - произвольное. Каждая строка содержит номер ма ршрута (2 символ а ), вид транспорта ( 1 символ), начальный пункт ( 1 символ) , конечный пункт (1 с имвол), и время в пути в минутах (до 90 символов). Данные мажду собой разделяются л юбым произвольным символом. Пример строки файла:
10,а,А,Б,180
Пример входного файла приведен в приложении 2.
По запросу программы с клавиатуры необходимо ввести ном ер пункта меню (см. раздел 2.3) .
2.4. Сообщения программы
Ниже приводится перечень возможных сообщений програм мы:
1. Файл route . txt не найден
2. Выберите номер пункта меню:
3. Нужно вводить номер пункта от 1 до 4
4. С писок всех маршрутов из пунк та А или в пункт А
5. Н омер самог о длинного маршрута из А или в А
6 . Маршрутов н е найдено
7 . Самый длинн ый маршрут из А или в А - номер %u, время в пути %u
8 . К оличество маршрутов каждого вида транспорта, следующих из А или в А
9 . К оличество автобусных маршрутов из А или в А - %u
10 . К оличество трамвайных маршрутов из А или в А - %u
11 . Количество маршрутов маршрутного такси из А или в А - %u
1 2 . Для продолжения нажмите любую клав ишу
3. ОПИСАНИЕ ПРОГРАММЫ
3.1. Метод решения задачи
Задачу можно разбить на три отдельные подзадачи:
1. Поиск в файле записей, в которых пункт отпра вления или пункт назначения равен А;
2. Последовательный просмотр записей файла, отбор марш рутов из или в пункт А, поиск наиболее длинного маршрута;
3. Поиск во входном файле записей, количества маршрутов каждого вида транспорта, следующих из А или в А
Каждая подзадача решаетс я методом линейного поиска (последовательного просмотра элементов таб лицы).
Чтобы пользователь мог выбирать, какие подзадачи решать и в каком поряд ке, программа выводит на экран меню (см. раздел 2.3).
3.2. Структура программы
Рис.1. Функциональная структура программы
Программа состоит из четырех функций: г лавной функции main и четырех под программ.
F romToA – список всех маршрутов из пункт а А или в пункт А .
L ongA - номер самого длинно го маршрута из А или в А .
R outeA - количество маршруто в каждого вида транспорта, следующих из А или в А .
3.3. Описание функций
3.3.1. main – главная функция
Заголовок функции:
int main ()
Значение функции:
0 – в случае успешного завершения;
1 – если входной файл не найден.
Рабочие данные:
f ile – указатель на структуру с информацией о входном файле;
n – номер пункта меню.
16
Рис.1. Блок-схема функции main ()
3.3.2. FromToA – список всех м аршрутов из пункта А или в пункт А
Заголовок функции :
void FromToA (FILE *f ile )
Входные данные :
f ile - ссылка на входной файл
16
Рис.2. Блок-схема функции список всех маршрутов из пункта А или в пункт А
3.3.3. LongA - номер самого длинного маршрута из А или в А
Заголовок функции :
void LongA (FILE *f ile )
16
16
Рис.3. Блок-схема функции номер само го длинного маршрута из А или в А .
3.3.4. RouteA - ко личество маршрутов каждого вида транспорта, следующих из А или в А
Заголовок функции :
void RouteA (FILE *file )
16
Рис .4. Блок-с хема функции количество маршрутов ка ждого вида транспорта, следующих из А или в А .
Литература
1 . Хохлов Д.Г. Основы технологии модульного программиров ания. Учебное пособие. - Казань. Изд-во Казан. гос. техн. ун-та , 2005. - 63 с.
2 . Павлов ская Т.А. С/С++. Программирование на языке высокого уровня. - СПб: Питер, 2004г. - 461с.
3. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. - СПб: Питер, 2002 г. - 240с.
4. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 102 с.
5. Хохлов Д.Г., Захарова З.Х. Практикум по структурам дан ных и комбинаторным алгоритмам: Учебное пособие.- Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 48 с.
6. Бикмурзина А.Р. Лабораторны й практикум по программированию. - Казань: Изд-во Казан. г ос. техн. ун-та, 2000г.
Приложение 1. Текст программы
# include < stdio . h >
#include
#include
/* прототипы функций */
void FromToA(FILE *file);
void LongA(FILE *file);
void RouteA(FILE *file);
/* Основная функция */
int main()
char buffer[100]; // переменная для вход ных данных
char n; // номер пункта меню
FILE *file = fopen("route.txt", "r"); // открываем файл transport.txt
if (file == NULL) // проверка на существ ование файла
puts ("Файла route.txt не существует");
getch();
return 1;
do
clrscr(); // очистка экрана
rewind(file); //указатель на начало файла
puts ("Входные данные");
puts ("-----------------");
/* читаем данные из файла */
while (fgets (buffer, 100, file) != NULL) puts (buffer);
rewind(file); // указатель на начало файла
/* меню */
puts ("\n========================================================");
puts ("Выберите номер пункта меню:");
puts ("1 - список всех маршрутов из пункта А или в пункт А");
puts ("2 - номер самого длинного маршрута из А или в А");
puts ("3 - количество маршрутов каждого вида транспорта, следующих из А или в А");
puts ("4 - выход ");
puts ("--------------------------------------------------------");
n = getche();
switch(n)
case '1': FromToA(file); break;
case '2': LongA(file); break;
case '3': RouteA(file); break;
case '4': break;
default: puts("\nНужно вводить номер пункта от 1 до 4");
if (n!='4')
puts("\nДля продолжения нажмите любую клавишу");
getch();
while (n != '4');
return 0;
/* функция список всех маршрутов из пункта А или в пункт А */
void FromToA (FILE *file)
puts (" - список всех маршрутов из пункта А или в пункт А");
puts ("-----------------");
char buffer[100];
while (fgets (buffer, 100, file) != NULL)
if (buffer[5] == ' А ' || buffer[7] == ' А ') puts (buffer);
/* функция номер самого длинного маршрута из А или в А */
void LongA (FILE *file)
int maxTime = 0; // переменная для максимального времени
int routeNum = 0; // переменная для номера маршрута
puts (" - номер самого длинного маршрута из А или в А");
puts ("-----------------");
char buffer[100];
while (fgets (buffer, 100, file) != NULL)
if (buffer[5] == ' А ' || buffer[7] == ' А ')
if (maxTime < atoi(buffer+9))
maxTime = atoi(buffer+9);
routeNum = atoi(buffer);
if (maxTime == 0 && routeNum == 0) puts ("\n Маршрутов не найдено ");
else printf ("\nСамый длинный маршрут из А или в А - номер %u, вре мя в пути %u мин.\n", routeNum, maxTime);
/* функция количество маршрутов каждого вида транспорта, следующих из А и ли в А */
void RouteA (FILE *file)
int a = 0; // счетчик автобусных маршрутов
int t = 0; // счетчик трамвайных маршрутов
int m = 0; // счетчик маршрутов такси
puts (" - количество маршрутов каждого вида транспорта, следующих из А или в А ");
puts ("-----------------");
char buffer[100];
while (fgets (buffer, 100, file) != NULL)
if (buffer[5] == ' А ' || buffer[7] == ' А ')
if (buffer[3] == ' а ') a++;
else if (buffer[3] == ' т ') t++;
else if (buffer[3] == ' м ') m++;
printf ("Количество автобусных маршрутов из А или в А - %u\n", a);
printf ("Количество трамвайных маршрутов из А или в А - %u\n", t);
printf ("Количество маршрутов маршрутного такси из А или в А - %u\n", m);
Прило жение 2. Пример входного файла route . txt
01 а А Б 060
02 т Б В 030
03 м В А 180
04 а Б А 060
05 т В Б 060
06 м А В 180
Приложение 3. Результаты тестиро вания программы
Тест 1 . Входного файла не т в текущем каталоге.
Результат:
Файл route . txt не найден
В следующих тестах используется файл из приложения 2.
Тест 2 .
Входные данные
-----------------
01 а А Б 060
02 т Б В 030
03 м В А 180
04 а Б А 060
05 т В Б 060
06 м А В 180
========================================================
Выберите номер пункта меню:
1 - список всех маршрутов из пункта А или в пункт А
2 - номер самого длинного маршрута из А или в А
3 - количество маршрутов каждого вида транспорта, следующих из А или в А
4 - выход
--------------------------------------------------------
1 - список всех маршрутов из пункта А или в пункт А
-----------------
01 а А Б 060
03 м В А 180
04 а Б А 060
06 м А В 180
Для продолжения нажмите любую клавишу
Тест 3 .
Входные данные
-----------------
01 а А Б 060
02 т Б В 030
03 м В А 180
04 а Б А 060
05 т В Б 060
06 м А В 180
========================================================
Выберите номер пункта меню:
1 - список всех маршрутов из пункта А или в пункт А
2 - номер самого длинного маршрута из А или в А
3 - количество маршрутов каждого вида транспорта, следующих из А или в А
4 - выход
--------------------------------------------------------
2 - номер самого длинного маршрута из А или в А
-----------------
Самый длинный маршрут из А или в А - номер 3, время в пути 180 мин.
Для продолжения нажмите любую клавишу
Тест 4 .
Входные данные
-----------------
01 а А Б 060
02 т Б В 030
03 м В А 180
04 а Б А 060
05 т В Б 060
06 м А В 180
========================================================
Выберите номер пункта меню:
1 - список всех маршрутов из пункта А или в пункт А
2 - номер самого длинного маршрута из А или в А
3 - количество маршрутов каждого вида транспорта, следующих из А или в А
4 - выход
--------------------------------------------------------
3 - количество маршрутов каждого вида транспорта, следующих из А или в А
-----------------
количество автобусных маршрутов из А или в А - 2
количество трамвайных маршрутов из А или в А - 0
количество маршрутов маршрутного такси из А или в А - 2
Для продолжения нажмите любую клавишу
Тест 5 . Неверно выбран номер пункта меню
Входные данные
-----------------
01 а А Б 060
02 т Б В 030
03 м В А 180
04 а Б А 060
05 т В Б 060
06 м А В 180
========================================================
Выберите номер пункта меню:
1 - список всех маршрутов из пуекта А или в пункт А
2 - номер самого длинного маршрута из А или в А
3 - количество маршрутов каждого вида транспорта, следующих из А или в А
4 - выход
--------------------------------------------------------
6
Нужно вводить номер пункта от 1 до 4
Для продолжения нажмите любую клавишу