PostScript -Sprache. Frank Richter

Ähnliche Dokumente
Einführungskurs PostScript

Vortrag Postscript, Einführung, Koordinatgeometrie und Prozeduren

PostScript spielt MASTER MIND

Modul 122 VBA Scribt.docx

Werkzeuge der Informatik

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Propädeutikum zur Programmierung

Erwin Grüner

Objektorientierte Programmierung

Programmieren mit PERL eine Einführung

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Klausur in 12.1 Themen: Zahlsysteme, Grundlagen von Delphi (Bearbeitungszeit: 90 Minuten)

Dr. Monika Meiler. Inhalt

Excel Funktionen durch eigene Funktionen erweitern.

Programmierung I Einführung in Python, Beyond the Basics

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Scriptless JSP. Motivation. Expression Language (EL) JSP Standard Tag Library (JSTL)

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

5.4 Klassen und Objekte

Automatisierung industrieller. Workflows. Teil B: Die Spache UML

Programmierung in Python

VBA-Programmierung: Zusammenfassung

Modellierung und Programmierung 1

Prinzipien der Softwareentwicklung S. Strahringer

Arrays Fortgeschrittene Verwendung

Programmieren in C. -- ALLE Programmiersprachen sind HÄSSLICH -- Deklaration: erst der Datentyp, dann der Variablenname. Semikolon am Ende.

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c)

Python Programmieren. Variablen, Ausdrücke und Anweisungen

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Sin-Funktion vgl. Cos-Funktion

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Java Einführung Collections

HEUTE. Effizienzbeispiel: bekannte Version (Übung ) Mathematik: Was ist Effizienz? vollständige Induktion

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Übungen Programmieren 1 Felix Rohrer. Übungen

Strukturierte Datentypen und Funktionszeiger

MVC-II Schematische Aufzeichnung Des MVC (model-2), bei dem zwei Modelle zum Zuge kommen:

VisualBasic - Variablen

8 Zugriffstypen ( Zeiger )

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

BAUINFORMATIK. SS 2013 Vorlesung 1 Johannes Lange

[E-1] Wolf, Jürgen: C von A bis Z. Galileo Computing, 3. Auflage,

Programmierkurs Java

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Index. Symbole! 23!= B Bedingte Ausführung

Institut für Informatik Christian-Albrechts-Universität zu Kiel. Borland Delphi. Einführung in die Programmiersprache

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Raiffeisen News Unsere aktuellen Angebote im Januar 2014

Access [basics] Programmieren mit Arrays. Beispieldatenbank. Arrays. Eindimensionale Arrays. VBA-Grundlagen Programmieren mit Arrays

Probeklausur: Programmierung WS04/05

Einführung in VisualBasic for Applications. Stefan Mahlitz

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Mikrocontroller effektiv in C programmieren - ein noch unbekanntes Land

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

3. Auflage. O Reillys Taschenbibliothek. Windows PowerShell 3.0. kurz & gut. Lee Holmes. Deutsche Adaption von Rolf Masuch O REILLY

Erzeugen von PDF-Dateien ohne ODS: Das Makro Lst2Pdf

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

Einführung in die Java- Programmierung

Sprachbeschreibung und Erweiterung

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

Datenfelder (Arrays) Vektoren, Matrizen, Tabellen. Dr. Beatrice Amrhein

1 Vom Problem zum Programm

Methodische Grundlagen des Software Engineering - Übung 9

Studentische Lösung zum Übungsblatt Nr. 7

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Einführung in die Java- Programmierung

3.2 Binäre Suche. Usr/local/www/ifi/fk/menschen/schmid/folien/infovk.ppt 1

Eine Beschreibung des Programms und der dahinter stehenden Philosophie.

Übersicht Programmablaufsteuerung

Lua - Erste Schritte in der Programmierung

Binäre Bäume Darstellung und Traversierung

E-PRIME TUTORIUM Die Programmiersprache BASIC

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Objektorientierte Programmierung (OOP) in Python

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Sucosoft S40 KOP/FBS KOP FBS

