|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
|
problema su pile e riporti
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 Codice:
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--;
}
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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 ...
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2005
Città: Genova
Messaggi: 75
|
Grazie era piu' semplice di quanto credessi.
Ho un altro dubbio su un codice java ma faro' un altro post. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:43.



















