Начал учить Питон недавно, но тут преподаватель по дискретной математике сказл что если хотите успешно сдать экзамен то вам нужно написать программу на любом языке програмирования, которая будет определять является ли то что вы ввели Формулой алгебры высказывания, или нет. Так как я знаю только питон то буду писать на нём.
Так вот основные требования:
1. ввод данных должен быть из текстового файла, а вывод данных на ээкран ответом ДА,или НЕТ.
вот и мой 1 вопрос, какая команда открывает текстовый фаил? я просто ещё не дошол до этого
2. В текстоввый фаил он занесёт некое выражение и программа должна определить ФАВ(формула алгебры высказывания это или нет)
что такое фав можно прочитать слъдесь на 7-8 страице http://fmponmu.narod.ru/metodichki/odm.exe, там немного, и несложно.
Ит так вот как я решил это решать.
1. нужно задать питону такие команды и их приоритеты( от большего к меньшему) как коньюнкция, дизюнкция, эквиваленция , импликация, и ещё один вне приоритета( или с самым большим приоритетом) отрицание. Как это сделать? как обозначить коньюнкцию( не важно что это такое, главное что у неё самый большой приоритет) значком >. и дизюнкцию <, и чтоб интерпритатор понимал не как строки, а как операции.
2. После задания приоритета, нужно чтобы питон разбил входную( достаточно большую) функцию на несколько функций по меньше, по значку самого малеького приоритета, и конечно с учётом скобок( тоесть если маленький приоритет в скобках, то его разбивать нельзя) это как 2*(2+2)*2, или 2*2+2*2, в первом случае разбивать нельзя, во втором можно.
3. Каждую маленькую функцию он снова разобьёт на несколько ещё меньших , и будет разбивать до того как не дойдёт до каждой переменной в отдельности.
4.Если же он дойдёт да каждой переменой, то это будет ФАВ, если же не дойдёт( например будет нарушение логики типа цифра там какаято или ошибка типа “2*+3”,( только с моими операторами) то это уже не будет ФАВ.
Я приблизительно знаю ка кэто реализовать, но мне например кажется что я всёже построил не правильное решение, ведь если он просто будет разбивать по менее приоритетным операторам, то ошибку типа “2*+3” он мне кажется не заметит.