Come si ordina un array di struct ?

di Anonimizzato19023 il
7 risposte
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

  • 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.
  • 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);}
    }
  • 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;
    }
  • 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()...
  • Scusami ancora ma non so proprio come utilizzare questa funzione nel programma,cioè come riesco a scambiare i valori nella giusta posizione utilizzando strcpy()?
  • 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);
  • 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