PDA

View Full Version : [C] Ordinamento vettori e stampa


$imy92
12-02-2010, 20:01
Salve a tutti a scuola ho dovuto creare un programma che date le materie e i rispettivi voti mi generasse la media e stampasse in ordine decrescente(rispetto alla media) le materie con i rispettivi voti....
Sono giunto alla soluzione di sotto....ma non riesco a trovare un modo per stampare i rispettivi voti al fianco delle materie...avevo pensato di creare un vettore vv1 in cui scrivere (ogni volta che ordinava la media) i voti della rispettiva materia....in modo che poi in fase di stampa leggesse il numero di voti dal vettore nv e li stampasse....però non riesco ad assegnare i voti al vettore vv1 per via dell'indice...
Forse mi sto complicando la vita....con le matrici sarebbe più semplice ma il prof non vuole che le usi perchè ancora non l'ha spiegate...
Questo è il programma :
#include <stdio.h>
#include <windows.h>
#include <string.h>
int i, //contatore
k, // secondo contatore
j, // terzo contatore
n, //numero materie
l, //contatore vv1
nv[10], //vettore numero voti
vv[30], //vettore voti
vv1[30], //vettore voti per stampa
s; //sommatore
float media[15], //vettore medie
sm; //scambio medie

char nm[15][15], //vettore nomi materie
sca[15]; // vettore scambio

/* Programma in grado di ordinare le materie in base alla media dei voti \n */
void caricamento() //caricamento materie-->voti e stampa media
{

printf("Quante materie vuoi inserire? ");
scanf("%d", &n);

for(i=1;i<=n;i++)
{
printf("Qual e' la %d materia che vuoi inserire? \n" , i);
scanf("%s", &nm[i]);
printf("Quanti voti vuoi inserire di %s ? \n", nm[i]);
scanf("%d", &nv[i]);
for(k=1;k<=nv[i];k++)
{
printf("Inserisci il %d voto: ",k);
scanf("%d", &vv[i]);
s=s+vv[i];
}
media[i]=(float)s/nv[i];
printf("La media e'%2.2f \n", media[i]);
s=0;
}
}
void ordinamento() //ordinamento
{
for(i=1;i<=n;i++)
{
for(k=i+1;k<=n;k++)
{
if(media[i]<media[k])
{
sm=media[i]; //ordinamento medie
media[i]=media[k];
media[k]=sm;
strcpy(sca,nm[i]);
strcpy(nm[i],nm[k]);
strcpy(nm[k],sca);
for(j=1;j<=nv[i];j++) // quì NON Và
{
vv1[j]=vv[j];
}





}
}
}
}
void stampa()
{
for(i=1;i<=n;i++){
printf("%s %2.2f \n",nm[i] ,media[i]);}
}
main()
{
caricamento();
ordinamento();
stampa();


system("pause");
}

TRF83
13-02-2010, 10:09
Sei in c..i vettori "partono" da 0! Metti il seguente for: for(i=0;i<n;i++) in entrambi i casi..dovrebbe risolverti il problema dell'indicizzazione! ;)

$imy92
13-02-2010, 11:22
No non centra...io li faccio partire sempre da 1 anche se partono da 0....il problema dell'indice sorge quando devo assegnare i voti al vettore vv1....perchè una volta uscito dal for....poi rientra quando fà un altro scambio...e mi scrive i voti della nuova materia su quelli precedenti perche j ricomincia da 1