Nippolo ha scritto:
A me quel codice non compila:
- le funzioni vengono richiamate prima di essere dichiarate;
- manca la dimensione dell'array utenti3;
- la funzione main() dovrebbe tornare un int.
Posta un codice compilabile e poi parliamo degli eventuali problemi riscontrati.
#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;
void fusione(Elenco a[],int na,Elenco b[],int nb,Elenco c[]);
void ord_sel_max (Elenco array[],int n);
void max_val_ind (Elenco a[], int n, char *max_array, int *i_max);
void scambiare_c( Elenco s1[], Elenco s2[]);
int 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[100];
ord_sel_max (utenti,5);
ord_sel_max (utenti2,5);
for(i=0;i<5;i++)
printf("\n%s %s %s %s",utenti[i].cognome,utenti[i].nome,utenti[i].domicilio,utenti[i].numero_telefonico);
/*fusione(utenti,na,utenti2,nb,utenti3);*/
return 0;
}
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<10;ic++)
{
if(ia<5 && ib<5)
{
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>=5)
{ 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++;
}
}
}
a me compila ora ho messo la function fusione come commento avrei bisogno di una mano a far funzionare quella function