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