[C] Fusione di struct ( e cervello)

Pubblicità

toni1705

Nuovo Utente
Messaggi
98
Reazioni
9
Punteggio
28
come posso fondere utenti con utenti 2??

C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUMERO 5
//dichiaro una struct di nome elenco dentro la quale specifico il tipo dei dati costituenti gli utenti
struct elenco {
       char *cognome;
       char *nome;
       char *domicilio;
       char *numero_telefonico;
       };
typedef struct elenco Elenco;
main()
{

    int i;
 Elenco utenti[] =    {{"Rossi","Ugo","Via Scala", "081/4617899"},
                      {"Della Morte","Angelo","Via Mare", "081/5058963"},
                      {"La Vespa","Guido","Via lunga", "081/3652596"},
                      {"Baccano","Massimo","Via micia", "081/5037514"},
                      {"Matri","Luciano","Via dei ladri", "081/2569632"},
                        };
    Elenco utenti2[]={{"Triste","Felice","Via della gioia", "081/5094563"},
                      {"Caio","Felice","Via della liberazione", "081/5236218"},
                      {"Marzullo","Giuseppe","Via notturna", "081/4587269"},
                      {"Caccia","Giulio","Via sparo", "081/74611528"},
                      {"Lungo","Mattia","Via stretta", "081/4398222"}};
    Elenco utenti3[200]={0};
// printf("%s\n",utenti[0].cognome);
//printf("%s\n",utenti2[0].cognome);
ord_sel_max (utenti,5);
ord_sel_max (utenti2,5);
for(i=0;i<5;i++)
{
printf("%s %s %s %s\n",utenti[i].cognome,utenti[i].nome,utenti[i].domicilio,utenti[i].numero_telefonico);
}
fusione(utenti,5,utenti2,5,utenti3);

}

void ord_sel_max (Elenco array[],int n)
{
     int i, indice_max;//ho dichiarato le variabili i per il ciclo for e indice_max per l'indice del massimo della struct
     char *max_array;// è una varibile dove verrà memorizzato la stringa di ordine alfabetico maggiore
     for(i=0;i<n-1;i++)// inizia il ciclo for
     {
         max_val_ind(&array[i], n-i, max_array, &indice_max);//richiama la function max_val_int dove vengono passati l'array n-i max array e indice max

         scambiare_c(&array[i], &array[indice_max+i]);//viene richiamata nell function scambiare C dove vengono passati l'array e l'array con l'indice masssimo
     }
}
void max_val_ind (Elenco a[], int n, char *max_array, int *i_max)

{
     int i;
     max_array = a[0].cognome;//Inizializzo max_array cn il il primo cognome dell'elenco
     *i_max = 0;//inizializzo i_max a 0
     for (i=1;i<n;i++)//inizio il ciclo for
     if( strcmp(max_array,  a[i].cognome)> 0)//applico il costrutto di controllo if per trovare il massimo dell'array
      {
             max_array = a[i].cognome;
             *i_max =i;
      }
}
void scambiare_c( Elenco s1[], Elenco s2[])
{

     char *temp_cognome;//dichiaro una variabile temporanea di puntatore a char
     char *temp_nome;//dichiaro una variabile temporanea di puntatore a char
     char *temp_domicilio;//dichiaro una variabile temporanea di puntatore a char
     char *temp_numero_telefonico;//dichiaro una variabile temporanea di puntatore a char

         temp_cognome=s1->cognome;//copio il valore della stringa contenuta nella struct nella variabile temporanea
         temp_nome=s1->nome;// copio il valore della stringa contenuta nella struct nella variabile temporanea
         temp_domicilio=s1->domicilio;//copio il valore della stringa contenuta nella struct nella variabile temporanea
         temp_numero_telefonico=s1->numero_telefonico;//  copio il valore della stringa contenuta nella struct nella variabile temporanea

         s1->cognome=s2->cognome; // copio il valore della stringa contenuta nella struct s2 alla struct s1
         s1->nome=s2->nome;//copio il valore della stringa contenuta nella struct s2 alla struct s1
         s1->domicilio=s2->domicilio;//copio il valore della stringa contenuta nella struct s2 alla struct s1
         s1->numero_telefonico=s2->numero_telefonico;//copio il valore della stringa contenuta nella struct s2 alla struct s1

         s2->cognome=temp_cognome;//copio il valore della stringa contenuta nella variabile temporanea alla struct s1
         s2->nome=temp_nome;//copio il valore della stringa contenuta nella variabile temporanea alla struct s1
         s2->domicilio=temp_domicilio;//copio il valore della stringa contenuta nella variabile temporanea alla struct s1
         s2->numero_telefonico=temp_numero_telefonico;//copio il valore della stringa contenuta nella variabile temporanea alla struct s1
}


