![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 25.03.2008
Сообщений: 7
|
![]()
Здравствуйте! У меня тут такая проблема: необходимо составить процедуру, упрощающую формулу исчисления высказываний F(A,B,C) на делфи,а как это сделать я даже не представляю. Может у кого-нибудь есть какие-нибудь идеи,если есть поделитесь пожалуйста со мной! Зарание спасибо!
|
![]() |
![]() |
![]() |
#2 |
Регистрация: 25.03.2008
Сообщений: 7
|
![]()
Жаль что никто не откликнулся! Но за то я всё сделала сама)))
program Project1; {$APPTYPE CONSOLE} uses SysUtils; var ItTablist: array[1..8,1..3] of char; s:string; I,j:integer; Y:integer; st:string; s1:string; k:integer; a:string; F: array[1..8]of string; const Tablist: array[1..8,1..3] of char=(('0','0','0'),('0','0','1'),( '0','1','0'),('0','1','1'),('1','0' ,'0'),('1','0','1'),('1','1','0'),( '1','1','1')); {Таблица исходных значений А,В,С} function myFunction(s:string; I:integer):char;{Функция вычисления лог. выражения} begin repeat //Присвоение значений переменным Y:=pos('A',s); If Y>0 then s[y]:=Tablist[i,1]; until Y=0; repeat Y:=pos('B',s); If Y>0 then s[y]:=Tablist[i,2]; until Y=0; repeat Y:=pos('C',s); If Y>0 then s[y]:=Tablist[i,3]; until Y=0; repeat //Поиск и вычисление лог.отрицания Y:=pos('!',s); If Y>0 then begin If copy(s,y,2)='!0' then s[y]:= '1' else s[y]:= '0'; delete(s,y+1,1); end; until Y=0; repeat //Поиск и вычисление коньюнкции Y:=pos('&',s); If Y>0 then begin If copy(s,y-1,3)='1&1' then s[y-1]:= '1' else s[y-1]:= '0'; delete(s,y,2); end; until Y=0; repeat //Поиск и вычисление дизьюнкции Y:=pos('v',s); If Y>0 then begin If copy(s,y-1,3)='0v0' then s[y-1]:= '0' else s[y-1]:= '1'; delete(s,y,2); end; until Y=0; repeat //Поиск и вычисление импликации Y:=pos('>',s); If Y>0 then begin If copy(s,y-1,3)='1>0' then s[y-1]:= '0' else s[y-1]:= '1'; delete(s,y,2); end; until Y=0; repeat //Поиск и вычисление эквиваленции Y:=pos('=',s); If Y>0 then begin If (copy(s,y-1,3)='1=1')or(copy(s,y-1,3)='0=0') then s[y-1]:= '1' else s[y-1]:= '0'; delete(s,y,2); end; until Y=0; result:=s[1]; end; begin //Начало программы Write('Vvedite formyly: '); //Ввод формулы ReadLn(s); Writeln(s); st:=s; //сохранение исходной строки //Поиск скобок и вычисление выражений в них for K := 1 to 8 do begin repeat Y:=pos(')',s); If Y>0 then begin for I := y downto 1 do if s[i]='(' then //break; begin s1:= copy(s,i+1,y-i-1); s[i]:= myFunction(s1,K); delete(s,i+1,y-i+1); end; end; until Y=0; a:= myFunction(s,K); s:=st; F[K]:=a; end; for I := 1 to 8 do //Вывод результата writeln(F[i]); readln; end. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Элементы управления | Rom1k06 | Microsoft Office Excel | 7 | 28.08.2008 09:47 |
Одинаковые элементы | kodov | Общие вопросы Delphi | 3 | 11.08.2008 14:03 |
Повторяющиеся элементы массива | Stanislav | Общие вопросы Delphi | 10 | 23.05.2008 12:31 |
Как найти max и min элементы матрицы????? | ЕвгениуS | Помощь студентам | 19 | 02.03.2008 19:47 |