APPLICATIONSBUREAUTIQUE ★ BALKENDIAGRAMM EINGABE (SCHNEIDER CPC-WELT) ★

Balkendiagramm Eingabe (Schneider CPC-Welt)Applications Bureautique
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Die Säulengrafik wird vollendet

Erinnern Sie sich an die Säulengrafik, die in der letzten Folge fertig wurde? Richtig, alles funktioniert, aber für die praktische Arbeit fehlen ein paar Feinheiten, die eine Grafik erst vollkommen werden lassen. Mit diesem Artikel soll das Programm abgeschlossen werden. Und damit es recht bequem wird, wollen wir auch diesmal wieder den CPC die größte Arbeit erledigen lassen.

Erstes Problem: Was da auf dem Bildschirm zu sehen ist, macht einen sparsamen Eindruck. Niemand weift, wie groß die Werte sind und um welche es sich handelt, wenn er sie nicht selbst eingegeben hat. Es fehlt also eine ordentliche Beschriftung des Bildes.

Titel — damit man weiß, worum es geht

Der guten Form halber sollte zuerst einmal eine Bildüberschrift erstellt werden, die in der obersten Zeile zentriert wird. Die Berechnung dieser Zentrierung ist recht einfach.

Alle Zeichen eines Titelstrings (titel$) werden durch den Befehl LEN festge stellt. Die Hälfte dieses Wertes sollte in der Mitte stehen, so daß die Berechnung für die LOCATE-Position (Zeile 130) folgendermaßen ausschaut:

Position=40-INT(LEN(titel$)/2)

Die Berechnung wurde gleich im LOCATE-Befehl der Anweisung untergebracht. Die Anwendung des Integerbefehls (INT) garantiert auf-oder abgerundete Zahlen. Per-fektionisten werden sofort feststellen, daß der CPC ohnehin rundet, bevor er den Wert zur LOCATE-Bestimmung hemimmt.

Es wäre deshalb auch möglich, die Anweisung LOCATE 10.2,11.7 ausführen zu lassen. Der Interpreter rundet dann halt selbst. Aber es gehört auch zum „guten Programmierstil“, immer die Parameter zu liefern, die dann auch wirklich benötigt werden. In diesem Fall Ganzzahlen.

Das Balkendiagramm aus Heft 2/87 war ja funktionstüchtig. Geben Sie aber doch bitte einmal folgende Werte ein: 5.5, 102, 7.3, 7.7 und 7.4, Sie werden sehen, daß die Zahlen einfach nicht weit genug auseinanderliegen, um dies auch auf dem Bildschirm feststellen zu können. Gerade 7.3 und 7.4 sind kaum zu unterscheiden.

Eine Skala (auch die wird noch eingebaut) hilft da nur geringfügig. Es müßte ja immer eine Hardcopy angefertigt werden, uni dann ein Lineal anlegen zu können. Besser ist es, Sie ziehen die einzelnen Werte etwas auseinander.

Wenn von jedem Wert eine Basis abgezogen wird (hier 5), dann umfaßt die Maximalhöhe dieser Zeichnung nur noch 5.2 (statt bisher 10.2). Mit dieser Streuung macht sich der Unterschied von 0.1 natürlich schon besser bemerkbar.

In Zeile XY wird also eine Abfrage eingebaut, mit deren Eingabe der abzuziehende Basiswert bestimmt werden kann. Betätigen Sie hier nur Enter, bleibt alles beim alten, das heißt, der Wert wird in voller Größe dargestellt.

Wer es mit diesem Beispiel einmal ausprobieren will, sollte als abzuziehenden Betrag einfach die 5 eingeben. Er wird feststellen, daß kleinere Wertdifferenzen besser bemerkt werden.

Das Abfragemenü alleine nutzt allerdings nichts. Die Eingabe unter dem Variablennamen abz (=Abzug) muß auch mitberechnet werden und sollte deshalb bei der Maximalberechnung (in Zeile 110 und 160) und bei der Zeichnung (Zeile 200) zum Abzug gebracht werden.

Der Umgang mit dem TAG-Kommando

Es wäre weiterhin guter Stil, wenn die Säulen auch korrekt beschriftet werden könnten. Aus Platzgründen (man stelle sich 30 Wertbezeichnungen nebeneinander vor) geht dies nicht. Aber ein wenig Ordnung darf schon sein, deshalb werden die Zahlen wenigstens durchnumeriert und am unteren Band der Grafik entsprechend beschriftet. Als Variable können wir den - ohnehin vorhandenen — Namen i verwenden, es gilt nur noch, die richtigen Abstände zu ermitteln.

Die Routine zur Einrichtung der Säulenabstände paßt sich ja automatisch an die Anzahl der Werte an, und danach hat sich auch die Numerierung zu richten. Setzen wir nun einen Text auf dem Grafikbildschirm, dann kommen wir mit dem LOCATE-Befehl nicht sehr weit, hier stehen ja nur die Koordinaten 1 bis 80 bzw. 1 bis 25 zur Verfügung. Es ergäbe sich also eine Bildschirmauflösung von 80*25 Punkten, jeder so groß wie ein Cursor. Der Grafikbildschirm arbeitet mit 640*400 Punkten. Der CPC hält unter diesen Umständen für die Positionierung den Befehl TAG bereit.

Rechnen mit der Zeichenmatrix

Nach dieser Anweisung kann der Grafikkursor (ORIGIN) als LOCATE-Position benutzt werden. Von der 8*8-Matrix eines Buchstabens wird dann die linke obere Ecke auf den angesprochenen Bildpunkt gesetzt (siehe Skizze). Wer die Rechnerei zu Ende denken will, der sollte berücksichtigen, daß im Modus 2 ein Zeichen eine Höhe von 16 Punkten (25*16=400) hat, weil die Grafikpunkte doppelt angesprochen werden. Die Höhe der Numerierung ist im Listing auf Punkt 22 festgelegt.

Wenn die Zeichnung einer Säule abgeschlossen ist (Berechnung in Zeile 100, Ausführung in Zeile 220), dann haben wir als endgültige Breite den bi%. Wenn dieser halbiert wird, dann entspricht dies in etwa der Position der Zahl. Etwas ungenau deshalb, weil eine Zahl acht Punkte breit ist und noch einmal vier abgezogen werden müssen, um sie genau unter einer Säule zu zentrieren. Auch hier wieder ein Denkfehler, den wir gleich korrigieren wollen.

Wenn der CPC einen numerischen Wert ausgibt, dann tut er dies mit Vorzeichen. Das Vorzeichen ist aber nur dann zu sehen, wenn es negativ ist, positiven Zahlen wird ein Leerzeichen vorangestellt.

Im Falle des Balkendia-grammes heißt dies, daß die schöne Berechnung im vorigen Absatz die Zahlen (noch) nicht in die Mitte der Säulen zentriert.

Es gibt viele Wege zum Ziel — etwa die Umwandlung der Zahl in ein Textstring oder die Verwendung enes USING-Formates —, wir wählen aber den einfachsten und ziehen einfach weitere acht Punkte (die des Leerzeichens), ab, insgesamt also zwölf. Zeile XY heißt jetzt also:

TAG:ORIGIN x%+(br%/2)-12,22.PRINT i:

Die Breite des Balkens (br%) wird halbiert und zum Startpunkt (x%) hinzugezählt. Davon müssen noch einmal zwölf Punkte abgezogen werden, vier für eine halbe Zeichenbreite, acht für das Leerzeichen, welches der CPC vor einer Zahl ausgibt. Daß am Ende der TAG-Befehl mit TAGOFF ausgeschaltet wird, ist hier eigentlich nicht so wichtig, gehört aber zum guten Stil.

Es könnte in einem anderen Listing ja durchaus einmal sein, daß zwischendurch wieder einem normale Textausgabe ausgefuhrt werden soll. Beachten Sie auch unbedingt das Semikolon hinter der PRINT-Anweisung! Vergessen Sie es, dann liefert der CPC noch ein Sonderzeichen nach.

Werthöhe an der Ordinalachse

Noch immer ist die Grafik nicht fertig, denn ein wichtiger Bestandteil ist die Skalierung der Ordinalachse oder y-Achse. Die Gestaltung kann ausnahmsweise einmal nicht dem CPC überlassen werden. Stellen Sie sich vor, der höchste Wert betrage 10.4 und sollte so auch als Skala eingetragen werden. Die Hälfte wäre dann 5.2, eine übersichtliche Einteilung käme nicht zustande, und auch Rundungen würden nichts helfen.

Es muß also ein weiteres Menü eingebaut werden, in dem der Anwender die Höchstgrenze eingibt, nach der berechnet wird. Es ergeben sich dann gegenüber dem bisherigen Listing gleich mehrere Probleme:

Erstens richtete sich die Skala bisher nach dem größten Wert. Wird sie nun höher ausgerichtet, dann muß auch der Maximalwert niedriger berechnet werden.

Als nächstes muß dann eine Einteilung berücksichtigt werden. Hier hat sich das „Viertelmaß“ durchgesetzt, das heißt, die Skalenhöhe wird in Vierteln angezeigt. Leicht zu rechnen, so scheint es, jedoch muß auch hier wieder ein Basiswert berücksichtigt werden, den wir eventuell abziehen wollen. Zu guter Letzt muß natürlich auch wieder exakt positioniert werden; aber dies ist das geringste Problem, haben wir es doch mit relativ festen Werten zu tun.

