 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.06.2006, 22:18 Titel: Textabschnitte färben |
|
|
Ich hab eine Frage... ich hab MonsterFAQ, SelfQB, u.versch. QB-Tutorials durchwühlt aber nicht viel gefunden. Ich will einen bestimmten Textabschnitt farbig markieren, unzwar den Teil der das Ergebnis anzeigt. Mir kommt es ziemlich dämlich vor vor dem Bereich color x,y zu schreiben und danach wieder color y,x. Es ist aber das einzige was ich finden konnte. Gibt es eine bessere Lösung?
Um es etwas verständlicher zu machen hier das Programm, doch vorab eine kleine Erklärung. Das Programm berechnet Rundkörper. Es beginnt mit einer Inputabfrage welcher Körper berechnet werden soll. Dann werden die Sprungmarken mit den cases angesprochen. Dann werden Höhe und Radius, wieder durch Input, abgefragt. Das Volumen und die Oberfläche werden ausgegeben und die ausgegebenen Werte sollen rot markiert sein. Danach kommt eine Inkeyabfrage ob weitergerechnet oder Beendet werden soll. Das wäre das Programm:
Code: |
COLOR 9, 7
pi = 3.141592
start:
CLS
PRINT TAB(30); "Berechnen von Rundk”rpern"
PRINT
PRINT
PRINT TAB(30); "Dieses Programm berechnet die Oberfl„che und das Volumen von Rundk”rpern!"
PRINT
PRINT "=============================================================================="
PRINT
x:
PRINT " Was m”chtest du berechnen? "
PRINT
PRINT "1) Kugel 2) Zylinder 3) Kegel 0) Abbrechen"
PRINT
PRINT
DO
eingabe$ = INKEY$
LOOP UNTIL eingabe$ <> ""
SELECT CASE eingabe$
CASE "1": GOTO kugel
CASE "2": GOTO zylinder
CASE "3": GOTO kegel
CASE "0": END
CASE ELSE: GOTO x
END SELECT
ende:
END
kugel:
INPUT "Wie ist der Radius der Kugel? ", r
LOCATE 14, 40
COLOR 12, 7
PRINT "cm"
COLOR 9, 7
PRINT
d = 2 * r
v = 4 / 3 * pi * r
o = pi * d ^ 2
o = (INT(o * 100 + .5)) / 100
v = (INT(v * 1000 + .5)) / 1000
PRINT
PRINT
PRINT "Das Volumen betr„gt"; TAB(40); "cmü!"
LOCATE 18, 30
COLOR 12, 7
PRINT v
COLOR 9, 7
PRINT "Die Oberfl„che betr„gt"; TAB(40); "cmý!"
LOCATE 19, 30
COLOR 12, 7
PRINT o
COLOR 9, 7
PRINT
PRINT
a:
PRINT "Weiter rechnen(1) oder abbrechen(0) "
DO
wahl$ = INKEY$
LOOP UNTIL wahl$ <> ""
SELECT CASE wahl$
CASE "1": GOTO start
CASE "0": END
CASE ELSE: GOTO a
END SELECT
zylinder:
INPUT "wie ist der Radius des Zylinders ?", r
LOCATE 14, 40
COLOR 12, 7
PRINT "cm"
COLOR 9, 7
INPUT "Wie ist die H”he des Zylinders? ", h
LOCATE 15, 40
COLOR 12, 7
PRINT "cm"
COLOR 9, 7
v = pi * r ^ 2 * h
o = 2 * pi * r * (r + h)
o = (INT(o * 100 + .5)) / 100
v = (INT(v * 1000 + .5)) / 1000
PRINT
PRINT
PRINT "Das Volumen betr„gt"; TAB(40); "cmü!"
LOCATE 18, 30
COLOR 12, 7
PRINT v
COLOR 9, 7
PRINT "Die Oberfl„che betr„gt"; TAB(40); "cmý!"
LOCATE 19, 30
COLOR 12, 7
PRINT o
COLOR 9, 7
PRINT
PRINT
b:
PRINT "Weiter rechnen(1) oder abbrechen(0) "
DO
wahl$ = INKEY$
LOOP UNTIL wahl$ <> ""
SELECT CASE wahl$
CASE "1": GOTO start
CASE "0": END
CASE ELSE: GOTO b
END SELECT
kegel:
INPUT "wie ist der Radius des Kegels ?", r
LOCATE 14, 40
COLOR 12, 7
PRINT "cm"
COLOR 9, 7
INPUT "Wie ist die H”he des Kegels? ", h
LOCATE 15, 40
COLOR 12, 7
PRINT "cm"
COLOR 9, 7
s = (r ^ 2 + h ^ 2) ^ (1 / 2)
v = 1 / 3 * pi * r ^ 2 * h
o = pi * r * (r + s)
o = (INT(o * 100 + .5)) / 100
v = (INT(v * 1000 + .5)) / 1000
PRINT
PRINT
PRINT "Das Volumen betr„gt"; TAB(40); "cmü!"
LOCATE 18, 30
COLOR 12, 7
PRINT v
COLOR 9, 7
PRINT "Die Oberfl„che betr„gt"; TAB(40); "cmý!"
LOCATE 19, 30
COLOR 12, 7
PRINT o
COLOR 9, 7
PRINT
PRINT
c:
PRINT "Weiter rechnen(1) oder abbrechen(0) "
DO
wahl$ = INKEY$
LOOP UNTIL wahl$ <> ""
SELECT CASE wahl$
CASE "1": GOTO start
CASE "0": END
CASE ELSE: GOTO c
END SELECT
|
Edit:
Mensch jetzt hab ich mein zweites Anliegen vergessen
Wie würdet ihr das Programm beurteilen? Hat es Fehler, hat es unlogische Inhalte, ist es DAU-fähig uvm. Ich hätte gern ein kleines Feedback für mein sechstes Programm. Als kleine Anmerkung ich muss in einer Woche meine Mündliche Prüfung über QBasic ablegen Es ist viel zu leicht da ich "erst" in die 10 Klasse gehe und im Unterricht nicht viel gemacht wird. Ich glaube ich und ein Freund sind die Eizigen die sich in der Freizeit mit dem proggen beschäftigen, aus diesem Grund sind wir ein wenig weiter. Die Anderen lernen grad Input und If Then
Naja ... ich schweife ab.... danke schonmal für Feedback
MfG
Matze _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link?
Zuletzt bearbeitet von Matze001 am 07.06.2006, 20:17, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 06.06.2006, 00:09 Titel: |
|
|
Hallo,
ich habe ein paar Verbesserungsvorschläge:
1) Vermeide GOTO, wenn es nur geht.
...und in deinem Programm geht es:
Benutze stattdessen SUBs oder FUNCTIONS:
Zum Beispiel:
Code: |
'Oberfläche
FUNCTION AO_Kugel(Radius As Double) As Double
AO_Kugel = 4 * 3.1415 * Radius ^ 2
END FUNCTION
'Volumen
FUNCTION V_Kugel(Radius As Double) As Double
V_Kugel = 4 / 3 * 3.1415 * Radius ^ 3
END FUNCTION
Print "Die Oberfläche einer Kugel mit dem Radius 20 ist: "; AO_Kugel(20)
|
2) Statt mit Input, abzugragen, was der Benutzer machen möchte, kannst du INKEY$ verwenden:
Code: |
Dim Radius As Double
Print "Wählen Sie eine Option aus."
Print
Print "1) Oberfläche einer Kugel berechnen"
Print "2) Volumen einer Kugel berechnen"
DO
Eingabe$ = INKEY$
LOOP Until Eingabe$ <> ""
SELECT CASE Eingabe$
CASE "1"
Print "Geben Sie den Radius der Kugel an:";
INPUT Radius
Print "Oberfläche:"; AO_Kugel(Radius)
CASE "2"
Print "Geben Sie den Radius der Kugel an:";
INPUT Radius
Print "Volumen:"; V_Kugel(Radius)
END SELECT
|
Der Vorteil: Der Benutzer muss nicht ENTER drücken...
Was mich interessieren würde: Was wird bei der Prüfung eigentlich abgefragt?
Falls man vorher nichts mehr voneinander hören sollte, wünsch ich dir jetzt schon viel Glück & vor allem Können bei der Prüfung.  |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 06.06.2006, 10:37 Titel: |
|
|
Jo danke... bis zur Prüfung dauert es noch.
Aber erstmal du der Sache mit GOTO und den Subs...
das dürfen wir, so dumm wie es klingt, nicht verwenden. Genau so verhält es sich mit Inkey... Ich hatte es schonmal gemacht, ich finde es persönlich auch besser nur mein Lehrer war nicht meiner Meinung Das ist das Problem wenn Schüler mehr Ahnung haben als die Lehrer...
Naja... abgefragt wird nix. bei der Prüfung... die is auch erst in einer Woche... Man hat ca. 20min Zeit eine Aufgabe theoretisch, also auf dem Papier zu lösen und diese dann 100%ig zu erklären und gegebenenfalls andere Lösungswege aufzueigen. Ihr werdet lachen so leicht ist das...
Es handelt sich in etwa um eine Aufgabe wie diese hier wenn überhaupt...
Ich bin der erste der sich in Informatik prüfen lässt seit das Fach unterrichtet wird, also seid gut 4-6 Jahren
Somit sind, leider, deine Verbesserungsvorschläge nicht anwendbar obgleich sie hilfreich sind. Ich werde meinen Lehrer mal ignorieren und Inkey verwenden...das merkt der net  _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link?
Zuletzt bearbeitet von Matze001 am 07.06.2006, 20:18, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Dominik
Anmeldungsdatum: 22.12.2004 Beiträge: 172
|
Verfasst am: 06.06.2006, 13:55 Titel: |
|
|
Hallo,
naja, den Lehrer wollte ich nicht haben.
Denn auf die GOTO-Art wirst du garkein komplexes Programm so schreiben können, das du den Quellcode in einem Jahr noch verstehst, und andere werden ihn erst garnicht verstehen können.
Stell dir vor, du willst nur noch eine Mausunterstützung einbauen und vielleicht noch Volumen- /Oberflächenberechnung für Prismen & Pyramide. Danach wird es richtig unübersichtlich...
Aber was soll's wenn der Lehrer es nicht erlaubt...
Code: | s = (r ^ 2 + h ^ 2) ^ (1 / 2) |
Mir ist noch etwas aufgefallen:
Ich weiß nicht, ob du die FUNCTION SQR() kennst (Quadratwurzel), aber ich würde sie in diesem Fall verwenden.
Code: | s = SQR(r ^ 2 + h ^ 2) |
Ich weiß, dass ist jetzt Erbsenzählerei, aber es sieht schöner aus.
Darfst du eigentlich GOSUB verwenden? Das würde wahrscheinlich etwas mehr Übersichtlichkeit hereinbringen.
Wie z.B. bei deinem Problem:
Zitat: | Mir kommt es ziemlich dämlich vor vor dem Bereich color x,y zu schreiben und danach wieder color y,x. Es ist aber das einzige was ich finden konnte. Gibt es eine bessere Lösung? |
Code: |
Text$ = "44" '=Ergebnis
LOCATE 4,5
GOSUB GebeErgebnisAus
Print "Programm fertig."
END
GebeErgebnisAus:
Color 12, 8 'Farbe für Ergebnis
Print Text$
Color 7, 8 'Die Starndartfarbe
Return
|
So musst du dich um die Farben garnicht mehr kümmern...
Dass du dies mit einem SUB a'la PrintErgebnis(Text$) viel strikturierter/leichter/besser lösen könntest, lass ich jetzt mal außen vor, da du es ja leider nicht verwenden darfst. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.06.2006, 22:08 Titel: |
|
|
er kann ja privat was "besseres" drauß machen.... aber gewöhn's dir erst gar nicht an  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 07.06.2006, 13:24 Titel: |
|
|
Jojo hat Folgendes geschrieben: | er kann ja privat was "besseres" drauß machen.... aber gewöhn's dir erst gar nicht an  |
Jo Subs 4ever ... naja... ich werde das Prog. so lassen... es is ja "nur" für meinen Lehrer...ich will gar net wissen was die Anderen so abliefern
 _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 07.06.2006, 14:17 Titel: |
|
|
Hallo
Auch wenn GOSUB verboten ist, kannst du sich wiederholende Funktionen in eine Art Unterprogramm packen. Ich habe Inhaltlich nichts an deinem Programm geändert sondern es nur etwas umgestellt und gekürzt.
Code: | COLOR 9, 7
pi = 3.141592
start:
CLS
PRINT TAB(30); "Berechnen von Rundk”rpern"
PRINT
PRINT
PRINT TAB(30); "Dieses Programm berechnet die Oberfl„che und das Volumen von Rundk”rpern!"
PRINT
PRINT "=============================================================================="
PRINT
x:
PRINT " Was m”chtest du berechnen?"
PRINT "1) Kugel 2) Zylinder 3) Kegel 0) Abbrechen"
PRINT
DO
eingabe$ = INKEY$
LOOP UNTIL eingabe$ <> ""
SELECT CASE eingabe$
CASE "1": GOTO kugel
CASE "2": GOTO zylinder
CASE "3": GOTO kegel
CASE "0": END
CASE ELSE: GOTO x
END SELECT
ende:
END
kugel:
INPUT "Wie ist der Radius der Kugel?", r
PRINT
d = 2 * r
v = 4 / 3 * pi * r
o = pi * d ^ 2
GOTO ausgabe
zylinder:
INPUT "Wie ist der Radius des Zylinders?", r
INPUT "Wie ist die H”he des Zylinders?", h
v = pi * r ^ 2 * h
o = 2 * pi * r * (r + h)
GOTO ausgabe
kegel:
INPUT "Wie ist der Radius des Kegels?", r
INPUT "Wie ist die H”he des Kegels?", h
s = (r ^ 2 + h ^ 2) ^ (1 / 2)
v = 1 / 3 * pi * r ^ 2 * h
o = pi * r * (r + s)
ausgabe:
o = (INT(o * 100 + .5)) / 100
v = (INT(v * 1000 + .5)) / 1000
PRINT
PRINT
PRINT "Das Volumen betr„gt"; TAB(40); "cmü!"
PRINT "Die Oberfl„che betr„gt"; TAB(40); "cmý!"
COLOR 12, 7
LOCATE 16, 30
PRINT v
LOCATE 17, 30
PRINT o
COLOR 9, 7
PRINT
PRINT
c:
INPUT "Weiter rechnen (1) oder abbrechen(2) "; wahl%
SELECT CASE wahl%
CASE 1: GOTO start
CASE 2: END
CASE ELSE: GOTO c
END SELECT
|
Du benutzt bei der ersten Auswahl nun doch INKEY$. Ist das nun doch erlaubt? Wenn ja, würde ich es in der zweiten genaus machen. Für den Anwender ist es ziemlich verwirrend, wenn einmal mit ENTER bestätigt werden muss, einmal nicht. Vielleicht wäre es auch besser, in beiden Fällen die 0 zum Abbrechen zu benutzen.
Ausserdem sollte noch irgendwo angemerkt werden, dass man Radius und Höhe in Zentimetern eingeben muss.
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 07.06.2006, 20:03 Titel: |
|
|
Ja gute Idee... hatte das zweite Input schon ersetzt nur den Code nicht geändert (hier im Forum) Ich werde die Null zum Abrechen nehmen. Nur, was du nicht wissen kannst, soll da auch immer schön stehen: Das Volumen (z.B.) DER KUGEL beträgt xyz! ICh weis das man es auch anders lösen kann aber ich habe es schon so geschrieben und für den Unterricht reicht es
Und ach ja...die cm^^ wusste doch ich hab was vergessen
Edit: Der Code im ersten Beitrag ist nun aktuell. _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
|
|
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.
|
|