\documentclass{bschlangaul-aufgabe} \bLadePakete{java,spalten,struktogramm} \begin{document} \bAufgabenMetadaten{ Titel = {Abitur 2017 IV}, Thematik = {Primzahl}, Referenz = TECH.Ein-Adress.05-Abitur-2017-IV-Primzahl, RelativerPfad = Module/50_TECH/10_Ein-Adress/Aufgabe_05-Abitur-2017-IV-Primzahl.tex, BearbeitungsStand = mit Lösung, Korrektheit = unbekannt, Ueberprueft = {unbekannt}, Stichwoerter = {Ein-Adress-Befehl-Assembler}, } % zurückbekommen und korrigiert 5.2.2021 In dem folgenden Struktogramm wird ein Algorithmus dargestellt, der erkennt, ob eine natürliche Zahl $k$ eine Primzahl ist. In diesem Fall wir in die Speicherzelle $erg$ die Zahl $1$ abgelegt, sonst $0$. \index{Ein-Adress-Befehl-Assembler} \begin{center} \begin{struktogramm}(80,60) \ifthenelse{2}{6}{$k$ gleich $1$}{wahr}{falsch} \assign[7]{$erg = 0$} \change \assign{$a = 0$} \assign{$t = 1$} \until{solange $a$ gleich $0$} \assign{$t=t+1$} \ifthenelse[10]{1}{1}{$t$ ist Teiler von $k$}{wahr}{falsch} \assign{$a=1$} \change \ifend \untilend \ifthenelse[10]{1}{1}{$t$ gleich $k$}{wahr}{falsch} \assign{$erg = 1$} \change \assign{$erg = 0$} \ifend \ifend \end{struktogramm} \end{center} \begin{enumerate} \newpage %% % (a) %% \item Stellen Sie die Veränderung der Variablenwerte bei Ablauf dieses Algorithmus jeweils für die Startwerte $k = 5$ und $k = 15$ durch zwei Speicherbelegungstabellen wie nachfolgend gezeigt dar. \begin{center} \begin{tabular}{l|l|l|l|l} Anweisung & k & a & t & erg \\\hline & 5 & & & \\\hline $a = 0$ & & 0 & & \\\hline $t = 1$ & & & 1 & \\\hline $t = t + 1$ & 5 & & 2 & \\\hline \end{tabular} \end{center} \begin{bAntwort} \bPseudoUeberschrift{$k = 5$} \begin{tabular}{l|l|l|l|l} Anweisung & k & a & t & erg \\\hline & 5 & & & \\\hline $a = 0$ & & 0 & & \\\hline $t = 1$ & & & 1 & \\\hline $t = t + 1$ & & & 2 & \\\hline $t = t + 1$ & & & 3 & \\\hline $t = t + 1$ & & & 4 & \\\hline $t = t + 1$ & & & 5 & \\\hline $a = 1$ & & 1 & & \\\hline $erg = 1$ & & & & 1 \\\hline \end{tabular} \bigskip \bPseudoUeberschrift{$k = 15$} \begin{tabular}{l|l|l|l|l} Anweisung & k & a & t & erg \\\hline & 15 & & & \\\hline $a = 0$ & & 0 & & \\\hline $t = 1$ & & & 1 & \\\hline $t = t + 1$ & & & 2 & \\\hline $t = t + 1$ & & & 3 & \\\hline $t = t + 1$ & & & 4 & \\\hline $t = t + 1$ & & 1 & 5 & \\\hline $a = 1$ & & 1 & & \\\hline $erg = 0$ & & & & 0 \\\hline \end{tabular} \end{bAntwort} Im Folgenden soll ein Programm für diese Maschine erstellt werden, das den dargestellten Algorithmus umsetzt. Der Wert von $k$ soll in Speicherzelle $101$, der von $a$ in $102$, der von $t$ in $103$ und der von $erg$ in $104$ gespeichert werden. \newpage %% % (b) %% \item Betrachten Sie die folgende kurze Sequenz; xx steht dabei für ein geeignetes Sprungziel. \begin{minted}{asm} LOAD 101 MOD 103 JMPP xx LOADI 1 STORE 102 \end{minted} Geben Sie an, welcher Teil des Algorithmus damit umgesetzt wird. \begin{bAntwort} Die Bedingung „$t$ ist Teiler von $k$“. \end{bAntwort} %% % (c) %% \item Setzen Sie unter Verwendung der Sequenz aus Teilaufgabe 2b den gesamten Algorithmus in eine Programm für die gegebene Registermaschine um. \end{enumerate} \begin{bAntwort} \bPseudoUeberschrift{Assembler} \bAssemblerDatei{Aufgabe_05-Abitur-2017-IV-Primzahl.mia} \bPseudoUeberschrift{Minisprache} \bMinispracheDatei{Aufgabe_05-Abitur-2017-IV-Primzahl.mis} \bPseudoUeberschrift{Java} \bJavaDatei[firstline=5,lastline=23]{aufgaben/tech_info/assembler/ein_adress/Primzahl} \end{bAntwort} \end{document}