Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c]ricerca del max con funzione ricorsiva in un array di struct

    salve amici ho un piccolo problema
    in pratica ho questo array di struct
    codice:
    struct indirizzo {  
    char strada[20];  
    char CAP[5];  
    char civico[3];
     };  
    struct data { 
    short giorno; 	
    char mese[10]; 	
    char anno[4];};  
    typedef struct indirizzo ind; 
    typedef struct data Data;  
    struct studente { 	
    char nome[10]; 	
    char cognome[15]; 	
    char matricola[10]; 	
    char luognasc[25]; 	
    ind indirizzo; 	
    Data datanascita; 	
    short presenze[20]; };   
    typedef struct studente stud; stud student[30];
    devo implementare una funzione per la ricerca del max,le variabili da confrontare sono le student[i].presenze[0] dove mi interesa confrontare con tutti gli studenti quindi iè l'indice che deve variare.
    la funzione deve essere ricorsiva e divide et impera tipo come questa
    codice:
    int max_I(int a,int b) 
    {  if (a > b)     return a;   
    else     return b; }    
    
    int massimo_a_ricDI(int a[],int n) 
    {  int mediano;    /* soluzione del caso base  */  
    if(n == 1)     return a[0];  
     else    
     {     /* autoattivazioni */     mediano = (n-1)/2;    
    return max_I(massimo_a_ricDI(a,mediano+1),massimo_a_ricDI(a+mediano+1,n-mediano-1));
     } 
    }

    non riesco ad implementarla mi sapete dare na mano? grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ciao simone1988, mi sa che ti conosco (oh! ti sei deciso a postare un po' di codice!)

    Nonostante questo, ancora non so come è fatto il programma... quell'array di struct è globale? Innanzitutto se è così dichiaralo locale al main perché tu-sai-chi non lo accetterà MAI (e fa pure bene). Poi, a questo punto, alla funzione di ricerca del massimo devi passare proprio quell'array di struct col suo size, dopo di ché devi modificare la funzione di selezione del massimo:

    all'inizio ti confronta due interi, quindi è

    codice:
    int max_I(int a,int b) {
    
       if (a > b)
          return a;   
       else
          return b;
    }
    deve diventare (è un po' rozza così, l'ideale sarebbe lavorare con i puntatori)

    codice:
    stud max_I(stud a, stud  b) {
    
       if (a.assenze[0] > b.assenze[0])
          return a;   
       else
          return b;
    }
    è chiaro quello che fa, no?

    Per quanto riguarda la funzione di ricerca del massimo

    codice:
    stud massimo_a_ricDI(stud a[],int n)  {
    
       int mediano;    /* soluzione del caso base  */  
       if(n == 1)
          return a[0];  
       else {     /* autoattivazioni */
          mediano = (n-1)/2;    
          return max_I(massimo_a_ricDI(a,mediano+1),massimo_a_ricDI(a+mediano+1,n-mediano-1));
       } 
    }
    in pratica devi adattare tutto al tuo tipo che non è più int ma "stud"...

    Se hai ancora problemi, posta tutto il codice altrimenti continuerai ad andare in giro per il web senza avere risposta x°D

  3. #3
    già avevo tentato di modificare gli int con il tipo della struct ma rompe le scatole che non vuole i punti e le parentesi(non so cosa cgli prende al compilatore)cmq n ricordo il fatto perche dichiararlo locale e non globale visto che mi serve nelle altre function,e vabbe si in effetti anche se lo dichiaro locale passandolo per riferimento non cambia nulla sta bene!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    già avevo tentato di modificare gli int con il tipo della struct ma rompe le scatole che non vuole i punti e le parentesi(non so cosa cgli prende al compilatore)
    Secondo me i compilatori che usi tu sono indemoniati. Come al solito, se hai problemi posta il codice xD

    cmq n ricordo il fatto perche dichiararlo locale e non globale visto che mi serve nelle altre function,e vabbe si in effetti anche se lo dichiaro locale passandolo per riferimento non cambia nulla sta bene!
    Beh se potessimo dichiarare globali tutte le variabili che usiamo in più di una funzione, il passaggio dei parametri a funzione non servirebbe più a nulla ^^

    In ogni caso, ricorrere a delle variabili globali quando non è assolutamente necessario è considerata una cattiva pratica, data la "pericolosità" di queste ultime.

    Più meramente, il mitico padrino del cdl non te la farebbe passare liscia se ti presenti con un codice con 3-4 array globali di struct

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.