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:

ein programm das programiert

 
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
rudeboy



Anmeldungsdatum: 13.02.2005
Beiträge: 15
Wohnort: berlin

BeitragVerfasst am: 13.02.2005, 02:55    Titel: ein programm das programiert Antworten mit Zitat

hallo zusammen,

bin neu dabei, und beim lernen(Qb4.5) kam ich auf die idee,
das der komputer das auch lernen könnte.

so schrieb ich ein prog. das es mir einfacher macht, also es fragt mich
ein paar fragen und ich beantworte sie, dann schreibt es mir den richtigen
code als .bas datei raus

momentan kann es nur mit 2 bis 3 zahlen rechnen (+-*/)

mein problem: wie bekomme ich das neue programm in das erste?
also nach dem ich das prog. rausschreiben lasse,
möcht ich es aus dem ersten prog. starten,
so das ich gar net merke das es zwei sind.

momentan muß ich das erste verlassen, das zweite starten, is aber net
mein ziel.
hilfe!!!!!!
oder geht das überhaupt nicht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 13.02.2005, 05:00    Titel: Antworten mit Zitat

Hallo

Sieh dir dazu mal die Befehle CHAIN und RUN an. Mit denen kannst du zwischen Programmen wechseln.

Gruss
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


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

BeitragVerfasst am: 13.02.2005, 10:55    Titel: Antworten mit Zitat

Im ganz alten GW-BASIC ging dies noch recht gut mit dem selbstmodifizierenden Code. Siehe alte Usenet-Diskussion unter

http://groups.google.com/groups?selm=91jbgb%24sm4%244%40news1.sunrise.ch
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 13.02.2005, 16:28    Titel: Dazu habe ich mir Folgendes für die QB-MonsterFAQ vorgemerkt Antworten mit Zitat

Dazu habe ich mir Folgendes für die QB-MonsterFAQ vorgemerkt:

--------------------------------------------------------------------------------

Frage deutsch
~~~~~~~~~~~~~~
Wie berechne ich einen als String vorliegenden Formelausdruck?
((Ergänzung der bestehenden Frage "Formelparser" oder "Formellöser"))

Question English
~~~~~~~~~~~~~~
How to ?


Antwort 1
~~~~~~~~~
[ von Thomas Antoni und Olaf Deters, 26.1.2004 - 27.1.2004 ]

Beim Programmieren des einfachen Taschenrechners für die MonsterFAQ ist mir
(Thomas Antoni) die folgende Idee gekommen: Mann müsste doch den Eingabestring
für eine beliebige Formel. z.B.

"(25^3) * sin(0.45)"

per Programm als QB-Quellsprache in eine externe BAS-Datei schreiben und diese
dann per CHAIN aufrufen, abarbeiten und das Ergebnis anzeigen lassen können.

Beim obigen Beispiel würden die für die Eingabe der Formal und die
Anzeige des Ergebnisses zuständigen Befehle ganz einfach so lauten:

INPUT "y = "; Formel$ 'Formel eingeben
PRINT "y = "; (25^3) * sin(0.45) 'Formel berechnen und anzeigen

Der letztere Befehl würde in die externe Datei geschrieben werden. Dann hätte
man auf einfachste Art einen sehr leistungsfähigen wissenschaftlichen
Taschenrechner realisiert.

Eine Schwierigkeit liegt darin, dass die meisten Anwender Winkel wohl im Gradmaß
und nicht in dem bei QBasic üblichen Bogenmaß eingeben möchten.

Dazu kann man im Formelstring ein "zahl°" durch "(Zahl * 6.28/360)" ersetzen.

Das folgende Programm von Olaf Deters und mir setzt diese Idee um:


