PDA

View Full Version : problema su pile e riporti


aduri
11-08-2006, 18:11
Devo fare la somma di 2 grandi numeri sfruttando le pile con i metodi push() e pop().
Ho caricato le 2 pile con gli addendi (592+3784) ma non riesco a gestire il riporto;
qualcuno sa consigliarmi come modificare l'algoritmo della classe UsaPila che allego assieme alla classe Pila con i relativi metodi.
Ammetto che il mio codice e' macchinoso ma sono alle prime armi.

Grazie

Allego file



public class UsaPila
{
public static void main(String[] args)
{
Pila p1 = new Pila(3);

System.out.println("Pila1 vuota = "+p1.vuota());
//System.out.println(p1.piena());
System.out.println("carico la pila p1 con 592");

p1.push(5);
p1.push(9);
p1.push(2);
//System.out.println(p1.vuota());
System.out.println("pila1 carica ="+p1.piena());
//System.out.println(p1.top());
//System.out.println(p1);
//p1.pop();
System.out.println("il primo element che esce e': "+p1.top());

Pila p2 = new Pila(4);

System.out.println("Pila2 vuota = "+p2.vuota());
//System.out.println(p2.piena());
System.out.println("carico la pila p2 con 3784");

p2.push(3);
p2.push(7);
p2.push(8);
p2.push(4);
//System.out.println(p2.vuota());
System.out.println("pila1 carica ="+p2.piena());
//System.out.println(p2.top());
//System.out.println(p2);
//p2.pop();
System.out.println("il primo element che esce e': "+p2.top());

Pila p3 = new Pila(5);

System.out.println("Pila1 vuota = "+p1.vuota());
//System.out.println(p1.piena());
System.out.println("Faccio la somma con riporto delle pile 1 e 2");
System.out.println("Somma primi elementi unita' = "+(p1.top()+p2.top()));
p1.pop();
p2.pop();
p3.push((p1.top()+p2.top()));
System.out.println("Somma altri elementi unita' = "+(p1.top()+p2.top()));
p1.pop();
p2.pop();
p3.push((p1.top()+p2.top()));
System.out.println("Somma altri elementi unita' = "+(p1.top()+p2.top()));
p1.pop();
p2.pop();
p3.push((p1.top()+p2.top()));
//System.out.println(p3.vuota());
System.out.println("pila3 carica ="+p3.piena());
//System.out.println(p3.top());
//System.out.println(p3);
//p1.pop();
System.out.println("il totale delle 2 pile e': ");
System.out.println("Migliaia: "+p3.top());
p3.pop();
System.out.println("Centinaia: "+p3.top());
p3.pop();
System.out.println("Decine: "+p3.top());
p3.pop();
System.out.println("Unita': "+p3.top());
p3.pop();

}
}




public class Pila

/** Questa classe permette di utilizzare una pila di interi.
*/

{
protected int[] elementi;
protected int numElementi;


public Pila()
{
elementi = new int[10];
numElementi = 0;
}


public Pila(int capacita)
{
elementi = new int[capacita];
numElementi = 0;
}


public boolean vuota()
{
if (numElementi == 0)
return true;
else
return false;
}


public boolean piena()
{
if (numElementi == elementi.length)
return true;
else
return false;
}


public void push(int e)
{
if(!piena())
{
elementi[numElementi] = e;
numElementi++;
}
}


public int top()
{
return elementi[numElementi - 1];
}


public void pop()
{
if(!vuota())
numElementi--;
}
}

andbin
11-08-2006, 18:40
Devo fare la somma di 2 grandi numeri sfruttando le pile con i metodi push() e pop().
Ho caricato le 2 pile con gli addendi (592+3784) ma non riesco a gestire il riportoOk, a parte il codice (che ho visto), il concetto in pratica sarebbe questo (correggimi se sbaglio): in ogni elemento delle 2 pile, hai una singola cifra numerica. Una volta che le pile sono piene, facendo il pop da entrambe prendi man mano le cifre partendo da quelle meno significative. (e fin qui non fa una piega).
Il riporto è semplice: se sommando 2 cifre, il risultato è maggiore di 9, hai il riporto. Quindi basta tenere una variabile es. int riporto=0; (inizialmente a zero, appunto) il cui valore va sommato ad ogni somma di 2 cifre. Se il risultato è maggiore di 9, hai il riporto (che vale risultato/10) e la cifra in output è (risultato%10).

Non è nemmeno una problematica di programmazione ... ;)

aduri
17-08-2006, 16:03
Grazie era piu' semplice di quanto credessi. :muro:
Ho un altro dubbio su un codice java ma faro' un altro post. :D