PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : J.v.Neumann Rechner bzw. LIPA (IPA)


Paran
2005-03-09, 13:41:55
kennt jemand das Programm bzw. diesen Rechner und sein Prinzip.

Hab da nämlich ein Problem.
Kann eine Aufgabe der Aufgabensammlung des Programmes LIPA nicht lösen.

Hab da mal das Schema mit angenhangen
Kann mir da jemand bei dem Fallbeispiel helfen?
Wie ich das schreiben muss?

Paran
2005-03-09, 16:07:33
PS:
Hab grad die genau Aufgabe gefunden:

Eine natürliche Zahl wird interaktiv in den IPA eingelesen. Diese Zahl soll verdoppelt und dann ausgegeben werden. Entwickeln Sie aus dem vorgelegten Struktogramm Ihr Programm !

Kann mir jemand helfen, der sich damit auskennt?

Unfug
2005-03-09, 16:24:01
Also in welcher Programmiersprache soll das denn sein?

Oder gibts allgemeine Verständniss Probleme bei der obrigen Struktur?

Paran
2005-03-09, 16:27:10
naja automaten sprache halt

mein erster versuch sieht so aus:


[01] INP(60) {Eingabe auf e_zahl speichern};
[02] LDA(60) {e_zahl in den AC laden};
[03] STA(61) {AC-Inhalt auf help speichern};
[04] STA(62) {AC-Inhalt auf doppel speichern};
[06] DEC() {AC-Inhalt um eins verringern};
[07] STA(61) {AC-Inhalt auf help speichern};
[08] LDA(62) {doppel in den AC laden};
[09] INC() {AC-Inhalt um eins erhöhen};
[10] STA(62) {AC-Inhalt auf doppel speichern};
[11] LDA(61) {help in den AC laden};
[12] JPZ(62) {wenn AC-Inhalt Null, dann Sprung zur Adresse 62};
[13] OUT(62) {Ausgabe doppel};
[14] EOJ {Programmende}.


Aber da kommt ne Fehlermeldung.
Ich weiß auch nich wie ich ne Überprüfugn mache.
Wäre ja glaub ich fast sowas wie ne if-Schleife aber sowas gibts imho hier nich

Unfug
2005-03-09, 16:34:12
automaten sprache, du deutest wohl auf dieses LIPA hin.
ich such grad mal ein paar links zu LIPA, kenn das teil nicht. falls du links hast immerher damit

Unfug
2005-03-09, 16:35:11
ach sieh mal.
(COMPARE) vergleicht ob +- 0 ist, da hasste deine if schleife*g*

Paran
2005-03-09, 16:36:52
Es gibt aber nur diese Befehle


Liste der Befehle unseres Ein-Adress-Rechners:
(Syntax und Semantik des einfachen Befehlssatzes)

Eingabe-Ausgabe-Befehle

INP(xx); Liest von der Tastatur interaktiv eine ganze Zahl und speichert diese in
der Zelle mit der (stets zweistelligen) Adresse xx
OUT(xx); Gibt den Inhalt der Speicherzelle mit der Adresse xx aus

Transportbefehle

LDA(xx); Transportiert den Inhalt der Speicherzelle xx in den Akkumulator (AC)
STA(xx); Speichert den Inhalt des AC in der Speicherzelle xx

Arithmetische Befehle

INC(); erhöht den Inhalt des AC um eins,
DEC(); vermindert den Inhalt des AC um eins

Sprungbefehle


JPU(xx); Unbedingter Sprung zur Adresse xx und Ausführung des dort stehenden
Befehls (der letzte Teil gilt für alle Sprungbefehle)
JPP(xx); Sprung zur Adresse xx, wenn der Inhalt des Akkumulators (AC) positiv ist
JPZ(xx); Sprung zur Adresse xx, wenn der Inhalt des Akkumulators (AC) null (zero) ist
JPN(xx); Sprung zur Adresse xx, wenn der Inhalt des Akkumulators (AC) negativ ist

Weitere Befehle

EOJ. Ende des Programmes (end of job)




aber was ich mit dem JPZ anzufangen habe weiß ich nich so genau

Unfug
2005-03-09, 16:40:16
Hast Recht, dann sieht dein Programm aber gar nicht so falsch aus.
Welche Meldung kommt denn?

Paran
2005-03-09, 16:44:24
Fehlermeldung:


Jump-Befehl ist ungültig Adressiert
Die durch den Jump-Befehl adressierte Zelle muss eine Befehl enthalten

Unfug
2005-03-09, 16:48:05
mhh komisch, ich hab mir das lipa mal runtergeladen. scheint einfach gestrikt zu sein. so wie du hätte ich das jetzt auch gemacht. ich werd jetzt erstmal was essen (mit leeren magen denken geht nicht). dann wollen wir mal weiter schaun

ScottManDeath
2005-03-09, 16:50:12
[12] JPZ(62) {wenn AC-Inhalt Null, dann Sprung zur Adresse 62};

Das ist falsch, Du musst eine Addresse in Programmspeicher nehmen
Müsste sein(Rücksprung zum Beginn der Schleife):

[12] JPZ(06) {wenn AC-Inhalt Null, dann Sprung zur Adresse 06};



Edit: 04 -> 06

Unfug
2005-03-09, 16:55:15
Da war jemand schneller. JPZ(zahl) ..zahl = die zeile deines codes

Paran
2005-03-09, 16:56:50
THX jetzt is das Problem gelöst.

Aber taucht das nächste auf.

Wie bekomme ich das hin, dass er solange abzeiht und addiert bis die eine Variable 0 ist

Schließlich geht der deffinierte Bereich bis 99999. Und ich muss ja wohl nich 99999 abziehen und addieren müssen :biggrin:

Unfug
2005-03-09, 17:04:26
du musst den jpu befehl benutzen.
und direkt darunter den jpz befehl(abfrage, wenn 0 dann gehe zur out)

wie in dem beispiel, was bei lipa bei war
nur ein beispiel eines anderen programms

[01] INP(31) {Eingabe auf e_Zahl (Zelle 31) speichern};
[02] LDA(31) {e_Zahl in den Akkumulator (AC) laden};
[03] STA(32) {AC-Inhalt auf stapel (Zelle 32) speichern};
[04] LDA(32) {stapel in den AC laden};
[05] JPZ(14) {wenn AC-Inhalt Null, dann Sprung zur Adresse 14 (Zelle 14)};
[06] DEC() {AC-Inhalt um eins verringern};
[07] STA(32) {AC-Inhalt auf stapel speichern};
[08] LDA(33) {ergebnis in den AC laden};
[09] INC() {AC-Inhalt um eins erhöhen};
[10] INC() {AC-Inhalt um eins erhöhen};
[11] INC() {AC-Inhalt um eins erhöhen};
[12] STA(33) {AC-Inhalt auf ergebnis speichern};
[13] JPU(04) {unbedingter Sprung zur Adresse 04 (Zelle 04)};
[14] OUT(33) {Ausgabe des Inhalts von Zelle 33 (ergebnis)};
[15] EOJ {Programmende}.

man beachte zeile 4,5 und 13

Unfug
2005-03-09, 17:10:41
Hier der code
Zahl verdoppeln

[01] INP(60) {Eingabe auf e_zahl speichern};
[02] LDA(60) {e_zahl in den AC laden};
[03] STA(61) {AC-Inhalt auf help speichern};
[04] STA(62) {AC-Inhalt auf doppel speichern};
[05] JPZ(13) {wenn AC-Inhalt Null, dann Sprung zur Adresse 62 (Zelle 13)};
[06] DEC() {AC-Inhalt um eins verringern};
[07] STA(61) {AC-Inhalt auf help speichern};
[08] LDA(62) {doppel in den AC laden};
[09] INC() {AC-Inhalt um eins erhöhen};
[10] STA(62) {AC-Inhalt auf doppel speichern};
[11] LDA(61) {help in den AC laden};
[12] JPU(05);
[13] OUT(62) {Ausgabe doppel};
[14] EOJ {Programmende}.

Paran
2005-03-09, 17:12:26
edit: oh tschuldigung wwar ja nur ein beispiel THX für den Code werd ihn gleich mal ausprobieren

Unfug
2005-03-09, 17:14:41
erster post war ein beispiel von lipa programmiern selbst (das ein anderes prog).
der zweite beitrag ist dein Code nur verrändert.

Paran
2005-03-09, 17:18:28
big THX für die Berichtigung.
Funzt super

Gas t
2005-03-09, 17:57:40
was haltet ihr davon? hält sich zwar nicht ganz an das Struktogramm, aber das ist mir mal gerade egal.
Ich gehe mal davon aus, daß LDA(xx) den Inhalt autom. zu dem Inhalt vo mAC addiert, denn es gibt ja kein ADD Befehl. Daher frag ich mich, wozu dann dann INC und DEC zum verdoppeln der Zahl gebraucht wird.

[01] INP(60) {Eingabe auf e_zahl speichern};
[02] LDA(60) {e_zahl in den AC laden};
[03] STA(61) {AC-Inhalt auf help speichern};
[04] LDA(61) {doppel in den AC laden};
[05] STA(62) {AC-Inhalt auf doppel speichern};
[06] JPZ(09) {ist AC-Inhalt Zero? Dann Ausgabe, sonst};
[07] DEC() {AC-Inhalt um 1 verringern};
[08] JPP(07) {Ist AC-Inhalt immernoch postitiv? dann zurück und weiter verringern};
[09] OUT(62) {Ausgabe doppel};
[10] EOJ {Programmende}.

ka ob das funzt, was ist ein LIPA eigentlich? :ugly:

Paran
2005-03-09, 18:08:45
bei deinem Code verringerst du ja immer nur den Wert bis er null ist.
davon hast du nichts nur in der ausgabe nachher ne null :biggrin:

Gas t
2005-03-09, 19:44:12
bei deinem Code verringerst du ja immer nur den Wert bis er null ist.
davon hast du nichts nur in der ausgabe nachher ne null :biggrin:
ich geb den Inhalt von Adresse 62 aus und den änder ich ja nich, nur den Inhalt vom AC