|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2009
Messaggi: 75
|
[C] Ordinamento vettori e stampa
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 : Codice:
#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"); } Ultima modifica di $imy92 : 12-02-2010 alle 20:19. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2007
Città: Palestro
Messaggi: 1957
|
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!
![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2009
Messaggi: 75
|
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
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:06.