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:

Textabschnitte färben

 
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
Matze001



Anmeldungsdatum: 03.05.2006
Beiträge: 28

BeitragVerfasst am: 05.06.2006, 22:18    Titel: Textabschnitte färben Antworten mit Zitat

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 mit dem Kopf durch die Mauer wollen peinlich Kopf schütteln
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 mit den Augen rollen 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 mit den Augen rollen grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 06.06.2006, 00:09    Titel: Antworten mit Zitat

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. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Matze001



Anmeldungsdatum: 03.05.2006
Beiträge: 28

BeitragVerfasst am: 06.06.2006, 10:37    Titel: Antworten mit Zitat

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 peinlich 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... lachen
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 grinsen

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 grinsen
_________________
<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
Benutzer-Profile anzeigen Private Nachricht senden
Dominik



Anmeldungsdatum: 22.12.2004
Beiträge: 172

BeitragVerfasst am: 06.06.2006, 13:55    Titel: Antworten mit Zitat

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. verwundert

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. lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 06.06.2006, 22:08    Titel: Antworten mit Zitat

er kann ja privat was "besseres" drauß machen.... aber gewöhn's dir erst gar nicht an durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Matze001



Anmeldungsdatum: 03.05.2006
Beiträge: 28

BeitragVerfasst am: 07.06.2006, 13:24    Titel: Antworten mit Zitat

Jojo hat Folgendes geschrieben:
er kann ja privat was "besseres" drauß machen.... aber gewöhn's dir erst gar nicht an durchgeknallt



Jo Subs 4ever durchgeknallt ... 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

Kopf schütteln happy
_________________
<xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



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

BeitragVerfasst am: 07.06.2006, 14:17    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 03.05.2006
Beiträge: 28

BeitragVerfasst am: 07.06.2006, 20:03    Titel: Antworten mit Zitat

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 lachen mit den Augen rollen
Und ach ja...die cm^^ wusste doch ich hab was vergessen peinlich mit dem Kopf durch die Mauer wollen lachen


Edit: Der Code im ersten Beitrag ist nun aktuell.
_________________
<xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link?
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