Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kevin98 en 24 Mayo 2018, 18:29 pm



Título: Estructura de datos(pilas)
Publicado por: Kevin98 en 24 Mayo 2018, 18:29 pm
Buen día a todos, llevo días con esto he intentado varias cosas pero no me sale, podrían ayudarme?
El enunciado es el siguiente:
Tomando como base el programa desarrollado en clase,
a.   Modifique el código para que permita el ingreso de n cantidad de números.
b.   Luego recorra la pila y lea los números de dos en dos.
c.   Calcule una suma con los dos primeros números
d.   Calcule una multiplicación con los dos siguientes valores
e.   Luego reste y divida respectivamente.

iv.   Guarde los resultados de las operaciones en una nueva pila.
v.   Habilitar: Una opción que permita presentar en pantalla los datos tanto de la pila de ingreso como la de los resultados.

El paso a y el b ya lo tengo, el problema esta en hacer las operaciones de dos en dos(paso c,d,e), puede que sea un for e incluso con do while pero me salen resultados diferentes a la hora de querer utilizar for e ir recorriendo de dos en dos para poder operar.

De ante mano se les agradece.

Este es el codigo que tengo:

#include <iostream>
#include <cstdlib>

using namespace std;
int main(){
   int arreglo[100];
   int numero;  
   int tope = 0;
   int contAGREGAR;
   int contMOSTRAR;
   int contELIMINAR;
   int cantAGREGAR;
   int cantELIMINAR;
   do{
      
      
      system("clear");
      
            
   printf("\n\tPOR FAVOR ELIJA UNA DE LAS SIGUIENTES OPCIONES\n\n");
   printf("\t\tPILA\n\n");
   printf("\n\t1.INGRESAR UN DATO A LA PILA");
   printf("\n\t2.MOSTRAR DATO DE LA PILA");   
   printf("\n\t3.ELIMINAR DATO A LA PILA \n");   
   printf("\n\t4.SALIR DEL PROGRAMA \n");   
   
      scanf("%i",&numero);
      switch (numero) {
            
      case 1:{
         system("clear");
         printf("CUANTOS ELEMENTOS QUIERE AGREGAR A LA PILA ");
         scanf("%d", &cantAGREGAR);
         for (contAGREGAR = 1; contAGREGAR <= cantAGREGAR; contAGREGAR++) {
            printf("\t INTRODUZCA EL DATO DE LA PILA NUMERO %d :", contAGREGAR);
            scanf("%i", &arreglo[tope]);
            tope++;
         }
      }
      break;
      
      case 2:{
      
         system("clear");

         if (tope == 0){

            printf("\t LA PILA ESTA VACIA");
            break;
         }else {
            printf("\tDATOS DE LA PILA\n\n");
            for (contMOSTRAR = 0; contMOSTRAR<tope; contMOSTRAR++) {
               
               printf("\n\t%d ", arreglo[contMOSTRAR]);
            }
         }
      }

         break;
         
      case 3:
            {
            system("clear");
            
            if(tope == 0){
               printf("\n\t\t NO HAY PILA QUE RETIRAR");
               
               
            }else {
               printf("CUANTOS DATOS QUIERE QUITAR DE LA PILA \? ");
               scanf("%d", &cantELIMINAR);
               system("clear");
               for ( contELIMINAR = 0; contELIMINAR < cantELIMINAR; contELIMINAR++) {
                  tope--;
                  printf("El elemento %d fue eliminado", tope);
                  
                  
               }
            }
            }
            break;
                  
      case 4:
         {   
            printf("\tSALIENDO..\n");
         break;


         }}}while(numero<4);
}

Estaba haciendo esto aparte para darme una idea:

int arreglo[] = {1,2,3,4,5,6};
int suma, resta, multi;

   //suma
   for(int i = 0; i <= 1; i++){
      suma += arreglo;
      
   }
   cout << "Suma: " << suma;
   //resta
   for(int i = 2; i >= 3 ;i++){
      resta -= arreglo;
      
   }
   cout << endl << "Resta: " << resta;
    //multiplicacion
    for(int i = 5; i <= 4 ;i--){
      multi = multi + arreglo;
      cout << endl << "Multiplicacion: " << multi;
   }


Título: Re: Estructura de datos(pilas)
Publicado por: Serapis en 24 Mayo 2018, 18:44 pm
Si te piden tomar los dos primeros... pués sencillamente necesitas dos variables temporales.

Código:
x = pilaA.pop
y = pilaA.pop

pilaB.push(x + y)

La multiplicación (cuestión: d) es lo mismo.
Código:
x = pilaA.pop
y = pilaA.pop

pilaB.push(x * y)

la cuestión 'e', es un bucle donde mientras queden más de 2 ítems... si solo queda 1, no podrá sumarse, ni restarse a otro que 'no existe'.
La cuestión 'e' me resulta ambigua, no sé si pretende decir que con los valores obtenidos primero se resten y luego se dividan (como señala este pseudocódigo):
Código:
Hacer  mientras (pilaA.Items > 1)
    x = pilaA.pop
    y = pilaA.pop

    pilaB.push(x - y)
    pilaB.push(x / y)
Repetir

...ó si pretende decir que con los dos siguientes se reste y con los otros dos siguientes se divida... en este caso se requiere que que para ambas operaciones dentro del bucle deban existir al menos 4, tras el bucle pueden quedan 0,1,2 ó 3 elementos, si quedan 2 ó 3, todavía podrá hacerse una resta más...

Código:
Hacer mientras (pilaA.Items > 3)
    x = pilaA.pop
    y = pilaA.pop
    pilaB.push(x - y)

    x = pilaA.pop
    y = pilaA.pop
    pilaB.push(x / y)
Repetir

Si pilaA.Items>1 luego
    x = pilaA.pop
    y = pilaA.pop
    pilaB.push(x - y)
fin si