'*****************************************************************
' FORMEL.BAS = Formel-Loeser in QBasic
' ==========
' ACHTUNG: Dieses Programm muss im Verzeichnis "C:\TEMP\" stehen.
' Bei einem anderen Verzeichnis muss man die Pfadvorgabe
' in der 2. Befehlszeile anpassen!
'
' FORMEL.BAS ist quasi ein wissenschaftlicher Taschenrechner.
' Es nimmt vom Anwender einen beliebigen Formelausdruck entgegen,
' berechnet dessen Ergebnis und zeigt es an.
'
' Der Formelausdruck muss der QBasic-Syntax entsprechen, mit einer
' Ausnahme: Die Eingabe von Winkeln kann auch in Grad statt im
' Bogenmass erfolgen. Dazu muss der Anwender hinter dem Winkel ein
' Gradzeichen "ø" eingeben.
'
' Das Programm funktioniert nur als BAS-Datei und nicht als
' kompilierte EXE-Datei. Programmtechnisch ist das ganze so
' realisiert, dass das Programm den Formelstring in eine zweite
' externe BAS-Datei "Test.bas" schreibt. Ansschliessend wird
' die Kontrolle per CHAIN an Test.bas uebergeben. Test.bas
' berechnet die Formel, zeigt sie an und springt wiederum per
' CHAIN zurueck zum Beginn des Hauptprogramms.
'
' Der vom Windows-ANSI-Code abweichende DOS-ASCII-Zeichencode fuer
' das Grad-Symbol ist zu beachten.(ANSI: "°", ASCII: "ø")
'
' (c) Olaf Deters u. Thomas Antoni, 26.1.2004 - 27.1.2004
'*****************************************************************
DECLARE FUNCTION Ersetze$ (F$)
COLOR 0, 7 'Schwarze Schrift auf hellgrauem Grund
WIDTH 80, 50 'VGA-Aufloesung mit 80 Spalten und 50 Zeilen
CLS
'
'---- Bedienungshinweise anzeigen -------------------------
'
PRINT
PRINT " ------======== F O R M E L - L O E S E R =======--------"
PRINT
PRINT " ________________Unterstuetzte Funktionen________________"
PRINT " a + b ..... Addition"
PRINT " a - b ..... Subtraktion"
PRINT " a * b ..... Multiplikation"
PRINT " a / b ..... Division"
PRINT " sqr(a) .... Quadratwurzel von a"
PRINT " a^b ....... Exponentialfunktion a hoch b"
PRINT " a^(1/b) ... allgemeine Wurzelfunktion b-te Wurzel aus a"
PRINT " log(a) .... Natuerlicher Logarithmus von a (zur Basis e)"
PRINT " sin(a) .... Sinus (a im Bogenmass)"
PRINT " cos(x) .... Cosinus (a im Bogenmass)"
PRINT " tan(a) .... Tangens (a im Bogenmass)"
PRINT " atn(x) .... Arcus Tangens (Winkel im Bogenmass)"
PRINT " aø ........ Winkel im Gradmass"
PRINT " hex$(a) ... Dezimal/Hexadezimal-Wandlung fuer a"
PRINT " val("; CHR$(34); "&ha"; CHR$(34); ")";
PRINT " Hexadezimal/Dezimalwandlung fuer a"
PRINT " MOD ....... Modulo-Division (liefert d.ganzzahligen Rest)"
PRINT " ========================================================="
PRINT " Beispielformel : (log(sin(30ø))^2 + 1.4"
PRINT " ========================================================="
'
'---- Formel eingeben -------------------------------------
PRINT
PRINT
PRINT "Gib die gewuenschte Formel ein: "
PRINT
INPUT "y = ", F$
F1$ = Ersetze$(F$) 'Winkelangaben mit Gradzeichen ins Bogenmass
'umrechnen
'
'---- Formel in Datei Test.bas schreiben ------------------
'Es wird der folgende Quellcode geschrieben:
' PRINT "y = "; Fa$
' PRINT
' PRINT "[belieb.Taste]=Wiederholen";
' PRINT ".....[Esc]=Beenden"
' t$ = INPUT$(1)
' IF t$ = CHR$(27) THEN END
' CHAIN "c:\temp\formel.bas"
'Ausrufezeichen muessen als CHR$(34) geschrieben werden
'
OPEN "c:\temp\Test.bas" FOR OUTPUT AS #1
PRINT #1, "PRINT "; CHR$(34); "y = "; CHR$(34); ";"; F1$
PRINT #1, "PRINT"
PRINT #1, "PRINT "; CHR$(34); "[belieb.Taste]=Wiederholen"; CHR$(34); ";"
PRINT #1, "PRINT "; CHR$(34); ".....[Esc]=Beenden"; CHR$(34)
PRINT #1, "t$=input$(1)" ' Warten auf beliebige Taste
PRINT #1, "IF t$ = CHR$(27) THEN END"
PRINT #1, "CHAIN "; CHR$(34); "c:\temp\formel.bas"; CHR$(34)
'Ruecksprung zum Hauptmodul
CLOSE #1
'
'----- Test.bas aufrufen ----------------------------------
CHAIN "c:\temp\test.bas"

