Advertisement
Anton0093

Lab_2(Sem_2)

Feb 25th, 2021
659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.34 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement