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:

Kurvendiskussion
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 02.01.2015, 21:30    Titel: Kurvendiskussion Antworten mit Zitat

Hallo, mein Name ist BOB. Bin der neue hier. Ich probiere mich seit einigen Monaten ein wenig in QBASIC. Im Moment arbeite ich an einem Programm für eine Kurvendiskussion.
Ich hoffe ihr könnt mir in den folgenden Wochen ein wenig unter die Arme greifen.
Im Moment habe ich folgendes Problem.
Ich möchte 4 Variablen eingeben. Sie heißen a, b, c und d.
Die Variablen sie normale Zahlen.
Jetzt so folgendes passieren:
-wenn a und c mit einer einer Variablen (nicht 0) belegt werden (b und d also 0) soll eine eine Antwort kommen.
-wenn b und d mit jeweils einer Variablen (nicht 0) belegt werden (a und c also 0) soll eine andere Antwort kommen.

Ich hoffe ihr versteht was ich meine. Wie kann ich mehrere Variablen überprüfen? Habe schon mit dem MOD Befehl probiert. Da bekomme ich ja immer den Rest.
Gruß BOB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 929
Wohnort: Austria

BeitragVerfasst am: 02.01.2015, 21:58    Titel: Antworten mit Zitat

Ich verstehe dein Problem nicht ganz, aber vielleicht hilft dir das:
Code:
if a<>0 and c<>0 and b=0 and d=0 then
   ...
elseif a=0 and c=0 and b<>0 and d<>0 then
   ...
endif

Wenn du FreeBasic verwendest (was ich in jedem Fall anstatt des veralteten QB empfehlen würde) kann man auch Kurzschlussauswertung verwenden (in diesem Fall wird dies aber wohl keinen Vorteil bringen):
Code:
if a<>0 andalso c<>0 andalso b=0 andalso d=0 then
   ...
elseif a=0 andalso c=0 andalso b<>0 andalso d<>0 then
   ...
endif

_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 02.01.2015, 22:33    Titel: Antworten mit Zitat

super Danke für deine Antwort:-) Mein Problem hast du voll verstanden:-)
Mein Code dazu
Code:
CLS
DIM a!, b!, c!, d!
INPUT "Variable a "; a!
INPUT "Variable b "; b!
INPUT "Variable c "; c!
INPUT "Variable d "; d!

IF a <> 0 AND c <> 0 AND b = 0 AND d = 0 THEN
    PRINT "Die Funktion ist Punktsymmetrisch"
ELSE a = 0 AND c = 0 AND b <> 0 AND d <> 0
    PRINT "Die Funktion ist Achssymmetrisch"
END IF


Jetzt kann ich weiterarbeiten:-)
hoffe ich kann mich mit dem ein oder anderen Problem noch an euch wenden
Gruß BOB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 30.01.2015, 20:41    Titel: Antworten mit Zitat

Mein Programm schreitet langsam voran. Ich möchte jetzt gerne ein Menü programmieren. Dabei möchte ich zwischen 3 Menüs auswählen können und beenden.
Habe jetzt folgendes geschrieben:

Code:
DECLARE SUB FENSTER (lox%, loy%, rux%, ruy%)
declare sub prog (x, y, txt$)

DIM mentxt$(4)
DIM i%, auswahl%

mentxt$(1) = "Menue 1"
mentxt$(2) = "Menue 2"
mentxt$(3) = "Menue 3"
mentxt$(4) = "Ende"
CLS
DO
    CALL FENSTER   (6,8,40,72)
    LOCATE 11, 36
    PRINT "Menue"
    FOR i% = 1 TO 4
        LOCATE 11 + i%, 11
        PRINT mentxt$(i%)
    NEXT i%
    LOCATE 19, 11
    PRINT " Bitte Auswahl treffen:_ "
    DO
        auswahl% = VAL(INKEY$)
    LOOP UNTIL auswahl% > 0 AND auswahl% < 5

    CLS
call Fenster (6,8,40,72)
Select case auswahl%
case 1
call prog (30,11, "Menue 1 ")
case 2
call prog (30,11, "Menue 2 ")
case 3
call prog (30,11, "Menue 3 ")
case else
end select
cls
loop until auswahl%=4
cls


Leider läuft es nicht.
Die Zeile 11:
Code:
    CALL FENSTER   (6,8,40,72)   

ist rot hinterlegt und unten zeigt mir qb folgendes an:
Exepted call sub-name ....

Wo liegt mein Fehler?
Gruß BOB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4215
Wohnort: ~/

BeitragVerfasst am: 30.01.2015, 23:45    Titel: Antworten mit Zitat

Zitat:
Exepted call sub-name ....

Vielleicht "Expected call sub-name ...'? Das würde darauf hinweisen, dass er mit dem übergebenen Namen der SUB nichts anfangen kann. Existiert die mit CALL aufgerufene SUB? Die SUBs werden ja im QBasic-Editor in eigenen Fenstern dargestellt, deswegen kann ich das bei dem Quellcode nicht erkennen; jedenfalls wäre das eine mögliche Ursache für den Fehler.

Ich weiß leider nicht genau, ob es bei CALL selbst zu Problemen kommen kann; dann könntest du mal probieren, CALL wegzulassen und nur
Code:
FENSTER (6,8,40,72)

aufzurufen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 31.01.2015, 17:01    Titel: Antworten mit Zitat

Hallo, danke für deine Antwort. Ich habe in der der Fehlermeldung wohl zwei Buchstaben vergessen. Was meinst du mit Sub in einem eigenen Fenster? Wo und was müsste ich da schreiben? Leider habe ich über Google nicht wirklich was brauchbares zu meinem Problem gefunden. Habe zwar was mit dein Pfeiltasten zur Auswahl gefunden aber das ist mir programmiertechnisch zu hoch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4215
Wohnort: ~/

BeitragVerfasst am: 31.01.2015, 20:37    Titel: Antworten mit Zitat

Ich habe hier leider keine QBasic-IDE, deshalb kann ich nicht nachschauen, aber irgendwo im Menü gibt es einen Punkt, mit dem man zwischen Hauptprogramm, den SUBs und den FUNCTIONs wechseln kann. Die SUB 'Fenster' muss natürlich existieren, damit sie aufgerufen werden kann.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 31.01.2015, 22:19    Titel: Antworten mit Zitat

BOB_BOB hat Folgendes geschrieben:
Mein Programm schreitet langsam voran. Ich möchte jetzt gerne ein Menü programmieren.

Von mir noch etwas:

http://beilagen.dreael.ch/QB/MENUE.BAS

Dein Ansatz mit
Code:
mentxt$(1) = "Menue 1"
mentxt$(2) = "Menue 2"
mentxt$(3) = "Menue 3"
mentxt$(4) = "Ende"

geht grundsätzlich bereits in die richtige Richtung, Du kannst solche Arrays übrigens problemlos als Parameter der SUB übergeben und innerhalb der SUB mit LBOUND() und UBOUND() die Arraygrenzen ermitteln, so dass die SUB sich für x-beliebige Menüs (Wiederverwendbarkeit) eignet.

=> bau am besten eine FUNCTION menu() zusammen, wo der Rückgabewert der gewählten Option entspricht.

Ähnliche Artikel aus meiner Sammlung:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/BildschirmMasken.html
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 873
Wohnort: Ruhrpott

BeitragVerfasst am: 31.01.2015, 23:41    Titel: Antworten mit Zitat

Hallo BOB_BOB!

Falls du es noch nicht selber herausgefunden hast: In das SUB-Auswahlmenü kommst du mit Ansicht --> SUBs... bzw. mit einem Druck auf F2.

Wenn du eine neue Sub oder Function erstellen möchtest, geht das mit Bearbeiten --> Neue SUB bzw. Bearbeiten --> Neue FUNCTION.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 01.02.2015, 11:37    Titel: Antworten mit Zitat

Danke für eure vielseitigen Antworten. Ich habe da mich jetzt auch eingelesen. Aber verstehen tu ich leider nicht so viel.
Ich habe jetzt herausgefunden das ich unter F2 Sub-Programme rein bekomme. Aber wie ich damit zu arbeiten habe weiß ich leider nicht. Was müsste ich den bei mir da jetzt verändern??
Gruß
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4215
Wohnort: ~/

BeitragVerfasst am: 01.02.2015, 12:54    Titel: Antworten mit Zitat

Es wundert mich etwas, dass du 'DECLARE Fenster' und 'CALL Fenster' verwendest, wenn du gar nicht mit SUBs arbeitest ... Hast du das aus einem anderen Programm? Wenn ja, dann schau doch dort mal rein, wie die SUB 'Fenster' aussieht.

Wie man mit Prozeduren arbeitet, ist nicht so schnell in zwei Sätzen erklärt, aber wir haben im Portal eine gute Einführung zu dem Thema. Sie passt auch weitestgehend für QBasic, nur ein paar kleinere Details werden da anders sein. Es ist auch zu beachten, dass die Quellcodes nicht komplett am Stück (inklusive Prozeduren) stehen, sondern die Prozeduren eben in eigenen Fenstern stehen.

Möglicherweise gibt auch die im QBasic-Editor integrierte Hilfe wertvolle Informationen; ich empfand sie immer als sehr hilfreich.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 04.02.2015, 04:52    Titel: Antworten mit Zitat

So ich war dem Rätsel der Sub Funktion auf der Spur:-) Ich hatte die oben gezeigte Menüsteuerung aus einem Skript für eine QB Schulung. Nach langen hin und her habe ich gemerkt das es noch eine Seite 2 zu dem Skript gibt. Dort war natürlich noch der Sub Fenster und Sub Prog versteckt. Das Sub Fenster diente nur zur optischen Aufwertung. Es sollten dort Ränder usw gezeichnet werden. Dies habe ich erstmal raus geschmissen. Werde Später über Screen 12 was basteln. Im Moment geht es nur um Funktionalität.
Habe mir jetzt das Programm ein wenig umgestrickt auf meine Bedürfnisse. Hier mal ein kurzer Zwischenstand. Anregungen zur Verbesserung gerne gewünscht. Vllt versuche ich mich an den Hoch/Runter Tasten zur Auswahl mal.

Code:
CLS

declare sub prog (x, y, txt$)

DIM mentxt$(4)
DIM i%, auswahl%

mentxt$(1) = "(1) Funktion 3. Grades"
mentxt$(2) = "(2) Funktion 2. Grades"
mentxt$(3) = "(3) Funktion 1. Grades"
mentxt$(4) = "(4) Ende"
CLS
DO

    LOCATE 6, 36
    PRINT "Menue"
    FOR i% = 1 TO 4
        LOCATE 7 + i%, 11
        PRINT mentxt$(i%)
    NEXT i%
    LOCATE 14, 8
    PRINT " Bitte w„hlen sie eine zu berechnende Funktion oder Ende aus "
    DO
        auswahl% = VAL(INKEY$)
    LOOP UNTIL auswahl% > 0 AND auswahl% < 5

    CLS

    SELECT CASE auswahl%
        CASE 1
            CALL Prog(5, 11, "Funktion 3. Grades")
        CASE 2
            CALL Prog(5, 11, "Funktion 2. Grades")
        CASE 3
            CALL Prog(5, 11, "Funktion 1. Grades")
        CASE ELSE
    END SELECT
    CLS
LOOP UNTIL auswahl% = 4
CLS



SUB Prog (x, y, txt$)
DIM a$
LOCATE x, y
PRINT txt$; "  : Beliebige Taste betaetigen"
a$ = INKEY$
WHILE a$ = ""
    a$ = INKEY$
WEND
END SUB


Ich danke euch für eure Mühe und Ausdauer. In manch anderem Forum wäre ich schon bespuckt werden. Ich seid Klasse:-)
Gruß Bob
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 873
Wohnort: Ruhrpott

BeitragVerfasst am: 04.02.2015, 11:35    Titel: Antworten mit Zitat

BOB_BOB hat Folgendes geschrieben:
Ich danke euch für eure Mühe und Ausdauer. In manch anderem Forum wäre ich schon bespuckt werden. Ich seid Klasse:-)
Wir sind hier halt ein kleines Häufchen von hoffnungslosen Idealisten. zwinkern
Zitat:
Anregungen zur Verbesserung gerne gewünscht.
Du könntest zunächst einmal das CLS am Anfang entfernen (es ist komplett überflüssig), damit du beim Programmstart keine Fehlermeldung bekommst.

Aber einmal ganz generell: Wenn du keinen ernsthaften Grund hast, ausgerechnet in QBasic zu programmieren, würde ich dir empfehlen, auf FreeBasic umzusteigen. Die Syntax ist fast identisch, aber die Möglichkeiten sind ungleich größer, du bekommst "echte" Programme (.exe) und auch die gängigen Editoren sind wesentlich komfortabler als der QB-Editor.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2459
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 04.02.2015, 20:55    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Die Syntax ist fast identisch, aber die Möglichkeiten sind ungleich größer, du bekommst "echte" Programme (.exe) und auch die gängigen Editoren sind wesentlich komfortabler als der QB-Editor.

