Latein und Java/Modellrechner: Unterschied zwischen den Seiten

Aus ZUM-Unterrichten
(Unterschied zwischen Seiten)
K (Link ergänzt)
 
main>Karl Kirst
(prettytable -> wikitable)
 
Zeile 1: Zeile 1:
__NOTOC__
{{Kurzinfo|Java|Idee}}
Ein Modellrechner, der bereits ein lauffähiges Programm im Speicher hat, ist folgendermaßen aufgebaut:


<div class="sprachen">
{| class="wikitable"
{{Portalseite/Titel
| <center>Nr.</center>
  |titel=Latein
| <center>Programmspeicher</center>
  |icon=hdg-scroll
| Datenspeicher
}}


|-
| <center>0</center>
| <center>2 (add)</center>
| 0


{{2Spalten|
|-
== <span class="brainy hdg-star"></span> Highlights ==
| <center>1</center>
{{Portalseite/Highlight
| <center>5</center>
  |iconfile=Computer-Icon.svg
| 1
  |link=Latein/Interaktive Übungen
  |titel=Interaktive Übungen Latein
}}
{{Portalseite/Highlight
  |iconfile=Pfad-Icon.svg
  |link=Epikur
  |titel=Epikur
}}
{{Portalseite/Highlight
  |iconfile=Schueler-Icon.svg
  |link=Römisches Reich
  |titel=Römisches Reich (Geschichte)
}}


|-
| <center>2</center>
| <center>3 (sub)</center>
| 2


|
|-
{{Portalseite/BlockSuche|kategorie=Latein}}
| <center>3</center>
{{Portalseite/BlockThemenliste|kategorie=Latein}}
| <center>6</center>
}}
| 3
</div> <!-- End .sprachen -->


<!--
|-
=== ZUM.Portal ===
| <center>4</center>
| <center>4 (cmp)</center>
| 4


* {{ZUM.de}} [[:zum.de:portal/latein|'''ZUM-Fachportal Latein''']]
|-
** {{ZUM.de}} [[:zum.de:Faecher/Materialien/bosch/latein/|Lingua Latina - Links und Materialien zu Latein (Karl Michael Bosch, NRW)]]
| <center>5</center>
** {{ZUM.de}} [[:zum.de:Faecher/L/NRW/wwg_neu/grammatik/grammatik.html|DEKLINATIONEN UND KONJUGATIONEN]] (Latein am WWG)
| <center>6</center>
-->
| 5 7
==Weblinks==


*[http://www.spiegel.de/unispiegel/wunderbar/0,1518,397150,00.html Argumente pro Latein: Cui bono - vielen nützt es] (Spiegel-Online, 25.01.2006)
|-
*[https://www.lehrer-online.de/unterricht/sekundarstufen/fremdsprachen/latein/ Fachportal Latein] (Lehrer-Online)
| <center>6</center>
*{{wpde|Latein}}
| <center>5 (jmp)</center>
*{{wpde|Portal:Rom und Römisches Reich}}
| 6 3


*[https://www.fachdidaktik.klassphil.uni-muenchen.de/index.html Forum Didacticum] (F. P. Waiblinger, LMU München)
|-
*[http://www.forum-classicum.de/aktuelles.htm Forum Classicum: Aktuelles]
| <center>7</center>
| <center>0</center>
| 7


*[https://www.vaticannews.va/de/suche.html?q=nuntii%20latini&in=all&sorting=latest Nuntii Latini] (Gero P. Weishaupt, Radio Vatikan, nur Text)
|-
*[https://www.radiobremen.de/bremenzwei/rubriken/latein/deutsch/nachrichten-dezember100.html Monatsrückblick auf Latein] (Radio Bremen, bis Ende 2017)
| <center>8</center>
*[http://www.alcuinus.net/ephemeris/ Ephemeris] (alcuinus.net)
| <center>1</center>
| 8


*[http://www.altphilologenverband.de Deutscher Altphilologenverband]
|-
*[http://www.vroma.org VRoma: A virtual community for teaching and learning classics]
| <center>...</center>
|
| 9


===Landesbildungsserver-Seiten===
|}


*'''Baden-Württemberg''': [http://lbsneu.schule-bw.de/unterricht/faecher/latein/ LBS BW: Latein]
{| class="wikitable"
| '''Befehle (Maschinensprache)'''


*'''Bayern''':
1 '''stp''' – Stoppt die Programmausführung
**[http://www.isb.bayern.de/suche/?Text=Latein ISB Latein]


*'''Berlin''': [http://www.bebis.de/zielgruppen/lehramtsanwaerterinnen/latein BEBIS Latein]
2 '''add X''' – addiert zu der mit X angegebenen Speicherstelle 1


===Weitere Fachportale und Wikis===
3 '''sub X''' – subtrahiert von der mit X angegebenen Speicherstelle 1


*[http://www.albertmartin.de/latein/grammatik Latein Grammatik] (Albert Martin)
4 '''cmp X''' – prueft, ob in der mit X angegebenen Speicherzelle der Wert 0 eingetragen. Wenn ja überspringt der Programmzähler 2 Schritte, wenn nein setzt er das Programm an der folgenden Stelle fort.  


==Schul- und Lehrerseiten==
5 '''jmp X''' – Setzt den Programmzähler auf X


===Schulseiten===
|}


*[http://www.laurentianum.de/lglate01.htm Gymnasium Laurentianum - Die Lau-Latein-Seiten]
{{Aufgabe|
Hinweis: JMP beinhaltet noch einen Bug!


:mit Texten, Bildern und anderen Materialien
Leseprobe zum Programm: Beim Programmaufruf wird folgendes ausgeführt:


*[http://lateinstein.aes-laatzen.de Latein an der Albert-Einstein-Schule Laatzen]
'''add 5''', da in Programmspeicher 0 der Befehl 2, also add, steht und in Programmspeicher 1 eine 5 eingetragen ist. Also wird Programmspeicher 5 um ein erhöht (in diesem Fall auf 8).


:lateinisches Theater, Grammatik- u. Vokabeltraining, CD-ROM u.v.m.
Anschließend steht der Programmzähler (angedeutet als blauer Pfeil) auf Position 2.


===Lehrerseiten===


*[https://www.lehrer-online.de/unterricht/sekundarstufen/fremdsprachen/latein/ Arbeitsmaterial und Unterrichtseinheiten für den Latein-Unterricht] (Lehrer-Online)
Das oben bereits eingetragene Programm führt die Addition von Datenspeicher 5 und 6 durch.  
*[http://www.gottwein.de/Cap/Lat-Inh.php Umfassende Beiträge zum Lateinunterricht] (Egon Gottwein)
*[http://www.prolatein.de ProLatein: Latein in der Schule und an der Uni] (Walfried Schubert)
*[http://www.lern-online.net/latein/ Latein online lernen bei Lern-Online.net]
*[http://www.e-latein.at/ e-latein.at] (Martin Schmid und Hannes Rohde)
*[http://www.lateinhautrein.de/ Spaß mit Latein? Spaß mit "Latein Haut Rein"!] (Markus Zimmermeier)


==Unterrichtsideen==
Dazu wird Speicherzelle 5 solange um 1 erhöht und Speicherzelle 6 solange um 1 verkleinert, bis Speicherstelle 6 den Wert 0 hat.


*[http://www.scoop.it/t/latin-resources-useful Latin Resources Useful] (scoop.it) Eine riesige Sammlung an Videos rund um die lateinische Sprache, ihre Grammatik und ihre Kultur. Einiges ließe sich bestimmt problemlos in Form des flipped classroom in den Unterricht integrieren.


==Nachschlagen==
a) Ändern Sie das Maschinensprachenprogramm so, dass von der 7 die 3 abgezogen wird, also als Ergebnis eine 4 in Speicherplatz 5 steht.


===Lexika===


*{{wp|wikipedia:la:|Vicipaedia·Latina}} (lateinische Wikipedia)
b) Ist bei dem angegebenen Rechner die Anforderung an die „Von-Neumann-Architektur“ eingehalten? Begründen Sie!


===Wörterbücher===


*Lateinisches Wiktionary: [http://la.wiktionary.org/wiki/Main_Page Victionarium]
c) Bei der Simulation in Java lässt sich die Programmausführung wie folgt simulieren (Quelltext z.T. angegeben).
*[http://www.lateinwiki.org/index.php/Hauptseite Latein-Wiki]
*[http://www.perseus.tufts.edu/cgi-bin/resolveform?db=ls&display=&lang=Latin&corpus=Roman Lewis & Short Latin Dictionary]
*[http://archives.nd.edu/latgramm.htm Latin Dictionary and Grammar Aid]
*[http://www.latein-woerterbuch.de/ Latein-Wörterbuch zum Download]
*[http://www.commtec.de/wb/index.php Lateinwörterbuch online]
*[http://www.albertmartin.de/latein/ Lateinwörterbuch (A. Martin)]


Lateinische Ortsnamen:
c1) Beschreiben Sie, wie die Methode '''run()''' funktioniert.


*[http://www.columbia.edu/acis/ets/Graesse/contents.html Graesse: Orbis Latinus]
c2) Schreiben Sie – analog zur unten angegebenen Methode addiereEins() - die Methode '''subtrahiereEins()'''.
*[http://www.lib.byu.edu/~catalog/people/rlm/latin/names.htm Latin Place Names]


===Lateinische Texte===
c3) Schreiben Sie die Methode '''springeAuf()''', die den jmp X Befehl simulieren soll. Der nächste Programmplatz wird ausgelesen und der Programmzähler auf die entsprechende Position gesetzt.


*[http://www.thelatinlibrary.com The Latin Library]
c4) Schreiben Sie die Methode '''list(), '''die auf der Konsole den gesamten Inhalt des Programmspeichers ausgibt (siehe Abbildung mit einer Beispielabbildung).
*[http://la.wikisource.org/wiki/Pagina_prima Vikifons]
*[http://www.fh-augsburg.de/~harsch/augusta.html#la Bibliotheca Augustana]
*[http://geschichtsverein-koengen.de/RoemSprichwort.htm Sammlung lateinischer Sprichwörter]


:"Lateinische Sentenzen sind ein wahrer Schatz an Weltkenntnis und Lebensweisheit. Erasmus von Rotterdam hat mit einer Sammlung solcher Sprüche, "Adagia" genannt, im 16. Jahrhundert geradezu einen Bestseller geschrieben. Heinrich Heine erzählt in seinen Erinnerungen von einem Schuster, der in seine Unterhaltung immer einmal ein lateinisches Sprichwort einflocht mit den Worten "Ein wenig Latein hält Leib und Leben zusammen". Auch heute ist es noch beliebt, auf lateinische Sentenzen zurückzugreifen."


==Lernsoftware==
d) Nehmen Sie Stellung zu der Frage, ob die Auswahl der Datentypen, also [[Java/Array|Array]] für den Datenspeicher und [[Java/List|List]] für den Programmspeicher eine gute Wahl war. Wägen Sie Vor- und Nachteile ab und geben Sie Alternativen an.}}


*[http://learningapps.org/index.php?s=latein Latein auf Learningapps.org] - Zahlreiche Übungen zu lateinischem Wortschatz, Grammatik und Sachwissen


*[http://www.prolatein.de/spiele.html Interaktive Lateinspiele auf prolatein.de]
'''Quelltext der Klasse Modellrechner'''
<source lang="java">
public class Modellrechner
{
    private List programmspeicher;
    private int[] speicher;
   
    public Modellrechner()
    {
        programmspeicher=new List();
        speicher = new int[10];
        for (int i=0;i<10;i++) speicher[i]=0;
       
        // Vorgegebene Werte im Speicher
        speicher[5]=7;
        speicher[6]=3;
       
        // Die etwas unelegante Programmeingabe
        programmspeicher.toLast();
        programmspeicher.insertBehind(2);
        programmspeicher.toLast();
        programmspeicher.insertBehind(5);
        programmspeicher.toLast();
        programmspeicher.insertBehind(3);
        programmspeicher.toLast();
        programmspeicher.insertBehind(6);
        programmspeicher.toLast();
        programmspeicher.insertBehind(4);
        programmspeicher.toLast();
        programmspeicher.insertBehind(6);
        programmspeicher.toLast();
        programmspeicher.insertBehind(5);
        programmspeicher.toLast();
        programmspeicher.insertBehind(0);
        programmspeicher.toLast();     
        programmspeicher.insertBehind(1);
       
    }
   
    public void run() {
        int zwischenspeicher;
        boolean stopflag=false;
        programmspeicher.toFirst();
        while (programmspeicher.isBehind()!=true && stopflag==false) {
            zwischenspeicher = (Integer) programmspeicher.getItem();
            System.out.println(zwischenspeicher);
            if (zwischenspeicher==1) stopflag=true;
            if (zwischenspeicher==2) addiereEins();
            if (zwischenspeicher==3) subtrahiereEins();
            if (zwischenspeicher==4) pruefeObNull();
            if (zwischenspeicher==5) springeAuf();
            programmspeicher.next();
        }
    }
   
    public void addiereEins() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        speicher[adzwischen]++;
    }


[[Kategorie:Latein|!]]
    public void subtrahiereEins() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        speicher[adzwischen]--;
    }
   
    public void pruefeObNull() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        if (speicher[adzwischen]==0) {
            programmspeicher.next();
            programmspeicher.next();
        }
    }
 
    public void springeAuf() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        programmspeicher.toFirst();
        for (int i=0;i<adzwischen;i++) programmspeicher.previous();
    }
   
    public void list() {
        int i=0;
        programmspeicher.toFirst();
        while (!programmspeicher.isBehind()) {
            System.out.println("Schritt:"+i+" - Befehl:"+(Integer) programmspeicher.getItem());
            programmspeicher.next();
            i++;
        }
        programmspeicher.toFirst();
    }
   
    public void zeigeSpeicher() {
        for (int i=0;i<10;i++) System.out.println("Zelle:"+i+" - Inhalt:"+speicher[i]);
    }
   
} // Ende der Klasse Modellrechner
</source>
 
[[Kategorie:Java]]

Version vom 13. Dezember 2014, 21:32 Uhr

Vorlage:Kurzinfo Ein Modellrechner, der bereits ein lauffähiges Programm im Speicher hat, ist folgendermaßen aufgebaut:

Nr.
Programmspeicher
Datenspeicher
0
2 (add)
0
1
5
1
2
3 (sub)
2
3
6
3
4
4 (cmp)
4
5
6
5 7
6
5 (jmp)
6 3
7
0
7
8
1
8
...
9
Befehle (Maschinensprache)

1 stp – Stoppt die Programmausführung

2 add X – addiert zu der mit X angegebenen Speicherstelle 1

3 sub X – subtrahiert von der mit X angegebenen Speicherstelle 1

4 cmp X – prueft, ob in der mit X angegebenen Speicherzelle der Wert 0 eingetragen. Wenn ja überspringt der Programmzähler 2 Schritte, wenn nein setzt er das Programm an der folgenden Stelle fort.

5 jmp X – Setzt den Programmzähler auf X


Aufgabe

Hinweis: JMP beinhaltet noch einen Bug!

Leseprobe zum Programm: Beim Programmaufruf wird folgendes ausgeführt:

add 5, da in Programmspeicher 0 der Befehl 2, also add, steht und in Programmspeicher 1 eine 5 eingetragen ist. Also wird Programmspeicher 5 um ein erhöht (in diesem Fall auf 8).

Anschließend steht der Programmzähler (angedeutet als blauer Pfeil) auf Position 2.


Das oben bereits eingetragene Programm führt die Addition von Datenspeicher 5 und 6 durch.

Dazu wird Speicherzelle 5 solange um 1 erhöht und Speicherzelle 6 solange um 1 verkleinert, bis Speicherstelle 6 den Wert 0 hat.


a) Ändern Sie das Maschinensprachenprogramm so, dass von der 7 die 3 abgezogen wird, also als Ergebnis eine 4 in Speicherplatz 5 steht.


b) Ist bei dem angegebenen Rechner die Anforderung an die „Von-Neumann-Architektur“ eingehalten? Begründen Sie!


c) Bei der Simulation in Java lässt sich die Programmausführung wie folgt simulieren (Quelltext z.T. angegeben).

c1) Beschreiben Sie, wie die Methode run() funktioniert.

c2) Schreiben Sie – analog zur unten angegebenen Methode addiereEins() - die Methode subtrahiereEins().

c3) Schreiben Sie die Methode springeAuf(), die den jmp X Befehl simulieren soll. Der nächste Programmplatz wird ausgelesen und der Programmzähler auf die entsprechende Position gesetzt.

c4) Schreiben Sie die Methode list(), die auf der Konsole den gesamten Inhalt des Programmspeichers ausgibt (siehe Abbildung mit einer Beispielabbildung).


d) Nehmen Sie Stellung zu der Frage, ob die Auswahl der Datentypen, also Array für den Datenspeicher und List für den Programmspeicher eine gute Wahl war. Wägen Sie Vor- und Nachteile ab und geben Sie Alternativen an.


Quelltext der Klasse Modellrechner

public class Modellrechner
{
    private List programmspeicher;
    private int[] speicher;
    
    public Modellrechner()
    {
        programmspeicher=new List();
        speicher = new int[10];
        for (int i=0;i<10;i++) speicher[i]=0;
        
        // Vorgegebene Werte im Speicher
        speicher[5]=7;
        speicher[6]=3;
        
        // Die etwas unelegante Programmeingabe
        programmspeicher.toLast();
        programmspeicher.insertBehind(2);
        programmspeicher.toLast();
        programmspeicher.insertBehind(5);
        programmspeicher.toLast();
        programmspeicher.insertBehind(3);
        programmspeicher.toLast();
        programmspeicher.insertBehind(6);
        programmspeicher.toLast();
        programmspeicher.insertBehind(4);
        programmspeicher.toLast();
        programmspeicher.insertBehind(6);
        programmspeicher.toLast();
        programmspeicher.insertBehind(5);
        programmspeicher.toLast();
        programmspeicher.insertBehind(0);
        programmspeicher.toLast();       
        programmspeicher.insertBehind(1);
        
    }
    
    public void run() {
        int zwischenspeicher;
        boolean stopflag=false;
        programmspeicher.toFirst();
        while (programmspeicher.isBehind()!=true && stopflag==false) {
            zwischenspeicher = (Integer) programmspeicher.getItem();
            System.out.println(zwischenspeicher);
            if (zwischenspeicher==1) stopflag=true;
            if (zwischenspeicher==2) addiereEins();
            if (zwischenspeicher==3) subtrahiereEins();
            if (zwischenspeicher==4) pruefeObNull();
            if (zwischenspeicher==5) springeAuf();
            programmspeicher.next();
        }
    }
    
    public void addiereEins() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        speicher[adzwischen]++;
    }

    public void subtrahiereEins() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        speicher[adzwischen]--;
    }
    
    public void pruefeObNull() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        if (speicher[adzwischen]==0) {
            programmspeicher.next();
            programmspeicher.next();
        }
    }

    public void springeAuf() {
        int adzwischen;
        programmspeicher.next();
        adzwischen = (Integer) programmspeicher.getItem();
        programmspeicher.toFirst();
        for (int i=0;i<adzwischen;i++) programmspeicher.previous();
    }
    
    public void list() {
        int i=0;
        programmspeicher.toFirst();
        while (!programmspeicher.isBehind()) {
            System.out.println("Schritt:"+i+" - Befehl:"+(Integer) programmspeicher.getItem());
            programmspeicher.next();
            i++;
        }
        programmspeicher.toFirst();
    }
    
    public void zeigeSpeicher() {
        for (int i=0;i<10;i++) System.out.println("Zelle:"+i+" - Inhalt:"+speicher[i]);
    }
    
} // Ende der Klasse Modellrechner