'
FUNCTION Ersetze$ (F$)
'----- Umrechnung Grad- in Bogenmass ----------------------
'----- ("Zahlø") -> ("Zahl * 2 * Pi / 360")
'Es wird im Formelstring nach einem Gradzeichen "ø" gesucht.
'Steht davor eine Zahl, so wird das Gradzeichen durch
'den Teilstring "* 3.1415962# / 180" ersetzt.
FOR X = 1 TO LEN(F$)
IF MID$(F$, X, 1) = "ø" THEN
Y = X
DO UNTIL MID$(F$, Y, 1) = "(" OR MID$(F$, Y, 1) = ")": Y = Y - 1
LOOP
L$ = LEFT$(F$, Y)
SELECT CASE VAL(MID$(F$, Y + 1, X - Y - 1))
CASE IS <> 0
M$ = STR$(VAL(MID$(F$, Y + 1, X - Y - 1)) * 3.1415962# / 180)
CASE IS = 0
M$ = " * 3.1415962# / 180"
END SELECT
R$ = RIGHT$(F$, LEN(F$) - X)
F$ = L$ + M$ + R$
F$ = Ersetze(F$)
END IF
NEXT X
Ersetze$ = F$
END FUNCTION




((FORMEL.BAS bereits in progs/neu/ ))


Dieses Programm könnte man natürlich noch beliebig verbessern. Sinnvoll wäre es
z.B., alle auftretenden Fehler mit ON ERROR GOTO abzufangen. Dann werden
sämtliche Fehler wie nicht geschlossene Klammern, Division durch Null und die
Verwendung fascher Schlüsselwörter abgefangen, und das Programm könnte dann eine
ausagekräftige Fehlermeldung mit Neueingabemöglichkeit realisieren statt sich
sang- und klanglos zu beenden.

--------------------------------------------------------------------------------
_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
rudeboy



Anmeldungsdatum: 13.02.2005
Beiträge: 15
Wohnort: berlin

BeitragVerfasst am: 18.02.2005, 03:46    Titel: thanks Antworten mit Zitat

hi,
danke für die kleine aber coole hilfe,

so sieht das kleine program aus, das voll automatisch programiert is:
mit zwie befehlen: addiren & 2 zahlen
das selbe geht mit : (+,-,*,/,) & 2 oder 3 zahlen

PRINT "-----addiere zwei zahlen------ "
PRINT " "
INPUT "A ";a
INPUT "B ";b
PRINT " "
ab = a + b
PRINT " Ergebnis: ";ab
chain "d:\MASCHINA.BAS"

hab da noch ne kleine frage:
seid dem ich den chain befehl eingebaut hab
zeigt er mir nicht mehr den letzten print befehl(Ergebnis) an. wie leg ich ein günstigen stop ein?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 18.02.2005, 12:19    Titel: Antworten mit Zitat

Du könntest folgendes zwischen "PRINT " Ergebnis: ";ab" und "chain "d:\MASCHINA.BAS"" einfügen:
Code:
t! = TIMER + 1.5
WHILE TIMER < t!: WEND

Das ganze sieht fertig so aus:
Code:
PRINT "-----addiere zwei zahlen------ "
PRINT " "
INPUT "A ";a
INPUT "B ";b
PRINT " "
ab = a + b
PRINT " Ergebnis: ";ab
t! = TIMER + 1.5
WHILE TIMER < t!: WEND
chain "d:\MASCHINA.BAS"


Bei "TIMER + 1.5" kannst du einen beliebigen Wert eingeben, in meinem Beispiel wird eine 1,5 Sekunden Pause gemacht. So hälst du dein Programm an für einen gewissen Zeitraum, sogar für Millesekunden zwinkern
Optional kannst du eine SUB erstellen, wo man immer nur eine Zeile (Call Pause(Wert)) eingeben muss, aber nur wenn du mehrmals im Programm eine Pause haben willst.

R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 18.02.2005, 16:30    Titel: Antworten mit Zitat

Oder mit
Code:

SLEEP

auf eine beliebige Tasteneingabe warten. Wem das nicht gefällt, der kann auch
Code:

A$ = INPUT$(1)

oder
Code:

WHILE NOT LEN(INKEY$): WEND

nehmen.

Als alternative Wartezeit könnte man auch mit
Code:

WAIT &H3DA, 8
WAIT &H3DA, 8, 8

arbeiten, da wird auf den Bildschirmstrahlrücklauf gewartet.
Das hängt aber von der Bildwiederholfrequenz des verwendeten Monitors ab (bei einem Flachbildschirm wird dieser Effekt natürlich nur nachgeahmt, da es dort ja keinen Bildschirmstrahrücklauf gibt).
Wenn diese 70Hz beträgt, wartet man also 1/70 s.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
rudeboy



Anmeldungsdatum: 13.02.2005
Beiträge: 15
Wohnort: berlin

BeitragVerfasst am: 18.02.2005, 18:17    Titel: thanks Antworten mit Zitat

hi
hab den sleep befehl genaommen,
der is kurtz und erfült sein zweck. danke

ich meld mich wieder wenn mein prog."Maschina" was neues kann
hab leider momentan wenig zeid dafür, mach grad prüfungen.

wenn sich jemand mit der thematik auch bescheftigt, dan meldet euch einfach

ciao
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
rudeboy



Anmeldungsdatum: 13.02.2005
Beiträge: 15
Wohnort: berlin

BeitragVerfasst am: 03.07.2006, 16:51    Titel: @Maschina Antworten mit Zitat

hallo,
hab das Prog so weit, das es nun fast alles kann, was auch ich kann (die Befehle in qbasic).
hab es weil es zu groß wurde, in diei größere Teile geteilt. so kann man sich auf einen Bereich konzentrieren, verbessern.

1.Teil soll der Kopf des Programmes sein
- -M3_Brain
2. Unterprogramm
- - M3_PROG
- - M3_Drucker

Da es recht komplex wurde, hab ich ein eigenes Forum dafür eingerichtet.
wenn jemand Interesse hat, was intelligents in qbasic zu proggen, kann gerne bei dem Projekt mitmachen, ich freue mich über jede Unterstützung. lächeln

(MASCHINA Projekt, mfg sajuss*)
kleine änderung noch happy
http://www.ar-base.tk
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
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