krastykrab1 ha scritto:
2_3rr0r5 ha scritto:
Dando un'occhiata veloce migliorerei questo: nella condizione del do...while (while(ca!=5 && cb!=5)), anzicchè mettere il diverso (!=) ci metterei un minore (<) che nella fattispecie non ti cambia nulla ma bisogna essere più precisi, perchè in altre eventualità se confondi il '!=' col '<' potresti avere qualche risultato inaspettato...
Per il resto, testalo e se il tutto va come ti sei prefissato allora sei a posto. Il consiglio è quello di testare nei modi più disparati come per cercare il pelo nell'uovo e se anche così va tutto ok, vuol dire che hai fatto un buon lavoro!
Allora seguendo il tuo consiglio di prima ho creato questa parte di codice:
la=sizeof(a);
lb=sizeof(b);
for(i=0;i<=c;i++)
{if(lb>la)
{v[i]=b[cb];
cb++;
lb--;
}
else
{v[i]=a[ca];
ca++;
la--
}
}
Tuttavia ho notato che "Sizeof" non mi legge quante variabili ci sono dentro. Ma direttamente la lunghezza del vettore. Quindi questo mi causa un errore nell'ultima variabile che vado ad inserire:
Es:
2 3 6 1 4 7 12 10
Oltre a mettermeli come li scrivo (senza mettere prima i pari e poi i dispari o viceversa [come appunto dovrebbe fare]) me li mette nello stesso ordine sostituendo al 10 un numero randomico preso dalla RAM
sizeof non ritorna mai il numero di elementi nell'array !
Explanation
1) Returns size in bytes of the object representation of type.
2) Returns size in bytes of the object representation of the type that would be returned by expression, if evaluated.
Se vuoi sapere quanti elementi ci sono nell'array potresti usare fare una cosa del genere
std::size_t array_size=sizeof(my_array)/sizeof(my_array_type);
opure se vuoi una cosa generica
template<typename T,std::size_t N>
std::size_t get_array_size(T (&)[N])
{
return N;
}
Comunque entrambi i modi ritornano i numero di elementi che l'array può contenere non il numero di elementi effettivamente inseriti, se vuoi esattamente il numero di elementi inseriti o dovresti tenere traccia tu oppure dovresti usare std::vector.
Per quanto riguarda il tuo codice ci sono altre cose che secondo me non vanno bene.
1) I VLA non sono standard
int v[c];
Se compili il seguente codice sia con clang sia con gcc ti farà vedere dei warning
2) Non puoi usare gli array cosi
if(b>a)
Non ha nessun senso la riga precedente perché stai confrontando il primo indirizzi degli array, comunque penso che questo è un errore di distrazione forse volevi scrivere b[cb]>a[ca]
3) Dovresti dare nomi un po' più significativi alle tue variabli
4) Il raggruppamento di variabili è una cosa di C, ti consiglio di dichiarare una variabile soltanto quando hai bisogno di essa in C++
5) Quando dichiari una variabile dovresti inizializzarla subito
int a; //Non è sbagliato ma personalmente lo trovo orrendo
a=0;
int a=0;
[code]
Nel tuo caso ci sono più variabili dello stesso tipo quindi puoi anche splittargli in più righe
[code]
int ca=0, cb=0, c=0;
int n=0, i=0, x=0;
int a[5]={0,0,0,0,0}, b[5]={0,0,0,0,0};
int m=0, temp=0, j=0, mini=0;
Per quanto riguarda il funzionamento secondo me sono gli ultimi due cicli che ti fanno sbagliare ( non posso dirti esattamente dove, perché ho difficoltà a leggere il tuo codice), da come l'hai descritto l'algoritmo sembra un merge sort, quindi ti consiglio di cercarlo su google, ci sono tantissimi esempi sia in inglese sia in italiano.