Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Repeticion

Estas en el tema de Repeticion en el foro de C/C++ en Foros del Web. Hola, Tengo que hacer un programa, al cual se le ingrese una lista de numeros con repeticiones, y guardar en un nuevo vector los mismos ...
  #1 (permalink)  
Antiguo 09/04/2012, 14:49
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Repeticion

Hola, Tengo que hacer un programa, al cual se le ingrese una lista de numeros con repeticiones, y guardar en un nuevo vector los mismos numeros pero sin repeticiones, hice esto pero no entiendo por que se desordenan los numeros Ademas no se si el programa puede fallar para un caso especifico.
Si alguien me puede hacer un analisis agradeceria, y explicarme si el desorden no tiene nada que ver, y el programa no falla.
Código:
#include<iostream.h>
int main()
{short n, i, j,t, rep;
cout<<"Digite la cantidad de numeros \n";
cin>>n;
short V[n];
for(i=0;i<=n-1;i++)
{cout<<"Digite el elemento de la posicion "<<i+1<<"\n";
cin>>V[i];}
cout<<"La lista de numeros si repetir es\n";
for(i=0;i<=n-1;i++)
{t=0;
for(j=i+1;j<=n-1;j++)
if(V[i]==V[j])
t++;
if(t==0)
cout<<V[i]<<"\t";} 
system("pause");
}
Muchas gracias.
  #2 (permalink)  
Antiguo 10/04/2012, 19:14
Avatar de cristian_qc  
Fecha de Ingreso: abril-2011
Mensajes: 43
Antigüedad: 13 años
Puntos: 8
Respuesta: Repeticion

Primero: <iostream.h> debe ser <iostream>.
Segundo: La función Main debe retornar un valor entero: return 0.
Tercero: No especificaste el espacio de nombres. En este caso es std: using namespace std;
Cuarto: system("pause"); Solo funciona en Windows. Si querés que la pantalla no se cierre automáticamente podés usar cin.get();
Quinto: Las variables deberían ser más específicas. Siempre veo que usan i, j, n, v, es mucho más entendible usar palabras completas. Yo generalmente a las variables auxiliares les pongo letras comenzando desde la "a".
Sexto: Los números se muestran desordenados porque lo que hace el último ciclo es verificar si el elemento actual se va a repetir más adelante, si es así no lo muestra, entonces solo muestra las últimas repeticiones y no las primeras.
Séptimo: Si bien a veces compila, lo siguiente es erróneo:
Código C++:
Ver original
  1. cin >> n;
  2. short V[ n ];
Lo ideal es hacerlo con memoria dinámica, pero también podés declarar un vector con un número máximo de elementos, y no permitir que se ingresen más que esa cantidad.
Último: Mejoré un poco el código:

Código C++:
Ver original
  1. #include<iostream>
  2. using namespace std;
  3. int main(){
  4.     short cantidad; // Cantidad de elementos
  5.    
  6.     // Ingresar cantidad de elementos
  7.     cout << "Digite la cantidad de numeros: "; cin >> cantidad;
  8.    
  9.     /* Esto aunque a veces compile es completamente ERRONEO. La forma
  10.         correcta es con memoria dinamica o declarando un vector con un
  11.         número máximo de elementos. */
  12.     // short vector[ cantidad ];
  13.    
  14.     short *vector = new short[ cantidad ]; // vector dinámico
  15.    
  16.     // Ingresar números
  17.     for( short a = 0; a < cantidad; a++ ){
  18.         cout << "Digite el elemento de la posicion " << a+1 << ": ";
  19.         cin >> vector[ a ];
  20.     }
  21.    
  22.     // Mostrar números
  23.     cout << "La lista de numeros sin repetir es: " << endl;
  24.     for( short a = 0; a < cantidad; a++ ){
  25.         bool repetido = false;
  26.        
  27.         // Recorrer todos los elementos ANTERIORES al actual.
  28.         for( short b = 0; b < a; b++ ){
  29.             if( vector[ a ] == vector[ b ] ) repetido = true;
  30.         }
  31.         // Se muestra el elemento solo si no está repetido
  32.         if( !repetido ) cout << vector[ a ] << "\t";
  33.     }
  34.     delete[] vector; // Liberar memoria
  35.     cout << endl; // Último fin de linea
  36.     cin.get();
  37.     return 0;
  38. }

Saludos!.
  #3 (permalink)  
Antiguo 13/04/2012, 19:13
 
Fecha de Ingreso: marzo-2012
Mensajes: 5
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Repeticion

Muchas gracias cristian_cq me has ayudado mucho.
  #4 (permalink)  
Antiguo 13/04/2012, 19:53
Avatar de cristian_qc  
Fecha de Ingreso: abril-2011
Mensajes: 43
Antigüedad: 13 años
Puntos: 8
Respuesta: Repeticion

Por nada ! Saludos !

Etiquetas: int, programa, repeticion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:57.