JMPCN Sprungbefehl nur ausführen, wenn VKE 0 ist. JMPC Sprungbefehl nur ausführen, wenn VKE 1 ist. JMP Ohne Bedingung zur Sprungmarke wechseln.

Technische Praxis der Computersysteme I 3. Vorlesung

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

3 Variablen. 3.1 Allgemeines. 3.2 Definition und Verwendung von Variablen

MIKROPROZESSOR PROGRAMMIERUNG 8. VORLESUNG. LV-Nr SS INSTITUT FÜR ELEKTRONIK BIT

Entwurf von Algorithmen - Kontrollstrukturen

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Blöcke und Grand Central Dispatch

Kurs 1613 Einführung in die imperative Programmierung

Über Arrays und verkettete Listen Listen in Delphi

Inhaltsverzeichnis. Grundbegriffe der C-Programmierung Für den HI-TECH C-Compiler

Programmieren in C. C Syntax Datentypen, Operatoren und Kontrollstrukturen. Prof. Dr. Nikolaus Wulff

Grundwissen Informatik JS September 2015

Ruby. Erfinder: Yukihiro Matsumoto Japan 1993 Einflüsse: Smalltalk Perl Eigenschaften: Objektorientiert Interpretiert

Programmieren I. Kontrollstrukturen. Heusch 8 Ratz Institut für Angewandte Informatik

Grundlagen der Programmiersprache C++

Transkript:

PostScript -Sprache Frank Richter 27.01.2003

Stack-Operationen exch vertauscht die zwei obersten Stackelemente x y exch => y x dup dupliziert oberstes Stackelement x dup => x x pop löscht oberstes Element vom Stack x y pop => x index Kopie eines beliebigen, weiter unten liegenden Elementes x y z 2 index => x y z x roll das oberste Element legt fest, wie oft und in welche Richtung gerollt werden soll. Das zweitoberste bestimmt die Anzahl. 1 2 3 4 5 3 2 roll => 1 2 4 5 3 Frank Richter: PostScript - die Sprache 1

Variablen Definition einer Variablen entspricht Zuweisung eines Namens für einen Wert Zuerst Namen auf den Stack legen: Slash voranstellen, dann zuzuweisender Wert, anschließend def Bsp: /ppi 72 def Inhalt einer Variablen läßt sich nur ändern, indem diese neu definiert wird: Bsp: /ppi 100 def oder: /ppi ppi 28 add def Zugriff auf Inhalt der Variable ist einfach: der Variablenname kann überall einfach statt des Wertes verwendet werden. Typen: integer, real, string, array, dictionary, mark Typbestimmung zur Laufzeit mit Operator type Frank Richter: PostScript - die Sprache 2

Strings Strings werden in runde Klammern eingeschlossen: (Eine Testzeichenkette) Klammern sind durch vorangestellten Backslash zu maskieren: (Test in \(Klammern\)) Backslashes sind durch Verdoppelung zu maskieren: (Ein Text mit \\backslashes\\) leere String-Objekte lassen sich mit dem string-operator erzeugen. Andere Objekte lassen sich mit dem Operator (cvs) in einen String konvertieren: (1+2=) show 1 2 add 10 string cvs show Frank Richter: PostScript - die Sprache 3

Arrays sind eine geordnete Menge von Werten (möglicherweise unterschiedlichen Typs) numerisches Indizes, beginnend bei 0 leeres Array anlegen: n array => [null null null] initialisiertes Array: [1 2 3] => [1 2 3] Zugriff auf ein Element: [1 2 3] 1 get => 2 Elemente vom Stack in array: x y 2 array astore => [x y] array-elemente auf Stack legen: [x y] aload => x y [x y] Frank Richter: PostScript - die Sprache 4

Dictionaries Eine Tabelle mit Schlüssel-Wert-Paaren, vergleichbar einem Tcl-Array oder einem perl-hash 2 dictionaries sind immer vorhanden: system dictionary enthät die vordefinierten PostScript -Operatoren user dictionary enthält programmdefinierte Variable und Befehle es gibt einen dictionary stack mit dem system dictionary ganz unten, darauf dem user dictionary und wiederum darauf programmdefinierten dictionaries Namen werden im dictionary stack von oben nach unten gesucht. Frank Richter: PostScript - die Sprache 5