Und auch noch wichtig: Die .EXE-Dateien laufen auf aktuellen Windows-Betriebsystemen (32-Bit und 64-Bit) nativ, ohne dass man die NTVDM bemühen muss, welches es nur noch bei den 32-Bit-Versionen gibt (heutige PCs ab der Stange besitzen mittlerweilen durchgehend Windows immer in der x64-Version!) und ausserdem von Microsoft nur noch sehr stiefmütterlich gepflegt wird.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 04.02.2015, 21:10    Titel: Antworten mit Zitat

Im Moment bleibe ich erstmal bei Qbasic. Dazu habe ich jetzt einige Unterlagen zusammen. Vllt steige ich später mal um:-)
Mit dem CLS Befehl am Anfang bekomme ich keine Fehlermeldung.

Andere kleine Frage. Wie kann ich PRINT USING und CHR$ in einer Zeile verwenden?
Vor das CHR$ muss ich ja PRINT setzen. Aber in einer Zeile kommt das nicht klar. Würde gerne einige von den ASCII Symbolen nutzen. Im Moment arbeite ich mit Locate und kriege so das ASCII Symbol in meine PRINT USING Zeile.

Gruß BOB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4215
Wohnort: ~/

BeitragVerfasst am: 04.02.2015, 23:50    Titel: Antworten mit Zitat

Du kannst die einzelnen Strings mit + verketten:
Code:
PRINT "123" + CHR$(254) + "456"

Damit sollte es auch mit PRINT USING problemlos funktionieren.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 873
Wohnort: Ruhrpott

BeitragVerfasst am: 04.02.2015, 23:50    Titel: Antworten mit Zitat

Einfach anstelle eines "normalen" Buchstabens in die Zeile schreiben, wie bei jedem anderen String auch:
Code:
PRINT USING "\        \"; ">" + CHR$(16) + CHR$(173) + "Hallo" + CHR$(254) + "Welt!"


Gruß
grindstone

EDIT: Da war nemored jetzt schneller! lächeln
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BOB_BOB



Anmeldungsdatum: 02.01.2015
Beiträge: 13

BeitragVerfasst am: 05.02.2015, 09:40    Titel: Antworten mit Zitat

Ich möchte folgendes machen. xe1 und xe2 wurden vorher berechnet und haben in der Regel mehr als 2 Nachkommastellen. Jetzt möchte ich mit xe1 und xe2 in in einem Print Using auf 2 Nachkommastellen anzeigen lassen.

DIM xe1!, xe2!
xe1! = 2.1112
xe2! = 4.4321

PRINT USING "von +00 > ##.## m. fallend, von ##.## > ##.## m. wachsend und von ##.## > -00 m. fallend"; xe2!; xe2!; xe1!; xe1!

Das funktioniert auch soweit. Jetzt möchte ich aber das anstelle der Wörter "fallend" und "steigend" jeweils ein Pfeil nach oben oder unten angezeigt wird. Dazu kann ich ja CHR$(24) bzw CHR$(25) benutzen. Aber wenn ich das ich die Print Using Zeile reinschreibe mahnt mich QB immer ab missbilligen
Mit meinem sehr beschränkten QB Wissen würde jetzt mit locate den Pfeil ich die Print Using Zeile schieben. Aber nicht sehr Komfortabel.
Jetzt seid ihr gefragt:-)

Problem selber gelöst:-)
DIM xe1!, xe2!
xe1! = 2.1112
xe2! = 4.4321

PRINT USING "von +00 > ##.## "; xe2!;
PRINT CHR$(25);
PRINT USING " ,von ##.## > ##.## "; xe2!; xe1!;
PRINT CHR$(24);
PRINT USING " und von ##.## > -00 "; xe1!;
PRINT CHR$(25)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4215
Wohnort: ~/

BeitragVerfasst am: 05.02.2015, 16:11    Titel: Antworten mit Zitat

Abschnittsweise schreiben geht natürlich immer lächeln und es sollte auch klappen, erst den Foramtstring zu definieren (wie gesagt, unter QB kann ich es nicht testen):
Code:
DIM formatstring$
formatstring$ = "von +00 > ##.## " + CHR$(25) + ", von ##.## > ##.## " + CHR$(24) + " und von ##.## > -00 " + CHR$(25)
PRINT USING formatstring$; xe2!; xe2!; xe1!; xe1!

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 873
Wohnort: Ruhrpott

BeitragVerfasst am: 06.02.2015, 02:55    Titel: Antworten mit Zitat

Es funktioniert. lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
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 QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
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