Ordinare struct in base ad un loro campo

di il
6 risposte

Ordinare struct in base ad un loro campo

Buonasera; premesso che non sono un ottimo programmatore, vi scrivo perché ho un problema nella stesura di un programma C.
Si tratta di un menù di scelta con relative funzioni che vanno ad operare su una struct.
struct s_brano {
	char titolo[50];
	char autore[30];
	int durata;
	int gradimento;
	struct s_brano *next;
};
typedef struct s_brano bran
Come vedete si tratta di brani musicali.

Ho già scritto funzioni per: inserire un nuovo brano, calcolare la durata della compilation, eliminare i brani meno graditi (gradimento 1), ricercare brani per autore, e stampare la lista di brani.
C'è un'ultima funzione che però non capisco come va sviluppata: devo riordinare i brani in base al loro gradimento.
Tutte le idee che ho avuto si sono dimostrate fallimentari..riuscireste ad aiutarmi? Grazie in anticipo per la disponibiltà!

6 Risposte

  • Re: Ordinare struct in base ad un loro campo

    Conosci un algoritmo di ordinamento?
  • Re: Ordinare struct in base ad un loro campo

    oregon ha scritto:


    Conosci un algoritmo di ordinamento?
    Sì, l'insertion sort.
  • Re: Ordinare struct in base ad un loro campo

    Prova a scrivere il codice per ordinare un vettore di int e poi vediamo cosa cambiare
  • Re: Ordinare struct in base ad un loro campo

    oregon ha scritto:


    Prova a scrivere il codice per ordinare un vettore di int e poi vediamo cosa cambiare
    [code]void ordinaBrani(brano *head, int n){
    	brano *ptr, *canzoni[n], *temp;
    	int i, j;
    	
    	ptr=head;
    	
    	if(ptr==NULL){
    		printf("\nNon sono presenti brani!");
    	}
    	
    	for(i=0; i<n; i++){
    		canzoni[i]=ptr;
    		ptr=ptr->next;
    	}
    	
    	ptr=head;
    	
    	while(ptr!=NULL){
    		for(i=1; i<n; i++){
    			temp=canzoni[i];
    			j=i-1;
    			while(canzoni[j]->gradimento>temp->gradimento && j>=0){
    				canzoni[j+1]=canzoni[j];
    				j=j-1;
    			}
    			canzoni[j+1]=temp;
    			ptr=ptr->next;
    		}
    		
    		for(i=0; i<n; i++){
    			printf("Il brano %s ha gradimento: %d \n", canzoni[i]->titolo, canzoni[i]->gradimento);
    		}
    	}
    	
    	ptr=head;
    
    	for(i=0; i<n; i++){
    		ptr=canzoni[i];
    		ptr=ptr->next;
    	}
    	
    }
    [/code]
    Questa è la funzione che ho sviluppato..solo che una volta visualizzato il printf non torna al menù di scelta, bensì esce dal programma.
  • Re: Ordinare struct in base ad un loro campo

    Non ho capito... ammesso che il codice della funzione lavori correttamente, come la chiami nel main?
  • Re: Ordinare struct in base ad un loro campo

    oregon ha scritto:


    Non ho capito... ammesso che il codice della funzione lavori correttamente, come la chiami nel main?
    ordinaBrani(lista, numeroCanzoni);
    Nel main la funzione viene chiamata così.
Devi accedere o registrarti per scrivere nel forum
6 risposte