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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Datos previo y siquiente en un arreglo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Datos previo y siquiente en un arreglo  (Leído 4,428 veces)
nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Datos previo y siquiente en un arreglo
« en: 28 Abril 2014, 00:44 am »

Hola de nuevo yo molestando.

estaba tratando de hacer que detecte que datos hay a la izquierda y a la derecha de un arreglo.

Ejemplo:

Arreglo:

indices

0     1     2      3      4       5
10  20    30    40     50     60    // <- datos

Si selecciona el indice 3

me diga que le que esta previo es 30 y el siquiente es 50

tengo esto

Código
  1. cout << ("Ingrese un indice y vera los datos que hay previo y sequiente");
  2.  
  3. cin >> prevSiqu;
  4.  
  5.        if(prevSiqu < 0 || prevSiqu >= Tam)
  6.        {
  7.            cout << ("p: mala posicion.\n");
  8.        }
  9.        cout << (prevSiqu+1);
  10.  
  11.        if(prevSiqu <= 0 || prevSiqu > Tam)
  12.        {
  13.            cout << ("p: mala pocicion. \n");
  14.        }
  15.        cout << (prevSiqu-1);

Hace el previo pero no el siquiente y no se por que, ni que estoy haciendo mal.

Gracias saludos


En línea

Lo que se puede imaginar... se puede programar.
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #1 en: 28 Abril 2014, 02:11 am »

cuando vayas imprimir:

cout << "posicion actual:" << tabla;
cout << "posicion anterior:" << tabla[i - 1];
cout << "posicion seguiente:" << tabla[i +1];

has un cin para guardar la posicion de la tabla que quieras ver.

int i = 0;
cout << "cual es la posicion"
cin>>i;
cout << "posicion actual:" << tabla;
cout << "posicion anterior:" << tabla[i - 1];
cout << "posicion seguiente:" << tabla[i +1];

Espero que sirva XD


En línea

noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #2 en: 28 Abril 2014, 02:12 am »

Algo asi deberia funcionar

Código
  1. cin >> indice;
  2. if(indice < 0 || indice >= array_len)
  3. {
  4.    cout << "fuera del array" << endl;
  5. }
  6. else
  7. {
  8.    if(indice != 0)
  9.        cout << "previo: " << arreglo[indice - 1] << endl;
  10.    else
  11.        cout << "no hay previo" << endl;
  12.  
  13.    if(indice != array_len - 1)
  14.        cout << "siguiente: " << arreglo[indice + 1] << endl;
  15.    else
  16.        cout << "no hay siguiente" << endl;
  17. }

Saludos
En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #3 en: 28 Abril 2014, 02:32 am »

la salida de noele1995

es esta, y no me detecta el previo en ningun caso.



y la de vangodp es la correcta me toma los valores de iz y derecha.

Código
  1. for (int i = 0; i < Datos.length; i++)
  2.        {
  3.            if(i == prevSiqu)
  4.            {
  5.                cout << ("En el dato a la izquirda es: " << Datos[i-1] << "\n"
  6.                                   << "El dato a la derecha es: " << Datos[i+1]);
  7.            }
« Última modificación: 28 Abril 2014, 02:36 am por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #4 en: 28 Abril 2014, 02:47 am »

Creo que noele1995 se confundio en el primer if

Código
  1. if(indice != 0)
Código
  1. if(indice != array_len + 1) //Lo deje asi y funciono perfecto

Muchas gracias a los dos  ;-)

Saludos y cuidense.
En línea

Lo que se puede imaginar... se puede programar.
vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #5 en: 28 Abril 2014, 07:25 am »

    cin >> indice;
    if(indice < 0 || indice >= array_len)//si indice es menor que 0 o mayor o igual que el array len
    {
       cout << "fuera del array" << endl;
    }
    else
    {
       if(indice != 0) // indice no sea 0 creo que el error es que no permite buscar en la posicion 0 y si deberia poder, otra cosa es que aya "previo" en este caso
           cout << "previo: " << arreglo[indice - 1] << endl;
       else
           cout << "no hay previo" << endl;
     
       if(indice != array_len - 1) //si indice no es mayor que array_len-1 es otro fallo o puede que no, si es un char no deberías mostrar esta posición ya que la ultima posición len - 1 se recomienda que sea un cero por otro lado no veo ningún problema en mostrar esta posición.
           cout << "siguiente: " << arreglo[indice + 1] << endl;
       else
           cout << "no hay siguiente" << endl;
    }

