APPLICATIONSBUREAUTIQUE ★ TAB-CALC ★

Tab-CalcApplications 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 ★ 

1, 2,3-Kalkulieren mit der Hand ist nun vorbei

Ein Tabellenkalkulationsprogramm hilft auch dem Heimcomputerbesitzer, seine Finanzlage leichter im Griff zu behalten. Doch woher nimmt man die dafür notwendige Software? Ganz einfach, man schreibt sie sich selbst.

Den meisten sind »Lotus 1-2-3« oder »Multiplan« ein Begriff. So ein Kalkulationsprogramm (auf englisch »Spreadsheet«) für den eigenen Computer zu besitzen, ist der Wunsch vieler Heimcomputer-Besitzer. Doch die professionell angebotenen Programme sind entweder zu teuer oder es gibt sie nicht für den eigenen Computertyp. Selbstschreiben ist dann die einzige Lösung.

Unser kleines Tabellenkalkulationsprogramm kann sich natürlich nicht mit den »Stars« messen, aber das will es auch gar nicht. Es soll vielmehr zeigen, wie man so etwas programmiert. Daß dabei ein kleines übersichtliches, benuteer-freundliches und für den Hausgebrauch vollkommen ausreichendes Programm abfällt, ist nur ein positiver Nebeneffekt.

Geschrieben ist unser Programm auf dem Commodore 64. Deren Besitzer können deshalb das Listing auch direkt abtippen. Alle anderen müssen sich leider ihre Version anpassen, was aber keine Schwierigkeiten darstellt, da wir nur allgemeingültige Basic-Befehle benutzen und eventuelle Spezialzeichen erklären.

Vorab muß aber die Frage geklärt werden, was eine Tabellenkalkula-tion überhaupt ist. Prinzipiell handelt es sich dabei um eine Matrix aus Spalten und Zeilen, deren Felder mathematisch miteinander verknüpft werden können. Das klingt wissenschaftlich und soll deshalb an einem einfachen Beispiel erklärt werden.

Damit uns das Prinzip klar wird, betrachten wir uns einmal ein ganz einfaches Beispiel einer Tabellen-kalkulation. Eine Spalte soll jeweils den Produktnamen enthalten, eine zweite eventuell die Bestellnummern, eine weitere die Stückzahlen, die nächste den Einzelpreis und so weiter. Die Summenspalte ist dann die eigentliche Kalkiüationsspalte In ihr werden die Stückzahl- und die Einzelpreisspalte miteinander verknüpft, das heißt multipliziert. Die Gesamtsumme liefert dann die Addition der einzelnen Summenfelder. Alle anderen Felder dienen nur der Information, haben also mit der eigentlichen Kalkulation wenig zu tun.

Tab-Calc arbeitet mit Feldern

Unser Programm ist durch die Darstellung von maximal 40 Zeichen pro Zeile bei den meisten Heimcom-putem etwas eingeschränkt. Zwar kann man mit einem komplizierten Spreadsheet-Programm ohne weiteres breitere Tabellen aufbauen, aber um das Funktionsprinzip zu verstehen, ist das nicht nötig. »Tab-Calc« (so der phantasievolle Namen unserer Tabellenkalkulation) hat deshalb nur vier Spalten mit je neun Zeichen und 20 Zeilen, also 80 Felder. Üblicherweise sind die Spalten einer Tabelle mit Buchstaben, die Zeüen mit Zahlen gekennzeichnet, ähnlich wie ein Schachbrett. So auch bei uns. Abgeschlossen wird die Tabelle durch die Kommandozeile ganz oben und die beiden unteren Menüzeilen für Benutzerhinweise.

Unser Programm arbeitet mit eindimensionalen Feldern, um einzelne Schritte leichter nachvollziehbar zu machen. Wie wir wissen, stehen vier Spalten für die Eingabe zur Verfügung. Aus diesem Grund brauchen wir auch vier Variable, die wir mit A$, B$, C$ und D$ bezeichnet haben. Weiterhin brauchen wir für die Formeln und Ergebnisse die Variablen F$ und ES, und als deren Zähler E und T.

