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
cout << ("Ingrese un indice y vera los datos que hay previo y sequiente");
cin >> prevSiqu;
if(prevSiqu < 0 || prevSiqu >= Tam)
{
cout << ("p: mala posicion.\n");
}
cout << (prevSiqu+1);
if(prevSiqu <= 0 || prevSiqu > Tam)
{
cout << ("p: mala pocicion. \n");
}
cout << (prevSiqu-1);
Hace el previo pero no el siquiente y no se por que, ni que estoy haciendo mal.
Gracias saludos
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
Algo asi deberia funcionar
cin >> indice;
if(indice < 0 || indice >= array_len)
{
cout << "fuera del array" << endl;
}
else
{
if(indice != 0)
cout << "previo: " << arreglo[indice - 1] << endl;
else
cout << "no hay previo" << endl;
if(indice != array_len - 1)
cout << "siguiente: " << arreglo[indice + 1] << endl;
else
cout << "no hay siguiente" << endl;
}
Saludos
la salida de noele1995
es esta, y no me detecta el previo en ningun caso.
(http://4.bp.blogspot.com/-S7esylhPQnM/U12hPM9y7ZI/AAAAAAAAAs8/jb9UOtRDmcU/s1600/Salida.png)
y la de vangodp es la correcta me toma los valores de iz y derecha.
for (int i = 0; i < Datos.length; i++)
{
if(i == prevSiqu)
{
cout << ("En el dato a la izquirda es: " << Datos[i-1] << "\n"
<< "El dato a la derecha es: " << Datos[i+1]);
}
Creo que noele1995 se confundio en el primer if
if(indice != 0)
if(indice != array_len + 1) //Lo deje asi y funciono perfecto
Muchas gracias a los dos ;-)
Saludos y cuidense.
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!
Citarseria 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].
A mi si que me funciona, a ver lo dejo comentado y con un ejemplo:
#include <iostream>
using namespace std;
const int ARRAY_LEN = 6; //numero de elementos del array
int arreglo[] = { 10, 20, 30 ,40 ,50,60};
int main (void)
{
int indice;
cin >> indice;
if(indice < 0 || indice >= ARRAY_LEN) // entonces no es un indice de nuestro arreglo
{
cout << "fuera del array" << endl;
}
else
{
if(indice != 0) //si es 0 no hay previo puesto que no existe indice -1 en otro caso lo muestra
cout << "previo: " << arreglo[indice - 1] << endl;
else
cout << "no hay previo" << endl;
if(indice != ARRAY_LEN - 1) //si es DIM - 1 (5) no hay siguiente en otro caso lo muestra
cout << "siguiente: " << arreglo[indice + 1] << endl;
else
cout << "no hay siguiente" << endl;
}
return 0;
}
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
¿¿¿Estoy perdonado??? ;D ;D ;D
#include <iostream>
#include <windows.h>
using namespace std;
class clase{
public:
clase(){ suIndice = 0;
suTabla = "0123456789";
suMinimo = 0;
suMaximo = (suTabla.size()-1);
}
~clase(){}
int getIndice ()const{return suIndice;}
bool esMenor(int unIndice){if( unIndice < suMinimo ) {return true; } else{return false;} }
bool esMayor(int unIndice){if( unIndice > suMaximo ) {return true; } else{return false;} }
void bucle();
private:
int suIndice;
int suMinimo;
int suMaximo;
string suTabla;
};
void clase::bucle(){
int salir = 0;
while ( true ){
cout << "\n-Entre el indice de 0 a 9: ";
cin >> suIndice;
system("cls");
if ( esMenor(suIndice) || esMayor(suIndice) ){
cout << "VALOR FUERA DE INDICE!!!" << endl;
}
if ( suIndice == suMinimo || suIndice == suMaximo ){
if( suIndice == suMinimo ){
cout << "El seguiente valor es: " << suTabla[ suIndice+1 ] << endl;
}
if ( suIndice == suMaximo ){
cout << "El valor anterior es: " << suTabla[ suIndice-1 ] << endl;
}
}else if( suIndice > suMinimo && suIndice < suMaximo ){
cout << "El valor anterior es: " << suTabla[ suIndice-1 ] << endl;
cout << "El seguiente valor es: " << suTabla[ suIndice+1 ] << endl;
}
cout << "Desea realizar otra operacion?\n0-salir\n1-seguir\n\nY bien?: ";
cin>>salir;
system("cls");
if( salir == 0 )
break;
}
cout << "baybay!";
}
int main () {
system ( "MODE CON cols=50 lines=15" );
clase c;
c.bucle();
system("pause>nul");
return 0;
}
Cita de: noele1995 en 28 Abril 2014, 12:39 PM
A mi si que me funciona, a ver lo dejo comentado y con un ejemplo:
#include <iostream>
using namespace std;
const int ARRAY_LEN = 6; //numero de elementos del array
int arreglo[] = { 10, 20, 30 ,40 ,50,60};
..........................
..................
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:
#include <iostream>
using namespace std;
int main (void){
int arreglo[] = { 10, 20, 30 ,40 ,50,60};
int indice ,ARRAY_LEN = sizeof arreglo/ sizeof *arreglo;
cout << "Introduzca el indice (0-" <<ARRAY_LEN-1<<"):";
cin >> indice;
if(indice < 0 || indice >= ARRAY_LEN) // entonces no es un indice de nuestro arreglo
cout << "fuera del array" << endl;
else{
if(indice != 0) //si es 0 no h
.........................
Y amigo vangodp quidadito con esto:Cita de: vangodp en 28 Abril 2014, 14:38 PM
¿¿¿Estoy perdonado??? ;D ;D ;D
#include <iostream>
#include <windows.h>
using namespace std;
................................................
system("pause>nul"); <==ESTOOOOOOOOOO
return 0;
}
El "system("pause>nul")" te crea un fichero null.txt. Mejor usar getchar si lo que quieres es parar el programa.¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
si lo se... XD pero me quita las dichosas "letritas" de la consola jajaj prefiero cin.ignore() =D :laugh:
CitarPor 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
100% de razon...se queda para la 2.0 XDDD
Cita de: leosansan en 28 Abril 2014, 19:36 PMEl "system("pause>nul")" te crea un fichero null.txt. Mejor usar getchar si lo que quieres es parar el programa.
No se crea un archivo (esa es la idea): se redirecciona a nul cuando se desea descartar la salida de un comando.
Un saludo