problema con for en c (eliminar pila)

Iniciado por attackers, 4 Noviembre 2011, 04:15 AM

0 Miembros y 1 Visitante están viendo este tema.

attackers

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);

}




attackers

esta en negrita la parte del codigo donde se eliminan los datos de la pila

do-while

¡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!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

attackers

#3
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");

                 
                 
               }
                                   
                   
                       }
                    }



rir3760

Si no tienes un buen libro ya es hora de conseguir uno, revisa el tema [Libros/Papers] C/C++.

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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

attackers


#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 ?