Witam mam problem z obliczaniem poziomu zagniezdzenia elementow w formule logicznej a mianowicie jak interpretowac wyrazenia n(......) bo przy kilku nawiasach i wiekszej ilosci negacji mi sie krzaczy jesli jest jedna negacja to jest ok np (2i2)i(2i(n3)) jest 0 1 1 1 0 0 0 1 1 1 3 3 1 0 i wszystko sie zgadza. Nie musicie podawac gotowego kodu sam jestem sobie stanie to napisac jezeli w miare jasno ktos wyjasni mi gdzie tkwi blad w moim roumowaniu
zeby bardziej zrozumiec o co mi chodzi http://sphere.pl/~skalar/LiTM/litm02.pdf
strona 2G
z gory dzieki za pomoc
//a-koniunkcja
//o-alternatywa
//n-negacja
//i-implikacja
//e-rownowaznosc
wpiszcie sobie na przyklad 000000000000000000<enter> i formule (n(2i(n3)))
wyjdzie 0 2 2 3 3 3 5 5 3 1 0
a powinno byc 0 2 2 3 3 3 5 5 3 2 0
dodam tylko ze poziom zagniezdzenia samej negacji i wyrazen ~q (czyli w programie nX) nalezy wiekszyc o 1
#include <iostream.h>
#include <conio.h>
char tabela[10000];
char formula[10000];
char buf_formula[10000];
int zagniezdzenia[10000];
int nawias[10000];
int cnt=0;
int neg=0;
int zonk=0;
void zamiana_na_zero_jeden();
void zagniezdzenia_obl();
int main()
{
while (scanf("%s", &tabela)!=EOF)
{
scanf("%s", &formula);
zamiana_na_zero_jeden();
zagniezdzenia_obl();
cout << buf_formula <<"\n";
for(int w=0;w<strlen(buf_formula);w++) cout << zagniezdzenia[w]<<" ";
}
return 0;
}
void zamiana_na_zero_jeden()
{
int buf=0;
char cyferka[1];
for(int i=0;i<strlen(formula);i++)
{
cyferka[0]=formula[i];
if(isdigit(formula[i]))
{
int buf = atoi (cyferka);
buf_formula[i]=tabela[buf];
}
else buf_formula[i]=formula[i];
}
}
void zagniezdzenia_obl()
{
//-----------------obliczanie zagniezdzen --------------------
for (int e=0; e<strlen(buf_formula);e++)
{
if(buf_formula[e]=='n')
{
neg++;;
cnt++;
zagniezdzenia[e]=cnt;
}
else if(buf_formula[e]=='(')
{
zagniezdzenia[e]=cnt;
cnt++;
}
else if(buf_formula[e]==')')
{
cnt--;
if(neg>0)
{
neg--;
cnt--;
}
zagniezdzenia[e]=cnt;
}
else zagniezdzenia[e]=cnt;
}
cnt=0;
neg=0;
//--------------koniec obliczania zagniezdzen-----------------------
}