Prozeduren selbst definierte Prozeduren stehen in einem dictionary, zusammen mit Variablen werden genau wie Variable definiert, wobei der body der Prozedur in geschweifte Klammern einzuschließen ist. Bsp: /mm {72 mul 25.4 div} bind def Der bind-operator bewirkt, dass Operatornamen innerhalb der Prozedur durch die entsprechenden Operationen ersetzt werden. Das bringt eine höhere Geschwindigkeit. Eigene Prozeduren werden genau so wie eingebaute Operatoren verwendet: Bsp: 20 mm 20 mm moveto Frank Richter: PostScript - die Sprache 6

Verzweigungen einfache if-verzweigung: boolean procedure if => - Bsp: x 1 eq {(x ist 1) =} if mit else-zweig: boolean proc1 proc2 ifelse => - Bsp: x 1 eq {(x=1) =} {(x!=1) =} ifelse für den Test gibt es eine ganze Reihe Operatoren, die true oder false zurückliefern, z.b. eq, ne, gt, lt, ge, le, and, or, not Frank Richter: PostScript - die Sprache 7

repeat-schleife Die repeat-schleife: int proc => - Die Prozudur wird einfach n-mal wiederholt. %!PS %%BoundingBox: 0 0 101 136 0 0 moveto 20 { %repeat gsave 100 40 rlineto stroke grestore 0 5 rmoveto } repeat Frank Richter: PostScript - die Sprache 8

for-schleife Die for-schleife: initial increment limit proc => - Eine Laufvariable wird von initial bis limit um jeweils increment erhöht und dabei jeweils die Prozedur proc ausgeführt. Die Laufvariable steht innerhalb der Prozedur auf dem Stack zur Verfügung. %!PS %%BoundingBox: 0 0 126 149 /Helvetica findfont 12 scalefont setfont 0 20 140 { %for dup 0 exch moveto 100 0 rlineto stroke dup 106 exch moveto 10 string cvs show } for 0 140 120 100 80 60 40 20 Frank Richter: PostScript - die Sprache 9

loop-schleife Die loop-schleife: proc loop => - Die Prozedur proc wird endlos wiederholt. Man braucht den exit-operator innerhalb der Prozedur, um die Schleife zu verlassen. %!PS %%BoundingBox: 0 0 121 131 /x 0 def { %loop x 120 gt {exit} if x 0 moveto x 130 lineto stroke /x x 10 add def } loop Frank Richter: PostScript - die Sprache 10

forall-schleife Die forall-schleife iteriert über die Elemente eines arrays oder eines Strings: array proc forall => - bzw. string proc forall => - Die Prozedur proc wird für jedes Element des Arrays bzw. jedes Zeichen des Strings wiederholt, wobei das Element innerhalb der Prozedur auf dem Stack verfügbar ist. %!PS %%BoundingBox: 0 23 125 134 /Helvetica findfont 18 scalefont setfont 0 120 moveto (Gespreizt) { %forall 1 string dup 0 3 index put gsave show grestore 15-12 rmoveto } forall G e s p r e i z t Frank Richter: PostScript - die Sprache 11

Beispiel - ein Zifferblatt %!PS %%BoundingBox: 0 0 201 201 100 100 translate 0 0 100 0 360 arc % Kreis 1 setlinewidth stroke /Helvetica findfont 25 scalefont setfont 1 1 60 { % Beginn der Schleife /i exch def -6 rotate i 5 mod 0 eq { % i durch 5 teilbar? i 5 idiv =string cvs % Ziffer als String dup stringwidth pop 2 div neg 80 moveto % zentrieren show } { 0 100 moveto 0 5 neg rlineto stroke % Minutenstrich } ifelse } for % Ende der Schleife 10 9 8 7 11 12 6 1 5 2 3 4 12