Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: attackers en 4 Noviembre 2011, 04:15 AM

Título: problema con for en c (eliminar pila)
Publicado por: attackers en 4 Noviembre 2011, 04:15 AM
estaba haciendo este programa que me mandaron en la universidad pero no logro eliminar las pilas que deseo, por ejemplo si agregue 5 pilas y quiero eliminar 4 me elimina es una sola y no logro que me elimine las cuatro de una vez

aqui les dejo el codigo para que me puedan ayudar





#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define p printf
#define s scanf
main ()
{

int arreglo[10];
int numero=0;
int tope=0;
int x=0;
int contador;
int cantidad;
int final;
do

{
   
   
   
/**COMANDO PARA CAMBIAR COLOR A LA VENTANA**/

system("color 1f");
/** COMANDO PARA LIMPIAR LA PANTALLA **/
system("cls");







/*******************************************/
/*******************************************/
/************ MENU DE OPCIONES **************/
/*******************************************/
/*******************************************/

p("\n\tPOR FAVOR ELIJA UNA DE LAS SIGUIENTES OPCIONES\n\n\n\n");
p("\t\t\tPILA\n");
p("\n\t1.INGRESAR UN DATO A LA PILA \n\n");
p("\t2.MOSTRAR DATOS DE LA PILA\n\n");
p("\t3.ELIMINAR DATO DE LA PILA \n\n");
p("\t4.SALIR DEL PROGRAMA \n");

/***********************************************/
s("%i",&numero);
switch(numero)
{
             
/*******************************************/
/*******************************************/
/****** AGREGAR ELEMENTO A LA PILA*********/
/*******************************************/
/*******************************************/
case 1:{

system ("cls");

p("CUANTOS ELEMENTOS QUIERE AGREGAR A LA PILA ");
scanf("%d", &cantidad);    

for( contador = 1; contador <= cantidad; contador++ ){
   
p("\t INTRODIZCA EL DATO DE LA PILA NUMERO %d : ", contador);
s("%i",&arreglo[tope]);    
tope++;



}
}
break;


/*******************************************/
/*******************************************/
/************ MUESTRA LAS PILA **************/
/*******************************************/
/*******************************************/


case 2:
{
   
    system ("cls");
    if ( tope==0 ) {
    p("\t LA PILA ESTA VACIA");
    }
   
    else
    {
p("\tDATOS DE LA PILA\n\n");

for(x=0; tope>x ;x++)
{
p("\n\t%d ",arreglo[x]);
}
}
}
getch();
break;


/*******************************************/
/*******************************************/
/******   ELIMINA DATO DE LA PILA  *********/
/*******************************************/
/*******************************************/


case 3:
   
    {
         
          system ("cls");
         
         
                         if (tope==0)
                   {
                         
                         p("\n\t\t NO HAY PILA QUE RETIRAR");
                          getch();
                         }
                         else
{
[b]                p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
               s("%d",&max);
               for ( max = 0; max<tope; max++);

               {

                             tope--;
                   system ("cls");

               p("LOS ELIMENTOS HAN SIDO ELIMINADOS");
     [/b]
                  getch();
                 
                 
                      }          
                     }
                    }
                   
              break;
                   
/*******************************************/
/*******************************************/
/********   SALE DEL PROGRMA   ***********/
/*******************************************/
/*******************************************/


case 6:
{
printf("\tSALIENDO...\n");
return 0;
}
break;
}
}
while(numero<7);

}



Título: Re: problema con for en c (eliminar pila)
Publicado por: attackers en 4 Noviembre 2011, 04:24 AM
esta en negrita la parte del codigo donde se eliminan los datos de la pila
Título: Re: problema con for en c (eliminar pila)
Publicado por: do-while en 4 Noviembre 2011, 06:22 AM
¡Buenas!


   s("%d",&max);
   for ( max = 0; max<tope; max++);

   {
        tope--;
       system ("cls");

       p("LOS ELIMENTOS HAN SIDO ELIMINADOS");

       getch();

   }


Estas leyendo el numero de datos que quieres eliminar, despues descartas ese valor para usar la variable que lo almacena como contador en un bucle que no hace nada (inmediatamente despues del for tienes ; ), e inmediatamente despues declaras un bloque que decrementa el tope y realiza algunas instrucciones...

Repasa esta parte a ver si encuentras el (los) errores.

¡Saludos!
Título: Re: problema con for en c (eliminar pila)
Publicado por: attackers en 4 Noviembre 2011, 15:49 PM
amigo ya encontre un error

    {
         
          system ("cls");
         
                 if (tope==0)
                   {
                         
                         p("\n\t\t NO HAY PILA QUE RETIRAR");
                          getch();
                         }
                         else {
               p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
               s("%d",&max);
               
                     system ("cls");
                     
               for ( max = 0; max<tope; max++)
               {
                             tope--;
                   
               p("LOS ELIMENTOS HAN SIDO ELIMINADOS");
     
 getch();
                 
                 
               }
                                   
                   
                       }
                    }



pero ahora si instruduzco  10 elementos y quiero eliminar 8 lo que me elimina son 5 no los 8