Die Einteilung geschieht innerhalb einer FOR-NEXT-Schleife, beginnend in der Zeile 150. Hier wird, an der Grundlinie startend (Punkt 30), einfach nur für jeden Schleifendurchlauf ein Viertel (350/4) hinzugezählt und ein kleiner Querstrich gezogen-

Bevor wir jetzt an die Eintragungen der Zahlenwerte gehen, ist folgender Sachverhalt zu klären:

Saubere Ausgabe für die Endfassung

Die Skalenhöhe übernimmt ab jetzt die Rolle des Maximalwertes. Der Benutzer der Grafikroutine muß selbst aufpassen, daß diese Zahl höher ist, als der größte Wert. Die Routine, in der der Maximalwert (grwert) ermittelt wird (siehe vorige Ausgabe), kann also entfallen.

Statt dessen wird die Variable in der Menüzeile 80 „per Hand“ bestimmt. Mit diesem einfachen Trick werden komplizierte Änderungen innerhalb der Zeichenroutine umgangen. Für die Eintragung auf der Ordinalachse muß aber eine Zwischenvariable berechnet werden, denn auch hier soll ja der abgezogene Basisbetrag ersichtlich sein. Die Zahl wurde rwt genannt, abgeleitet von Restwert. Sie wird ermittelt, indem wir vom Maximalwert (=Skalen-höhe) die Basis abziehen.

Dieser Restwert wird dann in der Ausdruckschleife berücksichtigt. Zeile 160 ist aber derart umfangreich geworden, daß sie hier einmal im einzelnen erklärt werden muß:

ORIGIN 1,38+i*(350/4): TAG :PRINT USING "##.##";i+(rwt/4)+abz;:TAGOFF

Der erste Teil beschäftigt sich mit der Positionierung des Grafik-Kursors, innerhalb der Schleife wird ein Viertel der Höhe hinzugezählt. Die USING-Anweisung zur Textformatierung muß hier nicht weiter erklärt werden. Bedauerlicherweise reicht der verfügbare Platz nur für vierstellige Zahlen einschließlich des Dezimalpunktes. Dies kann jedoch jeder ändern, bei dreistelligen Vorkoni in as teile n

muß halt auf Nachkommazahlen verzichtet werden.

Werden die Werte aufgelistet, dann darf natürlich nur ein Viertel des Restwertes (rwt) addiert werden, denn dies entspricht ja der dargestellten Säulenhöhe. Andererseits muß aber die Basis (abz) wieder hinzugezählt werden, sonst wird das Zahlenergebnis verfälscht.

Auch hier sind wieder die Befehle TAG und TAGOFF zu finden; warum, wurde ja bereits erklärt. Und wenn Sie sich fragen, wie es zur Grafik-Punktzahl 38 kommt, hier noch einmal kurz die Erklärung: Ein Buchstaben hat im Modus 2 genau die Höhe von 16 Punkten.

Die Ordinalachse beginnt bei Punkt 30, und das Zeichen wird in der Unken oberen Ecke gesetzt. Um es also etwas tiefer zu zentrieren, müssen acht Punkte hinzugezählt werden.

Das Säulendiagramm ist damit endgültig fertig. Beachten Sie, wie kurz ein derartiges Utility sein kann, ohne deshalb an Leistungsfähigkeit zu verlieren.

Wenn Sie statt der Eingaberoutine die Daten aus einem anderen Programm übernehmen, dann paßt das Listing zu jeder Haushaltsbuchführung oder kleinen Kalkulation. Für diejenigen, die ein eigenständiges Diagrammpaket haben wollen, werden wir noch andere Routinen vorstellen.

SW

★ PUBLISHER: Schneider CPC-Welt
★ YEARE: 1987 , 1988
★ CONFIG: 64K + AMSDOS
★ LiCENCE: LISTING
★ COLLECTION: SCHNEIDER CPC-WELT 1988
★ LANGUAGE:
★ AUTHOR(S): ???
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Balkendiagramm  Eingabe    (Schneider  CPC-Welt)    LISTING    GERMANDATE: 2021-06-21
DL: 136
TYPE: PDF
SiZE: 374Ko
NOTE: 1 page/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Balkendiagramm (CPC Amstrad International)
» Applications » Diagramm 464
» Applications » 3D-Balkendiagramme (Computer Kontakt)
» Applications » Balkendiagramme (Computer Schau)
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 486 millisecondes et consultée 632 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.