Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem bei Dreisatzprogramm

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 03.07.2005, 18:19    Titel: Problem bei Dreisatzprogramm Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 03.07.2005, 19:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 03.07.2005, 19:10    Titel: Antworten mit Zitat

Oder am Anfang einfach ein
Code:
DEFINT A-Z

lächeln
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 03.07.2005, 21:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 03.07.2005, 21:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 03.07.2005, 21:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1875
Wohnort: D59192

BeitragVerfasst am: 03.07.2005, 22:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 04.07.2005, 08:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
licer



Anmeldungsdatum: 17.05.2005
Beiträge: 51

BeitragVerfasst am: 04.07.2005, 09:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 04.07.2005, 09:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
licer



Anmeldungsdatum: 17.05.2005
Beiträge: 51

BeitragVerfasst am: 04.07.2005, 11:02    Titel: Antworten mit Zitat

Und hier die Erklärung:


Inkey$ fragt den Tastaturbuffer ab. Und wartet nicht auf eine Eingabe.

wenn du also nur
Code:
taste$ = inkey$

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 04.07.2005, 13:29    Titel: Antworten mit Zitat

@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" lächeln

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 04.07.2005, 14:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 04.07.2005, 14:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 04.07.2005, 20:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 04.07.2005, 20:58    Titel: Antworten mit Zitat

Code:

taste$=input$(1)

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 04.07.2005, 21:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 04.07.2005, 21:54    Titel: Antworten mit Zitat

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:
Code:

Taste$=""

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 lachen )

Mfg
Michael
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
K.I.T.T.



Anmeldungsdatum: 24.01.2005
Beiträge: 79

BeitragVerfasst am: 05.07.2005, 19:13    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz