Ordinare struct in base ad un loro campo

di Anonimizzato26837 il
6 risposte
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

  • Conosci un algoritmo di ordinamento?
  • oregon ha scritto:


    Conosci un algoritmo di ordinamento?
    Sì, l'insertion sort.
  • Prova a scrivere il codice per ordinare un vettore di int e poi vediamo cosa cambiare
  • 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.
  • Non ho capito... ammesso che il codice della funzione lavori correttamente, come la chiami nel main?
  • 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