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

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.
