ciao a tutti..ho fatto questo programmino
va tutto bene tranne l'ordinamento alfabetico..cioè non mi ordina alfabeticamente (in ordine crescente) per cognome..credo sia tutto ok..ma non mi ordina
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define maxcar 25
#define massimo 100
/*
*
*/
int main() {
struct studente {
char cognome[maxcar];
char nome[maxcar];
int scritto;
int orale;
double media;
} studenti[massimo];
int i, j;
int n;
char buffer [maxcar];
double oral;
double scrit;
printf ("inserisci numero studenti : \n");
scanf ("%d", &n);
if ( n >= 3){
for (i = 0; i <= massimo && i <= n - 1; i++){
printf ("cognome : ");
scanf ("%s", studenti[i].cognome);
printf ("nome : ");
scanf ("%s", studenti[i].nome);
printf ("scritto : ");
scanf ("%d", &studenti[i].scritto);
printf ("orale : ");
scanf ("%d", &studenti[i].orale);
}
for (i = 0; i <= massimo && i <= n - 1; i++){
for (j = i + 1; j <= massimo && j <= n; j++){
if (strcmp(studenti[i].cognome,studenti[j].cognome) == -1){
strcpy(buffer,studenti[j].cognome);
strcpy(studenti[j].cognome,studenti[i].cognome);
strcpy(studenti[i].cognome,buffer);
strcpy(buffer,studenti[j].nome);
strcpy(studenti[j].nome,studenti[i].nome);
strcpy(studenti[i].nome,buffer);
scrit = studenti[j].scritto;
studenti[j].scritto = studenti[i].scritto;
studenti[i].scritto = scrit;
oral = studenti[j].orale;
studenti[j].orale = studenti[i].orale;
studenti[i].scritto = oral;
}
}
printf ("\n\ntabella in ordine alfabetico\n");
printf ("\n%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE");
for (i = 0; i <= massimo && i <= n - 1; i++){
printf ("\n%10s%10s%10d%10d", studenti[i].cognome, studenti[i].nome, studenti[i].scritto, studenti[i].orale);
}
}
printf ("\n\nstudenti con media >= 18\n");
printf ("\n%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE");
for (j = 0; j <= massimo && j <= n - 1; j++){
studenti[j].media = ((double)studenti[j].scritto + (double)studenti[j].orale) / 2;
if (studenti[j].media >= 18){
printf ("\n%10s%10s%10d%10d", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale);
}
}
printf ("\n\nriepilogo voti\n");
printf ("\n%10s%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE","MEDIA");
for (j = 0; j <= massimo && j <= n - 1; j++){
printf ("\n%10s%10s%10d%10d%10.lf", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale, studenti[j].media);
}
}else{
printf ("n minore di 3\n");
}
return 0;
}
dove sbaglio?