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

Tengo Este Codigo, Pero Tengo Una Duda

Estas en el tema de Tengo Este Codigo, Pero Tengo Una Duda en el foro de C/C++ en Foros del Web. HOLA TENGO ESTE CODIGO, NO GENERA ERRORES, PERO LO EJECUTO Y EN LA FUNCION PUSH NO RESPETA LA CONDICION DE : if(tope<9) { tope++; pila[tope]=valor; ...
  #1 (permalink)  
Antiguo 09/07/2007, 22:28
 
Fecha de Ingreso: abril-2007
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 1
Sonrisa Tengo Este Codigo, Pero Tengo Una Duda

HOLA TENGO ESTE CODIGO, NO GENERA ERRORES, PERO LO EJECUTO Y EN LA FUNCION PUSH NO RESPETA LA CONDICION DE :

if(tope<9) {

tope++;

pila[tope]=valor; }

else

cout<<"\nLa pila esta llena!\n";

ME DEJA LLENAR O INTRODUCIR MAS DE 9 VALORES Y PS NO ME DICE LA PILA ESTA LLENA NO SE EN DONDE ESTA EL ERROR, ESPERO ALGUIEN ME PUEDA AYUDAR GRACIAS...... AKI LES DEJO EL CODIGO COMPLETO!!



Código:
#include<conio.h>
#include<iostream.h>
#include<stdio.h>


int tope=-1,valor;
int pila[10];

void push(int val);
void pop();

void main()

{

clrscr();

int opcion;

do

{
clrscr();
cout<<"\n\n\tMENU\n\n";
cout<<"Seleccione una opcion:\n";
cout<<"1.-Agregar algun elemento\n";
cout<<"2.-Eliminar algun elemento\n";
cout<<"3.-Salir del programa\n";
cout<<"Que opcion deseas??\n";
cin>>opcion;

clrscr();

switch(opcion)

{

case 1:
{
cout<<"\nIntroduce un valor:";
cin>>valor;

push(valor);

break;
}
case 2:
 {
pop();

break;
}
case 3:
{
cout<<"\nSalir del Programa,Gracias!\n";

break;}
 }
}while(opcion!=3);

getch();

}

void push(val)

{

  if(tope<9)

   {

tope++;

pila[tope]=valor;

   }

else

cout<<"\nLa pila esta llena!\n";

}

void pop()

{

  if(tope>=0)
  {

  pila[tope]=0;

  tope--;

cout<<"\nHas eliminado una pila!\n";
  clrscr();
  }

else

cout<<"La pila esta vacia!";

}
  #2 (permalink)  
Antiguo 10/07/2007, 08:40
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 19 años, 5 meses
Puntos: 24
Re: Tengo Este Codigo, Pero Tengo Una Duda

para que te permita guardar 9 valores, deberías cambiar la condición:

if(tope<9)

por

if(tope<8)


Esto es así ya que estás contando desde 0 las posiciones, por lo que los 9 lugares vas del 0 al 8.

El vector pila de 10 deberías declararlo como:
int pila[8];

Saludos
  #3 (permalink)  
Antiguo 10/07/2007, 13:48
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Tengo Este Codigo, Pero Tengo Una Duda

Cita:
Iniciado por TolaWare Ver Mensaje
para que te permita guardar 9 valores, deberías cambiar la condición:

if(tope<9)

por

if(tope<8)


Esto es así ya que estás contando desde 0 las posiciones, por lo que los 9 lugares vas del 0 al 8.

El vector pila de 10 deberías declararlo como:
int pila[8];

Saludos
Ops, creo que te equivocaste Totalware.

if(tope<9)

revisa del 0 al 8

si fuera:

if(tope<=9)

entonces tu teoria seria correcta, pero no es asi.

asi que

if(tope<9)

es correcto.

Saludos
  #4 (permalink)  
Antiguo 10/07/2007, 13:56
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Tengo Este Codigo, Pero Tengo Una Duda

Cita:
Iniciado por athena_rivas Ver Mensaje
HOLA TENGO ESTE CODIGO, NO GENERA ERRORES, PERO LO EJECUTO Y EN LA FUNCION PUSH NO RESPETA LA CONDICION DE :

if(tope<9) {

tope++;

pila[tope]=valor; }

else

cout<<"\nLa pila esta llena!\n";

ME DEJA LLENAR O INTRODUCIR MAS DE 9 VALORES Y PS NO ME DICE LA PILA ESTA LLENA NO SE EN DONDE ESTA EL ERROR, ESPERO ALGUIEN ME PUEDA AYUDAR GRACIAS...... AKI LES DEJO EL CODIGO COMPLETO!!



Código:
#include<conio.h>
#include<iostream.h>
#include<stdio.h>


int tope=-1,valor;
int pila[10];

void push(int val);
void pop();

void main()

{

clrscr();

int opcion;

do

{
clrscr();
cout<<"\n\n\tMENU\n\n";
cout<<"Seleccione una opcion:\n";
cout<<"1.-Agregar algun elemento\n";
cout<<"2.-Eliminar algun elemento\n";
cout<<"3.-Salir del programa\n";
cout<<"Que opcion deseas??\n";
cin>>opcion;

clrscr();

switch(opcion)

{

case 1:
{
cout<<"\nIntroduce un valor:";
cin>>valor;

push(valor);

break;
}
case 2:
 {
pop();

break;
}
case 3:
{
cout<<"\nSalir del Programa,Gracias!\n";

break;}
 }
}while(opcion!=3);

getch();

}

void push(val)

{

  if(tope<9)

   {

tope++;

pila[tope]=valor;

   }

else

cout<<"\nLa pila esta llena!\n";

}

void pop()

{

  if(tope>=0)
  {

  pila[tope]=0;

  tope--;

cout<<"\nHas eliminado una pila!\n";
  clrscr();
  }

else

cout<<"La pila esta vacia!";

}
Despues de revisar tu codigo, parece que esta correcto. Lo unico que me parece que puede cusarte el error es el

tope=-1;

Mejor ponlo en 0 y arregla tus funciones push y poco para que trabajen asi:

Cita:
void push(val)
{
if(tope<9)
{
pila[tope]=valor;
tope++;
}
else
cout<<"\nLa pila esta llena!\n";
}

void pop()
{
if(tope>=0)
{
tope--;
pila[tope]=0;
cout<<"\nHas eliminado un dato de la pila!\n";
clrscr();
}
}
Por cierto, en los case, no necesitas la llaves, puedes ponerlo asi:

Cita:
switch(opcion)
{
case 1:
cout<<"\nIntroduce un valor:";
cin>>valor;
push(valor);
break;

case 2:
pop();
break;

case 3:
cout<<"\nSalir del Programa,Gracias!\n";
break;
}
  #5 (permalink)  
Antiguo 10/07/2007, 20:36
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 19 años, 5 meses
Puntos: 24
Re: Tengo Este Codigo, Pero Tengo Una Duda

No me equivoqué.
tope empieza con el valor -1.
Pero cuando entra en el bucle, se incrementa en uno su valor, por lo que el primer valor que escribe es pila[0] y no pila[-1], por lo que no se genera un error, y si hacemos la comparación con 8 en ves de 9, entonces el último valor escrito es pila[8].

El problema original es que está escribiendo una posición más de lo que debería en el vector pila, por lo que la solución de Instru o la mía deberían funcionar bien. Aunque desde un punto de vista didáctico es mejor la de Instru ya que es mas fácil ver las iteraciones desde el 0 al 9, que del -1 al 8
  #6 (permalink)  
Antiguo 11/07/2007, 20:49
 
Fecha de Ingreso: abril-2007
Mensajes: 16
Antigüedad: 17 años, 8 meses
Puntos: 1
Sonrisa Re: Tengo Este Codigo, Pero Tengo Una Duda

GRACIAS POR SUS COMENTARIOS Y AYUDA!! ASI ME QUEDO EL CODIGO Y FUNCIONO MUY BIEN .... NOS VEMOS Y GRACIAS DE NUEVO

Código:

#include<conio.h>
#include<iostream.h>
#include<stdio.h>


int tope=0,valor;
int pila[10];

void push(int val);
void pop();

void main()

{

clrscr();

int opcion;

do

{
clrscr();
cout<<"\n\n\tMENU\n\n";
cout<<"Seleccione una opcion:\n";
cout<<"1.-Agregar algun elemento\n";
cout<<"2.-Eliminar algun elemento\n";
cout<<"3.-Salir del programa\n";
cout<<"Que opcion deseas??\n";
cin>>opcion;

clrscr();

switch(opcion)

{

case 1:

cout<<"\nIntroduce un valor:";
cin>>valor;

push(valor);

break;

case 2:

pop();

break;

case 3:

cout<<"\nSalir del Programa,Gracias!\n";
cout<<"\nPresione 1 tecla para salir!\n";

break;
 }
}while(opcion!=3);

getch();

}

void push(int val)

{

  if(tope<9)

   {

tope++;

pila[tope]=val;

   }

else
      {
cout<<"\nLa pila se a llenado, a introducido mas de 9 valores!\n";
       getch();
      }


  }
void pop()

{

  if(tope>=0)

  {

  pila[tope]=0;

  tope--;

cout<<"\nHas eliminado una pila!\n";
cout<<"\nPresione 1 tecla para regresar al menu!\n";

  }

else

cout<<"La pila esta vacia!";
cout<<"\nPresione 1 tecla para regresar al menu!\n";
    getch();
}
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 18:02.