[C] Conferme esercizio su vettori
Ciao a tutti!
Anche oggi sono qui con un nuovo esercizio in C
L'esercizio mi è "riuscito", metto le virgolette perché non credo proprio di aver utilizzato un metodo corretto, quindi vorrei chiedere a voi una conferma.
Testo esercizio:
Si sviluppi un programma in linguaggio C che riceva in ingresso due vettori, IN1 e IN2, di 10 elementi interi maggiori di zero. Si supponga che i vettori siano inseriti dall’utente in ordine crescente e che non contengano elementi ripetuti (i due vettori possono pero’ avere elementi in comune). Il programma deve creare e stampare un terzo vettore OUT di 20 elementi interi, ordinato in senso crescente, che includa tutti gli elementi di IN1 e IN2 senza ripetizioni (gli eventuali elementi non utilizzati di OUT devono essere posti a zero).
Ad esempio:
IN1: 2 5 9 14 15 20 25 27 30 32
IN2: 3 5 10 11 12 22 23 25 26 27
OUT: 2 3 5 9 10 11 12 14 15 20 22 23 25 26 27 30 32 0 0 0
Ecco il mio codice:
Qui ho messo l'if in modo da verificare che i numeri inseriti siano maggiori di zero.
Questo ciclo serve per copiare in un unico vettore chiamato IN3 il contenuto di IN1 e IN2.
La parte che mi convince meno di tutte è l'ultima, la stampa degli zeri. Non riesco a capire come spostare tutti gli zeri in fondo al vettore. Sostituire al doppione lo zero l'ho fatto, però non credo che l'unico metodo per stampare gli zeri in fondo sia utilizzare un semplice printf
Grazie mille in anticipo!
Ciaoo
Anche oggi sono qui con un nuovo esercizio in C
Testo esercizio:
Si sviluppi un programma in linguaggio C che riceva in ingresso due vettori, IN1 e IN2, di 10 elementi interi maggiori di zero. Si supponga che i vettori siano inseriti dall’utente in ordine crescente e che non contengano elementi ripetuti (i due vettori possono pero’ avere elementi in comune). Il programma deve creare e stampare un terzo vettore OUT di 20 elementi interi, ordinato in senso crescente, che includa tutti gli elementi di IN1 e IN2 senza ripetizioni (gli eventuali elementi non utilizzati di OUT devono essere posti a zero).
Ad esempio:
IN1: 2 5 9 14 15 20 25 27 30 32
IN2: 3 5 10 11 12 22 23 25 26 27
OUT: 2 3 5 9 10 11 12 14 15 20 22 23 25 26 27 30 32 0 0 0
Ecco il mio codice:
- Codice: Seleziona tutto
#include <stdio.h>
#include <string.h>
#define DIM1 10
#define DIM2 20
int main ()
{
int IN1[DIM1], IN2[DIM1], IN3[DIM2], zeri=0;
int i,j, temp;
printf("Riempi il primo vettore con %d numeri maggiori di zero in ordine crescente:\n", DIM1);
for (i=0;i<DIM1;i++)
{
scanf("%d", &IN1[i]);
if (IN1[i]<0)
i--;
}
printf("Riempi il secondo vettore con %d numeri maggiori di zero in ordine crescente:\n", DIM1);
for (i=0;i<DIM1;i++)
{
scanf("%d", &IN2[i]);
if (IN2[i]<0)
i--;
}
printf("\nEcco il vettore prima di essere ordinato:\n");
for (i=0;i<DIM1;i++)
{
IN3[i]=IN1[i];
printf("%4d", IN3[i]);
}
for (i=0;i<DIM1;i++)
{
IN3[i+DIM1]=IN2[i];
printf("%4d", IN3[i+DIM1]);
}
for(i=1;i<DIM2;i++)
{
for(j=0;j<i;j++)
{
if (IN3[i]<IN3[j])
{
temp=IN3[i];
IN3[i]=IN3[j];
IN3[j]=temp;
}
if (IN3[i]==IN3[j])
{
IN3[i]=0;
zeri++;
}
}
}
printf("\nEcco il vettore dopo averlo ordinato:\n");
for (i=0;i<DIM2;i++)
{
if (IN3[i]!=0)
{
printf("%4d", IN3[i]);
}
}
for (i=0;i<zeri;i++)
{
printf(" 0");
}
return 0;
}
Qui ho messo l'if in modo da verificare che i numeri inseriti siano maggiori di zero.
- Codice: Seleziona tutto
for (i=0;i<DIM1;i++)
{
scanf("%d", &IN1[i]);
if (IN1[i]<0)
i--;
}
Questo ciclo serve per copiare in un unico vettore chiamato IN3 il contenuto di IN1 e IN2.
- Codice: Seleziona tutto
for (i=0;i<DIM1;i++)
{
IN3[i]=IN1[i];
printf("%4d", IN3[i]);
}
for (i=0;i<DIM1;i++)
{
IN3[i+DIM1]=IN2[i];
printf("%4d", IN3[i+DIM1]);
}
La parte che mi convince meno di tutte è l'ultima, la stampa degli zeri. Non riesco a capire come spostare tutti gli zeri in fondo al vettore. Sostituire al doppione lo zero l'ho fatto, però non credo che l'unico metodo per stampare gli zeri in fondo sia utilizzare un semplice printf
Grazie mille in anticipo!
Ciaoo
