Salve a tutti ragazzi. Da stamattina cerco di capire come risolvere questo problema: "Scrivere un programma che legga un numero determinato di interi (1000 al massimo) dalla console e li visualizzi nello stesso ordine e con la condizione che ogni intero sia scritto una sola volta. Ad esempio se si leggono dalla console i seguenti numeri 55 78 -25 55 24 -3 7, il programma dovrà visualizzare: 55 78 -25 24 -3 7. Trattare l'array con i puntatori.". Ora per facilitarmi un po' le cose ho scritto un programma che prende un vettore di 10 interi, lo visualizza, e poi ne dovrebbe dare quello modificato senza ripetizioni. La mia idea è stata questa: fare due cicli for per confrontare un elemento fisso dell'array con tutti gli altri, e se trova elementi uguali scambiarli di posto (ad esempio se il primo elemento dell'array a[0] è uguale ad a[5] scambio a[6] con a[5] in modo da portarmelo avanti a[5] anche al successivo confronto fino alla fine dell'array). Esempio numerico:
Vettore: 1 2 3 4 2 5 4 7 1 10
1° step: 1 2 3 4 2 5 4 7 10 1
2° step: 1 2 3 4 5 4 7 10 1 2 (Il 2 in posizione 4 me lo porto avanti fino all'ultimo)
3° step: 1 2 3 4 5 7 10 1 2 4 (Il 4 in posizione 5 me lo porto avanti fino all'ultimo)
Il vettore finale esatto dovrebbe essere uguale a quello del 3° step meno i tre elementi finali, ossia:
Vettore modificato: 1 2 3 4 5 7 10
Il mio programma non arriva fino al vettore modificato perchè non riesco ad implementare il fatto che la dimensione del vettore debba scendere di un numero pari alle ripetizioni che trova. Si ferma con un certo errore, nel senso che non stampa il vettore così come l'ho scritto prima (mette anche numeri strani) fino al 3° step. Come posso correggerlo? Incollo il codice:
#include <iostream>
using namespace std;
int main ()
{
int *entrata=new int[10];
cout << "Inserisci 10 numeri interi nel vettore: ";
for (int i=0; i<10; i++)
cin >> entrata[i];
cout << endl << "VETTORE: ";
for (int i=0; i<10; i++)
cout << entrata[i] << " ";
int aux;
cout << endl << "VETTORE MODIFICATO: ";
for (int i=0; i<10; i++)
{
for (int j=i+1; j<10; j++)
if (entrata[i]==entrata[j])
{
aux=entrata[j];
entrata[j]=entrata[j+1];
entrata[j+1]=aux;
}
}
for (int i=0; i<10; i++)
cout << entrata[i] << " ";
delete [] entrata;
cout << endl << endl;
system ("PAUSE");
return 0;
}