$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");
}
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");
}