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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Wolly777, 18 фев 2013.

  1. Wolly777

    Wolly777 New Member

    Регистрация:
    18 фев 2013
    Сообщения:
    2
    Симпатии:
    0
    Доброго времени суток. Можете проверить правильность работы программы для данного задания. Заранее огромное спасибо!
    программа для чередующегося генератора «стоп-пошел», псевдослучайной последовательности, с генерированной, в последовательность равную периоду генератора.
    значения 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;
     

    Вложения:

    • start_stop.png
      start_stop.png
      Размер файла:
      22,1 КБ
      Просмотров:
      18
Загрузка...
Похожие Темы - Генератор старт стоп_реализация
  1. Wolly777
    Ответов:
    0
    Просмотров:
    1.948
  2. beloff
    Ответов:
    2
    Просмотров:
    341
  3. Mark
    Ответов:
    0
    Просмотров:
    601
  4. SantilaS
    Ответов:
    0
    Просмотров:
    1.042
  5. Djoni
    Ответов:
    0
    Просмотров:
    888

Поделиться этой страницей