Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - if...valutazione errata...
Forum - C/C++ - if...valutazione errata...

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 14:35
Sabato, 28/06/2008
Salve, vorrei capire e se possibile chiarire un dubbio...
Allora la seguente implementazine in ANSI C chiede di acquisire una stringa attraverso un ciclo for....Questa stringa deve contenere lettere o numeri e operatori di somma....tutto il resto non dve comparire o meglio si deve visualizzare un mex di errore....
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,
        j,
        *exp_disgiunte,
        n_exp_disgiunte;

    char exp[1000];

    printf("\nAcquisire il numero di espressioni disgiunte: ");
    scanf("%d",
          &n_exp_disgiunte);

    exp_disgiunte = (int *)calloc(n_exp_disgiunte,
                                                sizeof (int));

    for(i = 0; i < n_exp_disgiunte; ++i)
    {
        printf("\n%d^ Espressione: ", i+1);
        scanf("%s",
               exp);

        while(exp == '\0');

        printf("\n%s\n", exp);

        for(j = 0; j <= '\0'; ++j)
        {
            if(exp[0]    == '\0' &&
               exp[j+1]  == '+' ||
               exp[j+2]  == '+' &&
               exp[j+2]  != '*' &&
               exp[j+5]  != '*' &&
               exp[j+8]  != '*' &&
               exp[j+11] != '*' &&
               exp[j+14] != '*' &&
               exp[j++]  == '\0')
               {
                   printf("\nEspressione acquisita correttamente...\n");

               }
            else
             printf("\nL'espressione acquisita non e' corretta\n");
        }
    }

    return 0;
}



Domanda: In riferimento all'istruzione if(exp[j+1]....) non c'è un modo più semplice per dire "se compare un carattere di '*' l'espressione non è corretta"?????....ho provato a a mettere if(exp[j] != '*') ma il risultato non cambia....è vera se '*' compare come è anche vera se non compare....come mai???...percaso sbaglio io qualcosa???...grazie anticipatamente...

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 18:42
Sabato, 28/06/2008
Ma questa if

if(exp[0] == '\0' &&
exp[j+1] == '+' ||
exp[j+2] == '+' &&
exp[j+2] != '*' &&
exp[j+5] != '*' &&
exp[j+8] != '*' &&
exp[j+11] != '*' &&
exp[j+14] != '*' &&
exp[j++] == '\0')

cosa vorrebbe dire???

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 18:48
Sabato, 28/06/2008
In effetti non ha senso....anche nell'implementazione un senso ce l'ha....chiedo proprio se qualcuno sarebbe in grado di rendere "sensata" quell'istruzione if...spero di essere stato chiaro nell'esporre il problema...
La stringa deve cotenere solo operatori additivi...lettere e numeri....grazie ancora...

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:26
Lunedì, 30/06/2008
provo a darti una soluzione, per confrontare dei caratteri in una stringa con l'ANSI C si fa cosi:

   int i;
  for (i=0;str[ i]!='\0';i++)
     {
       /* if ((str[ i]!='a') || (str[ i]!='b') || (str[ i]!='c') || (str[ i]!='d') || .. .. ..) e continui con tutte le letere che possono essere accettate oppure fai la cosa inversa cioe  
          if (str[ i]=='{') || (str[ i]=='^') || (str[ i]=='#') ||  ..  ..  ..  e cosi via con tutti i simboli non permessi
       */
  str[ i]=' ';
/* al posto del carattere sbagliato gli mette uno spazio */
     }

le due IF hanno lo stesso risultato, sta a te scegliere la piu corta da scrivere!


prima dela i non ci va lo spazio ma sono stato costretto a inserirlo perchè altimenti non si leggeva!!

Ultima modifica effettuata da il 30/06/2008 alle 23:30
PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 1:52
Martedì, 01/07/2008
Trovo il tuo metodo molto prolisso e sconveniente .
La stringa deve contenere solo operatori additivi ( intendi il segno + ?? ) , lettere e numeri ? bene ci sono varie possibilita'

ti fai una funzione che controlli che la stringa sia corretta


Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. ...
  4. ...
  5. ...
  6. /*Ritorna 0 se la stringa non è valida ,
  7.   1 se è corretta*/
  8. int Verify ( char * str )
  9. {
  10.     for ( ; *str ; str++ )
  11.         if ( !isdigit ( *str ) && !isalpha ( *str ) && *str != '+' )
  12.             return 0 ;
  13.  
  14. return 1 ;
  15. }



