- •Часть 2
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Задачи изучения дисциплины. В результате изучения дисциплины «Основы информатики и программирования» студенты должны:
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах
- •2. Перечень тем лабораторных занятий,
- •Теоретический раздел Лекции
- •Int I; // I - счетчик членов ряда
- •X, // аргумент функции
- •Int newton(double (*f)(double), // Функция
- •1. Типы данных – простые и составные.
- •2. Агрегирование данных.
- •3. Генерация «псевдослучайных» данных.
- •4. Абстрактные типы данных.
- •5. Статические и динамические структуры данных.
- •6. Последовательности (динамические массивы).
- •7. Реализация операций над последовательностями.
- •Int nMaxSize; // Размер выделенной области памяти
- •Int nSize; // Количество элементов последовательности
- •1. Понятие стека. Операции над стеком.
- •2. Программная реализация стека на основе статического массива.
- •3. Использование стека при организации связи функций в языке Си и в операционной системе.
- •4. Понятие очереди. Операции над очередями. Кольцевая очередь. Деки.
- •5. Программная реализация очереди на основе статического массива.
- •1. Структура данных «список».
- •4. Реализация списков на основе динамических структур.
- •5. Двусвязный список и его программная реализация.
- •6. Кольцевые списки
- •7. Многосвязные (слоеные) списки
- •Фаза 1 сортировки: построение пирамиды
- •Фаза 2: собственно сортировка
- •Разделение массива
- •Общий алгоритм
- •Практический раздел
- •Контрольные работы
- •Контрольная работа №1
- •Указания по выбору варианта
- •Варианты контрольных заданий
- •Теоретическая часть (вопросы)
- •Практическая часть Контрольное задание №1. Организация распределения продукции в логистической системе
- •Исходные данные к контрольному заданию №1
3. Генерация «псевдослучайных» данных.
Часто возникает задача генерации случайных данных, на которых программа испытывается. Система программирования VisualС++ осуществляет поддержку решения поставленной задачи, предлагая функции:
int rand( void) |
Генерация псевдослучайного целого числа из интервала от 0 до RAND_MAX (RAND_MAX определен как0x7fff) |
void srand(unsigned int seed) |
Установка начального значения генератора псевдослучайных чисел |
Эти функции описаны в заголовочном файле stdlib.h.
Встроенный генератор позволяет получать серию псевдослучайных целых чисел. Первое обращение к функции randинициирует начальную установку генератора, эквивалентную исполнению функцииsrand(1).
Всегда можно повторить проведенный эксперимент, указывая ту же самую начальную установку, или, наоборот, проводить новые эксперименты, задавая разные начальные установки.
В случае, когда хотим получать набор значений из некоторого ограниченного интервала [a,b], достаточно неплохие результаты дает следующий прием:
a+rand()%((b–a)+1),
т.е. вместо самого случайного числа используем остаток от его деления на длину интервала.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
int i, j, a = 1, b=3; /* Display 9 numbers. */
for( i = 0; i < 9; i++ ) {
j = rand();
printf( "%2u.%6d %d\n", i+1, j, a+j%(b-a+1) );
}
getch();
}
Результат работы этой программы представлен на рисунке:
В случае, когда необходимо использование вещественных чисел, удобно воспользоваться псевдослучайными числами из интервала [0,1], которые могут быть получены как (double)rand()/(double)RAND_MAX.
Как правило, «грязные» генераторы (псевдо)случайных чисел используются тогда, когда в моделируемый процесс нужно внести некоторую стохастику (хаос), не слишком заботясь о точном соответствии свойств генерируемого распределения математически равномерному. Кроме того, к «грязным» отнесены те генераторы, которые используют свойства представления чисел в конкретном компьютере для оптимального по быстродействия коду. При этом они могут иметь хорошее распределение, а время их работы может быть в десятки раз меньшим, чем время работы чистых.
«Чистые» генераторы обеспечивают равномерное распределение случайных чисел и независимость от конкретной машины. Как плата за это - существенно меньшее быстродействие. Существуют алгоритмы, для которых период генерируемой последовательности оценивается как 1018.
4. Абстрактные типы данных.
Абстрактные структуры данных предназначены для удобного хранения и доступа к информации. Они предоставляют удобный интерфейс для типичных операций с хранимыми объектами, скрывая детали реализации от пользователя. Это позволяет добиться большей модульности программы. Абстрактные структуры данных иногда делят на две части: интерфейс, набор операций над объектами, который называют АТД (абстрактный тип данных) и реализацию. Язык программирования Си предоставляют удобный интерфейс для чисел: операции +, *, = и т.п., но при этом скрывают саму реализацию этих операций, машинные команды.