Da normale Zahlentabellen meist unanschaulich und schwer zu verarbeiten sind, gibt es die Möglichkeit, sie grafisch umzusetzen. So kann man z. B. die Werte im normalen zweidimensionalen Koordinatensystem darstellen, wie es bei mathematischen Funktionen üblich ist. Im Gegensatz zu reinen Zahlenwerten kann man anhand eines solchen Diagrammes das Verhältnis der Werte zueinander wesentlich besser erfassen. Ein weiterer Vorteil dieser Darstellungsart liegt im sofortigen Erkennen von Steigungsveränderungen. Dies ist zum Beispiel bei der Auswertung von Meßergebnissen wichtig oder bei der Analyse von Verkaufszahlen.
Eine optisch ansprechendere Darstellungsweise erhält man mit dem Balkendiagramm. Hierbei hat man die Möglichkeit, die Werte durch verschiedene Farben oder Schraffuren zu unterscheiden oder Gemeinsamkeiten hervorzuheben.
Eine erweiterte Form dieser Grafikart ist die Säulengrafik. Der Unterschied zur Balkengrafik liegt darin, daß hier eine Räumlichkeit durch die dreidimensionale Darstellung erzeugt wird. Hiermit können auch mehrspaltige Säulenreihen erstellt werden wie es bei hochwertigen Programmpaketen (z.B. OPEN ACCESS) realisiert ist.
Auch die Kuchengrafik ist eine oft verwendete Form der grafischen Darstellung. Sie liefert übersichtliche und vor allem kompakte Bilder und wird gerne zur prozentualen Darstellung benutzt. Doch nun noch einige Worte zum Programm selbst. Das Programm „Kuchen- & Säulengrafik“ gibt die eingegebenen Werte als Säulen- und Kuchengrafik und als Diagramm aus. Bei der Eingabe ist zu beachten, daß das Programm momentan nur 18 Werte annimmt und dann automatisch mit der Berechnung beginnt; dies kann natürlich geändert werden. Die Eingabe kann man jederzeit mit „ ★ “ beenden. Das Programm stellt dann das Gesamtbild zusammen. Es werden dabei alle Grafikarten, jedoch ohne Werte, dargestellt. Zusätzlich erscheint das Menü, mit dem man nun jede beliebige Grafik auf den gesamten Bildschirm vergrößern kann. Zu dieser Vergrößerung werden auch die Werte ausgegeben. Zwischen den Grafiken und der Gesamtdarstellung kann nun beliebig umgeschaltet werden. Dazu wird nur der entsprechende Anfangsbuchstabe gedrückt.
Bei dieser Eingabe werden Groß- und Kleinbuchstaben vom Programm abgefragt, da der INPUT$-Befehl eine Unterscheidung zwischen Groß- und Kleinschrift macht und somit bei versehentlichem Drücken der CAPSLOCK Taste nicht mehr reagiert.
Das Unterprogramm zum Zeichnen der Säulen ist etwas kompliziert geworden. Dies liegt an der gewählten Darstellungsweise, bei der sich die Säulen zum Teil überschneiden. Es ist deshalb notwendig, die unter der Nebensäule liegenden Linien wegfallen zu lassen. Da es viele verschiedene Überlagerungssituationen gibt, ist es notwendig jede Linie getrennt zu untersuchen. Dies erklärt die hohe Anzahl an Abfragen und Variablen für die Säulengrafikroutine.
Wenn die eingegebnen Werte kleine ’Kuchenstücke’ erzeugen sollen, wird man feststellen müssen, daß diese Stücke im Kuchen einfach fehlen. Das Basic schafft es nicht Teilstücke mit kleiner Bogenlänge darzustellen. Dies hat den unschönen Effekt, daß der Außenkreis nicht immer geschlossen ist, sondern eventuell Lücken aufweist. In diesem Programm wurde deshalb zusätzlich ein Kreis gezogen. Eine einwandfreie Kuchenroutine müßte man sich allerdings selbst erstellen.
Beim Unterprogramm „Beschriftung“ fällt auf, daß der GOTOXY-Befehl nur jeden zweiten Bildschirmpunkt anspringen kann. Für eine genaue Beschriftung der Diagramme wurde deshalb der SPC-Befehl benutzt. Da dieser jedoch die Bildschirmzeile bis zum Positionierungspunkt löscht, muß man die Werte von rechts nach links schreiben.
Beim Eingeben des Programms müssen die Zeilennummern nicht, wie im Listing angegeben, abgetippt werden. Sie können beliebig gewählt werden, weil das Programm keine Sprünge zu Zeilennummern enthält. Zum besseren Verständnis des Listings wurde ausschließlich mit Labels gearbeitet, die im Klartext ausdrücken wohin der Sprung erfolgt. Somit entfällt ein umständliches Suchen nach Sinn und Auswirkung des Sprunges. Das Programm ist so angelegt, daß es leicht den eigenen Anforderungen angepaßt werden kann. Das Listing besitzt eine übersichtliche TOP-DOWN-Struktur, von der aus die verschiedenen Unterprogramme aufgerufen werden. Als Unterprogramme sind die Zeichenroutinen für die verschiedenen Grafiken und die Beschriftungen angelegt. Fast alle in diesen Routinen verwendeten Koordinaten sind als Parameter definiert und somit leicht abzuändern. Die Parameter werden vor dem Aufruf des jeweiligen Unterprogramms definiert.
100- 170 | Bildschirm vorbereiten, Dimensionierung |
170- 300 | Eingabe der Werte |
270 | Bilden der Summe der Eingabewerte für Kuchengrafik |
280 | Ermitteln des größten Elements der Eingabewerte |
320 | Beginn des Hauptprogramms |
340 | Faktor für Ausdehnung in x-Richtung |
350 | Faktor für Ausdehnung in y-Richtung |
380- 430 | Definieren der Variablen und Aufruf der Unterprogramme |
450 | Berechnen der Ausdehnungsfaktoren für die Vergrößerung |
460- 600 | Hauptmenü |
620- 720 | Definieren der Variablen und Aufruf des jeweiligen Unterprogramms |
770- 860 | Programmende oder Neustart |
1000-1370 | Unterprogramm: Balkengrafik |
1020 | Zeichnen der x-Achse |
1040-1120 | Berechnen der LINE-Koordinaten |
1130-1150 | Ziehen der Linien 1-3 |
1160-1320 | Berechnen und Ziehen der 4.-7. Linie (z. T. verdeckte Linien) |
1330 | COLOR für FILL-Befehl |
1340 | Ausfüllen der Vorderseite der Säule |
1360 | COLOR-Befehl auf 'normal’ setzen (!) |
1500-1580 | Unterprogramm zum Beschriften von Balkengrafik und Diagramm |
1510-1520 | Y-Achse beschriften |
1530-1570 | Position berechnen und X-Achse beschriften |
2000-2140 | Unterprogramm: Diagramm |
2010-2050 | Achsen und Einteilungslinien ziehen |
2060-2120 | Koordinaten berechnen und Linien ziehen |
3000-3100 | Unterprogramm: Kuchengrafik |
3010 | Kreis ziehen |
3020 | Kreisbogenfaktor berechnen |
3040-3050 | Anfangs- und Endwinkel des Kreissektors berechnen |
3060-3070 | Kreissektor zeichnen und ausfüllen |
3090 | COLOR-Befehl zurücksetzen (!) |
3500-3570 | Unterprogramm zum Kennzeichnen der Kreissektoren |
3520 | COLOR-Befehl setzen |
3530 | Beschriftungskreise zeichnen und ausfüllen |
3540 | Position berechnen und beschriften |
wo | Feld für Eingabewerte |
E$ | allgemeiner Eingabestring |
A | allgemeine Schleifenvariable |
NR | Anzahl der Eingabewerte |
SU | Summe aller Eingabewerte |
YM | größter y-Wert |
XY | Abstand zum nächsten Wert (x-Achse) |
YA | Vergrößerungsfaktor y-Achse |
BX1.BX2.BY1 | Koordinaten für x,y-Achse |
XB | Abstand der Säulen (!) |
XB/2 | Breite der Säule |
YB | Faktor für Lage der z-Achse |
X1,X2,X3,X4 | Koordinaten für Balken |
Y1,Y2,Y3,Y4,Y5 | (siehe Zeichnung) |
DX1 ,DX2,D Y1 ,DYY | Koordinaten für x,y-Achse |
XI,Y 1,X2,Y2 | Koordinaten für LINE-Befehl |
CX1,CY1,R1 | Koordinaten für Kreismittelpunkt und Radius |
W1 | Kreisbogenfaktor |
WA,WE | Anfangs- und Endwinkel |
100 ’ GRAFIK V 1.0
110 ’ by mark
120 ’
130 programmstart :
140 CLEAR:DIM W(30)
150 A$=" M = MENUE B = BALKEN K = KUCHEN D - DIAGRAMM"
160 A$=A$+" --> ENDE"
170 COLOR 1,0,1: FULLW 2: CLEARW 2 : CLOSEW 3
180 GOTOXY 10,0:PRINT "GRAPHISCHE DARSTELLUNG"
190 GOTOXY 5,2: PRINT"... bitte die Werte eingeben ! ENDE = :*:"
200 GOTOXY 0,5:NR=0
210 ’------------------------------------------
220 eingabe :
230 WHILE E$<>"*" AND NR <18
240 NR=NR +1
250 PRINT " WERT ("NR ")= ";: INPUT E$
260 W(NR)=ABS( VAL(E$))
270 SU=SU+W(NR)
280 IF YM< W(NR) THEN YM=W(NR)
290 WEND
300 IF E$="*" THEN NR=NR-1
310 ’------------------------------------------
320 gesamtgrafik :
330 CLEARW 2
340 XA= INT (240/NR)
350 YA=100/YM
370 GOTOXY 5,1: PRINT"G R A F I K V 1.0"
380 BX1= 5:BX2=300:BY1=180
390 GOSUB balkengrafik
400 DX1=10:DX2=280:DY1=320:DYY=200
410 GOSUB diagramm
420 CX1 = 480:CY1 = 100: R1=80
430 GOSUB kuchengrafik
440 ’ ausdehnung
450 XA=2*XA:YA=1.8*YA
460 ’ menue
470 GOTOXY 25,13: PRINT "MENUE"
480 GOTOXY 25,15: PRINT "BALKENGRAFIK"
490 GOTOXY 25,16: PRINT "KUCHENGRAFIK"
500 GOTOXY 25,17: PRINT "DIAGRAMM"
510 GOTOXY 25,18: PRINT " ENDE"
520 ’-----------------------------------------------
530 menue :
540 E$=INPUT$(1)
550 IF E$="M" OR E$="m" THEN GOTO gesamtgrafik
560 IF E$="B" OR E$="b" THEN GOTO b
570 IF E$="K" OR E$="k" THEN GOTO k
580 IF E$="D" OR E$="d" THEN GOTO d
590 IF E$="E" OR E$="e" THEN GOTO ende
600 GOTO menue
610 ’
620 b: BX1=10:BX2=640:BY1=250
630 CLEARW 2
640 GOSUB balkengrafik : GOSUB beschriftung : GOTO auswahl
650 '
660 k: CX1=200:CY1=155:R1=150
670 CLEARW 2
680 GOSUB kuchengrafik :GOSUB kuchenbeschriftung :GOTO auswahl
690 '
700 d: DX1=20:DX2=560:DY1=250:DYY=10
710 CLEARW 2
720 GOSUB diagramm : GOSUB beschriftung
730 '
740 auswahl :
750 GOTOXY 0,18: PRINT A$ : GOTO menue
760 '
770 ende :
780 GOTOXY 5,5:PRINT"NEUE DATEN"
790 GOTOXY 5,7:PRINT" ------> ENDE"
800 '
810 menue1 :
820 E$=INPUT*il)
830 IF E$="N" OR E$="n" TUEN GOTO programmstart
840 IF E$="E" OR E$="e" THEN END
850 GOTO menue1
860 END
870 ’ --------------------------
1000 balkengrafik :
1010 COLOR 1,1,1,0,1
1020 LINEF BX1,BY1,BX2,BY1
1030 FOR A=NR TO 1 STEP 1
1040 XB=XA: YB=4
1050 X1=A*XA
1060 X2=X1-XB/2
1070 X3=X1+XB
1080 X4=X1+XB/2
1090 Y1=BY1-W(A)*YA
1100 Y2=BY1-XA/YB
1110 Y3=Y1-XA/YB
1120 Y5=BY1-XB/(YBK2)
1130 LINEF X1,BY1,X1,Y1 : REM 1
1140 LINEF X2,BY1,X2,Y1 : REM 2
1150 LINEF X1,Y1,X2,Y1 : REM 3
1160 Y6=Y5-W(A)*YA: X44=X4
1170 IF W(A)*YA>=W( A+1 )*YA-XB/8 THEN X44=X3: Y6=Y3
1180 LINEF X1,Y1,X44,Y6 : REM 4
1190 LINEF X2,Y1,X2+XB,Y3 : REM 5
1200 IF Y3>BY1-W(A+1)*YA THEN GOTO noline
1210 X5=X4+4*(BY1-W(A+1)*YA-Y3)
1220 IF X5>X3 THEN X5=X3
1230 LINEF X4,Y3,X5,Y3 : REM 6
1240 noline: IF(A=NR) THEN X4=X3:Y5=Y2:GOTO line7
1250 Y5=BY1-XB/(YB*2)
1260 IF Y5<BY1-W(A+1)*YA THEN Y5=Y2: X4=X3
1270 line7: LINEF X1,BY1,X4,Y5 : REM 7
1280 IF (A=NR) THEN Y4=Y2 : GOTO lineS
1290 Y4=(BY1-(W(A+1)*YA))-XB/(YB*2)
1300 IF (Y4 >Y2) THEN Y4 = Y2
1310 IF (Y4<Y3) THEN Y4=Y3
1320 line8: LINEF X3,Y3,X3,Y4 : REM 8
1330 COLOR 1,1,1,A,2
1340 FILL X2+(X1-X2)/2,BY1-(BY1-Y1)/2,1
1350 NEXT A
1360 COLOR 1,0,1,0,1
1370 RETURN
1380 ’-----------------------------------------
1500 beschriftung :
1510 GOTOXY 0,3: PRINT YM
1520 GOTOXY 0,9: PRINT YM/2
1530 FOR A=NR TO 1 STEP 1
1540 X=(A*XA-XB/2)/8
1550 IF A MOD 2 =0 THEN Y=16 ELSE Y=15
1560 GOTOXY 0,Y :PRINT SPC(X) W(A)
1570 NEXT A
1580 RETURN
1590 ’ ------------------------------------------
2000 diagramm :
2010 LINEF DX1,DY1,DX2,DY1
2020 LINEF DX2,DY1,DX2,DYY
2030 LINEF DX1,DY1,DX1,DYY
2040 LINEF DX1,DY1-YM*YA,DX2,DY1-YM*YA
2050 LINEF DX1,DY1-(YM/2)*YA,DX2,DY1-(YM/2)*YA
2060 FOR A=1 TO NR-1
2070 X1=(A*XA)-XA/4
2080 Y1=DY1-W(A)*YA
2090 X2= ((A+1)*XA)-XA/4
2100 Y2=DY1-W(A+1)*YA
2110 LINEF X1,Y1,X2,Y2
2120 NEXT A
2130 COLOR 1,0,1
2140 RETURN
2150 ’-----------------------------------------
3000 kuchengrafik:
3010 CIRCLE CX1,CY1,R1
3020 W1=3600/SU : WE=0
3030 FOR A=1 TO NR
3040 WA=WE
3050 WE=WE+W(A)*W1
3060 COLOR 1,1,1,A,2
3070 PCIRCLE CX1,CY1,RI,WA,WE
3080 NEXT A
3090 COLOR 1,0,1
3100 RETURN
3110 ' ----------------------------------
3500 kuchenbeschriftung :
3510 FOR A=1 TO NR
3520 COLOR 1,1,1,A,2
3530 CIRCLE 500,A*(340/20)-5,8 : FILL 500,A*340/20-5
3540 GOTOXY 30,A-1: PRINT W(A)
3550 NEXT A
3560 COLOR 1,0,1
3570 RETURN
3580 ’ ---------------------------------------------