Alternativa nel caso vuoi farti da te le istruzioni isdigit e isalpha

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. ...
  3. ...
  4. /*Verifica attraverso il codice ASCII che si tratti di un numero*/
  5. int _isDigit ( char a )
  6. {
  7.         return ( a - '0' >= 1 && a - '0' <= 9 ) ? 1 : 0 ;
  8. }
  9. /*Veifica attraverso il codice ASCII che si tratti di una lettera*/
  10. int _isAlpha ( char a )
  11. {
  12.         return ( ( a >= 65 && a <= 90 ) || ( a >= 97 && a <= 122 ) ) ? 1 : 0 ;
  13.        
  14. }
  15. /*Ritorna 0 se la stringa non è valida , 1 se è corretta*/
  16. int Verify ( char * str )
  17. {
  18.     for ( ; *str ; str++ )
  19.         if ( !_isDigit ( *str ) && !_isAlpha ( *str ) && *str != '+' )
  20.             return 0 ;
  21.  
  22. return 1 ;
  23. }




Ultima modifica effettuata da FHF93 il 01/07/2008 alle 1:53


Fabrizio
Dio disse : "chi odia la scuola scagli la prima pietra" ... E così nacquero le montagne...
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:03
Martedì, 01/07/2008
Innazitutto volevo ringraziare tutti pr l'interessamento....anche ho delle difficoltà con l'ultimo consgilio datomi....
Qualcuno sa dirmi come mai non va come dovrebbe???

Codice sorgente - presumibilmente Plain Text

  1.  

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int Verify ( char * str );

int main()
{
    int i,
        j,
        *exp_disgiunte,
        n_exp_disgiunte;

    char exp[1000];

    printf("\nAcquisire il numero di espressioni disgiunte: ");
    scanf("%d",
          &n_exp_disgiunte);

    exp_disgiunte = (int *)calloc(n_exp_disgiunte,
                                                sizeof (int));

    for(i = 0; i < n_exp_disgiunte; ++i)
    {
        printf("\n%d^ Espressione: ", i+1);
        scanf("%s",
              exp);

        while(exp == '\0');

        Verify(exp);

        printf("\n%s\n", exp);
    }



     return 0;
}

/*Ritorna 0 se la stringa non è valida ,
  1 se è corretta*/
int Verify ( char * str )
{
    for ( ; *str ; str++ )
        if ( !isdigit ( *str ) &&
             !isalpha ( *str ) &&
             *str != '+' )
        {
            printf("\nL'espressione non e' corretta\n");
            return 0 ;
        }
        else
        {
            printf("\nL'espressione e' corretta\n");

return 1 ;
        }
}


PM Quote
Avatar
FHF93 (Ex-Member)
Pro


Messaggi: 132
Iscritto: 13/11/2007

Segnala al moderatore
Postato alle 14:03
Martedì, 01/07/2008
Farei
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int Verify ( char * str );
  6.  
  7. int main()
  8. {
  9.  
  10. int i, j, *exp_disgiunte , n_exp_disgiunte;
  11.  
  12. char exp[1000];
  13.  
  14. printf("\nAcquisire il numero di espressioni disgiunte: ");
  15. scanf("%d" , &n_exp_disgiunte);
  16.  
  17. exp_disgiunte = (int *)calloc(n_exp_disgiunte, sizeof (int));
  18.  
  19. for(i = 0; i < n_exp_disgiunte; ++i)
  20. {
  21.           printf("\n%d^ Espressione: ", i+1);
  22.       scanf("%s", exp);
  23.      
  24.       printf("\nEspressione : %s\n", exp);
  25.       if ( Verify(exp) ) {
  26.                    printf ( "\nL'espressione inserita e' corretta\n" );
  27.       } else {
  28.                    printf ( "\nL'espressione inserita non e' corretta\n" ) ;
  29.                    }     
  30.                        
  31. }
  32.  
  33. return 0;
  34. }
  35.  
  36. /*Ritorna 0 se la stringa non è valida ,
  37. 1 se è corretta*/
  38. int Verify ( char * str )
  39. {
  40. for ( ; *str ; str++ )
  41.     if ( !isdigit ( *str ) && !isalpha ( *str ) && *str != '+' )
  42.         return 0 ;
  43. return 1 ;
  44. }





Fabrizio
Dio disse : "chi odia la scuola scagli la prima pietra" ... E così nacquero le montagne...
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 14:21
Martedì, 01/07/2008
Ringrazio tutt per l'aiuto...grazie mille

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 9:41
Mercoledì, 02/07/2008
è possibile implementare un algoritmo o una funzione che conti le sole lettere dell'alfabeto in riferimento al mio problema esposto in "if....valutazione errata..."???
Ringrazio tutti anticipatamente...ciao.....:D

Ultima modifica effettuata da giocala88 il 02/07/2008 alle 9:41
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo