Отчет по индивидуальной работе №1 Студент группы 36/1 Юрченко Д. Н - файл

приобрести
скачать (83.1 kb.)


МИНИСТЕРСТВО НАУКИ И ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное бюджетное образовательное учреждение высшего образования


«КУБАНСКИЙ ГОСУДАРТВЕННЫЙ УНИВЕРСИТЕТ»

Кафедра вычислительных технологий



ОТЧЕТ

по индивидуальной работе №1


Выполнил:

Студент группы 36/1

Юрченко Д.Н.

Преподаватель:

Жуков С. А.

Краснодар

2019


Постановка задачи:

Пусть задана матрица прав доступа A[1:n; 1:m] для заданных натуральных n, m, определяющих полномочия субъектов s1 , s2 , … , sn к объектам o1 , o2 , … , om так что P = A[i, j], где P = {‘r’, ‘w’, ‘o’, ‘x’} ‘r’ - код права чтения, ‘w’ – код права записи, ‘o’ – код права владения, ‘x’ – код права исполнения. Элементарные команды модели HRU можно кодировать следующим образом:

команду Create object o j как cco = ‘O+’ image_j

команду Create subject s j как ccs = ‘S+’ image_j

команду Destroy object o j как cdo = ‘O-’ image_j

команду Destroy subject s j как cds = ‘S-’ image_j

команду Enter p into A[i, j] как cer p = ‘p+’ image_i image_j , где p – символ из алфавита {‘r’, ‘w’, ‘o’, ‘x’}

команду Delete p from A[i, j] как cdr p = ‘p-’ image_i image_j , где p – символ из алфавита {‘r’, ‘w’, ‘o’, ‘x’}; image_i, image_j – изображения чисел i и j, например, в десятичной системе счисления; cco, ccs,cdo, cds cdr p , cer p – условные обозначения команд.

Команда с условием из модели HRU: K = if p in A[i , j ] then Elem_Command , где Elem_Command - это элементарная команда из модели HRU (их список перечислен выше) можно кодировать в виде

Code_K: ‘p’ image_i image_j ‘—‘ Code_Element_Command, где Code_Element_Command - это элемент из множества {cco, ccs, cdo, cds, cer p , cdr p }.

Тогда программа в модели HRU – это ее представление в виде последовательности:

Code_K 1


Code_K 2

. . .


Code_K t

Составить программу-интерпретатор , которая в качестве входных данных принимает натуральные числа n, m , матрицу прав доступа A[1:n; 1:m] – все это задается в одном файле environ – это файл среды; представление программы:

Code_K1

Code_K2

. . .

Code_Kt



Это содержимое другого файла prgrm. Программа-интерпретатор исполняет команды из файла prgrm, а результирующую матрицу A выводит выводит в rzlt – файл.

Алгоритм:

На вход поступает файл environ.txt с исходной матрицей прав доступа, которая считывается программой.

Формат входного и выходного файлов: первая строка – n, вторая – m. После идет n строк, содержащих строки исходной матрицы прав доступа.

После считывания начинается построчный анализ файла pgrm.txt с представлением исходной программы. Интерпретируемая строка сравнивается с существующими шаблонами. Программа выполняет ту команду, которой соответствует анализируемая строка.

Команды:



Изменения, возникшие в результате выполнения этой команды, отображаются в исходной матрице прав доступа, которая выводится в выходной файл.

Реализация:

R = 'r'

W = 'w'


O = 'o'

X = 'x'
acsess_matrix = {}

subjects = []

objects = []


def createObject(id) : 

    if not id in objects :

        objects.append(id)

    else:

        return -1
def destroyObject(id):

    objects.remove(id)

    for obj, subj in acsess_matrix:

        if obj == id:

            temp = subj

    print(temp)

    del acsess_matrix[id, temp]

    


def createSubject(id):

    if not id in subjects :

        subjects.append(id)

    else:

        return -1
