|
|
|
![]() |
|
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: 18:45.