edit: le cambie la variable de tope por cantidad pero aqui me elimina todo los datos


    {
         
          system ("cls");
         
                 if (tope==0)
                   {
                         
                         p("\n\t\t NO HAY PILA QUE RETIRAR");
                          getch();
                         }
                         else {
               p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
               s("%d",&max);
               
                     system ("cls");
                     
               for ( max = 0; cantidad>=max; max++)
             
                {
                   
               p("EL ELEMENTO %d \n", tope);
                tope--;
               
     system("pause");

                 
                 
               }
                                   
                   
                       }
                    }


Título: Re: problema con for en c (eliminar pila)
Publicado por: rir3760 en 5 Noviembre 2011, 01:54 AM
Si no tienes un buen libro ya es hora de conseguir uno, revisa el tema [Libros/Papers] C/C++ (http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html).

El error sigue siendo el mismo que ya indico do-while:

1) Lees el numero de elementos a eliminar y almacenas este en la variable "max":
p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
s("%d",&max);


2) Ejecutas un bucle utilizando la variable "max" como contador donde ella toma los valores 0 a "cantidad":
for ( max = 0; cantidad>=max; max++){
   p("EL ELEMENTO %d \n", tope);
   tope--;
   system("pause");
}


Un saludo
Título: Re: problema con for en c (eliminar pila)
Publicado por: attackers en 5 Noviembre 2011, 16:22 PM

#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#define p printf
#define s scanf
main ()

{

int arreglo[100];

int numero;  /*** guarda el numero ha elegir del menu **/
int tope=0; 

int contadorAGREGAR;   /** contador del for de agregar las pilas **/
int contadorMOSTRAR;  /** contador del for de mostrar las  pilas **/
int contadorELIMINAR;  /** contador del for para eliminar las pilas **/

int cantidadAGREGAR;  /** guarda la cantidad de elementos que quiero agregar **/
int cantidadELIMINAR; /** guarda la cantidad de elementos que quiero eliminar **/

do

{
   
   
   
/**COMANDO PARA CAMBIAR COLOR A LA VENTANA**/
system("color 1f");

/** COMANDO PARA LIMPIAR LA PANTALLA **/
system("cls");

/*******************************************/
/*******************************************/
/************ MENU DE OPCIONES **************/
/*******************************************/
/*******************************************/

p("\n\tPOR FAVOR ELIJA UNA DE LAS SIGUIENTES OPCIONES\n\n\n\n");
p("\t\t\tPILA\n");
p("\n\t1.INGRESAR UN DATO A LA PILA \n\n");
p("\t2.MOSTRAR DATOS DE LA PILA\n\n");
p("\t3.ELIMINAR DATO DE LA PILA \n\n");
p("\t4.SALIR DEL PROGRAMA \n");

/***********************************************/
s("%i",&numero); /** guarda el numero que el usuario elige **/
switch(numero) 
{
             
/*******************************************/
/*******************************************/
/****** AGREGAR ELEMENTO A LA PILA*********/
/*******************************************/
/*******************************************/
case 1:{
system ("cls");

p("CUANTOS ELEMENTOS QUIERE AGREGAR A LA PILA ");
scanf("%d", &cantidadAGREGAR);     


for( contadorAGREGAR = 1; contadorAGREGAR <= cantidadAGREGAR; contadorAGREGAR++ ){
     
p("\t INTRODIZCA EL DATO DE LA PILA NUMERO %d : ", contadorAGREGAR);
s("%i",&arreglo[tope]);    
tope++;  /** aumenta o suma 1 elemento al tope **/

}
}
break;


/*******************************************/
/*******************************************/
/************ MUESTRA LAS PILA **************/
/*******************************************/
/*******************************************/
case 2:
{
system ("cls");

       /** compara si tope es igual a 0 **/
     if ( tope==0 )
     {
          /** si la condicion se cumple se muestra que esta vacia **/
     p("\t LA PILA ESTA VACIA");
     }
     
     
     else
     {
     p("\tDATOS DE LA PILA\n\n");

                for(contadorMOSTRAR=0; tope>contadorMOSTRAR ;contadorMOSTRAR++)
                {
                p("\n\t%d ",arreglo[contadorMOSTRAR]);
                }
    }
}
getch();
break;



/*******************************************/
/*******************************************/
/******   ELIMINA DATO DE LA PILA  *********/
/*******************************************/
/*******************************************/
case 3:
     
     {
           
system ("cls");
                  if (tope==0)
                          {   
                          p("\n\t\t NO HAY PILA QUE RETIRAR");
getch();
                          }
                          else
                          {
                p("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
                s("%d",&cantidadELIMINAR);
               
system ("cls");
                     
                for ( contadorELIMINAR= 0; contadorELIMINAR<cantidadELIMINAR; contadorELIMINAR++)
                    {
                        tope--;                 
                    p("el elemento %d fue eliminado \n",tope);
                 
                 
getch();
                }                   
                }
                } 
               break;
             
             
                     
/*******************************************/
/*******************************************/
/********   SALE DEL PROGRMA   ***********/
/*******************************************/
/*******************************************/
case 4:
{
     
printf("\tSALIENDO...\n");

return 0;

}

break;
}
}

while(numero<7);

}







amigos ahora me podrian explicar un poco  para hacer uno de cola

tendria que hacer otra variable para el inicio ?