Programación General > C/C++
Rellenar vector sin repetir
Gussr78:
Hola, el caso es que estoy intentando enteder los vectores, y quiero rellenar manualmente un vector introduciendo números y comprobando que no se repitan.
Lo que tengo y que no me funciona es esto. A ver si alguien me puede ayudar y explicar se lo agradezco.
--- Código: C --- #include <stdio.h>#include <stdlib.h> int main(){ typedef int numeros[10]; int num,temp; numeros misnumeros; for (int i=0;i<11;i++){ misnumeros[i]=0; } num=0; while (num<10){ /*comienzo a introducir números*/ printf("introduzca un numero: "); scanf("%d",&temp); /*Lo guardo en temp para comparar con los datos del vector*/ for (int i=0;i<=num;i++){ /*Comprobar si ya existe*/ while ((temp==misnumeros[i])!=0){ printf ("El numero existe, introduzca otro numero: "); scanf ("%d",&temp); printf ("El numero temp vale %2d.n",temp); }} misnumeros[num]=temp; /*Si no existe pasamos el valor al vector*/ num++;}for (int i=0;i<10;i++){ printf ("los numero son: %2d.n",misnumeros[i]); } system("pause");}
m0skit0:
Siempre es aconsejable que indiques concretamente qué problema te está dando.
Para comprobar, es así:
--- Código: C ---while (temp==misnumeros[i]) Aparte, fíjate que cuando encuentras un número repetido, al pedir otra vez el número, no vuelves a comprobar que no esté ya en el vector. Sólo compruebas esa misma posición.
--- Código: C ---while (temp==misnumeros[i]){ printf ("El numero existe, introduzca otro numero: "); scanf ("%d",&temp); printf ("El numero temp vale %2d.n",temp);} Además, deberías estructurar más tu código para que sea más legible. Tal y como lo tienes es un caos. ¿Has utilizado funciones alguna vez?
Saludos
Gussr78:
Hola, gracias por responder. La verdad es que llevo muy poco tiempo aprendiendo y además de forma autodidacta. En cuanto a las funciones si las he usado, pero en este caso solo estoy intentando entender para luego desarrollarlo mas estructurado y seguro que con funciones como túdices.
Ya veo lo que me comentas de no comparar nuevamente cuando se introduce un nuevo valor, pero no se me ocurre como hacerlo sin repetir todo desde el for, a lo mejor ahí es donde dices de poner funciones??, si me puedes dar una idea te lo agradezco.
Saludos.
m0skit0:
Ahí va un ejemplo:
--- Código: C ---#include <stdio.h>#include <stdlib.h> // Devuelve la posición del número en el vector// -1 si no se encuentra// num: número a buscar// misnumeros: vector en el que buscar// tam_vector: tamaño del vector a buscarint posicion_numero_vector(const int num, const int vec[], const unsigned int tam_vector){ int pos = -1; int i = 0; while(i < tam_vector) { if (vec[i] == num) { pos = i; i = tam_vector; } else { i++; } } return pos;} int main(){ int misnumeros[10]; int i, num, temp; for (i=0;i<10;i++){ misnumeros[i]=0; } num=0; while (num<10){ printf("introduzca un numero: "); scanf("%d",&temp); /*Lo guardo en temp para comparar con los datos del vector*/ for (i=0;i<=num;i++){ /*Comprobar si ya existe*/ while (posicion_numero_vector(temp, misnumeros, sizeof(misnumeros)/sizeof(int)) >= 0){ //while (temp==misnumeros[i]){ printf ("El numero existe, introduzca otro numero: "); scanf ("%d",&temp); printf ("El numero temp vale %2d.n",temp); } } misnumeros[num]=temp; /*Si no existe pasamos el valor al vector*/ num++; } for (i=0;i<10;i++){ printf ("los numero son: %2d.n",misnumeros[i]); } system("pause");}
LapizTolita:
Una recomendación usar getchar(); en vez de system("pause"); por que? simplemente porque llamar al sistema es costoso tener que guardar en contexto hacer el pedido, si trabajas en otro sistema operativo puede que no funcione y aparte es inseguro.
Navegación
[#] Página Siguiente
Ir a la versión completa