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++ - problemi nel
Forum - C/C++ - problemi nel "ciclare" espressioni....

Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 19:47
Martedì, 08/07/2008
Salve ragazzi ho un piccolo problema...
Allora dovrei acquisire delle stringhe solo che le vorrei acquisire nel seguente modo:
Es:
Numero espressioni disgiunte: 3
Espressione:
prima stringa: a+b

riscrivi la prima stringa tra parentesi e moltiplicala ad esempio per !c
(a+b) * !c

riscrivi la prima e la seconda stringa acquisita tra parentesi e moltiplica per ad esempio b+!c...
(a+b) * !c * b+!c

riscrivi tutte le stringhe acquisite tra parentesi
(a+b) * (!c) * (b+!c)

In pratica a cquisisco la prima stringa (a+b) dopodichè la seconda stringa la dovrei acquisire scrivendo la prima moltiplicata per la seconda, per la terza e così via....spero di essere stato chiaro....
Il codice non mi permette di fare questo ciclo per n espressioni ma solo per due espressioni...qualcuno potrebbe aiutarmi.???...grazie anticipatamente....
Ecco il codice ANSI C:
  
Codice sorgente - presumibilmente Plain Text

  1.  

#include <stdio.h>


int main()
{
    int i,
        n,
        j,
        m,
        *n_exp_disgiunte;

    char f_disgiunta[100];


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

    /* acquisizione diamica delle espressioni disgiunte */
    n_exp_disgiunte = (int *)calloc(n,
                                    sizeof(int));

    printf("\nAcquisire espressioni disgiunte: ");
    for(i = 0; i < n - 1; ++i)
    {
        /*printf("\n%d^Espressione disgiunta: ", i+1);*/

        for(j = 0; j <= '\0'; ++j)
        {
            scanf("%s",
                  &f_disgiunta[j]);

        }
        for(j = 0; j <= '\0'; ++j)
        {
            printf("(%s) * ", f_disgiunta);
            scanf("%s",
                  &f_disgiunta[j]);
        }

    }





    return 0;
}

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 23:37
Martedì, 08/07/2008
Testo quotato

Postato originariamente da giocala88:

Salve ragazzi ho un piccolo problema...



Chiamalo "piccolo" ...

Testo quotato

Il codice non mi permette



Nel codice ci sono degli errori "gravi" ... intanto perche' allochi la memoria per valori interi se devi trattare delle stringhe?

E dato che devi allocare un gruppo di stringhe dinamicamente, come mai non usi un puntatore doppio?

E perche' non deallochi dopo avere allocato?

Insomma ... un esempio semplice di codice per quello che devi fare, e' il seguente ...

Codice sorgente - presumibilmente C++

  1. #define MAXLENEXPR 100
  2.  
  3. #include <stdio.h>
  4.  
  5. int main()
  6. {
  7.   int i, n, j;
  8.   char **exprs_d;
  9.  
  10.   printf("\nNumero di espressioni disgiunte: ");
  11.   scanf("%d", &n);
  12.  
  13.   exprs_d = (char **)calloc(n, sizeof(char *));
  14.   for(i=0; i<n; i++)
  15.     exprs_d[i] = (char *)calloc(MAXLENEXPR, sizeof(char));
  16.  
  17.   printf("\nAcquisire espressioni disgiunte ...\n");
  18.  
  19.   for(i=0; i<n; i++)
  20.   {
  21.     printf("\nEspressione %d : ", i+1);
  22.     scanf("%s", exprs_d[i]);
  23.  
  24.     printf("\n");
  25.  
  26.     for(j=0; j<=i; j++)
  27.     {
  28.       printf("(%s)", exprs_d[j]);
  29.  
  30.       if((i<(n-1)) || (j<(n-1))) printf(" * ");
  31.     }
  32.     printf("\n");
  33.   }
  34.  
  35.   printf("\n");
  36.  
  37.   for(i=0; i<n; i++)
  38.     free(exprs_d[i]);
  39.   free(exprs_d);
  40.  
  41.   return 0;
  42. }



P.S. Perche' usi quel modo assurdo di dichiarare le variabili e scrivere le scanf su piu' righe??

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 12:27
Lunedì, 14/07/2008
Innanzitutto ringrazio per l'interessamento ma c'è un piccolo problema...
il fatto è che le espressioni da acquisire (es: a+b) devono essere controllate in caso di errori dio digitazione...come potrei impostare il tutto ???...grazie ancora..e ciao....
Es:
si possono accettare solo espressioni del tipo:
a+b+c+...+n;
oppure le lettere devono essere precedute dal punto esclamativo...anche se non tutte...
Es:
!a+b+c+!d+...+n....

PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 14:01
Lunedì, 14/07/2008
Beh ... questo non lo avevi detto ... allora il "piccolo problema" diventa un "parser di espressioni" e la cosa si fa molto molto piu' complessa ...

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 243
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 16:57
Martedì, 15/07/2008
Non c'è proprio modo di fare qualcosa????....
Non capisco come possa essere possibile acquisire una stringa senza sapere nulla della sua lunghezza, controllarla e visualizzarla...
Credevo fosse "fattibile" per uno come me che studia informatica al primo anno...ma a quanto pare è proprio un problema...
Se qualcuno ha la pazienza di aiutarmi...???...anche se non credo...comunque ancora grazie...ciao...

PM Quote