codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char tstr[50]; //Definizione di un nuovo tipo "tstr", abbreviazione arbitraria di "tipo stringa"
int unionSet(int x, int z,tstr alfa, tstr beta, tstr gamma, int numelementia, int numelementib, int s); //Prototipo di funzione unionset
int
main(void)
{
tstr a="aeiou"; //Dichiarazione delle variabili
tstr b="arsue";
tstr g;
int numelementia; //numero di elementi della prima stringa
int numelementib; //numero di elementi della prima stringa
int z; //variabile nel richiamo alla funzione
int x; //variabile nel richiamo alla funzione
int s; //variabile ciclo for per la stampa del vettore gamma
int y; //variabile con valore la somma degli elementi di a + gli elementi di b
z = 0;
x = 0;
s = 0;
numelementia=strlen(a);
numelementib=strlen(b);
unionSet(x, z, a, b, g, numelementia, numelementib, s); //richiamo alla funzione unionset
y = numelementia + numelementib;
printf("\n\n");
printf("Gli elementi di gamma sono: ");
fflush(stdin);
for(s=0; s <= y; s++) //ciclo for per l'output dei dati del vettore gamma
{
printf("%c",g[s]);
}
printf("\n\n\n");
system("PAUSE");
return 0;
}
int
unionSet(int x, int z,tstr alfa, tstr beta, tstr gamma, int numelementia, int numelementib, int s) //funzione unionset per la fusione di alfa e beta in gamma
{
if((z <= numelementia) && (x <= numelementib)) //confronto tra gli elementi di alfa e gli elementi di beta
if((alfa[z])<(beta[x]))
{
gamma[s]= alfa[z];
z++;
s++;
return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s); //ritorno alla funzione unionset
}
else
{
gamma[s] = beta[x];
x++;
s++;
return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);
}
else
{
if (z <= numelementia) //caricamento degli elementi di alfa, finito il confronto con gli elementi beta,
{ //nella stringa gamma
gamma[s]= alfa[z];
printf("%c",gamma[s]);
z++;
s++;
return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);
}
else
if (x <= numelementib) //caricamento degli elementi di beta ne vettore gamma
{
gamma[s] = beta[x];
x++;
s++;
return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);
}
else //condizione di uscita dalla ricorsione
return 0;
}
}