Allora si tratta di aprire un file in cui ci sono i seguenti dati:COGNOME NOME ETà
es: viola giovanni 5
rosso simone 5
verde matteo 7
viola lucia 6
arancione marco 6
si chiede un programma che ordini nel seguente modo:
i ragazzi che hanno 5 anni sono:
rosso simone
viola giovanni
i ragazzi che hanno 6 anni sono:
arancione marco
viola lucia
i ragazzi che hanno 7 anni sono:
verde matteo
FINE
Essenzialmente mi interessa l'algoritmo di ordinamento delle stringhe.
Per intero il programma è il seguente:
NOTA: è inerente solo allìordinamento in ordine alfabetico
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAX 50 //numero max di partecipanti
struct schedastud{
char cognomestud[15];
char nomestud[15];
int annistud;
};
typedef struct schedastud studente;
main()
{
int anni[3], i=0, j, k, contalunni=0;
char nome[15], cognome[15];
studente lista[MAX], tempanni;
studente classifica[MAX];
FILE *fpscheda;
fpscheda=fopen("alunni.txt","r");
{
if (fpscheda==NULL)
printf("Errore nell'apertura del FILE");
else
{
fscanf (fpscheda,"%s %s %d", cognome, nome, &anni[i]);
while ( !feof (fpscheda))
{
strcpy ( lista[i].cognomestud,cognome );
strcpy ( lista[i].nomestud,nome );
lista[i].annistud = anni[i];
i++;
contalunni++;
fscanf (fpscheda ,"%s %s %d", cognome, nome, &anni[i]);
}
}
}
fclose ( fpscheda ); //chiusura FILE
for(i=1;i<contalunni-1;i++) //ordino la sequenza;
{
tempanni=lista[i]; //variabile temporanea per la distanza;
j=i-1;
while ( (j>=0) && (strcmp (lista[j].nomestud,tempanni.nomestud)>0))
{
lista[j+1] = lista[j]; //ordino la lista
j=j-1;
lista[j+1]=tempanni;
}
}
for(i=0;i<contalunni;i++)
{
printf ("%s %s %d",lista[i].cognomestud,lista[i].nomestud,lista[i].annistud);
printf("\n");
}
system("pause");
}