[C] Fusione di struct ( e cervello)

toni1705

Nuovo Utente
98
9
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:

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,546
12,933
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
Con fondere intendi mettere la prima riga con la prima riga e così via, oppure fare un append?
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,546
12,933
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
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?
 

toni1705

Nuovo Utente
98
9
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
Post unito automaticamente:

nessuno?
 
Ultima modifica:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!