/* Stakkoperasjoner: * - lese et tall: push * - lese en av de fire operasjonene: 2*pop + push * - hente ut svaret til slutt: pop */ /* OPPGAVE B */ class Beregn { StakkInterface stakk; Beregn(StakkInterface s) { stakk = s; } void tall(float t) { stakk.push(t); } float resultat() { return stakk.pop(); } void add() { stakk.push(stakk.pop() + stakk.pop()); } void sub() { float t = stakk.pop(); stakk.push(stakk.pop() - t); // Alternativt: stakk.push(-stakk.pop() + stakk.pop()); } void mult() { stakk.push(stakk.pop() * stakk.pop()); } void div() { float t = stakk.pop(); stakk.push(stakk.pop() / t); // Alternativt: stakk.push((1 / stakk.pop()) * stakk.pop()); } } /* OPPGAVE C */ class BeregnDirekte { int n; float[] stakk; int ant; void BeregnDirekte(int i) { n = i; stakk = new float[i]; ant = 0; } void tall(float t) { if (ant == n) { System.out.println("Ikke mer plass!"); System.exit(1); } else { stakk[ant++] = t; } } void add() { if (ant < 2) { System.out.println("For f? tall!"); System.exit(2); } else { stakk[ant - 2] = stakk[ant - 2] + stakk[ant - 1]; ant--; } } void sub() { if (ant < 2) { System.out.println("For f? tall!"); System.exit(2); } else { stakk[ant - 2] = stakk[ant - 2] - stakk[ant - 1]; ant--; } } void mult() { if (ant < 2) { System.out.println("For f? tall!"); System.exit(2); } else { stakk[ant - 2] = stakk[ant - 2] * stakk[ant - 1]; ant--; } } void div() { if (ant < 2) { System.out.println("For f? tall!"); System.exit(2); } else { stakk[ant - 2] = stakk[ant - 2] / stakk[ant - 1]; ant--; } } float resultat() { if (ant != 1) { System.out.println("Ikke ferdig uttrykk!"); System.exit(3); } return stakk[1]; } }