vamos a pensar un poco... se debe dejar mostrar todas las posiciones pero si estas en la posición 0 de una tabla no existe la posicion -1, lo mismo ocurre con la posicion len o TAM como os guste llamarla, si estamos en la ultima posición¿¿Por que no se puede mostrar?? Lo que no se debe mostrar es prev si estas en la posicion 0 ni siguiente si estas en la ultima ya que nos estariamos saliendo de la tabla.

seria un par de if especiales:
if (posicion == tabla[0]){
  //ver posición actual
  //ver posicion siguiente
}

¡Si! no quieres ver posición actual pues no ponga XDDD

Para el fin seria:
if (posicion == tabla[max_TAM]){
  //ver posición anterior
  //ver posición actual
}

luego para todas las demas si se debe dejar ver todo.

if ( posicion > tabla[0] && posicion < tabla[ max_TAM] ){
  //ver posición anterior
  //ver posición actual
  //ver posicion siguiente
}

Así es como lo veo la solución puede que me equivoque, si me equivoco pues decir abajo ;)
me he inventado mis nombres de variables jeje asi soy yo, vosotros pongan las vuestras ^^
Suerte compañeros!




 
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #6 en: 28 Abril 2014, 12:15 pm »

Citar
seria un par de if especiales:
if (posicion == tabla[0]){
  //ver posición actual
  //ver posicion siguiente
}

¡Si! no quieres ver posición actual pues no ponga XDDD

Para el fin seria:
if (posicion == tabla[max_TAM]){
  //ver posición anterior
  //ver posición actual
}

luego para todas las demas si se debe dejar ver todo.

if ( posicion > tabla[0] && posicion < tabla[ max_TAM] ){
  //ver posición anterior
  //ver posición actual
  //ver posicion siguiente
}
Vangob, has cometido un error de novatillo ;D.

Es el indice, no tabla[0].
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
noele1995

Desconectado Desconectado

Mensajes: 137



Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #7 en: 28 Abril 2014, 12:39 pm »

A mi si que me funciona, a ver lo dejo comentado y con un ejemplo:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int ARRAY_LEN = 6; //numero de elementos del array
  6.  
  7. int arreglo[] = { 10, 20, 30 ,40 ,50,60};
  8.  
  9. int main (void)
  10. {
  11. int indice;
  12. cin >> indice;
  13. if(indice < 0 || indice >= ARRAY_LEN) // entonces no es un indice de nuestro arreglo
  14. {
  15. cout << "fuera del array" << endl;
  16. }
  17. else
  18. {
  19. if(indice != 0) //si es 0 no hay previo puesto que no existe indice -1 en otro caso lo muestra
  20. cout << "previo: " << arreglo[indice - 1] << endl;
  21. else
  22. cout << "no hay previo" << endl;
  23.  
  24. if(indice != ARRAY_LEN - 1) //si es DIM - 1 (5) no hay siguiente en otro caso lo muestra
  25. cout << "siguiente: " << arreglo[indice + 1] << endl;
  26. else
  27. cout << "no hay siguiente" << endl;
  28. }
  29.  
  30. return 0;
  31. }

Para entrada no devuelve previo y para entrada 5 no devuelve el siguiente, para cualquier otra entrada que sea un indice del arreglo devuelve ambos.

Saludos
En línea

vangodp


Desconectado Desconectado

Mensajes: 455



Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #8 en: 28 Abril 2014, 14:38 pm »

