Hallo, Ihr Mathebegeisterten!

Da ich in der 9. Klasse eines Gumminasiums bin, hatten wir, unsere
Klasse, vor kurzem in Mathe den Unterrichtsstoff QUADRATISCHE
GLEICHUNGEN! Das Thema ist einigermaen interessant, nervig wird's erst,
wenn man die Parabeln zeichnen mu. Ich glaube, jeder, der das schon mal
tun mute, wei wovon ich rede. Natrlich gibt's ja die Parabelscha-
blonen, aber die sind erstens sehr teuer und zweitens ist das Parabel-
zeichnen selbst mit diesem Werkzeug ziemlich dmlich. Was also tun?

Ich wrde ja wohl keinen Artikel in der Rubrik "Coding" schreiben, wenn
ich mich ber Parabelschablonen auslassen wollte. Natrlich habe ich ein
kleines Programm geschrieben, da stark vergrert einzelne Punkte einer
Parabel auf den Bildschirm setzt. Das gestartete Programm sieht ungefhr
so aus:



				            
					
					
					
					
				          
					
					
				        
		      
					
					
					
					

			(von  zu  gleich 1 cm Abstand)


OK, dieses Beispiel ist etwas grob und ungenau, aber das liegt nur an
den ASCII-Zeichen :) !

Wie also programmiert man so ein Programm? Eigentlich ist es ziemlich
simpel. Wir benutzen zum Beispiel eine quadratische Gleichung von der
Form: f(x)=x. Der Schnittpunkt der Achsen auf dem Monitor ist (320300)
bei SCREEN 12. Und so arbeitet das Programm:

FOR x% = 0 TO 50 STEP 1			    'Es setzt bis zu 50 Punkte.
PSET ((x%*10) + 320, 300 - x%^2)	    'Punkte auf der positiven
					    'Seite.
PSET ((x%*10) + 320 - (x%*20), 300 - x%^2)  'Punkte auf der negativen
					    'Seite.
NEXT x%

Die Variable x% beinhaltet den Wert x. Die Koordinaten eines Punktes
sind ja (xx). Also mu ein Punkt auf dem Koordinatensystem auf
X-Koordinate=x und Y-Koordinate=x^2 und auf X-Koordinate=-x und
Y-Koordinate=x gezeichnet werden.

Genauso geht's auch bei f(x)=(x-xy)+b, nur, da die Punkte alle um ein
paar Pixel verschoben werden mssen:

FOR x% = 0 TO 50 STEP 1
PSET ((x% * 10) + 320 + (xy# * 10), 300 - x% ^ 2 + (10 * b#))
PSET ((x% * 10) + 320 - (x% * 20) + (xy# * 10), 300 - x%^2 + (10 * b#))
NEXT x%

Logisch?! Also, theoretisch ganz leicht. Schaut Euch das Programm mal
ganz an:



'Programm: PARABEL.BAS (Zeichnet eine Parabel)
'Sprache : QBasic
'Autor   : Muffin/Cyberdream
'Datum   : 25.1.1998



DECLARE SUB Achsen ()
DECLARE SUB ZPrint (Text$, Mitte%)
SCREEN 12

ZPrint "*** Quadratische Gleichungen ***", 40
PRINT
Formel$ = "f(x) = x"
ZPrint Formel$, 40

Achsen

PSET (320, 200), 7			     '** Parabel zeichnen
FOR x% = 0 TO 50 STEP 1
PSET ((x% * 10) + 320, 300 - x% ^ 2)
PSET ((x% * 10) + 320 - (x% * 20), 300 - x% ^ 2)
NEXT x%

DO
LOOP WHILE INKEY$ = ""

CLS


eingabe:
CLS
ZPrint "** Quadratische Funktion whlen **", 40
PRINT
LOCATE CSRLIN + 4
PRINT SPACE$(30); "1 = f(x) = x + b"
PRINT SPACE$(30); "2 = f(x) = (x - xy)"
PRINT SPACE$(30); "3 = f(x) = (x - xy) + b"
PRINT SPACE$(30); "4 = Programmende"
LOCATE CSRLIN + 2, 30
INPUT "Bitte Ziffer eingeben: ", Taste%
IF Taste% = 4 THEN END
SELECT CASE Taste%
CASE IS = 1
LOCATE CSRLIN + 2, 30
INPUT "Bitte b eingeben (Bsp.: 0.5): ", B#
CLS
B# = B# * -10
Achsen
FOR x% = 0 TO 50 STEP 1
PSET ((x% * 10) + 320, 300 - x% ^ 2 + (10 * B#))
PSET ((x% * 10) + 320 - (x% * 20), 300 - x% ^ 2 + (10 * B#))
NEXT x%
SLEEP
CASE IS = 2
LOCATE CSRLIN + 2, 30
INPUT "Bitte xy eingeben (Bsp.: 0.5): ", xy#
CLS
xy# = xy# * -10
Achsen
FOR x% = 0 TO 50 STEP 1
PSET ((x% * 10) + 320 + (xy# * 10), 300 - x% ^ 2)
PSET ((x% * 10) + 320 - (x% * 20) + (xy# * 10), 300 - x% ^ 2)
NEXT x%
SLEEP
CASE IS = 3
LOCATE CSRLIN + 2, 30
INPUT "Bitte xy eingeben (Bsp.: 0.5): ", xy#
LOCATE , 30
INPUT "Bitte b  eingeben (Bsp.: 0.5): ", B#
CLS
xy# = xy# * -10
B# = B# * -10
Achsen
FOR x% = 0 TO 50 STEP 1
PSET ((x% * 10) + 320 + (xy# * 10), 300 - x% ^ 2 + (10 * B#))
PSET ((x% * 10) + 320 - (x% * 20) + (xy# * 10), 300 - x%^2 + (10 * B#))
NEXT x%
SLEEP
END SELECT
GOTO eingabe:

SUB Achsen
'Achsen zeichnen
LINE (10, 50)-(630, 440), 1, B
FOR i% = 10 TO 630 STEP 10
LINE (i%, 50)-(i%, 440), 1
NEXT i%
FOR i% = 50 TO 440 STEP 10
LINE (10, i%)-(630, i%), 1
NEXT i%


LINE (10, 300)-(630, 300), 15		     '** X-Achse
LINE (320, 50)-(320, 440), 15		     '** Y-Achse

FOR i% = 10 TO 630 STEP 10		     '** Einteilung auf X-Achse
LINE (i%, 298)-(i%, 302), 15
NEXT i%
FOR i% = 320 TO 10 STEP -100
LINE (i%, 295)-(i%, 305), 15
NEXT i%
FOR i% = 320 TO 630 STEP 100
LINE (i%, 295)-(i%, 305), 15
NEXT i%


FOR i% = 50 TO 440 STEP 10		     '** Einteilung auf Y-Achse
LINE (318, i%)-(322, i%), 15
NEXT i%
FOR i% = 300 TO 50 STEP -100
LINE (315, i%)-(325, i%), 15
NEXT i%
FOR i% = 300 TO 440 STEP 100
LINE (315, i%)-(325, i%), 15
NEXT i%
LOCATE 28
ZPrint "Abstand (kurze Striche) = 1 mm", 40
END SUB

SUB ZPrint (Text$, Mitte%)
'Zentrierte Ausgabe eines Textes
LOCATE , Mitte% - LEN(Text$) / 2
PRINT Text$
END SUB



Es liegt M*A*R*S wahrscheinlich auch bei (Dateiname: PARABEL.BAS).
{Ja, das tut es, euer City Hunter}

Viel Spa noch beim Lesen,

        Muffin.