Salve ragazzi.
Avrei un problema riguardo un esercizio in cui mi si chiede di unire due elenchi che io devo ordinare per cognome.
Non riesco a trovare il passo dove sbaglio. Posto il codice.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXCHAR 25 //Numero per allocare gli array
#define NA 4 //Numero record elenco A
#define NB 4 //Numero record elenco B
#define NC 8
//Struct Elenco
struct ELENCO{
char nome[MAXCHAR];
char cognome[MAXCHAR];
char domicilio[MAXCHAR];
char numero_telefonico[10];
};
void ordina (struct ELENCO elenco[], int n);
void scambia (struct ELENCO elenco[], int i, int j);
void fusione(struct ELENCO elencoa[], struct ELENCO elencob[], struct ELENCO elencoc[]);
int main()
{
int i;
//Creazione dei due elenchi
struct ELENCO elencoa[NA],elencob[NB],elencoc[NC];
strcpy(elencoa[0].cognome, "Medio");
strcpy(elencoa[0].nome, "bbb");
strcpy(elencoa[0].domicilio, "Via Romagna");
strcpy(elencoa[0].numero_telefonico, "0818888888");
strcpy(elencoa[1].cognome, "Aaaa");
strcpy(elencoa[1].nome, "Eduardo");
strcpy(elencoa[1].domicilio, "Via Romagna");
strcpy(elencoa[1].numero_telefonico, "0818888888");
strcpy(elencoa[2].cognome, "Medio");
strcpy(elencoa[2].nome, "Bbbb");
strcpy(elencoa[2].domicilio, "Via Romagna");
strcpy(elencoa[2].numero_telefonico, "0818888888");
strcpy(elencoa[3].cognome, "Claudio");
strcpy(elencoa[3].nome, "Edmuno");
strcpy(elencoa[3].domicilio, "Via Romagna");
strcpy(elencoa[3].numero_telefonico, "0818888888");
strcpy(elencob[0].cognome, "Sampei");
strcpy(elencob[0].nome, "Eduardo");
strcpy(elencob[0].domicilio, "Via Romagna");
strcpy(elencob[0].numero_telefonico, "0818888888");
strcpy(elencob[1].cognome, "Hulk");
strcpy(elencob[1].nome, "Eduardo");
strcpy(elencob[1].domicilio, "Via Romagna");
strcpy(elencob[1].numero_telefonico, "0818888888");
strcpy(elencob[2].cognome, "Aaaa");
strcpy(elencob[2].nome, "aa");
strcpy(elencob[2].domicilio, "Via Romagna");
strcpy(elencob[2].numero_telefonico, "0818888888");
strcpy(elencob[3].cognome, "Peppino");
strcpy(elencob[3].nome, "Edmuno");
strcpy(elencob[3].domicilio, "Via Romagna");
strcpy(elencob[3].numero_telefonico, "0818888888");
//Uso della funzione ordina per ordinare gli elementi dei due elenchi
ordina(elencoa, NA);
ordina(elencob, NB);
fusione(elencoa,elencob,elencoc);
for(i=0;i<NC;i++)
{
puts(elencoc[i].cognome);
puts(elencoc[i].nome);
printf("\n");
}
return 0;
}
void ordina (struct ELENCO elenco[], int n) {
int i,j,min;
for(i=0;i<n;i++) {
min=i;
for(j=i+1;j<n;j++)
{
if(strcmp(elenco[min].cognome,elenco[j].cognome) > 0) {
min=j;
} else if(strcmp(elenco[min].cognome,elenco[j].cognome) == 0) {
if(strcmp(elenco[min].nome,elenco[j].nome) > 0) {
min=j;
}
}
}
if(i != min)
{
scambia(elenco,i,min);
}
}
}
void scambia (struct ELENCO elenco[], int i, int j) {
char tempnome[MAXCHAR], tempcognome[MAXCHAR],tempindirizzo[MAXCHAR],tempnumero[10];
strcpy(tempcognome, elenco[i].cognome);
strcpy(tempnome, elenco[i].nome);
strcpy(tempindirizzo,elenco[i].domicilio);
strcpy(tempnumero,elenco[i].numero_telefonico);
strcpy(elenco[i].cognome,elenco[j].cognome);
strcpy(elenco[i].nome,elenco[j].nome);
strcpy(elenco[i].domicilio,elenco[j].domicilio);
strcpy(elenco[i].numero_telefonico,elenco[j].numero_telefonico);
strcpy(elenco[j].cognome,tempcognome);
strcpy(elenco[j].nome,tempnome);
strcpy(elenco[j].domicilio,tempindirizzo);
strcpy(elenco[j].numero_telefonico,tempnumero);
}
void fusione(struct ELENCO elencoa[], struct ELENCO elencob[], struct ELENCO elencoc[]) {
int i=0,j=0,k=0;
while (i < NA && j < NB) {
if(strcmp(elencoa[i].cognome,elencob[j].cognome) < 0)
{
strcpy(elencoc[k].cognome,elencoa[i].cognome);
strcpy(elencoc[k].nome, elencoa[i].nome);
strcpy(elencoc[k].domicilio, elencoa[i].domicilio);
strcpy(elencoc[k++].numero_telefonico,elencoa[i++].numero_telefonico);
} else if(strcmp(elencoa[i].cognome,elencob[j].cognome) > 0) {
strcpy(elencoc[k].cognome,elencob[j].cognome);
strcpy(elencoc[k].nome, elencob[j].nome);
strcpy(elencoc[k].domicilio, elencob[j].domicilio);
strcpy(elencoc[k++].numero_telefonico,elencob[j++].numero_telefonico);
} else {
if(strcmp(elencoa[i].nome,elencob[j].nome) >= 0) {
strcpy(elencoc[k].cognome,elencob[j].cognome);
strcpy(elencoc[k].nome, elencob[j].nome);
strcpy(elencoc[k].domicilio, elencob[j].domicilio);
strcpy(elencoc[k++].numero_telefonico,elencob[j++].numero_telefonico);
} else if (strcmp(elencoa[i].nome,elencob[j].nome) < 0) {
strcpy(elencoc[k].cognome,elencoa[i].cognome);
strcpy(elencoc[k].nome, elencoa[i].nome);
strcpy(elencoc[k].domicilio, elencoa[i].domicilio);
strcpy(elencoc[k++].numero_telefonico,elencoa[i++].numero_telefonico);
}
}
while (i < NA) {
strcpy(elencoc[k].cognome,elencoa[i].cognome);
strcpy(elencoc[k].nome, elencoa[i].nome);
strcpy(elencoc[k].domicilio, elencoa[i].domicilio);
strcpy(elencoc[k++].numero_telefonico,elencoa[i++].numero_telefonico);
}
while (j < NB) {
strcpy(elencoc[k].cognome,elencob[j].cognome);
strcpy(elencoc[k].nome, elencob[j].nome);
strcpy(elencoc[k].domicilio, elencob[j].domicilio);
strcpy(elencoc[k++].numero_telefonico,elencob[j++].numero_telefonico);
}
}
}
Dov'è che sbaglio?