elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  comprobar numero repetido en un vector
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: comprobar numero repetido en un vector  (Leído 3,342 veces)
MessageBoxA

Desconectado Desconectado

Mensajes: 229


ayudame a ayudarte


Ver Perfil WWW
comprobar numero repetido en un vector
« en: 25 Junio 2014, 21:39 pm »

buenas estoy haciendo un juego de rol donde una de las condiciones es que no se pueda utilizar 2 poderes iguales por el mismo jugador, y no logro dar con el code adecuado

aqui una muetra de lo que hice pero esta mal debido a que el valor que ingrese lo almacena pero despues en el for caigo en decir que esta repetido aunque en realidad solo esta en una sola posicion

ayudenme gracias

Código
  1. scanf("%d",&res2);
  2.                           poderj1[indice]=res2;
  3.  
  4.                 for(int cc=0;cc<=res2;cc++)
  5.                 {
  6.                 if(poderj1[cc]==res2)
  7.                 {
  8.                 printf("\n no puedes utilizar dos poderes iguales!!!\n");
  9.                 getch();
  10.  
  11.                 }
  12.                 }
  13.                   indice=indice+1;    


En línea

SI LA MATRIX FUERA PERFECTA.... ESTARÍA ESCRITA EN C++
daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: comprobar numero repetido en un vector
« Respuesta #1 en: 25 Junio 2014, 21:45 pm »

has un contador que inicie en 0 que se incremente  uno cuando entra al if.

luego con otro if compruebas el contador y si es mayor a uno si entro al if mas de una vez
entonces esta repetido


« Última modificación: 25 Junio 2014, 21:48 pm por daryo » En línea

buenas
Risketo

Desconectado Desconectado

Mensajes: 37



Ver Perfil
Re: comprobar numero repetido en un vector
« Respuesta #2 en: 25 Junio 2014, 21:54 pm »

Una solución posible seria hacer un vector de igual tamaño que el vector de los poderes y ir guardando ahí los poderes usados, cada vez que el usuario elige un poder puedes comprobar si está repetido recorriendo el vector de poderes usados.
Algo así:

Código
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.    int poderes[100];
  5.    int usados[100];
  6.    int i,poderElegido,x;
  7.  
  8.    for(i=0; i<100;i++) //Lleno el array de poderes del 0 al 99
  9.        poderes[i] = i;
  10.  
  11.    for(i=0;i<100;i++) //lleno el array de usados de '-1'
  12.        usados[i] = -1;
  13.  
  14.    i = 0;
  15.    while(i<5) { //Pido un poder y lo voy guardando en el array 'usados'
  16.        printf("Elige un poder: ");
  17.        scanf("%d",&poderElegido);
  18.        for(x=0;x<100;x++) {
  19.            if(usados[x] == poderElegido) {
  20.                printf("Ya has elegido este poder");
  21.                i = 5; //salimos del bucle si ya hemos usado ese poder
  22.            }
  23.        }
  24.        usados[i] = poderElegido;
  25.        i++;
  26.    }
  27.  
  28.    return 0;
  29. }
  30.  
  31.  
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: comprobar numero repetido en un vector
« Respuesta #3 en: 25 Junio 2014, 22:06 pm »

Intuyo que estás usando C++... comprobar valores duplicados es tan sencillo como:

opción 1:

Código
  1. std::vector< int > poderesUsados;
  2. int poder;
  3.  
  4. // Comprobar si ya está usado el poder
  5. // std::find esta en el include "algorithm"
  6. auto it = std::find( poderesUsados.begin( ), poderesUsados.end( ), poder );
  7. if ( it == poderesUsados.end( ) )
  8. {
  9.  // No se ha usado el poder todavía
  10.  
  11.  // marcamos el poder como usado
  12.  poderesUsados.push_back( poder );
  13. }

opción 2:

Código
  1. std::set< int > poderesUsados;
  2.  
  3. // da igual que usemos el mismo poder 20 veces... al final solo quedará un solo uso por cada poder:
  4. poderesUsados.insert( 1 );
  5. poderesUsados.insert( 2 );
  6. poderesUsados.insert( 1 );
  7. poderesUsados.insert( 1 );
  8.  
  9. // Imprimira: 1 2
  10. for( auto it = poderesUsados.begin( ); it != poderesUsados.end( ); ++it )
  11.  cout << *it << " ";
  12.  

Opción 3:

Hay infinitas formas, yo te he mostrado dos diferentes.
En línea

MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: comprobar numero repetido en un vector
« Respuesta #4 en: 26 Junio 2014, 02:05 am »


Código
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.    int poderes[100];
  5.    int usados[100];
  6.    int i,poderElegido,x;
  7.  
  8.    for(i=0; i<100;i++) //Lleno el array de poderes del 0 al 99
  9.        poderes[i] = i;
  10.  
  11.    for(i=0;i<100;i++) //lleno el array de usados de '-1'
  12.        usados[i] = -1;
  13.  
  14.    i = 0;
  15.    while(i<5) { //Pido un poder y lo voy guardando en el array 'usados'
  16.        printf("Elige un poder: ");
  17.        scanf("%d",&poderElegido);
  18.        for(x=0;x<100;x++) {
  19.            if(usados[x] == poderElegido) {
  20.                printf("Ya has elegido este poder");
  21.                i = 5; //salimos del bucle si ya hemos usado ese poder
  22.            }
  23.        }
  24.        usados[i] = poderElegido;
  25.        i++;
  26.    }
  27.  
  28.    return 0;
  29. }
  30.  
  31.  

Puedes quitar todos los bucles for que has puesto, y si te fijas, poderes[100], no lo utilizas para nada, asi que malgastas memoria, este codigo es mas simple

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int usados[100] = {0};
  6.    int i=0, poderElegido=0;
  7.  
  8.    while(i<5)
  9.    {
  10.        //Pido un poder y lo voy guardando en el array 'usados'
  11.        printf("Elige un poder: ");
  12.        scanf("%d",&poderElegido);
  13.  
  14.        if(poderElegido>=0 && poderElegido<100)
  15.        {
  16.            if(usados[poderElegido] != 0)
  17.            {
  18.                printf("Ya has elegido este poder");
  19.                i = 5; //salimos del bucle si ya hemos usado ese poder
  20.            }
  21.            else
  22.            {
  23.                usados[poderElegido] = 1;
  24.            }
  25.  
  26.            i++;
  27.        }
  28.        else
  29.        {
  30.            printf("Poder invalido\n");
  31.        }
  32.    }
  33.  
  34.    return 0;
  35. }
  36.  


Saludos
En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Comprobar si un numero es entero
Programación Visual Basic
Neobius 6 34,220 Último mensaje 21 Abril 2006, 08:04 am
por Neobius
[RETO] Comprobar si un numero dado es un numero de la suerte « 1 2 ... 5 6 »
Programación Visual Basic
Karcrack 53 23,649 Último mensaje 17 Agosto 2010, 23:58 pm
por Dessa
[RETO] Comprobar si un numero es odioso « 1 2 »
Programación Visual Basic
Karcrack 17 11,934 Último mensaje 20 Agosto 2010, 16:42 pm
por Karcrack
[DUDA] Comprobar si un número es ondulado
Programación C/C++
Kropt32 2 7,642 Último mensaje 15 Diciembre 2010, 09:04 am
por Kropt32
verificar si un numero esta repetido en matriz « 1 2 3 »
Programación C/C++
SojatDotar 25 17,736 Último mensaje 7 Julio 2015, 00:35 am
por SojatDotar
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines