Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Название:Язык программирования C. Лекции и упражнения (6-е изд.) 2015
- Автор:
- Жанр:
- Издательство:Вильямс
- Год:0101
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание
Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Полный код для моделирования консультационного киоска в торговом центре представлен в листинге 17.9. В соответствие с методом, предложенным в главе 12, для генерации случайных значений применяются стандартные функции rand(), srand() и time(). Чтобы можно было использовать программу, обновите определение типа Item в файле queue.h следующим образом:
typedef struct item
{
long arrive; // время присоединения клиента к очереди
int processtime; // желаемое количество минут консультации
} Item;
Не забудьте также выполнить компоновку mall.с с queue.с.
Листинг 17.9. Программа mall.с
758 глава 17
Расширенное представление данных
Программа позволяет указывать количество часов моделирования и среднее число клиентов, обращающихся за консультацией в течение часа. Выбор большого количества часов моделирования обеспечит получение довольно точных средних значений, тогда как малое количество часов дает своего рода случайную вариацию, которая может иметь место от часа к часу. Эти моменты демонстрируют показанные ниже результаты пробных запусков. Обратите внимание, что средние значения длины очереди и времени ожидания для 80 часов и для 800 часов почти совпадают, но результаты двух одночасовых выборок существенно отличаются как друг от друга, так и от средних значений для более длительных периодов. Это обусловлено тем, что меньшие статистические выборки характеризуются большими относительными вариациями.
Учебный пример: консультационный киоск Зигмунда Ландера Введите длительность моделирования в часах:
80
Введите среднее количество клиентов, прибывающих за час:
20
принятых клиентов: 1633 обслуженных клиентов: 1633 отказов: О
средняя длина очереди: 0.46 среднее время ожидания: 1.35 мин
Учебный пример: консультационный киоск Зигмунда Ландера Введите длительность моделирования в часах:
800
Введите среднее количество клиентов, прибывающих за час:
20
принятых клиентов: 16020 обслуженных клиентов: 16019 отказов: О
средняя длина очереди: 0.44 среднее время ожидания: 1.32 мин
Учебный пример: консультационный киоск Зигмунда Ландера
760 глава 17
Введите длительность моделирования в часах:
1
Введите среднее количество клиентов, прибывающих за час:
20
принятых клиентов: 20 обслуженных клиентов: 20 отказов: О
средняя длина очереди: 0.23 среднее время ожидания: 0.70 мин
Учебный пример: консультационный киоск Зигмунда Ландера Введите длительность моделирования в часах:
1
Введите среднее количество клиентов, прибывающих за час:
20
принятых клиентов: 22 обслуженных клиентов: 22 отказов: 0
средняя длина очереди: 0.75 среднее время ожидания: 2.05 мин
Еще один способ применения этой программы предусматривает сохранение длительности моделирования неизменной, но указание разных средних значений числа клиентов, прибывающих в течение часа. Ниже приведены результаты двух пробных запусков программы для исследования такой вариации.
Учебный пример: консультационный киоск Зигмунда Ландера Введите длительность моделирования в часах:
ВО
Введите среднее количество клиентов, прибывающих за час:
25
принятых клиентов: 1960 обслуженных клиентов: 1959 отказов: 3
средняя длина очереди: 1.43 среднее время ожидания: 3.50 мин
Учебный пример: консультационный киоск Зигмунда Ландера Введите длительность моделирования в часах:
ВО
Введите среднее количество клиентов, прибывающих за час:
30
принятых клиентов: 2376 обслуженных клиентов: 2373 отказов: 94
средняя длина очереди: 5.85 среднее время ожидания: 11.83 мин
Обратите внимание на резкое возрастание среднего времени ожидания с увеличением частоты прибытия клиентов. Среднее время ожидания при 20 клиентах в час (80-часовое моделирование) составило 1,35 минуты. Это значение возрастает до 3,5 минуты при 25 клиентах в час и до 11,83 минуты при 30 клиентах в час. Кроме того, количество отказов возрастает от 0 до 3 и до 94 соответственно. Зигмунд мог бы воспользоваться подобным анализом для принятия решения о необходимости открытия второго киоска.
Расширенное представление данных 761
Сравнение связного списка и массива
Многие задачи программирования, такие как создание списка или очереди, могут решаться с помощью связного списка, под которым мы понимаем связанную последовательность динамически выделяемых структур, или посредством массива. Каждая форма обладает преимуществами и недостатками, поэтому выбор между ними зависит от конкретных требований задачи. Основные характеристики связных списков и массивов приведены в табл. 17.1.
Таблица 17.1. Сравнение массивов и связных списков
Давайте более пристально взглянем на процесс вставки и удаления элементов. Для вставки элемента в массив необходимо переместить элементы, чтобы освободить место под новый элемент (рис. 17.9). Чем ближе к началу массива должен быть помещен новый элемент, тем больше элементов потребуется переместить. В то же время для вставки узла в связный список достаточно присвоить значения двум указателям (рис. 17.10). Аналогично, удаление элемента из массива требует полного изменения расположения элементов, а для удаления узла из связного списка достаточно переустановки указателя и освобождения памяти, которую занимал удаленный узел.
Теперь посмотрим, как получить доступ к элементам списка. В массиве для непосредственного обращения к любому элементу можно применять индекс массива. Это называется произвольным доступом. В связном списке необходимо начинать с начала списка и затем переходить от узла к узлу до тех пор, пока не будет достигнут желаемый узел; это называется n о еле д овател ън ым доступом.
Рис. 1 7.9. Вспшвка элемента в массив
глава 17
Последовательный доступ может быть также реализован и в массиве. Для упорядоченного перемещения по массиву достаточно инкрементировать его индекс. В одних ситуациях последовательного доступа вполне достаточно. Например, если требуется отобразить каждый элемент в списке, то последовательный доступ прекрасно подойдет В других ситуациях, как будет показано далее, наличие произвольного доступа дает огромное преимущество.
Читать дальшеИнтервал:
Закладка: