Professional Documents
Culture Documents
Lab 1
Lab 1
ЛАБОРАТОРНА РОБОТА № 1
ВИКОНАЛА:
студентка ІІ курсу ФІОТ
групи ІО-64
Бровченко Анастасія
Залікова - 6403
ПЕРЕВІРИВ:
доц. Марковський О.П.
Київ – 2017
Завдання
Код програми
Файл startstopnyy_gen_functions
def lfsr_r_tact(sequence: str):
"""Виконує один такт LFSR з рознесеним зворотним зв'язком.
sequence - бінарна початкова послідовність."""
sequence = list(sequence)
random_num = sequence[0]
for i in [6, 4, 1]:
if (sequence[0] == '1') & (sequence[len(sequence)-i] == '1'):
sequence[len(sequence)-i] = '0'
else:
sequence[len(sequence)-i] = str(int(sequence[len(sequence)-i]) +
int(sequence[0]))
sequence = ''.join(sequence)
sequence = sequence[1:] + sequence[0]
return [sequence, random_num]
random_sequence = str()
while len(random_sequence) < length_of_random_sequence:
extra_tact = lfsr_r_tact(extra_num)
if extra_tact[1] == '1':
basic_tact = lfsr_r_tact(basic_num)
random_sequence += str(basic_tact[1])
basic_num = basic_tact[0]
extra_num = extra_tact[0]
return random_sequence
number_1 = 0
for i in sequence:
if i == '1':
number_1 += 1
return 'Одиниць --> {n}/{all}\n' \
'Нулів -------> {m}/{all}'.format(n=number_1, all=len(sequence),
m=len(sequence)-number_1)
def differential_frequency_test(sequence: str):
"""Диференційний частотний тест."""
num_changes = 0
for i in list(range(len(sequence)-1)):
if sequence[i] != sequence[i+1]:
num_changes += 1
return ' {}/{}'.format(num_changes, (len(sequence)-1))
# розмір вікна = 5
def window_test(sequence: str):
"""Віконний тест."""
len_of_comb = 1
pointer = 0
c = sorted(combinations.keys())
comb_result = ''
for i in c:
comb_result = comb_result + '{} --> {} \n'.format(i,
combinations[i])
return 'Кількість бітів, від яких залежить наступний біт ---> {}\n\n' \
'{}'.format(len_of_comb, comb_result)
Файл GUI
from tkinter import *
import random, third_sem.teor_ver.startstopnyy_gen_functions as func
def show_sequence():
slave = Toplevel(root)
slave.focus_set()
slave.title('Згенерована бінарна послідовність')
slave['bg'] = 'mint cream'
t = Text(slave, font='Corbel 12', bg='mint cream')
t.pack(side=LEFT, fill=BOTH, padx=10)
t.insert(INSERT, sequence)
s = Scrollbar(slave)
s.pack(side=RIGHT, fill=Y)
s.config(command=t.yview)
t.config(yscrollcommand=s.set)
def but_bind():
root.maxsize(430, 450)
root.minsize(430, 450)
def random_sequence(length):
l = ''
for i in range(length):
l = l + str(random.choice([1, 0]))
return l
def but_random_basic():
ent_basic.delete(0, END)
ent_basic.insert(END, random_sequence(12))
def but_random_extra():
ent_extra.delete(0, END)
ent_extra.insert(END, random_sequence(12))
def window_tests():
slave = Toplevel(root)
slave.focus_set()
slave.title('Результати тестування')
slave['bg'] = 'mint cream'
t = Text(slave, font='Corbel 12', bg='mint cream')
t.pack(side=LEFT, fill=BOTH, padx=10)
t.insert(INSERT, 'Результат частотного тесту:\n{t1}\n\n'
'Результат диференційного частотного тесту: {t2}\n\n'
'Результат віконного тесту:\n{t3}\n\n'
'Результат нелінійного тесту на складність:\n\n{t4}\n\n'
.format(t1=func.frequency_test(sequence),
t2=func.differential_frequency_test(sequence),
t3=func.window_test(sequence),
t4=func.complexity_test_nonlinear(sequence)))
t.tag_add('tag1', '1.0', '1.50')
t.tag_add('tag2', '5.0', '5.42')
t.tag_add('tag3', '7.0', '7.50')
t.tag_add('tag4', '42.0', '42.50')
t.tag_config('tag1', font='Corbel 14 bold')
t.tag_config('tag2', font='Corbel 14 bold')
t.tag_config('tag3', font='Corbel 14 bold')
t.tag_config('tag4', font='Corbel 14 bold')
s = Scrollbar(slave)
s.pack(side=RIGHT, fill=Y)
s.config(command=t.yview)
t.config(yscrollcommand=s.set)
root = Tk()
root.title('Параметри')
root['bg'] = 'mint cream'
root.maxsize(430, 340)
root.minsize(430, 340)
Label(root, text='Основна послідовність з 12 чисел', font='Arial 14',
bg='mint cream')\
.grid(row=1, column=1, columnspan=2, pady=10, padx=10)
Label(root, text='Додаткова послідовність з 12 чисел', font='Arial 14',
bg='mint cream')\
.grid(row=3, column=1, columnspan=2, pady=10, padx=10)
Label(root, text='Довжина генерованої послідовності', font='Arial 14',
bg='mint cream')\
.grid(row=5, column=1, columnspan=2, pady=10, padx=10)
root.mainloop()