Newsgroup: it.comp.lang.c
Titolo: so alla frutta...

raga...non ce la faccio più...so allo stremo delle mie forze!
perchè se in questo listato inserisco quei due if di cui ho bisogno per
modificare il risultato della somma, non mi passa più il risultato corretto
oppure quello che gli passo io, ma gli passa 11...? quello lo dovrebbe dare
se h fosse uguale a 4! Senza gli if...passa tutto regolare...ma ho bisogno
di sostituire i risultati 3 e 4 rispettivamente con 10 e 11!
help!!!
i parametri passati ad i puntatori a e b possono essere al max {0, 1, 2}
======================
void somma(int *a, int *b,int *c)
{
int i,som;
for(i=0;i<max;i++) //passaggi
  {
   som=a[i]+b[i];
   printf("\nsom= %d",som);
//   if(som=3) {som=10;}
//   if(som=4) {som=11;}
   c[i]=som;
   printf("  c[i]: %d",c[i]);
   printf("  som: %d",som);
  }
}
======================
minkia :( so sull'orlo della disperazione! So sicuro che è una cavolata il
problema...ma non riesco a trovarlo!
Ah...ho provato ad utilizzare anche uno switch...ma senza esito positivo! :(
grazie
byez
B@STI

if(som=3) {som=10;}
if(som=4) {som=11;}
L'operazione som = 3 assegna a som il valore 3 (idem per l'altra riga). Già
questo non va (non ti dà nessun warning?). Devi mettere:
if(som==3) {som=10;}
if(som==4) {som=11;}
Così è più corretto. I parametri a, b e c sono dei vettori (da quel che ho
visto), non ho capito in che senso possono essere al max {0, 1, 2}; vuol
dire che possono avere al max 3 elementi o che gli elementi possono essere
solo i numeri 0, 1, 2? Ad ogni modo sostituendo le due linee dovrebbe andare
meglio (spero). Ciao
                                        Marchisio Stefano

                                         Marchisio Stefano
grazie
byez
B@STI

 int i,som;
E som non lo inizializziamo?! :))))
Dome

 Dome
byez
B@STI

 questo non va (non ti dà nessun warning?). Devi mettere:
Non deve dare nessun warning, perchè l'espressione è sintatticamente
corretta. Infatti:
if (a=b) {...}
equivale a:
if ( (a=b) != 0 ) {...}
e dal momento che a=b restituisce il risultato dell'assegnazione (cioè il
valore di b), l'espressione è sempre vera se b != 0. Nel caso specifico al
termine dei due if viene assegnato a som il valore 11.
Ciao,
Cecco

 if(som==4) {som=11;}
Come hanno gia' detto, l'istruzione
if(som=3) 
  ...;
e' perfettamente legale. Solo alcuni compilatori danno un
warning, evidentemente non e' il cado di djpp.
Per quanto mi riguarda  io preferisco scrivere
   if(CONST == var)
       ...;
E' perfettamente equivalente a 
   if(var == CONS)
      ...;
ma in caso di errore ci si accorge subito che qualcosa
non funziona e invece di perdere una nottata a cercare
l'errore si perdono 2 minuti a ricompilare. :-)
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 come non lo inizializzo?
Prova cosi:
void somma(int *a, int *b,int *c)
{
int i,som = 0;
for(i=0;i<max;i++) //passaggi
  {
   som=a[i]+b[i];
   printf("\nsom= %d",som);
//   if(som=3) {som=10;}
//   if(som=4) {som=11;}
   c[i]=som;
   printf("  c[i]: %d",c[i]);
   printf("  som: %d",som);
  }
}
Basta questo piccolo passaggio (più mettere a posto la storia dell' ==  ) e
vedi che funzionerà!
Devi inizializzare sum (ovvero dargli tu un valore che vuoi) perche
moltissimi compilatori quando una variabile non è inizializzata la lasciano
cosi come è: viene allocata memoria per quella variabile, ma tale memoria
non viene "ripulita", cosi se prima li c'era qualcos'altro, ora te ti
ritrovi quel qualcos'altro nella tua variabile. In parole povere, se non
inizializzi una variabile, rischi che abbia un valore casuale. Se noti bene,
la var i viene inizializzata a zero nel ciclo for proprio per questo motivo.
Dovresti fare la stessa cosa con la som: se all'avvio ha come valore 0, ok,
non ci sono problemi, gli sommi ad ogni ciclo quel cavolo che gli vuoi
sommare, ma se som vale 8213123 gia all'inizio... son cazzi! :)
Dome

       ...;
Il caro vecchio Koenig? Quel libro e piccolo, ma li vale i soldi spesi
:)
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

 sommare, ma se som vale 8213123 gia all'inizio... son cazzi! :)
Guarda meglio.  'som' viene  inizializzata all'inizio di  ogni ciclo. E`
ininfluente inizializzarla a 0 all'inizio della funzione.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Quando un uomo porta dei fiori a sua moglie senza motivo, 
un motivo c'e`.

 una variabile :)
In effetti, compilando questo codice con l'opzione -Wall del gcc:
#include <stdio.h>
int main(void) {
 int a=0;
 if (a=4)
  printf("ciao\n");
 return 0;
}
mi da il seguente warning:
pro.c: In function `main':
pro.c:5: warning: suggest parentheses around assignment used as truth value
Ciao,
Cecco

 ininfluente inizializzarla a 0 all'inizio della funzione.
Oooops :) E chi l'ha letta la funzione?! :)
Ho letto sum e ho pensato che fosse ci fosse un += da qualche parte :))))
Sorry
Dome

 Il caro vecchio Koenig? Quel libro e piccolo, ma li vale i soldi spesi
No, niente Koenig. Mi sono bastate qualche 10 di ore di debug ad inizio
carriera e un capo progetto molto scassapalle.
Ora una decina di ore di debug le passo solo a causa di memoria
liberata da una parte e riutilizzata a sproposito da un'altra :-)
