PDA

View Full Version : C: Utilizzo Top Down e compilato crash immediato.


richyOCZ94
27-04-2012, 20:38
Salve chiedo aiuto perchè non so trovare l'errore:muro:
compilato con dev-cpp su windows 7 mi da sempre problemi...sapreste dirmi il perchè?

programma:

# include <stdio.h>
# include <stdlib.h>
int media();
int positivi();
int insufficienze();
int limite();
int inizializzazione();
int menu();
int opz;
int s[30];
int o[30];


int main()
{
printf("Programma di elaborazione voti informatica\n");
inizializzazione();
menu();
do {switch(opz)
{
case 1:
media();
break;
case 2:
positivi();
break;
case 3:
insufficienze();
break;
case 4:
limite();
break;
}
}
while (opz!=5);
}

int inizializzazione(int i)
{
for(i=0;i<30;i++)
{
do {printf("Inserire il voto scritto \ndell'alunno n' %d" , i+1);
scanf("%d" , s[i]);}
while(s[i]<1 || s[i]>10);
do {printf("Inserire il voto orale \ndell'alunno n' %d" , i+1);
scanf("%d" , o[i]);}
while(o[i]<1 || o[i]>10);
}
return s[i];
return o[i];
}

int media (int i,int cont, int media)
{
for(i=0;i<30;i++)
{
cont=0;
cont=s[i]+o[i];
cont=(cont)/(2);
printf("La media dei voti dell'alunno n' %d e' %d" , i+1, media);
}
}

int positivi (int cont,int i)
{
cont=0;
for(i=0;i<30;i++)
{
if (s[i]>6)
if (o[i]>6)
cont=cont+1;
}
printf("Il numero di voti positivi è %d" , cont);
}

int insufficienze (int i, int cont)
{
cont=0;
for(i=0;i<30;i++)
{
if (s[i]<6)
cont=cont+1;
}
printf("Nel test scritto ci sono state %d insufficienze ", cont);
}

int limite (int i,int cont,int limite)
{
cont=0;
do {printf("Inserire il limite");
scanf("%d" , limite);}
while(limite<1 || limite>10);
for (i=0;i<30;i++)
{
if (o[i]>limite)
cont=cont+1;
}
printf("Il numero di studenti che,\nnel compito orale hanno superato\nil limite di %d e' di %d" , limite ,cont);
}

int menu ()
{
printf("Inserire l'operazione da fare");
scanf("%d" , opz);
return opz;
}

clockover
27-04-2012, 20:45
1) indenta il codice
2) cosa dovrebbe fare il tuo programma
3) descrivi il tuo errore

richyOCZ94
27-04-2012, 20:54
deve utilizzare questi sotto programmi nella main e utilizzare le variabili globali dichiarate ma appena parte la main e inserisco il primo valore crasha

AllerITA
27-04-2012, 21:39
Scusa mi sembra che come hai utilizzato scanf sia sbagliato, devi usare il riferimento cioe' il puntatore alla variabile del vettore int corrispondente come descritto qui:

http://msdn.microsoft.com/en-us/library/9y6s16x1(v=VS.80).aspx

cioè dovrebbe essere:

se il vettore e' s[100] l'elemento i e' dato da s[i] quindi il riferimento a s[i] e'

(s+i)

quindi
scanf("%d",(s+i));

o

scanf("%d",&s[i]);

poi return ti fa uscire immediatamente dalla funzione quindi è inutile

return s[i];
return o[i];
perché il secondo return non è eseguito.

quando chiami inizializzazione
non passi nessun argomento a i
quindi e' settato in modo errato
e la funzione non dovrebbe uscire in modo normale.

EDIT ho riletto il codice e invece ho trovato l'inizializzazione di opz scusami
errore mio

errori simili li ho trovati sulle altre funzioni.

Poi correggetemi se sbaglio sono da anni a digiuno di C:

richyOCZ94
27-04-2012, 22:28
non riesco a capire quel che vuoi dire....s è il nome del vettore e i e l'indice del for che mi va a indicare anche l'indice del vettore

AllerITA
28-04-2012, 10:19
Forse ti conviene studiare i puntatori alla memoria altrimenti non ne vieni fuori.
Procurati un buon manuale del C o del C++ perché l'argomento da trattare è molto lungo e complesso, ed e' la base della programmazione del C.
Se qualcun'altro e' in grado di spiegarlo in parole povere è ben accetto.
Purtroppo il C e' alquanto complesso per un principiante, devi studiare parecchio prima di creare un sorgente privo di errori.
E alle volte causa dimenticanze non basta.
Comunque prenditi un buon manuale del C++ o del C e studialo bene.
Guarda su Amazon o in una qualsiasi libreria accademica, io sono poco pratico
nel consigliarti lascio ad altri più in gamba di me di farlo al mio posto.