Oppure

Loading
08/07/08 17:47
giocala88
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:
#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 <= '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:
#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 <= '{parsed_message}'; ++j)
{
scanf("%s",
&f_disgiunta[j]);

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

}





return 0;
}
'; ++j)
{
scanf("%s",
&f_disgiunta[j]);

}
for(j = 0; j <= '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:
#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 <= '{parsed_message}'; ++j)
{
scanf("%s",
&f_disgiunta[j]);

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

}





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

}





return 0;
}
aaa
08/07/08 21:37
gantonio
Postato originariamente da giocala88:

Salve ragazzi ho un piccolo problema...


Chiamalo "piccolo" ...

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 ...

#define MAXLENEXPR 100

#include <stdio.h> 

int main() 
{ 
  int i, n, j;
  char **exprs_d;

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

  exprs_d = (char **)calloc(n, sizeof(char *)); 
  for(i=0; i<n; i++) 
    exprs_d[i] = (char *)calloc(MAXLENEXPR, sizeof(char)); 

  printf("\nAcquisire espressioni disgiunte ...\n"); 

  for(i=0; i<n; i++) 
  { 
    printf("\nEspressione %d : ", i+1);
    scanf("%s", exprs_d[i]); 

    printf("\n");

    for(j=0; j<=i; j++)
    {
      printf("(%s)", exprs_d[j]);

      if((i<(n-1)) || (j<(n-1))) printf(" * ");
    }
    printf("\n");
  } 

  printf("\n");

  for(i=0; i<n; i++) 
    free(exprs_d[i]);
  free(exprs_d);

  return 0; 
}


P.S. Perche' usi quel modo assurdo di dichiarare le variabili e scrivere le scanf su piu' righe??
aaa
14/07/08 10:27
giocala88
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....
aaa
14/07/08 12:01
gantonio
Beh ... questo non lo avevi detto ... allora il "piccolo problema" diventa un "parser di espressioni" e la cosa si fa molto molto piu' complessa ...
aaa
15/07/08 14:57
giocala88
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...
aaa