void fusione(Elenco a[],int na,Elenco b[],int nb,Elenco c[])
{
    int ia=0,ib=0,ic=0;
    for (ic=0;ic<na+nb;ic++)
{
    if(ia<na && ib<nb)
    {
    if (a[ia].cognome<b[ib].cognome)
        {
        strcpy(c[ic].nome,a[ia].nome);
        strcpy(c[ic].domicilio,a[ia].domicilio);
        strcpy(c[ic].numero_telefonico,a[ia].numero_telefonico);
        c[ic].cognome=a[ia].cognome;
        ia++;
        }
    else
        {
          strcpy(c[ic].nome,b[ib].nome);
          strcpy(c[ic].domicilio,b[ib].domicilio);
          strcpy(c[ic].numero_telefonico,b[ib].numero_telefonico);
         c[ic].cognome=b[ib].cognome;
           ib++;
           }
    }
    else if  (ib>=nb)
    {   strcpy(c[ic].nome,a[ia].nome);
        strcpy(c[ic].domicilio,a[ia].domicilio);
        strcpy(c[ic].numero_telefonico,a[ia].numero_telefonico);
        c[ic].cognome=a[ia].cognome;
        ia++;
    }

    else
    {   strcpy(c[ic].nome,b[ib].nome);
        strcpy(c[ic].domicilio,b[ib].domicilio);
        strcpy(c[ic].numero_telefonico,b[ib].numero_telefonico);
        c[ic].cognome=b[ib].cognome;
        ib++;
    }
}
}
 
Ultima modifica:
Con fondere intendi mettere la prima riga con la prima riga e così via, oppure fare un append?
 
C:
 Elenco utenti3[] =    {{"Rossi","Ugo","Via Scala", "081/4617899"},
                      {"Della Morte","Angelo","Via Mare", "081/5058963"},
                      {"La Vespa","Guido","Via lunga", "081/3652596"},
                      {"Baccano","Massimo","Via micia", "081/5037514"},
                      {"Matri","Luciano","Via dei ladri", "081/2569632"},
                        {"Triste","Felice","Via della gioia", "081/5094563"},
                      {"Caio","Felice","Via della liberazione", "081/5236218"},
                      {"Marzullo","Giuseppe","Via notturna", "081/4587269"},
                      {"Caccia","Giulio","Via sparo", "081/74611528"},
                      {"Lungo","Mattia","Via stretta", "081/4398222"}};


 Elenco utenti4[] =    {{"Rossi","Ugo","Via Scala", "081/4617899","Triste","Felice","Via della gioia", "081/5094563"},
                      {"Della Morte","Angelo","Via Mare", "081/5058963","Caio","Felice","Via della liberazione", "081/5236218"},
                      {"La Vespa","Guido","Via lunga", "081/3652596","Marzullo","Giuseppe","Via notturna", "081/4587269"},
                      {"Baccano","Massimo","Via micia", "081/5037514","Caccia","Giulio","Via sparo", "081/74611528"},
                      {"Matri","Luciano","Via dei ladri", "081/2569632","Lungo","Mattia","Via stretta", "081/4398222"}};

Come utenti3 o come utenti4. "Unire" due vettori o strutture non vuol dire niente. Li vuoi unire uno dopo l'altro, quindi facendo un append, oppure una unione basata sull'indice?
 
C:
 Elenco utenti3[] =    {{"Rossi","Ugo","Via Scala", "081/4617899"},
                      {"Della Morte","Angelo","Via Mare", "081/5058963"},
                      {"La Vespa","Guido","Via lunga", "081/3652596"},
                      {"Baccano","Massimo","Via micia", "081/5037514"},
                      {"Matri","Luciano","Via dei ladri", "081/2569632"},
                        {"Triste","Felice","Via della gioia", "081/5094563"},
                      {"Caio","Felice","Via della liberazione", "081/5236218"},
                      {"Marzullo","Giuseppe","Via notturna", "081/4587269"},
                      {"Caccia","Giulio","Via sparo", "081/74611528"},
                      {"Lungo","Mattia","Via stretta", "081/4398222"}};


Elenco utenti4[] =    {{"Rossi","Ugo","Via Scala", "081/4617899","Triste","Felice","Via della gioia", "081/5094563"},
                      {"Della Morte","Angelo","Via Mare", "081/5058963","Caio","Felice","Via della liberazione", "081/5236218"},
                      {"La Vespa","Guido","Via lunga", "081/3652596","Marzullo","Giuseppe","Via notturna", "081/4587269"},
                      {"Baccano","Massimo","Via micia", "081/5037514","Caccia","Giulio","Via sparo", "081/74611528"},
                      {"Matri","Luciano","Via dei ladri", "081/2569632","Lungo","Mattia","Via stretta", "081/4398222"}};

Come utenti3 o come utenti4. "Unire" due vettori o strutture non vuol dire niente. Li vuoi unire uno dopo l'altro, quindi facendo un append, oppure una unione basata sull'indice?
come utenti3 però in ordine di cognome
baccano
caccia
caio
ecc..
più che unire ( devo fare un merge )

esempio a[2],b[2]
fai la scanf alla fine
a[0]=1
a[1]=5
b[0]=2
b[1]=6
il vettore c sarà di quattro elementi e sarà
c[0]=1
c[1]=2
c[2]=5
c[3]=6
--- i due messaggi sono stati uniti ---
nessuno?
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top