Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Prüfungen im Bachelor-Studium (1. - 5. Semester) » aud » Lösungsversuch Miniklausur WS 2017/18 (Übersicht)
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Letzte Überarbeitung | |||
— | pruefungen:bachelor:aud:loesung-miniklausur-17 [28.06.2019 09:06] – angelegt Dbadtf_385 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== Lösungsversuch Miniklausur WS 2017/18 ===== | ||
+ | |||
+ | ==== Aufgabe 1 (Wissensfragen) ==== | ||
+ | **a)** 2 und 4 | ||
+ | **b)** 1 und 2 | ||
+ | **c)** 1 (SEHR unsicher), 2, 3 | ||
+ | |||
+ | ==== Aufgabe 2 (Backtracking) ==== | ||
+ | **a)** | ||
+ | <code java> | ||
+ | class ZahlUnvollstaendig extends Exception { } | ||
+ | public abstract class Rechnung { | ||
+ | protected int[][] zahlen; | ||
+ | |||
+ | protected Rechnung(int[] operand1, int[] operand2, int[] ergebnis) { | ||
+ | this.zahlen = new int[][] { operand1, operand2, ergebnis }; | ||
+ | } | ||
+ | |||
+ | protected long werteAus(int[] zahl) throws ZahlUnvollstaendig { | ||
+ | long erg = 0; | ||
+ | int laenge = zahl.length; | ||
+ | for(int i = 0; i< | ||
+ | if(zahl[i]< | ||
+ | erg+= zahl[i] * Math.pow(10, | ||
+ | } | ||
+ | |||
+ | return erg; | ||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | protected abstract boolean pruefe() throws ZahlUnvollstaendig; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **b)** | ||
+ | <code java> | ||
+ | class Addition extends Rechnung { | ||
+ | |||
+ | protected Addition(int[] operand1, int[] operand2, int[] ergebnis) { | ||
+ | super(operand1, | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | protected boolean pruefe() throws ZahlUnvollstaendig { | ||
+ | return(werteAus(zahlen[0]) + werteAus(zahlen[1]) == werteAus(zahlen[2])); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **c)** | ||
+ | <code java> | ||
+ | public class Rechenproblem { | ||
+ | private static Rechnung[] rs; | ||
+ | |||
+ | public static boolean loese(Rechnung[] rechnungen) { | ||
+ | rs = rechnungen; | ||
+ | return loese(0, 0, 0, 0); | ||
+ | } | ||
+ | |||
+ | private static boolean loese(int rIdx, int zIdx, int stIdx, int z) { | ||
+ | try { | ||
+ | for(Rechnung rechnung : rs) { | ||
+ | if(!rechnung.pruefe()) return false; | ||
+ | } | ||
+ | return true; | ||
+ | } catch(ZahlUnvollstaendig zu) {} | ||
+ | |||
+ | if(rIdx >= rs.length){ | ||
+ | //alle Rechnungen abgearbeitet | ||
+ | return false; | ||
+ | } else if(zIdx >=3) { | ||
+ | //alle Ops /Erg der aktuellen Rechnung abgearbeitet? | ||
+ | return loese(rIdx+1, | ||
+ | } else if(stIdx >= rs[rIdx].zahlen[zIdx].length) { | ||
+ | //alle Stellen der aktuellen Ops /Erg abgearbeitet? | ||
+ | return loese(rIdx, zIdx+1, 0, 0); | ||
+ | } else if(rs[rIdx].zahlen[zIdx][stIdx] >= 0) { | ||
+ | // ist die Stelle schon belegt? | ||
+ | return loese(rIdx, zIdx, stIdx+1, 0); | ||
+ | } else if(z>=9) { | ||
+ | //alle moeglichen Zahlen abgearbeitet? | ||
+ | return false; | ||
+ | } else { | ||
+ | int alt = rs[rIdx].zahlen[zIdx][stIdx]; | ||
+ | rs[rIdx].zahlen[zIdx][stIdx] = z; | ||
+ | if(loese(rIdx, | ||
+ | return true; | ||
+ | } else { | ||
+ | // | ||
+ | rs[rIdx].zahlen[zIdx][stIdx] = alt; | ||
+ | //next recursive call | ||
+ | return loese(rIdx, zIdx, stIdx, z+1); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </ | ||