Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 03.07.2005, 18:19 Titel: Problem bei Dreisatzprogramm |
|
|
Moin,
also ich hab folgendes Prob: Ich abe diese Unterprogramm geschrieben:
Code: |
cls
screen 9
LINE (220,100)-(420,100)
LINE (320, 80)-(320, 250)
LOCATE 7, 29
PRINT "vorhanden"
LOCATE 7, 43
PRINT "gesucht"
LOCATE 9, 34
LINE INPUT " ", eingabea
LOCATE 9, 45
LINE INPUT " ", eingabeb
LOCATE 11, 35
PRINT "1"
LOCATE 13, 34
LINE INPUT " ", eingabec
ergebnis% = eingabeb*eingabec/eingabea
LOCATE 13, 45
PRINT ergebnis%
sleep
END
|
Meiner Meinung nach ist da eigentlich alles richtig, nur wenn ich die Zahlen eingebe, kommt als Ergebnis IMMER 231 raus. Wieso?
Gruß K.I.T.T. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 03.07.2005, 19:06 Titel: |
|
|
kA, du müsstest schon mal etwas genauer werden.
Das einzige, was mir auffällt, ist, dass ergebnis ein angehängtes % hat, und die
Eingaben nicht.
Vielleicht definierst du sie alle mal als INTEGER...
jb |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 03.07.2005, 21:12 Titel: |
|
|
EDIT: Ich hab den "Fehler" gefunden: Anstatt "Line Input" muss man nur "Input" schreiben. Ich vermute, dass er die eingegebenen Zahlen nicht speichern kann wegen Line Input. Ich weiß es aber nicht genau. Kann mir einer sagen, wieso das mit Line Input nicht geht? Danke im Voraus.
Gruß K.I.T.T. |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 03.07.2005, 21:37 Titel: |
|
|
schau mal in die Befehls-Referenz
Zitat: | LINE INPUT
--------------------------------------------------------------------------------
Syntax: LINE INPUT ["Frage" { , | ; } ] Variable AS STRING
Typ: Anweisung
Kategorie: Eingabe
Gibt die Frage - sofern angegeben - auf dem Bildschirm an der aktuellen Cursorposition aus.
Anschließend hat der Benutzer die Möglichkeit, einen Wert einzugeben.
'Variable' ist eine beliebige Variable, die aber vom Typ STRING sein sollte.
Andere Typen sind ebenfalls möglich, jedoch führt dies zu einer Fehlfunktion, so dass die Variablen nicht mit dem eingegebenen Wert belegt werden, sondern mit einer Zahl, dessen Bedeutung nicht nachvollziehbar ist.
Im Gegensatz zu INPUT gibt es bei LINE INPUT nur die Möglichkeit, EINE Variable einzugeben. Dafür treten keine Probleme mit Sonderzeichen wie Kommata (,) oder "Anführungszeichen" auf. |
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 03.07.2005, 21:53 Titel: |
|
|
Ok, danke *G*. Ich habe zum ersten mal ein Unterprogramm gemacht und es funktioniert auch beim ersten Anlauf, juhu *G*. Aber trotzdem noch eine Frage:
Code: |
DECLARE FUNCTION PZF (eingabea#, eingabeb#, eingabec#)
CLS
COLOR 0, 9
CLS
LOCATE 2, 23
PRINT "-----------Formelsammlung-----------"
LOCATE 5, 23
PRINT "Dies ist eine umfassende Formelsammlung."
PRINT "Im Moment sind Formeln zu folgenden Themen vorhanden:"
taste$ = INKEY$
PRINT "(1) 'Proportionale Zuordnungen (Funktionen)'; (2) 'Antiproportionale Zuordnungen (Funktionen)'"
PRINT "(3) 'Prozentrechnung-Zinsrechnung-effektiver Jahreszins'"
PRINT "(4) 'Gleichungen'; (5) 'Quadratische Gleichungen-rechnerisches Lösungsverfahren'; (6) 'Potenzen und Wurzeln'"
PRINT "(7) 'Expotential- und Logarithmusfunktion'; (8) 'Trigonometrie'; (9) 'Flächenberechnungen'"
PRINT "Drücke die entsprechende Zahl, um mögliche Unterthemen aufzurufen."
SELECT CASE taste$
CASE CHR$(1)
PRINT PZF (eingabea#, eingabeb#, eingabec#)
CASE "2"
PRINT APZF
CASE "3"
PRINT PZeJ
CASE "4"
PRINT Gleichungen
CASE "5"
PRINT QGleichungenrLv
CASE "6"
PRINT PandW
CASE "7"
PRINT ExandLof
CASE "8"
PRINT Tri
CASE "9"
PRINT Flaechen
END SELECT
|
Lasst euch nicht vin den Functions-Namen verwirren *G*. Die sind jetzt nicht wichtig. Viel mehr wichtig ist, dass beim Druck auf "1" das Dreisatzprogramm aufgeht (die Function ist jetzt nicht dabei). Aber: Wenn ich das Programm jetzt so starte, wie es da oben ist, dann geht die Konsole sofort wieder weg. Also: Wieso ist das so und wie mach ich es anders *G*.
Gruß K.I.T.T. |
|
Nach oben |
|
|
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 03.07.2005, 22:59 Titel: |
|
|
Hallo,
das ist ganz normal, dein Programm endet mit der letzten Zeile, danach ist "nichts mehr zu tun" und das Fenster schließt sich.
Wenn du es zum betrachten auf halten möchtest setze
Code: | sleep 5000 'hält das Programm 5000ms also 5sek. an
sleep 'ohne Zahl wartet auf den nächsten Tastendruck bis es schließt |
Gruß
Volta _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 04.07.2005, 08:12 Titel: |
|
|
Moin,
jo, aber wenn ich jetzt die "1" drücke, dann schließt sich das Programm wieder. Normalerweise soll sich da aber mein Dreisatzprogramm öffnen. Wenn ich es mit INPUT mache, geht das, aber ich will ja ohne ENTER drücken zu müssen. taste$ hab ich ja INKEY$ gegeben. Bei SELECT CASE ist also irgendwas falsch.
Gruß K.I.T.T. |
|
Nach oben |
|
|
licer
Anmeldungsdatum: 17.05.2005 Beiträge: 51
|
Verfasst am: 04.07.2005, 09:15 Titel: |
|
|
Ich würd die inkey abfrage in ne schleife am ende der anzeige setzten also ungefähr so:
Code: | DECLARE FUNCTION PZF (eingabea#, eingabeb#, eingabec#)
CLS
COLOR 0, 9
CLS
LOCATE 2, 23
PRINT "-----------Formelsammlung-----------"
LOCATE 5, 23
PRINT "Dies ist eine umfassende Formelsammlung."
PRINT "Im Moment sind Formeln zu folgenden Themen vorhanden:"
PRINT "(1) 'Proportionale Zuordnungen (Funktionen)'; (2) 'Antiproportionale Zuordnungen (Funktionen)'"
PRINT "(3) 'Prozentrechnung-Zinsrechnung-effektiver Jahreszins'"
PRINT "(4) 'Gleichungen'; (5) 'Quadratische Gleichungen-rechnerisches Lösungsverfahren'; (6) 'Potenzen und Wurzeln'"
PRINT "(7) 'Expotential- und Logarithmusfunktion'; (8) 'Trigonometrie'; (9) 'Flächenberechnungen'"
PRINT "Drücke die entsprechende Zahl, um mögliche Unterthemen aufzurufen."
taste$ = ""
DO
taste$ = inkey$
LOOP WHILE taste$ = ""
SELECT CASE taste$
CASE CHR$(1)
PRINT PZF (eingabea#, eingabeb#, eingabec#)
CASE "2"
PRINT APZF
CASE "3"
PRINT PZeJ
CASE "4"
PRINT Gleichungen
CASE "5"
PRINT QGleichungenrLv
CASE "6"
PRINT PandW
CASE "7"
PRINT ExandLof
CASE "8"
PRINT Tri
CASE "9"
PRINT Flaechen
END SELECT |
Es sind auch noch viele andere schleifen möglich aber das sollte die ENTER eingabe umgehen. |
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 04.07.2005, 09:46 Titel: |
|
|
Moin,
danke, aber ich würde auch gerne eine Erklärung haben, wieso dass nicht so möglich ist, wie ich es gemacht habe, weil daraus lerne ich *G*.
Gruß K.I.T.T. |
|
Nach oben |
|
|
licer
Anmeldungsdatum: 17.05.2005 Beiträge: 51
|
Verfasst am: 04.07.2005, 11:02 Titel: |
|
|
Und hier die Erklärung:
Inkey$ fragt den Tastaturbuffer ab. Und wartet nicht auf eine Eingabe.
wenn du also nur
Angibst musst du die taste genau in dem Moment drücken in dem inkey$ abgearbeitet wird. Und das erwiest sich meistens als sehr schwer...
wenn du jetzt eine Schleife drum herum bastelst bewegt sich das programm solange in der Schleife bis eine eingabe kommt. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 04.07.2005, 13:29 Titel: |
|
|
@K.I.T.T.: Du hattest im Code
Code: |
CASE CHR$(1)
PRINT PZF (eingabea#, eingabeb#, eingabec#)
|
stehen, es müsste aber
Code: |
CASE "1"
PRINT PZF (eingabea#, eingabeb#, eingabec#)
|
heißen, vielleicht kam daher der Fehler beim Drücken der 1, denn CHR$(1) ist was anderes als "1"
jb |
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 04.07.2005, 14:11 Titel: |
|
|
Moin,
danke, aber trotzdem verstehe ich noch nicht, wieso die Do Loop-While Variante hilft: Wieso machen wir vor der Schleife noch die Variable taste$ ohne Wert?? Dann kommt die Schleife, wo wir taste$ einen "Wert" geben, also INKEY$. Das ist auch das einzigste was ich grade noch verstehe. Aber wieso kommt dann wieder: "Führe diese Schleife solange aus, während taste$ keinen Wert hat"??? Sorry, aber ich muss das einfach kapieren *G*.
Gruß K.I.T.T. |
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 04.07.2005, 14:12 Titel: |
|
|
Moin,
danke, aber trotzdem verstehe ich noch nicht, wieso die Do Loop-While Variante hilft: Wieso machen wir vor der Schleife noch die Variable taste$ ohne Wert?? Dann kommt die Schleife, wo wir taste$ einen "Wert" geben, also INKEY$. Das ist auch das einzigste was ich grade noch verstehe. Aber wieso kommt dann wieder: "Führe diese Schleife solange aus, während taste$ keinen Wert hat"??? Sorry, aber ich muss das einfach kapieren *G*.
Gruß K.I.T.T. |
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 04.07.2005, 20:32 Titel: |
|
|
Wenn ich das jetzt richtig verstehe, geht es die um die Warteschleife mit INKEY$, oder?
Hm, hier mal ein einfacherer Code:
Code: |
DO
Taste$ = INKEY$
LOOP UNTIL Taste$ <> ""
|
Diese Schleife wird so lange ausgeführt, bis Taste$ einen Inhalt hat, -> eine Taste gedrückt wurde.
jb |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 04.07.2005, 20:58 Titel: |
|
|
Ist dass so nicht einfacher/bzw. kürzer??? So wird ja im Prinzip genau das selbe gemacht wie in der do--loop schleife. Oder gibt es den befehl in fb nichtmehr??
Mfg
Michael[/code] _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 04.07.2005, 21:48 Titel: |
|
|
Eigentlich wollte ich nur wissen, wieso das geht, wenn man de Do Loop Schleife macht und taste$ erst keinen Wert gibt und so, das verstehe ich irgendwie nicht...
Gruß K.I.T.T. |
|
Nach oben |
|
|
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 04.07.2005, 21:54 Titel: |
|
|
Also: Mit den 3 Zeilen wird folgendes gemacht:
Code: |
DO
Taste$ = INKEY$
LOOP UNTIL Taste$ <> ""
|
Die gedrückte taste wird mit inkey$ abgefragt und an Taste$ übermittelt
Wenn keine taste gedrückt wurde, dann ist 'inkey$=""' (inhalt ist leer) und somit hat Taste$ auch keinen Inhalt also siehts dann so aus:
Mit der letzten Zeile wird überprüft, ob irgendwas in der Variable Taste$ drin steht. Wenn nicht,(falls keine Taste gedrückt wurde) dann wird das alles nochmal abgefragt und wieder überprüft. Solange wird das also alles wiederholt, bis irgendeine taste gedrückt wurde.
Hast du das jetzt kapiert oder nicht?? (ich weiß, ich erkläre schon mal etwas kompliziert )
Mfg
Michael _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
|
K.I.T.T.
Anmeldungsdatum: 24.01.2005 Beiträge: 79
|
Verfasst am: 05.07.2005, 19:13 Titel: |
|
|
Jo cool, danke, jetzt hab ichs kapiert *G*.
Gruß K.I.T.T.
PS: Wenn ich die "1" drücke, komm ja das Dreisatzprogramm. Wenn ich dann alle Daten eingegeben habe, kommt zum Schluss da so ne Null. Ich hab aber kein Plan, wieso die da ist. |
|
Nach oben |
|
|
|