Программная реализация.
Разработка программного продукта в среде Visual C++, осуществляющего генерацию псевдослучайных чисел двумя методами
Printf («Ошибка: Некорректная операция»); Printf («1. Линейный конгруэнтный метод»); Создать файл для сохранения массива. Рис. 11. Выбрать `S' и ввести имя файла. FILE *fp;// Указатель на файловой поток. Отображается тема курсовой работы. Else printf («Число не было сохранено «); Printf («0. Вернуться в главное меню»); Case 'S': // Сохранение числа в файле. Bool direct;// Компонента направления… Читать ещё >
Программная реализация. Разработка программного продукта в среде Visual C++, осуществляющего генерацию псевдослучайных чисел двумя методами (реферат, курсовая, диплом, контрольная)
Назначение
Программа «Курсовой проект: Генерация псевдослучайных чисел» предназначена для осуществления генерации псевдослучайных чисел.
Пользовательский интерфейс
Рис. 1.
Основное окно программы:
При запуске программы:
- • Отображается тема курсовой работы.
- • Программа предлагает одно из действий в меню.
Пример использования
Рис. 2. Выбрать `M'
Рис. 3. Выбрать `1'.
Рис. 4. Выбрать `2'
Рис. 5. Выбрать `0'
Рис. 6. Выбрать `D' и ввести начало и конец диапазона чисел Рис. 7. Выбрать `M'
Рис. 8. Выбрать `1'
Рис. 9. Выбрать `2'.
программный регистр псевдослучайный числовой Рис. 10. Выбрать `0'
Рис. 11. Выбрать `S' и ввести имя файла
Рис. 12. Файл `1.txt'.
Листинг программного кода
Interface.cpp.
#include // библиотека ввода-вывода.
#include // библиотека языковой локализации.
#include «global.h» // библиотека работы с упакованным числом.
#include // для вывода в файл.
// Длинаименифайла.
static const int length = 66;
#pragma warning (disable: 4996).
/*.
Главная функция. Реализует ввод, проверку, интерфейс с пользователем.
*/.
int PrintСongruential (int min, int max);
int PrintLFSR (int min, int max);
void main ().
{.
int ch = '';// Пунктменю.
int fl0 = 0, fl1 = 0, fl2 = 0, fl = 0;// Проверка на использование метода.
long int min = 0, mmin = -2 147 483 648;// Min диапазона.
long int max = 100, mmax = 2 147 483 647;// Max диапазона.
int level;// Компонента уровня.
bool direct;// Компонента направления.
char filename[length]; // Имя файла.
FILE *fp;// Указатель на файловой поток.
// Для сообщений на русском языке.
setlocale (LC_ALL, «Russian»);
printf («Курсавая работа: Генератор псевдослучайных чисел»);
do { // Цикл обработки команд.
switch (ch).
{.
case 'M': // Выборметода.
case 'm':
do {.
// Отобразитьподменю.
printf («Подменю:»);
printf («1. Линейный конгруэнтный метод»);
printf («2. Метод регистра сдвига с линейной обратной связью»);
printf («0. Вернуться в главное меню»);
printf («Выберите подпункт:>»);
fflush (stdin);
ch = getchar ();
switch (ch).
{.
case '1': // Печать ленейно конгруэнтного метода.
X1 = PrintСongruential (min, max);
fl1 = 1;
fl2 = 0;
break;
case '2': // Печать метода регистра сдвига с линейной обратной связью.
X2 = PrintLFSR (min, max);
fl1 = 0;
fl2 = 1;
break;
}.
}.
while (ch ≠ '0');
break;
case 'D': // Настройка диапазона случайных значений.
case 'd':
do{.
// Ввести длину диапазона и проверить корректность ввода.
printf («Введите диапазон случайных чисел [-2 147 483 648.2147483647]: >»);
printf («min = «);
scanf («%ld», &min);
printf («max = «);
scanf («%ld», &max);
// Проверить корректность ввода и допустимоть диапазона.
if (min mmax — 1 ||.
max mmax).
{.
printf («Ошибка: Некорректныйдиапазон: «);
if (min mmax — 1) printf («Проблемас min «);
if (max mmax) printf («Проблемас max «);
fl0 = 1;
}.
if (min >= max).
{.
if (min > max) printf («max долженбытьбольше min «);
if (min == max) printf («max и min должны иметь разные значения «);
fl0 = 1;
}.
}.
while (fl0 == 1);
break;
case 'S': // Сохранение числа в файле.
case 's':
fflush (stdin);
// Ввести имя файла.
printf («Введите имя файла для сохранения (или нажмите [enter] для отмены):>»);
if (*gets_s (filename, length) == '') break;
// Создать файл для сохранения массива.
if ((fp = fopen (filename, «w»)) == NULL).
printf («Ошибка: Файл с указанным именем не может создан или открыт на запись «);
else.
{.
if (ch == 's' || ch == 'S').
{.
// Записать последнее сгенерированное чисело в текстовый файл.
if (fl1 == 1) fprintf (fp, «%ld», X1);
else {.
if (fl2 == 1) fprintf (fp, «%ld», X2);
else {.
fl = 1;
fprintf (fp, «Число не было сгенерировано»);
}.
}.
}.
// Закрыть файл.
fclose (fp);
if (fl == 0) printf («Число сохранен успешно «);
else printf («Число не было сохранено «);
}.
break;
case '': // Пустая команда.
break;
default:
printf («Ошибка: Некорректная операция»);
break;
};
// Сбросить устройство ввода.
fflush (stdin);
// Отобразить главное меню.
printf («Главное меню:»);
printf («M. Выбор метода»);
printf («D. Ввод диапазона случайных чисел (по умолчанию 0.100)»);
printf («S. Сохранение последнее сгенерированное чисело в текстовом файле»);
printf («Q. Выход»);
printf («Выберите пункт:>»);
ch = getchar ();
}.
while ((ch ≠ 'Q') && (ch ≠ 'q'));
// Сохранение новых сгенерированных чисел.
freopen («Global.h», «w», stdout);
printf («static unsigned long X1 = %d; static unsigned long X2 = %d;», X1, X2);
}.
PrintLFSR.cpp.
#include // библиотекаввода-вывода.
#include «global.h» // библиотека работы с упакованным числом.
int PrintLFSR (int min, int max).
{.
X2 = ((((X2 >> 31) (X2 >> 6) (X2 >> 4) (X2 >> 2).
(X2 >> 1) X2) & 0×1) <> 1);
printf («Сгенерированноечисло: %d «, X2% (max — min) + min);
return X2;
}.
PrintСongruential.cpp.
#include // библиотека ввода-вывода.
#include" Global. h" // библиотека работы с упакованным числом.
int PrintСongruential (int min, int max).
{.
X1 = (16 807 * X1 + 1) % 2 147 483 647;
printf («Сгенерированное число: %d «, X1% (max — min) + min);
return X1;
}.
Global.h.
static unsigned long X1 = 1;
static unsigned long X2 = 1;