Newsgroup: it.comp.lang.c
Titolo: Programma su vettori

Salve a tutti,
ho un problema con questo porg. Dovrebbe aumentare i vari elementi del
vettore a seconda del tipo di valore assunto dalla variabile "totale". Solo
che, qualsiasi valore immetto, mi aumenta solo il valore del primo elemento
del vettore, lasciando tutti gli altri sempre a zero.
è corretto scrivere vettore[0] = vettore[0] + 1 per aumentare di uno il
valore del primo elemento del vettore?
Di seguito il codice:
#include <stdio.h>
int main()
{
int vettore[9] = {0};
int vendite, totale;
while (vendite != -1) {
printf ("Immetti la somma delle vendite lorde settimanali: ");
scanf ("%d", &vendite);
totale = ((vendite / 100) * 9) + 200;
if ((totale >= 200) && (totale <= 299))
   vettore[0] = vettore[0] + 1;
if ((totale >= 300) && (totale <= 399))
   vettore[1] = vettore[1] + 1;
if ((totale >= 400) && (totale <= 499))
   vettore[2] = vettore[2] + 1;
if ((totale >= 500) && (totale <= 599))
   vettore[3] = vettore[3] + 1;
if ((totale >= 600) && (totale <= 699))
   vettore[4] = vettore[4] + 1;
if ((totale >= 700) && (totale <= 799))
   vettore[5] = vettore[5] + 1;
if ((totale >= 800) && (totale <= 899))
   vettore[6] = vettore[6] + 1;
if ((totale >= 900) && (totale <= 999))
   vettore[7] = vettore[7] + 1;
if (totale >= 1000)
   vettore[8] = vettore[8] + 1; }
printf ("Stipendi tra 200 e 299: %d\n", vettore[0]);
printf ("Stipendi tra 300 e 399: %d\n", vettore[1]);
printf ("Stipendi tra 400 e 499: %d\n", vettore[2]);
printf ("Stipendi tra 500 e 599: %d\n", vettore[3]);
printf ("Stipendi tra 600 e 699: %d\n", vettore[4]);
printf ("Stipendi tra 700 e 799: %d\n", vettore[5]);
printf ("Stipendi tra 800 e 899: %d\n", vettore[6]);
printf ("Stipendi tra 900 e 999: %d\n", vettore[7]);
printf ("Stipendi oltre 1000: %d", vettore[8]);
return 0;
}
Grazie a tutti
Daniele

 ha scritto:

Sei proprio sicuro che per *tutti* i valori il risultato sia lo stesso?
Penso che il problema stia nell'uso dell'operatore / per int.
Infatti l'operatore / su int restituisce unicamente la parte intera della 
divisione ignorando il resto!
Cosi` se inserisci ad esempio un numero compreso tra 0 e 100 il risultato 
della divisione e conseguentemente del prodotto per 9 sara` 0,
se inserisci un numero compreso tra 100 e 200 il risultato della 
divisione sara` 1 e conseguentemente il prodotto per 9 sara` 9.
Affinche` tu possa incrementare vettore[1] devi inserire un valore almeno 
pari a 1200...cosi` il risultato della divisione e` pari a 12 e il 
prodotto per 9 e la successiva somma con 200 dara` 308...
Per risolvere il problema devi dichiarare vendite e totale come dei float 
o double e ripetere la stessa operazione (con tutti i cast del caso, se 
necessari).
Comunque per incrementare il valore di una variabile esiste l'operatore 
unario ++ prefisso!
Cosi` se vuoi incrementare la variabile intera 'i' e` sufficiente lo 
statement
++i;
piu` comodo di 
i = i+1;
Nel tuo programma c'e` anche un altro problema (minore): la prima cella 
del vettore viene sempre incrementata a causa del fatto che l'ultimo 
valore che inserisci prima dell'uscita dal ciclo e` (-1) che diviso per 
100 da` 0 e si ricade nel caso precedente....per risolvere il problema e` 
sufficiente tu controlli il valore assunto dalla variabile vendite subito 
dopo averlo acquisito con la scanf e uscire dal ciclo con un break se 
vale (-1), oppure (soluzione piu` pulita) puoi usare un do{...}while
(...); rimanipolando un pochino il codice...
Spero di averti aiutato!
Ale
Inviato da 
www.mynewsgate.net

 Spero di averti aiutato!
Come no! Se il 15 dovessi passare l'esame sarà anche merito tuo e di tutti i
partecipanti del NG che mi hanno aiutato in questi mesi...
Ciao e grazie ancora!
Daniele