Witajcie :) Już raz zwracałem się do Was o pomoc - liczę, że i tym razem mnie odpowiednio nakierujecie. Ostatnio dla sportu zacząłem myśleć o programie, który liczy stopień zagnieżdżenia nawiasów. Chodzi o wymyślenie odpowiedniego algorytmu, działającego oczywiście dla wszystkich przypadków. Zupełnie nie rozumiem dlaczego program po wpisaniu '( ) ( ( ) ) )' (bez spacji) wypluwa stopień równy 1. Byłem przekonany, że algorytm działa w porządku, jednak teraz nie jestem już taki pewien...
#include <iostream>
using namespace std;
int main()
{
char nawias[100];
int i=0, j=0, level = 0, n = 0;
cout << "Podaj szesc nawiasow: " << endl;
for(i=0;i<6;i++) {
cin >> nawias[i];
}
for(i=0;i<1000;i++)
{
if ( nawias[i]=='[' || nawias[i]=='(' || nawias[i]=='{' )
{
n=1;
j++;
level++;
}
else if ( nawias[i]==']' )
{
if(nawias[ j - n ] == '[')
{
nawias[ j - n ] = 1;
n++;
break;
}
else if (nawias[ j - n ] == 1) n++;
else {cout << "NIE ]" << i << endl; break;}
}
else if ( nawias[i]==')' )
{
if(nawias[ j - n ] == '(')
{
nawias[ j - n ] = 1;
n++;
break;
}
else if (nawias[ j - n ] == 1) n++;
else {cout << "NIE )" << i << endl; break;}
}
else if ( nawias[i]=='}' )
{
if(nawias[ j - n ] == '{' )
{
nawias[ j - n ] = 1;
n++;
break;
}
else if (nawias[ j - n ] == 1) n++;
else {cout << "NIE }" << i << endl; break;}
}
else break;
}
cout << "Poziom zagniezdzenia nawiasow to: "<< level << " "<< endl;
return 0;
}
Czy ktoś widzi, dlaczego tak jest? Ja już spędziłem wystarczająco dużo czasu nad tym problemem. Proszę o pomoc. Dzięki wielkie! :)
PS: Program w domyśle będzie korzystał z funkcji, jednak obecnie jest to zaledwie szkic. Dlatego część kodu się powtarza aż trzy razy :)