Министерство образования и науки Российской Федерации Казанский государственный технический университет имени А.Н.Туполева Кафедра АСОИУ КУРСОВАЯ РАБОТА по дисциплине «Программирование на языке высокого уровня» Исполнитель: ст. гр. 24278 Мустафин Р.Г. Руководитель: ст. преп. Бикмурзина А.Р.
Оценка Подпись “ ” 2013г. АЛЬМЕТЬЕВСК 2013 СОДЕРЖАНИЕ 1. ЗАДАНИЕ 2. ОПИСАНИЕ ПРИМЕНЕНИЯ 1. Запуск программы 2. Входные данные 3. Сообщения программы 3. ОПИСАНИЕ ПРОГРАММЫ 1. Метод решения задачи 2. Структура программы 3. Описание функций 5 3.3.1. main – главная функция 5
2. FromToA – список маршрутов из пункта А или в пункт А 3. LongA – номер самого длинного маршрута из А или в А 4. RouteA– количество маршрутов каждого вида транспорта, следующих из А или в А 10 ЛИТЕРАТУРА 11 Приложение 1. Текст программы 12 Приложение 2. Пример входного файла route.txt 14 Приложение 3. Результаты тестирования программы
1. ЗАДАНИЕ Дан файл, содержащий информацию о маршрутах городского транспорта. Структура записи файла: – номер маршрута; – вид транспорта (а – автобус, т – трамвай, м -маршрутное такси), – начальный пункт, – конечный пункт, – время в пути. Написать программу, выдающую – список всех маршрутов из пункта А или в пункт А; – номер самого длинного маршрута из А или в А; – количество маршрутов каждого вида транспорта, следующих из А или в А.
2. ОПИСАНИЕ ПРИМЕНЕНИЯ 1. Запуск программы Запуск программы (файл variant3.cpp) можно выполнить из среды Borland C++ 3.1, либо из командной строки MS DOS, введя variant3.exe . 2. Входные данные Входные данные программы находятся в файле “route.txt”. Число строк в файле – произвольное. Каждая строка содержит номер маршрута (2 символа), вид транспорта (1 символ), начальный пункт (1 символ), конечный пункт (1 символ), и время в пути в минутах (до 90 символов). Данные мажду собой разделяются любым произвольным символом. Пример строки файла: 10,а,А,Б,180 Пример входного файла приведен в приложении 2. По запросу программы с клавиатуры необходимо ввести номер пункта меню (см. раздел 2.3). 4. Сообщения программы Ниже приводится перечень возможных сообщений программы: 1. Файл route.txt не найден 2. Выберите номер пункта меню:
3. Нужно вводить номер пункта от 1 до 4. Список всех маршрутов из пункта А или в пункт А 5. Номер самого длинного маршрута из А или в А 6. Маршрутов не найдено 7. Самый длинный маршрут из А или в А – номер %u, время в пути %u 8. Количество маршрутов каждого вида транспорта, следующих из А или в А 9. Количество автобусных маршрутов из А или в А – %u
10. Количество трамвайных маршрутов из А или в А – %u 11. Количество маршрутов маршрутного такси из А или в А – %u 12. Для продолжения нажмите любую клавишу 3. ОПИСАНИЕ ПРОГРАММЫ 1. Метод решения задачи Задачу можно разбить на три отдельные подзадачи: 1. Поиск в файле записей, в которых пункт отправления или пункт назначения равен А;
2. Последовательный просмотр записей файла, отбор маршрутов из или в пункт А, поиск наиболее длинного маршрута; 3. Каждая подзадача решается методом линейного поиска (последовательного просмотра элементов таблицы). Чтобы пользователь мог выбирать, какие подзадачи решать и в каком порядке, программа выводит на экран меню (см. раздел 2.3). 2. Структура программы Рис.1. Функциональная структ
ура программы Программа состоит из четырех функций: главной функции main и четырех подпрограмм. FromToA – список всех маршрутов из пункта А или в пункт А. LongA – номер самого длинного маршрута из А или в А. RouteA – количество маршрутов каждого вида транспорта, следующих из А или в А. 3. Описание функций 3.3.1. main – главная функция Заголовок функции: int main () Значение функции: 0 – в случае успешного завершения; 1 – если входной файл не найден. Рабочие данные: file – указатель на структуру с информацией о входном файле; n – номер пункта меню. Рис.1. Блок-схема функции main() 2. FromToA – список всех маршрутов из пункта А или в пункт А Заголовок функции: void FromToA (FILE *file) Входные данные: file – ссылка на входной файл Рис.2. Блок-схема функции список всех маршрутов из пункта А или в пункт
А 3. LongA- номер самого длинного маршрута из А или в А Заголовок функции: void LongA (FILE *file) Рис.3. Блок-схема функции номер самого длинного маршрута из А или в А. 4. RouteA (FILE *file) Рис.4. Блок-схема функции количество маршрутов каждого вида транспорта, следующих из А или в А. Литература
1. Хохлов Д.Г. Основы технологии модульного программирования. Учебное пособие Казань. Изд-во Казан. гос. техн. ун-та , 2005 63 с. 2. Павловская Т.А. С/С++. Программирование на языке высокого уровня СПб: Питер, 2004г 461с. 3. А Щупак Ю.А. С/С++. Структурное программирование: Практикум СПб: Питер, 2002 г 240с. 4. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие Казан
ь: Изд-во Казан. гос. техн. ун-та, 2005 102 с. 5. Г Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие Казань: Изд-во Казан. гос. техн. ун-та, 2005 48 с. 6. Бикмурзина А.Р. Лабораторный практикум по программированию Казань: Изд-во Казан. гос. техн. ун-та, 2000г. Приложение 1.
Текст программы #include <stdio.h> #include <conio.h> #include <stdlib.h> /* прототипы функций */ 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 (" ="); 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(" Нужно вводить номер пункта от 1 до 4&quo
t;); } if (n!=’4′) { puts(" Для продолжения нажмите любую клавишу"); 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 (" Маршрутов не найдено"); else printf (" Самый длинный маршрут из А или в А – номер %u, время в пути %u мин. ", 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 ", a); printf ("Количество трамвайных маршрутов из А или в А – %u ", t); printf ("Количество маршрутов маршрутного такси из А или в А – %u ", m); } Приложение 2. Пример входного файла route.txt 01 а А Б 060 02 т Б В 030 03 м В А 180 04 а Б А 060 05 т В Б 060 0
6 м А В 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 Для продолжения нажмите любую клавишу