Генератор "старт-стоп"_реализация В С++

  • Автор темы Wolly777
  • Дата начала
W

Wolly777

#1
Доброго времени суток. Можете проверить правильность работы программы для данного задания. Заранее огромное спасибо!
программа для чередующегося генератора «стоп-пошел», псевдослучайной последовательности, с генерированной, в последовательность равную периоду генератора.
значения LFSR:
(7,1,0);
(23,5,0);
(17,6,0).



Листинг:
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<cstdlib.h>
#include<time.h>
using namespace std;

int LFSR_1(int*A,int n); //прототип функции, описывающей 1-ый ЛРСР(передается начальный массив и его размер)
int LFSR_2(int*A,int n); //прототип функции, описывающей 2-ый ЛРСР
int LFSR_3(int*A,int n); //прототип функции, описывающей 3-ый ЛРСР
void main()
{
//начальные регистры/массивы и их размерность
srand(time(0)); // Инициализируем генератор текущим временем.
const int n=22;
const int m=8;
const int c=10;

int A[n];
for (int i=0; i<n; i++)
{ A = rand()%2; }

int B[m];
for (int i=0; i<m; i++)
{ B = rand()%2; }

int C[c];
for (int i=0; i<c; i++)
{ C = rand()%2; }

//Выведем предварительно сгенерированные последовательности массивов
cout << "Ishodnue registri: \nMassiv A[" << n <<"] = {";
for (int i=0; i<n; i++)
{ cout << A; }
cout << "}\n";

cout << "Massiv B [" << m <<"] = {";
for (int i=0; i<m
; i++)
{ cout << B; }
cout << "}\n";

cout << "Massiv C [" << c <<"] = {";
for (int i=0; i<c; i++)
{ cout << C; }
cout << "}\n \n";


double Q;//переменная, принимающая значение, равное размеру последовательности в Мб
cout<<"Vvedi jelaemuyj razmer v MB? = ";
cin>>Q;
//создание потоков файлового вывода
ofstream fout;
ofstream fout;
//файлы для записи выходной последовательности
const char * Ofile="rand.dat";
const char * Ofile_2="text.txt";
unsigned char k, z;
//открытие потоков файлового ввода/вывода
fout.open (Ofile, ios::eek:ut | ios::binary);
fout.open (Ofile_2, ios::eek:ut);
for (int i=0; i< (1024*1024)*Q; i++)
{
k=0;
for (int i=7; i>=0; i--)
{
int z1=LFSR_1(B,m); //значение на выходе 1-го ЛРСР
int z2=LFSR_2(C,c); //значение на выходе 2-го ЛРСР
int z3=LFSR_3(A,n); //значение на выходе 3-го ЛРСР
z=((z1&&z2) ^ ((!z1&&z3))); //значение на выходе генератора
Fout << int(z); //запись значения в текстовый файл
//преобразование в биты
if(z==1)
k|=1<<i;
}
fout.write((char*)&k, sizeof(k)); //запись в бинарный файл
}
//закрытие файловых потоков вывода
fout.close();
fout.close();
cout<<endl<<"Vupolneno!"<<endl<<"Rezultat zapisan v "<<Ofile<<" I "<<Ofile_2 << "\n";

}

//функция, описывающая работу 1-го ЛРСР
int LFSR_1 (int*A, int n)
{
int z;
//сложение по модулю два битов, находящихся под номерами 7,1,0
int ShiftRegister = (A [n-7-1] ^A [n-1-1] ^A [n-1]);
z=A[n-1];//значение подаваемое на выход регистра
//смещение всех битов регистра на один вправо
for (int i= (n-1); i>0; i--)
{
A=A[i-1];
}
//помещение полученного бита на нулевую последовательность
A[0]=ShiftRegister;
return z;
}


//функция, описывающая работу 2-го ЛРСР
int LFSR_2 (int*A, int n)
{
//сложение по модулю два битов, находящихся под номерами 23,5,0
int ShiftRegister = (A [n-23-1] ^A [n-5-1] ^A [n-1]);
z=A [n-1];
for (int i= (n-1); i>0;i--)
{
A =A [i-1];
}
A [0] =ShiftRegister;
return z;
}

//функция, описывающая работу 3-го ЛРСР
int LFSR_3 (int*A, int n)
{
int z;
//сложение по модулю два битов, находящихся под номерами 17,6,0
int ShiftRegister = (A [n-17-1] ^A [n-6-1] ^A [n-1]);
z=A [n-1];
for (int i= (n-1); i>0; i--)
{
A =A [i-1];
}
A [0] =ShiftRegister;
return z;
 

Вложения