All'ora sono qui a chiedervi un favore
posto che la soluzione (una delle) è già stata postata
dall'alto della vostra maggiore esperienza, mi fate la cortesia di spulciarmi questo programma?
non sto scherzando, mi farebbe molto piacere avere indicazioni da persone più esperte (io sono ancora un programmatore "giocattolo")
#include <stdio.h>
int a[] = {110, 5, 2, 8, 0}; // e alla via così, numeri varii per prove
int b[] = {6, 3, 7, 1}; // idem
#define A (sizeof(a)/sizeof(a[0]))
#define B (sizeof(b)/sizeof(b[0]))
// prototipi
void ordina(int a[], int sa);
// ordina l'array 'a' di dimensione 'sa'
void riversa(int a[], int sa, int b[], int sb, int c[]);
// riversa il contenuto dei due array 'a' e 'b', di dimensione rispettivamente 'sa' e 'sb'
// dentro nel terzo array 'c', per definizione di dimensione pari alla somma delle dimensioni dei due in ingresso
int main(int argc, char **argv)
{
int c[A + B];// creo l'array di destinazione
ordina(a, A);
ordina(b, B);
riversa(a, A, b, B, c);
for(int i = 0; i < (A + B); i++)
{
// stampo il valore
printf("Elemento numero: %d Vale: %d\n", i, c[i]);
}
return 0;
}
void riversa(int a[], int sa, int b[], int sb, int c[])
// riversa il contenuto dei due array 'a' e 'b', di dimensione rispettivamente sa e sb
// dentro nel terzo array 'c', per definizione di dimensione pari alla somma delle dimensioni dei due in ingresso
{
int i = 0; // indice in a
int j = 0; // indice in b
int k = 0; // indice in c
while(1)
{
// 4 possibili condizioni:
// array a e array b finiti
if(i >= sa && j >= sb)
{
// array finiti, esco dalla funzione
return;
}
// finito solo il primo
if(i >= sa)
{
// leggo dal secondo
c[k++] = b[j++];
continue;
}
// finito solo il secondo
if(j >= sb)
{
// leggo dal primo
c[k++] = a[i++];
continue;
}
// nessuno dei due finiti
// leggo l'elemento minore dei due
if(a[i] < b[j])
{
// leggo dal primo
c[k++] = a[i++];
}
else
{
// leggo dal secondo
c[k++] = b[j++];
}
}
}
void ordina(int a[], int sa)
// ordina l'array a di dimensione sa
{
int trigger = 0; // se non ha ordinato in un ciclo, non esegue i successivi
int top = sa; // ultimo elemento da considerare, oltre è già ordinato
do
{
top--;
trigger = 0;
for(int i = 0; i < top; i++)
{
if(a[i] > a[i + 1])
{
trigger = 1;
int b = a[i];
a[i] = a[i + 1];
a[i + 1] = b;
}
}
}
while(trigger);
}