Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

C - Sekwencje nawiasów

Ostatnio zmodyfikowano 2012-01-16 15:33
Autor Wiadomość
orion
Temat założony przez niniejszego użytkownika
C - Sekwencje nawiasów
» 2012-01-14 13:33:24
Witam, mam problem moim programem który sprawdza poprawność sekwencji nawiasów.

Gubi się dla np: (([)])), może jakaś wskazówka jak go poprawić?


C/C++
#include<stdio.h>
#include<string.h>
#define LENGTH 10000
int main() {
   
    int i;
    int parenthesis;
    int square_bracket;
    int length;
   
    i = 0;
    parenthesis = 0;
    square_bracket = 0;
    length = 0;
    char tab[ LENGTH ];
   
    printf( "Podaj sekwencje nawiasow:\n" );
    scanf( "%s", tab );
   
    for( i = 0, length = strlen( tab ); i < length; i++ ) {
        switch( tab[ i ] ) {
        case '(': parenthesis++; break;
        case ')': parenthesis--; break;
        case '[':
            if( parenthesis != 0 ) break;
           
            square_bracket++; break;
        case ']':
            if( parenthesis != 0 ) break;
           
            square_bracket--; break;
        }
       
        if(( parenthesis < 0 ) ||( square_bracket < 0 ) ) break;
       
    }
   
    if( parenthesis || square_bracket )
         printf( "Zapis jest niepoprawny!" );
    else
         printf( "Zapis jest poprawny!" );
   
    return 0;
}
Z góry dziękuje za pomoc
P-48153
ison
» 2012-01-14 13:43:20
dla każdego nawiasu
{
   jeśli jest otwierający to wrzuć go na stos
   jeśli jest zamykający to
   {
      jeśli stos jest pusty to przerwij program -> błędne nawiasowanie
      jeśli nawias z góry stosu jest tego samego typu to go zdejmij
      jeśli nie jest to przerwij program -> błędne nawiasowanie
   }
}
jeśli stos jest niepusty -> błędne nawiasowanie
P-48155
orion
Temat założony przez niniejszego użytkownika
» 2012-01-14 13:45:39
Ok dzięki spróbuje to zrobić Twoim algorytmem.
P-48156
DejaVu
» 2012-01-14 13:48:16
Za zmuszanie do pisania w czystym C powinno się palić na stosie ;p
P-48158
orion
Temat założony przez niniejszego użytkownika
» 2012-01-16 13:36:00
C/C++
#include<stdio.h>
#include<string.h>
#define LENGTH 10000
int iSTOS[ LENGTH ];
int iPOZYCJA = 0;


iPush( int X ) { //wstawianie wartości na stos
    if( iPOZYCJA >= 0 )
         iSTOS[ iPOZYCJA++ ] = X;
   
}
iPop() { //zdejmowanie wartości ze stosu
    if( iPOZYCJA >= 0 )
         return iSTOS[ --iPOZYCJA ];
    else
         return - 1;
   
}

main() {
   
    int i;
    int o; //okragly
    int k; //kwadratowy
    int length;
    char tab[ LENGTH ];
    int X[ LENGTH ];
   
   
   
    printf( "Podaj sekwencje nawiasow:\n" );
    scanf( "%s", tab );
   
   
    for( i = 0, length = strlen( tab ); i < length; i++ ) {
        switch( tab[ i ] ) {
        case '(': iPush( X[ 0 ] ); break;
        case '[': iPush( X[ 1 ] ); break;
        case ')': o = iPop();
            if( tab[ i ] - o == 1 )
                 iPOZYCJA--;
            else
                 printf( "Zapis jest niepoprawny" );
           
            break;
        case ']': k = iPop();
            if( tab[ i ] - k == 2 )
                 iPOZYCJA--;
            else
                 printf( "Zapis jest niepoprawny" );
           
            break;
        }
       
    }
    if( iPOZYCJA == 0 )
         printf( "Zapis jest poprawny" );
    else
         printf( "Zapis jest niepoprawny" );
   
    return 0;
}

Tylko głupoty mi wypisuje
P-48364
orion
Temat założony przez niniejszego użytkownika
» 2012-01-16 15:33:40
Ok, już sobie poradziłem. Dzięki za wcześniejsza pomoc.
P-48380
« 1 »
  Strona 1 z 1