Um Berechnungen durchführen zu können, müssen später die übernommenen Eingaben von einer Stringvariablen in eine numerische Variable überführt werden, beispielsweise A$ in A (Zeile 1020 bis 1030). Deswegen brauchen wir noch A, B, C, D , 5 und Z. Alle diese Platzhalter werden bei uns auf 20 dimensioniert (Zeüe 230 bis 240).

Den Bildschirmaufbau sollte man als GOSUB-Block ablegen, da er des öfteren angesprungen wird. Im Bild auf Seite 84 sehen Sie den üblichen Aufbau einer Maske für ein Kalkulationsprogramm. In den Fußleisten befinden sich schon die Wahlmöglichkeiten des Hauptmenüs. Für die Bildschirmgestaltung haben wir uns die Adressen 211 und 214 des Commodore 64 zunutze gemacht. In diesen beiden Adressen wird die aktuelle Cursor-Position festgelegt. Besitzer anderer Computer müssen diese Adressen aus Ihrem Handbuch herausholen. Der Wert der Adresse 211 entspricht der aktuellen Spalte und der von 214 der aktuellen Zeile des Cursors. In Zeile 250 unseres Programms wird die aktuelle Cursor-Position verändert.

Um die entsprechende Stelle auf dem Bildschirm anzusprechen, werden z und s neue Werte zugeordnet; wobei s kleiner oder gleich 40 und z kleiner als 25 sein muß. Die folgenden Zeilen schreiben die Anweisungen. Nun muß das Programm auf eine der Wahlmöglichkeiten reagieren und dann anschließend in die jeweilige Routine verzweigen.

Die Menüabfrage erfolgt mit »GET«, da bei Abfrage mit »INPUT« das störende Fragezeichen erscheint und ein Bestätigen mit Return notwendig ist. Um den jeweiligen Bereich anzuzeigen, in dem man sich gerade befindet, erscheint links oben ein »>« und der entsprechende Anfangsbuchstabe, beziehungsweise das Zeichen des Arbeitsmodus. Dies ist sicher nicht unbedingt notwendig, aber es ist bestimmt hilfreich zu wissen, was man gerade macht.

Als nächstes wollen wir die einzelnen Routmen besprechen, die man vom Menü aus erreichen kann. Die wichtigste ist sicher die Eingabe.

Cursor mit »Bewegungsfreiheit«

Sechs Funktionen sind bei der Eingabe wichtig. Der Cursor muß in alle vier Richtungen frei bewegbar sein, die Eingabe muß bestätigt werden können und das Programm muß danach in das Menü zurückkehren. Für die »normale« Eingabe steht dann die restliche Tastatur zur Verfügung. Fehler können jederzeit überschrieben werden, da der Zähler bis zum Abschluß der Eingabe nicht geändert und so das gleiche Feld immer wieder angesteuert wird.

Zu Anfang steht der Cursor im Feld »al« ganz oben links (Zeile 560). Die Abfrage der Eingabe erfolgt bei unserem Programm aus den obengenannten Gründen wieder mit der GET-Funktion. Der Cursor wird mit den Funktionstasten gesteuert, aber hier bietet sich natürlich jede andere Taste genauso gut an. Die Variable z ist der Zeilenzähler, das s der Spaltenzähler. Je nach Cursorrichtung wird eins dazugezählt oder abgezogen. Wichtig ist in diesem Zusammenhang, daß eine kleine Routine die Variablen auf gültige Werte abfragt, damit beispielsweise der Cursor nicht plötzlich »neben« dem Bildschirm steht. Am einfachsten bastelt man sich dafür eine kleine Routine mit einer AND-Verknüp-fung. In unserem Programm finden Sie die notwendigen Befehle in den Zeilen 580 bis 610rNach -dieser Kontrolle und der Ausführung der Anweisung muß wieder zu der GET-Routine zurückgesprungen werden.

In unserem Programm ist die Eingabe der einzelnen Wörter auf sieben Zeichen begrenzt. Der Grund ist, wie schon erwähnt, in der beschränkten Zeichenzahl pro Zeile zu suchen. Diese Begrenzung kann natürlich jederzeit geändert werden.

Platzhalter vereinfacht die Kalkulation

Will man es ganz komfortabel haben, dann sollte man sie variabel über das Programm gesteuert gestalten. Unser Cursor darf natürlich auch nach der Eingabe nicht in dem alten Feld stehen bleiben, deshalb wird er in der Zeile 250 gelöscht.

Für die richtige Numerierung der Eingabe sorgt ein Zähler mit dem Namen »w«. Die Variable »Z(w> erhält die momentane Zeilennummer; »S(w)« die Spaltenzahl. Die beiden Markierungen sind für die spätere Ausgabe an der richtigen Stelle von entscheidender Bedeutung.

Die Felder, in denen die eigentliche Kalkulation gemacht wird, müssen zu Anfang mit einem Platzhalter versehen werden. Dieser Platzhalter enthält die mathematische Formel, nachdem die ausgewählten Felder verknüpft werden. Die Ein gäbe des Platzhalters erfolgt in der Kommandozeile. Um in die erste Büdschirmzeüe zu gelangen, braucht man nicht extra die Zeilenzahl neu einzugeben. Hier genügt »HOME« in der Printzeile. Der Cursor steht jetzt oben links. Die Abfrage erfolgt dann mit »INPUT«. Wichtig ist, daß die Kommandozeile nach Übernahme des Platzhalters wieder vollständig gelöscht und der Ergebnisplatzhalter an der vorgesehenen Stelle ausgedruckt wird. Ein inverser Pfeil vor dem Platzhalter kennzeichnet diesen. Als Namen wurden »e(1)«, »e(2)« gewählt und je nachdem wieviele Platzhalter man setzen und später Formeln eingeben will.

Dadurch, daß wir mit vier Spalten arbeiten, brauchen wir auch vier Variable (A$, B$, C$ und D$) für die Datenzuweisung. Die Zuordnung zu dem richtigen Feld geschieht durch einfaches Abfragen der Spalte, in der der Cursor gerade steht. Bei unserem Programm ist die erste Spalte, die beschrieben wird, die mit der Nummer 3. Mit »IF s=3 THEN GOTO...« kommen wir zu der richtigen Routine. Erinnern wir uns. daß die Spaltenzahl sich immer um acht er--höht (Breite eines Feldes), so muß »s« noch auf 11,19 und 27 abgefragt werden (Zeilen 740 bis 770).

Ein kleines Beispiel veranschaulicht die Eingabe in ein bestimmtes Feld. In der Spalte a soll ein Wert eingegeben werden. Die indizierte Variable A$(z-1) bestimmt die Zeile, die erste Spalte ist durch A$ gekennzeichnet. In unserem Beispiel wird die Eingabe erst auf die Länge abgefragt (notwendig, da wir nur maximal sieben Zeichen eingeben können). Ist die Eingabe formal nicht korrekt, so geht es zurück in die Eingaberoutine. Eventuelle alte Eintragungen werden in Zeile 250 gelöscht. Die andern drei Spalten werden analog mit den drei anderen String-Variablen bearbeitet. Mit »£« kommt man wieder in das Menü zurück.

Nun soll alles, was in den Variablen »A$«, »B$», »CS«, »DS« und den Ergebnis-Platzhaltern abgelegt wurde, auf dem Bildschirm ausgegeben werden. Dies geschieht wiederum durch eine Unterroutine Dieser Block befindet sich in den Zeilen 2200 bis 2240. Als erstes werden die Ergebnis-Platzhalter ausgegeben. In der Fassung dieses Programms sind zehn Ergebnisse und Formeleingaben möglich, was jedoch jederzeit beliebig erweitert werden kann (Dimensionierung beachten!). Mit einer FOR-NEXT-Schleife von 1 biß 10 werden die Feldinhalte ausgegeben, indem der Cursor durch z=z(i) und s=s (i) (wir hatten die Werte von z(i) und s(i) bei der Ergebnis-Platzhaltereingabe durch die aktuelle Zeile beziehungsweise Spaltennummer definiert) an die vorgesehene Stelle gesetzt wird und der Platzhalter selbst (=F$(I)) mit einem inversen »Pfeil links« zur Kennzeichnung an diese Stelle geschrieben wird.

Variablenausgabe einfach gelöst

Etwas anders ist die Wiedergabe der vier Variablen A$ bis D$ gelöst. Nochmal zur Erinnerung; Wir haben gesagt, das »z« der Zeile ist immer um eins größer als unsere Zeilennumerierung. Deswegen weisen wir z, nachdem wir sicherheitshalber Z=0 gesetzt haben, den Wert Z =Z+1 zu und erhalten so ganz einfach den richtigen Wert. Der Cursor steht normalerweise entweder bei S=3, S=11, S= 19 oder S=27. Die Ausgabe der Felder soll aber eine Spalte weiter rechts, also bei S=4, S = 12 und so weiter erfolgen. Darum lautet bei A$ S=4, bei B$ S=12. bei C$ S=20 und bei D$ S=28 (Zeilen 2200 bis 2240).

Formeleingabe leicht gemacht

Die Platzhalter e(l), e(2) und so weiter, habe ich schon bei der Eingabe der Ergebnis-Platzhalter angesprochen. Die Formel muß nun so eingegeben werden: e(l)=a(l)+a(2)-a(3). Je nach Anzahl der Ergebnisse, die man erhalten will, muß sich der Zähler von e(.) erhöhen. Diese kleine POKE-Routine für den C 64 erklärt sich wie folgt: Zeile 2300 bis 2430. Hier wird der Formelnummer entsprechend, die reservierte Zeile am Programmanfang zugewiesen. In den Zeilen 2440 bis 2490 wird die Startadresse im Basic-Programm für die einzuPO-KEnden Formeln ermittelt. In den Zeilen 2500 bis 2600 erfolgt nun die Formeleingabe mit Kontrolle der Länge des eingegebenen Strings. Möchte man einen längeren String eingeben, so muß nur der Doppelpunkt in der reservierten Programmzeile an den Schluß der Zeile gesetzt werden.

In Zeile 2610 bis 2680 wird der Formelstring zerlegt und die Basic-POKEnroutine aufgerufen. Die Formel wird dann in Zeile 2690 bis 2700 in Basic-Tokens umgewandelt und in das Programm »eingePOKEt«. Eine andere Möglichkeit ist, vor dem Start des Programms, die entsprechenden Formeln direkt ins Programm zu schreiben (siehe Listing 120 bis 210 als Beispiel). Bei der Kalkulation müssen diese Eingaben einfach durch ein »GOTO 120« abgearbeitet werden. Voraussetzung ist natürlich, daß man genau weiß, an welchen Stellen die Eingaben stehen werden.

In dem Block Kalkulation werden die vorher eingegebenen Formeln berechnet. Dazu ruft das Programm die Formelzeilen auf und setzt die Werte für die entsprechenden Platzhalter ein. Diese Werte sind nichts anderes, als die im Eingabemodus übergebenen Feldinhalte von AS bis DS. Auch hier wird der Bildschirm wieder gelöscht, um eventuelle Fehler oder falsche Daten zu beseitigen. Um nun Berechnungen anstellen zu können, werden die Stringvariablen mit Hilfe einer Schleife und dem Befehl »A(I)=Val A$(I), in numerische Variable überführt. Nach dem »Return« werden nun endlich die Ergebnisse an der für sie reservierten Ergebnis-Platzhalter-Stelle ausgegeben. Entsprechend der Bildschirmausgabe für die Variablen AS bis DS. werden die Ergebnisse durch eine Schleife mit dem neuen Zeilen- und Spaltenindex »Z« und »S« wiedergegeben. (Zeile 1050).

Nun haben wir zwar die Ergebnisse auf den zugewiesenen Plätzen erhalten, aber mit dem Bildschirm alle anderen Eingaben gelöscht. Haben Sie den Bildschirmausgabeblock als einen GOSUB-Block angelegt, so ist nun einfach dieser Block anzuspringen. Allerdings dürfen die Ergebnisplatzhalter nicht mehr mit ausgegeben werden (Zeile 2210 wird angesprungen!).

Menüsteuerung — komfortabel und übersichtlich

Wie schon gewohnt, geht es zu einer GET-Zeile im Hauptmenü zurück. Um unser Programm etwas komfortabler zu machen, ist es sinnvoll, die Daten nun auch speichern und laden zu können, einen Ausdruck zu erhalten, zum Hauptmenü zurück zu gelangen und das Programm auch beenden zu können. Im Hauptmenü wurde schon die Möglichkeit. zum »Menü« zu gelangen, eingebaut. Um nicht unsinnige Befehle in den Sockelleisten stehen zu haben, empfiehlt sich, diese zu löschen und mit neuen Befehlen des Untermenüs zu beschreiben (Zeile 1080 bis 1110). Die Lade- und Speicherroutinen für die Daten sind je nach Computer verschieden, aber in dem jeweiligen Handbuch immer beschrieben. Um das Programm bei hier auftretenden Fehlem am »Aussteigen» zu hindern, sind die Fehlermeldungen, die von der Data-sette oder dem Laufwerk kommen, abzufangen. Diese Meldungen sollten anschließend auf den Büd-
schirm gebracht werden, damit der Anwender sowie das Programm darauf reagieren können (Zeile 1350 bis 1450 Laden und Zeilen 1500, 1810 bis 1980 Speichern). Um unsere Daten zu speichern und zu laden, müssen folgende »Platzhalter« übergeben werden: A$(I) , B$(I), C$(I), D$(D, W$(I)) , W (Zähler!), F$(I), Z(I) und S(I).

Weiterhin ist es günstig, auch die Ergebnisplatzhalter und die Formeln mit abzuspeichern, um sich lästiges und zeitaufwendiges Neueingeben zu ersparen. Für alle, denen die Formeleingabe mittels POKE-Routine nicht möglich ist. besteht nur die Möglichkeit, das ganze Programm. natürlich einschließlich der eingegebenen Formelzeilen, abzuspeichern.

Das Laden erfolgt in gewohnter Weise Zum einen kann man alle Daten einiesen und dann über den Ausgabeblock ausgeben. Ein zweiter Weg ist folgender: Nach dem Laden jedes Wertes wird dieser, natürlich mit Zuweisung der Z- und S-Werte, an seine Stelle geschrieben (Zeile 1230 bei 1330).

Um die Daten auf einen Drucker auszugeben, habe ich mich für die einfachste Lösung, eine Hardcopy, entschieden. Sie ist dem Buch »Beherrschen Sie Ihren Commodore 64« von C. Lorenz. Seite 99. entnommen, das im Hofackerverlag erschien. Die Hardcopy-Routine ist für fast alle Druckertypen mit dem C 64 einsetzbar. Um die Daten bei anderen Computertypen auszugeben, müßte an dieser Stelle ein für Ihren Computer geeignetes Hardcopy-Programm oder eine Druckroutine eingesetzt werden.

Klaus Freudensprung/hg ,HAPPY COMPUTER

★ PUBLISHER: HAPPY COMPUTER
★ YEAR: 1985
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: HAPPY COMPUTER 1985
★ AUTHOR: Klaus Freudensprung
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Tab-Calc    (Happy  Computer)    LISTING    GERMANDATE: 2017-01-22
DL: 319
TYPE: PDF
SiZE: 500Ko
NOTE: Uploaded by hERMOL ; 1 page/PDFlib v1.6

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

Lien(s):
» Applications » RSX Envelope Lister Utility (Amstrad Computer User)
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 387 millisecondes et consultée 1526 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.