def destroySubject(id):

    subjects.remove(id)

    for obj, subj in acsess_matrix:

        if subj == id:

            temp = obj

    del acsess_matrix[temp, id]


def enterRight (obj, sub, p):

    rights = acsess_matrix.get((obj, sub), [])

    acsess_matrix[obj, sub] = rights if p in rights else rights + [p]
def deleteRight (obj, sub, p):

    rights = acsess_matrix.get((obj, sub), [])

    acsess_matrix[obj, sub] = [i for i in rights if i != p]

    
def isRightIn(obj, subj, p):

    return p in acsess_matrix[obj, subj]
def isObject(obj):

    return obj in objects


def isSubject(subj):

    return subj in subjects


def readEnviron ():

    env = open('D:\\EDU\\3 курс\\6 семестр\\ИБ\\Task3\\environ.txt')


    n = int(env.readline())

    for i in range(n):

        createObject(i)

    


    m = int(env.readline())

    for i in range(m):

        createSubject(i)
    matrix = []
    for _ in range(n):

        matrix.append(env.readline().split(" "))


    for i, l in enumerate(matrix):

        for j, p in enumerate(l):

            if 'r' in p:

                enterRight(i, j, R)

            if 'w' in p:

                enterRight(i, j, W)

            if 'o' in p:

                enterRight(i, j, O)

            if 'x' in p:

                enterRight(i, j, X)


def executeProgram(cmd):

    if len(cmd) == 0:

        ...

    elif cmd[0] == 'enter' and cmd[2] == 'into':

        enterRight(int(cmd[3]), int(cmd[4]), cmd[1])

    elif cmd[0] == 'delete' and cmd[2] == 'from':

        deleteRight(int(cmd[3]), int(cmd[4]), cmd[1])

    elif cmd[0] == 'if' and cmd[2] == 'in' and cmd[5] == 'then':

        if isRightIn(int(cmd[3]), int(cmd[4]), cmd[1]):

            executeProgram(cmd[6:])

    elif cmd[0] == 'create' and cmd[1] == 'object':

        if not(isObject(int(cmd[2]))):

            createObject(int(cmd[2]))

    elif cmd[0] == 'create' and cmd[1] == 'subject':

        if not(isSubject(int(cmd[2]))):

            createSubject(int(cmd[2]))

    elif cmd[0] == 'destroy' and cmd[1] == 'object':

        if isObject(int(cmd[2])):

            destroyObject(int(cmd[2]))

    elif cmd[0] == 'destroy' and cmd[1] == 'subject':

        if isSubject(int(cmd[2])):

            destroySubject(int(cmd[2]))

    else:

        raise SyntaxError


def printMatrix ():

    f = open('D:\\EDU\\3 курс\\6 семестр\\ИБ\\Task3\\rzlt.txt', 'w')

    f.write(str(len(objects)) + '\n')

    f.write(str(len(subjects)) + '\n')


    for i in objects:

        for j in subjects:

            flags = ''

            for flag in acsess_matrix.get((i, j), ['0']):

                flags += flag

            f.write(flags + ' ')

        f.write('\n')
def main():

    readEnviron()

    

    for line in open('D:\\EDU\\3 курс\\6 семестр\\ИБ\\Task3\\prgrm.txt'):



        executeProgram(line.lower().split())

    


    print(acsess_matrix)

    printMatrix()


if __name__ == '__main__':

    main()

Примеры:

environ.txt

prgrm.txt

3

4

rw rx 0 ox



r wx o xr

0 wr wrxo 0



create object 4

destroy object 1

create subject 5

destroy subject 2

enter r into 2 3

enter x into 2 3

if r in 2 3 then delete w from 1 1


rzlt.txt




3

4

rw rx ox 0



0 rw rx 0

0 0 0 0






Учебный материал
© nashaucheba.ru
При копировании укажите ссылку.
обратиться к администрации