¿¿¿Estoy perdonado???  ;D ;D ;D
Código
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.    class clase{
  5.        public:
  6.            clase(){ suIndice = 0;
  7.                     suTabla = "0123456789";
  8.                     suMinimo = 0;
  9.                     suMaximo = (suTabla.size()-1);                      
  10.                   }
  11.            ~clase(){}
  12.  
  13.            int getIndice ()const{return suIndice;}
  14.  
  15.            bool esMenor(int unIndice){if( unIndice < suMinimo ) {return true; } else{return false;} }
  16.            bool esMayor(int unIndice){if( unIndice > suMaximo ) {return true; } else{return false;} }
  17.  
  18.            void bucle();
  19.        private:
  20.            int suIndice;
  21.            int suMinimo;
  22.            int suMaximo;
  23.            string suTabla;        
  24.    };
  25.    void clase::bucle(){
  26.        int salir = 0;
  27.        while ( true ){
  28.  
  29.            cout << "\n-Entre el indice de 0 a 9: ";
  30.            cin >> suIndice;
  31.            system("cls");
  32.  
  33.            if ( esMenor(suIndice) || esMayor(suIndice)  ){
  34.  
  35.                cout << "VALOR FUERA DE INDICE!!!" << endl;
  36.            }
  37.            if ( suIndice == suMinimo || suIndice == suMaximo ){
  38.  
  39.                if( suIndice == suMinimo ){
  40.  
  41.                    cout << "El seguiente valor es: " << suTabla[ suIndice+1 ] << endl;
  42.  
  43.                }
  44.  
  45.                if ( suIndice == suMaximo ){
  46.  
  47.                    cout << "El valor anterior es: "  << suTabla[ suIndice-1 ] << endl;
  48.  
  49.                }
  50.  
  51.            }else if( suIndice > suMinimo && suIndice < suMaximo ){
  52.  
  53.                cout << "El valor anterior es: "  << suTabla[ suIndice-1 ] << endl;
  54.                cout << "El seguiente valor es: " << suTabla[ suIndice+1 ] << endl;
  55.  
  56.            }        
  57.  
  58.            cout << "Desea realizar otra operacion?\n0-salir\n1-seguir\n\nY bien?: ";
  59.            cin>>salir;
  60.  
  61.            system("cls");
  62.            if( salir == 0 )
  63.                break;
  64.  
  65.        }
  66.        cout << "baybay!";
  67.    }
  68.  
  69.  
  70. int main () {
  71. system ( "MODE CON cols=50 lines=15" );
  72.  
  73.    clase c;
  74.    c.bucle();
  75.  
  76. system("pause>nul");
  77. return 0;
  78. }
  79.  
« Última modificación: 28 Abril 2014, 18:42 pm por vangodp » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Datos previo y siquiente en un arreglo
« Respuesta #9 en: 28 Abril 2014, 19:36 pm »

A mi si que me funciona, a ver lo dejo comentado y con un ejemplo:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int ARRAY_LEN = 6; //numero de elementos del array
  6.  
  7. int arreglo[] = { 10, 20, 30 ,40 ,50,60};
  8. ..........................
  9.  
..................

Por un lado no es aconsejable declarar arreglo como global, no le veo el sentido y por otro lado tampoco veo declarar la longitud del array, esta vendrá determinada en este caso por su contenido: si cambias su valor a uno mayor, por ejemplo, te irás a posiciones fuera del array y, en cambio, si cambias el contenido del array, aumentándolo por ejemplo, te quedarás corto con ARRAY_LEN . Es decir para un cambio en el contenido  del array tienes que hacer dos cambios, en el array y en su longitud.

Mejor calcular la longitud del array en función de su contenido, yo lo hago tipo C, y así si cambias el array no tienes que cambiar su longitud ya que la calculas a posteriori:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main (void){
  6. int arreglo[] = { 10, 20, 30 ,40 ,50,60};
  7. int indice ,ARRAY_LEN = sizeof arreglo/ sizeof *arreglo;
  8. cout << "Introduzca el indice (0-" <<ARRAY_LEN-1<<"):";
  9. cin >> indice;
  10. if(indice < 0 || indice >= ARRAY_LEN) // entonces no es un indice de nuestro arreglo
  11. cout << "fuera del array" << endl;
  12. else{
  13. if(indice != 0) //si es 0 no h
  14. .........................
  15.  

Y amigo vangodp quidadito con esto:

¿¿¿Estoy perdonado???  ;D ;D ;D
Código
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.   ................................................
  5. system("pause>nul"); <==ESTOOOOOOOOOO
  6. return 0;
  7. }
  8.  

El "system("pause>nul")" te crea un fichero null.txt. Mejor usar getchar si lo que quieres es parar el programa.

¡¡¡¡ Saluditos! ..... !!!!


En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Lenguaje previo « 1 2 3 »
Foro Libre
slayer00 23 10,218 Último mensaje 3 Julio 2010, 06:42 am
por sirdarckcat
Agrupamiento de Nodos Vecino en un Arreglo (Mineria de Datos)
Java
cyberserver 6 8,254 Último mensaje 10 Octubre 2012, 19:11 pm
por Diell
Calendario organizativo previo registro con formulario php en pagina web
Desarrollo Web
Anonymous250 4 4,176 Último mensaje 27 Noviembre 2011, 16:46 pm
por EFEX
¿Cómo declarar un arreglo e ingresarle datos?
.NET (C#, VB.NET, ASP)
Juancho25 1 3,051 Último mensaje 4 Junio 2013, 20:56 pm
por El Benjo
crear arreglo con distintos tipos de datos?
Programación C/C++
.:UND3R:. 5 3,962 Último mensaje 18 Junio 2013, 12:56 pm
por pacoperico
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines