Come si ordina un array di struct ?

di il
7 risposte

Come si ordina un array di struct ?

Save a tutti ragazzi devo realizzare un array monodimensionale di record , un elenco degli alunni del corso
riportante il cognome, nome,numero di matricola , numero di giorni presenza al corso per ciascuno di essi
ed ordinarlo modo crescente rispetto al numero di presenze. Sono arrivato al punto di ordinare l'array ma non so proprio come proseguire.
ecco il codice:

#include<stdio.h>
#include<string.h>
#define card 2


void legge(char campo[],int MAX){
char c;
int i=0;
while((c=getchar())!='\n' && (i<MAX)){
campo=c;
i++;
}

campo='\0';

}

struct corso{
char nome[30];
char cognome[30];
char matricola[10];
char presenze;
};

struct corso alunno[card];

main()
{

int i;
for(i=0;i<card;i++){

fflush(stdin);
printf("COGNOME:");
legge(alunno.cognome,30);
fflush(stdin);
printf("NOME:");
legge(alunno.nome,30);
fflush(stdin);
printf("MATRICOLA:");
scanf("%s",&alunno.matricola);
fflush(stdin);
printf("PRESENZE:");
scanf("%d",&alunno.presenze);
fflush(stdin);
printf("\n\n");
}

for(i=0;i<card;i++)
{ printf("Cognome:%s\n",alunno.cognome);
printf("Nome:%s\n",alunno.nome);
printf("Matricola:%s\n",alunno.matricola);
printf("Presenze:%d\n\n",alunno.presenze);}
}

7 Risposte

  • Re: Come si ordina un array di struct ?

    Prova a fare qualcosa di più semplice: lavorando con un semplice array di interi (che potrebbero essere le tue presenze) effettua l'ordinamento di tali valori.
  • Re: Come si ordina un array di struct ?

    Di solito per ordinare un array monodimensionale di interi
    scrivo il seguente codice

    #include<stdio.h>
    #define card 5
    main()
    {


    int Vet[card],i, j,min, temp;


    //inserisce valori nello array
    for(i=0;i<card;i++){
    printf("inserisci valore\n");
    scanf("%d",&Vet);}

    //ordina array
    for(i=0; i<card-1; i++)
    {
    min = i;

    for(j=i+1; j<card; j++)
    if(Vet[j] < Vet[min])
    min = j;

    temp=Vet[min];
    Vet[min]=Vet;
    Vet=temp;
    }
    //stampa array
    for(i=0;i<card;i++){
    printf("%d\n",Vet);}
    }
  • Re: Come si ordina un array di struct ?

    Ho provato a inserire nel programma l'ordinamento dell'array in base ai giorni di presenze (considerandolo proprio come un array di interi ), ma non appena lo vado a eseguire e riempire con i dati degli alunni , mi ordina in senso crescente solo le presenze.

    for(i=0; i<card-1; i++)
    {
    min = i;

    for(j=i+1; j<card; j++)
    if(alunno[j].presenze < alunno[min].presenze)
    min = j;

    temp=alunno[min].presenze;
    alunno[min].presenze=alunno.presenze;
    alunno.presenze=temp;
    }
  • Re: Come si ordina un array di struct ?

    Se le presenze sono ok, ora ti basta eseguire lo "swap" anche dei seguenti campi
    char nome[30];
    char cognome[30];
    char matricola[10];
    e non solo presenze.
    Attenzione che si tratta di stringhe e quindi dovrai fare strcpy()...
  • Re: Come si ordina un array di struct ?

    Scusami ancora ma non so proprio come utilizzare questa funzione nel programma,cioè come riesco a scambiare i valori nella giusta posizione utilizzando strcpy()?
  • Re: Come si ordina un array di struct ?

    Es. per il campo nome
    char tempstr[30];
    
    strcpy(tempstr,alunno[min].nome);
    strcpy(alunno[min].nome,alunno[i].nome);
    strcpy(alunno[i].nome,tempstr);
  • Re: Come si ordina un array di struct ?

    Grazie per l'aiuto, ho apportato le ultime modifiche e il programma sembra funzionare perfettamente.
Devi accedere o registrarti per scrivere nel forum
7 risposte