Anton0093

Lab_2(Sem_2)

Feb 25th, 2021
525
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4.  
  5. public class LFSR {
  6.  
  7.     public final int mask;          // маска
  8.     public final int defaultValue;  // значение по умолчанию
  9.     public final int bitsMask;      // битовая маска
  10.  
  11.     public static int period;                        // счетчик периода
  12.     public static int[] massRandInt = new int[256];  // массив случайных элементов
  13.  
  14.     private static final int sizeOfBlock = 8;        // размер нашего битового блока (1 байт)
  15.     private static final int bits = 8;               // работаем в 8-ми битной системе
  16.  
  17.     private int current; // текущее значение
  18.     private int next;    // следущее
  19.  
  20.  
  21.     // Конструктор класса mask - формула в hex системе счисления, defaultValue - значение по умолчанию
  22.     public LFSR (int mask, int defaultValue)  {
  23.  
  24.         this.bitsMask = (0x01 << bits) - 1;
  25.         this.mask = mask & bitsMask;
  26.         this.defaultValue = defaultValue & bitsMask;
  27.  
  28.         this.current = this.defaultValue;
  29.         this.next = next (this.defaultValue, this.bitsMask, this.mask);
  30.     }
  31.  
  32.     public int next () {
  33.         this.current = this.next;
  34.         this.next = next (this.current, this.bitsMask, this.mask);
  35.         return this.current;
  36.     }
  37.  
  38.     public int next (int n) {
  39.         for (int i = 0; i < n; i++)
  40.             next();
  41.         return this.current;
  42.     }
  43.  
  44.     public static int next(int in, int bitsMask, int mask) {
  45.         return (in << 1) & bitsMask | lsb (in, bitsMask, mask);
  46.     }
  47.  
  48.     public static int lsb(int value, int bitsMask, int mask) {
  49.         int bit = 0;
  50.         for (int i = 0x01; i < bitsMask; i <<= 1)
  51.             if ((mask & i) != 0 && (value & i) != 0)
  52.                 bit ^= 0x01;
  53.         return bit;
  54.     }
  55.  
  56.     public static String[] intArrayToStringArray(int[]intArray, int periodIntArray){
  57.         String[] stringRandomNums = new String[periodIntArray + 1];
  58.  
  59.         for (int i = 0; i <= periodIntArray; i++) {
  60.             stringRandomNums[i] = Integer.toBinaryString(intArray[i]);
  61.         }
  62.         return stringRandomNums;
  63.     }
  64.  
  65.     public static void printString(String[] array, int periodArray){
  66.         for (int i = 0; i <= periodArray ; i++) {
  67.             System.out.print(array[i]);
  68.         }
  69.     }
  70.  
  71.     public static int count_1(String input) {
  72.         return (int) Arrays.stream(input.split("")).filter(s -> s.toLowerCase().equals("1")).count();
  73.     }
  74.  
  75.     public static int count_0(String input) {
  76.         return (int)Arrays.stream(input.split("")).filter(s -> s.toLowerCase().equals("0")).count();
  77.     }
  78.  
  79.     public static int bin2dec(String binNumber) {
  80.  
  81.         return Integer.parseInt( binNumber, 2);
  82.     }
  83.  
  84.     private static String Right_length(String myString, int length){
  85.  
  86.         while (myString.length() != length){
  87.             StringBuilder new_column = new StringBuilder(myString);
  88.             new_column.insert(0,"0");
  89.             myString = new_column.toString();
  90.         }
  91.         return myString;
  92.     }
  93.  
  94.     public static StringBuilder concat(String[] array ) {
  95.         StringBuilder builder = new StringBuilder();
  96.         for (String s : array) {
  97.             builder.append(s);
  98.         }
  99.         return builder;
  100.     }
  101.  
  102.     public static List<String> bitsList(String array){
  103.         List<String> sequenceOfBitChunks = new ArrayList<>();
  104.  
  105.         for(int i = 0; i + sizeOfBlock <= array.length(); i = i + sizeOfBlock){
  106.             sequenceOfBitChunks.add(array.substring(i, i + sizeOfBlock));
  107.         }
  108.         return sequenceOfBitChunks;
  109.     }
  110.  
  111.     public static int getCountMod2(List<String> list) {
  112.         int count = 0;
  113.         for (String str8 : list
  114.         ) {
  115.             if (bin2dec(str8) % 2 == 0) count++;
  116.         }
  117.         return count;
  118.     }
  119.  
  120.     public static int getCountNoMod2(List<String> list) {
  121.         int count = 0;
  122.         for (String str8 : list
  123.         ) {
  124.             if (bin2dec(str8) % 2 != 0) count++;
  125.         }
  126.         return count;
  127.     }
  128.  
  129.     public static void main(String[] args) {
  130.  
  131.         LFSR l2 = new LFSR ( 0xC4 , 20); // запись в скобке: (X^8 + x^7 + x^2 + 1, число по умолчанию)
  132.  
  133.         for (int i = 0; i < 255 ; i++) {
  134.             massRandInt[i] = l2.next(i);
  135.             if ((l2.next(i) != l2.next(i + 3)) & (l2.next(i+1) != l2.next(i + 2)) ) {
  136.                 period++;
  137.             }
  138.             else break;
  139.             System.out.println(i+") "+ l2.next(i));
  140.         }
  141.  
  142.         String[] stringRandom = intArrayToStringArray(massRandInt, period);
  143.         System.out.println("Период в битовом преставлении: ");
  144.         printString(stringRandom, period);
  145.         System.out.println("\n");
  146.  
  147.         //соединили в общую строку
  148.         StringBuilder builder = concat(stringRandom);
  149.         String str = builder.toString();
  150.         System.out.println("Длина периода в битовом преставлении: " + builder.toString().length() + "\n");
  151.  
  152.         System.out.println("Количество нулей в одном периоде при битовом представлении\n" +
  153.                 "выходной последовательности: " + count_0(str) + "\n");
  154.         System.out.println("Количество единиц в одном периоде при битовом представлении\n" +
  155.                 "выходной последовательности: " + count_1(str) + "\n");
  156.  
  157.         //сделали длину строки кратной 8 для работы с байтами
  158.         String strMod_8 = Right_length(str, (str.length() + sizeOfBlock - (str.length() % 8)));
  159.  
  160.         //разбили массив нулей и единиц на лист, состоящий из байт
  161.         List<String> sequenceOfBitChunks = bitsList(strMod_8);
  162.  
  163.         System.out.println("Количество четных чисел в одном периоде: " + getCountMod2(sequenceOfBitChunks) + "\n");
  164.         System.out.println("Количество НЕчетных чисел в одном периоде: " + getCountNoMod2(sequenceOfBitChunks));
  165.     }
  166. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×