Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 22.04.2023
Сообщений: 1
1

Преобразование логической функции методом де Моргана

22.04.2023, 18:55. Показов 696. Ответов 0

Author24 — интернет-сервис помощи студентам
Здравствуйте, задали написать программу преобразования логической функции методом де Моргана. Сижу уже 5 час и все никак не могу ее сделать. Еще и на 25 строке выдает ошибку "String index out of range", хотя вроде никуда все нормально. Подскажите что нужно сделать или изменить, чтобы все работало как надо. Без 50 строки не работает ни разу.
Вот что имею на данный момент:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
sstart = "!(!(A & B) & (!A | B) | C)"
snew = ""
sk1 = 0
sk2 = 0
last = 0
skobka = 0
s = sstart.replace("!!", "")
print(sstart)
print()
if "!)" in s or "!&" in s or "!|" in s:
    print("Неверное логическое выражение")
    exit()
for j in range(len(s)):
    if s[j] == "(":
        sk1 += 1
    if s[j] == ")":
        sk2 += 1
if sk1 != sk2:
    print("Неверное логическое выражение")
    exit()
for kol in range(2):
    for i in range(len(s)):         
        #elif s[i] != "!":
            #snew += str(s[i])
        if s[i] == "!" and s[i+1] == "(":
            for x in range(i+2, len(s)):
                if s[x] == "!" and s[x+1] == "(":
                    break
                if s[x] == ")":
                    skobka = x
                    break
            if skobka != 0:
                snew += str(s[i])
                snew += str(s[i+1])
                for y in range(i+2,skobka):
                    if s[y] == "!":
                        snew += str(s[y+1])
                    elif s[y] in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" and s[y-1] != "!":
                        snew += "!" + str(s[y])
                        y += 2
                    elif s[y] == "|" and s[y-1] != "!":
                        snew += " & "
                        y += 3
                    elif s[y] == "&" and s[y-1] != "!":
                        snew += " | "
                        y += 3
                    i += x-i-2
                for z in range(skobka+1,len(s)):
                    snew += str(s[z])
                snew += " "
                s = snew
                snew = ""
 
    print(s)
Добавлено через 34 минуты
25 больше не жалуется, просто сделал длины строк одинаковыми. Теперь надо разобраться с "!(" в самом начале строки
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
sstart = "!(!(A & B) & (!A | B) | C)"
snew = ""
sk1 = 0
sk2 = 0
last = 0
skobka = 0
s = sstart.replace("!!", "")
print(sstart)
print()
if "!)" in s or "!&" in s or "!|" in s:
    print("Неверное логическое выражение")
    exit()
for j in range(len(s)):
    if s[j] == "(":
        sk1 += 1
    if s[j] == ")":
        sk2 += 1
if sk1 != sk2:
    print("Неверное логическое выражение")
    exit()
for kk in range(3):
    for i in range(len(s)):         
        #elif s[i] != "!":
            #snew += str(s[i])
        if s[i] == "!" and s[i+1] == "(":
            for x in range(i+2, len(s)):
                if s[x] == "!" and s[x+1] == "(":
                    break
                if s[x] == ")":
                    skobka = x
                    break
            if skobka != 0:
                snew += str(s[i])
                snew += str(s[i+1])
                for y in range(i+2,skobka):
                    if s[y] == "!":
                        snew += str(s[y+1])
                    elif s[y] in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" and s[y-1] != "!":
                        snew += "!" + str(s[y])
                        y += 2
                    elif s[y] == "|" and s[y-1] != "!":
                        snew += " & "
                        y += 3
                    elif s[y] == "&" and s[y-1] != "!":
                        snew += " | "
                        y += 3
                    i += x-i-2
                for z in range(skobka+1,len(s)):
                    snew += str(s[z])
                snew += "    "
                s = snew
                snew = ""
                skobka = 0
 
    print(s)
Добавлено через 28 минут
Всем спасибо, я смог!!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2023, 18:55
Ответы с готовыми решениями:

Преобразование логической функции
Не могу разобраться как упрощать дальше. Помогите пожалуйста. Вот фото

преобразование логической функции карт карно
Функцию пяти переменных преобразуйте в МКНФ с помощью карт Карно...

Преобразование логической функции в булевый базисе
Помогите не как не врублюсь А) Заданную функцию преобразовать в булевый базис и...

Минимизация логической функции методом карт Карно
Помогите минимизировать http://***********/view3/811817/803287241b4f00a01f27a7d8919decee/orig/

0
22.04.2023, 18:55
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2023, 18:55
Помогаю со студенческими работами здесь

Выполнить минимизацию заданной логической функции с используя карт Карно и аналитическим методом
Выполнить минимизацию заданной логической функции с помощью карт Карно и аналитическим методом....

Составление логической функции по логической схеме - 2
Помогите, прошу. Как из этого сделать функцию, почему "ИЛИ-НЕ" с одним входом?

Составление логической функции по логической схеме - 1
Люди добрые, разъясните, как по этой схеме составить функцию? Почему у инвертора два входа?

Инвертирование функции по теореме Де Моргана
Здравствуйте! Столкнулся с проблемой в задании и не могу её решить уже более трёх часов. Суть...

Записать рассуждение в логической символике и проверить правильность рассуждения методом Куайна и методом редукции
Всем привет! На данный момент прохожу обучение в универе и нам задали задачи по мат.логике, но я не...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru