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.