Der Gittergenerator gridgen
|
|
|
- Kristin Ziegler
- vor 9 Jahren
- Abrufe
Transkript
1 Anhang A Der Gittergenerator gridgen In diesem Anhang findet sich eine kurze Beschreibung der für die Übungen zur Verfügung gestellten C Routinen zur Implementierung der Gittererzeugung und der affin multilinearen Funktionen, im Folgenden kurz Gitterfunktionen genannt. Im Gegensatz zu anderen Implementierungen kann der Gittergenerator beliebige unregelmäßige Gitter mit Rechteckelementen (bzw. deren höherdimensionale Analoga) realisieren. Der Preis für diese Flexibilität ist, dass man auf die Gitterknoten nicht wie in einem Array direkt über Indizes zugreifen kann, sondern diese über Interfacefunktionen ansprechen muss. A.1 Routinen für regelmäßige Gitter Ein Gitter inklusive der zugehörigen Gitterfunktion wird in der Datenstruktur qgrid gespeichert. Jedes in einem Programm verwendete Gitter wird daher durch einen Zeiger vom Typ qgrid* repräsentiert. A.1.1 Erzeugen und Löschen von Gittern Ein regelmäßiges Gitter auf einem Rechteckgebiet wird durch die Routine qgrid *create_grid(double *lo, double *hi, double *Delta, int dim, int level); erzeugt. Hierbei ist dim die Dimension des Gebietes. Die Variablen lo und hi sind dim dimensionale Arrays, die die untere und obere Ecke des Gebietes definieren. Im Array Delta ist die gewünschte Elementgröße für jede Koordinatenrichtung angegeben. Die Variable level ist für die Erzeugung unregelmäßiger Gitter wichtig und wird in Abschnitt A.2 besprochen. Für regelmäßige Gitter kann sie immer auf 0 gesetzt werden. Die Gitterfunktion auf einem neu erzeugten Gitter ist immer konstant gleich 0. Die Routine gibt einen Zeiger auf eine qgrid Struktur zurück, der einer Variablen vom Typ qgrid* zugewiesen werden muss, da dieser Zeiger für alle zukünftigen Zugriffe auf Gitter und Gitterfunktion benötigt wird. 53
2 54 ANHANG A. DER GITTERGENERATOR GRIDGEN Beispiel: Erzeugen eines 2d Gitters auf X = [0, 1] 2 : double lo[2], hi[2], Delta[2]; qgrid *g; lo[0] = 0; lo[1] = 0; hi[0] = 1; hi[1] = 1; Delta[0] = 0.2; Delta[1] = 0.2; g = create_grid(lo, hi, Delta, 2, 0); Zum Löschen eines so erzeugten Gitters dient die Anweisung void delete_grid(qgrid *g); A.1.2 Zugriff auf Knoten und Gitterfunktionen Die Gitterknoten (oder Eckpunkte) werden nicht direkt wie in einem Array sondern indirekt über Interface-Funktionen angesprochen. Hierzu dienen die Funktionen int first_node(qgrid *g, double *x); int next_node(qgrid *g, double *x); Beim Aufruf dieser Funktionen geschieht das Folgende: ein interner (nach außen unsichtbarer) Zeiger wird auf den ersten bzw. nächsten Knoten in der Knotenliste des Gitters g gesetzt. Der Knoten, auf den dieser Zeiger zeigt, wird im Folgenden als aktueller Knoten (engl. current node) bezeichnet. Falls der übergebene Zeiger x nicht den Wert Null hat, wird davon ausgegangen, dass dieser als Array x[0],..., x[dim-1] definiert ist, in dem die Koordinaten des aktuellen Knotens zurück gegeben werden Als Funktionswert wird der Index (immer 0) des aktuellen Knotens zurück gegeben und -1, falls alle Knoten der Liste bereits abgearbeitet wurden. Dies dient als Abbruchkriterium, wenn die Knotenliste in einer Schleife durchlaufen wird. Beispiel: Durchlaufen der Knotenliste in einer do...while Schleife: index = first_node(g, x); do {... /* Operationen auf dem aktuellen Knoten */ index = next_node(g, x); } while (index!=-1);
3 A.1. ROUTINEN FÜR REGELMÄSIGE GITTER 55 Die Basisoperationen auf dem aktuellen Knoten lauten: double current_nodevalue(qgrid *g); int set_current_nodevalue(qgrid *g, double v); Mit current_nodevalue kann der Knotenwert der Gitterfunktion abgefragt werden, mit set_current_nodevalue wird er auf den Wertv gesetzt. Die Funktion gibt im Erfolgsfalle 0 und ansonsten 1 zurück. Dies passiert, wenn set_current_nodevalue ohne vorherigen Aufruf von first_node aufgerufen wurde oder wenn alle Knoten der Liste bereits abgearbeitet wurde. In diesen Fällen ist das Ergebnis von current_nodevalue undefiniert. Mit current_nodevalue kann nur auf die Werte der Gitterfunktion in den Knoten zugegriffen werden. Für beliebige Punkte x liefert die Routine double value(qgrid *g, double *x, int *flag); den Wert in x. Wird dieser Routine ein nicht-null-zeiger flag übergeben, so wird in dieser Variablen der Status der Operation zurück gegeben: 0 bedeutet kein Fehler, 1 zeigt an, dass x außerhalb des Gitters liegt und 2 zeigt andere Fehler an, z.b. die Übergabe eines falschen Zeigers g. Beispiel: Abfrage des Wertes für x = (0.5, 0.2) T : int flag; qgrid *g; int flag;... x[0] = 0.5; x[1] = 0.2; wert = value(g, x, &flag); Beachte: Wenn Knotenwerte abgefragt werden sollen, ist current_nodevalue deutlich schneller als value. A.1.3 Ein und Ausgabe Zum Speichern und Laden einer Gitterfunktion inklusive des Gitters dienen die Anweisungen int save_val(qgrid *g, char *filename); qgrid *load_val(char *filename); Die Routine save_val gibt im Erfolgsfall 0 und sonst 1 zurück, load_val gibt im Falle eines Fehlers einen Null-Zeiger zurück und eine Fehlermeldung auf dem Bildschirm aus. Beispiel: Speichern eines Gitters g und Laden des Gitters in g_neu: save_val(g, "meingitter.val"); g_neu = load_val("meingitter.val");
4 56 ANHANG A. DER GITTERGENERATOR GRIDGEN Zum Exportieren nach matlab steht die Anweisung int export_gridandval(qgrid *g, char *filename); zur Verfügung. Die Routine gibt im Erfolgsfall 0 und sonst 1 zurück, Beispiel: export_gridandval(g, "gitter.asc"); Die so gespeicherte Datei kann mit den unten beschriebenen matlab Routinen grafisch dargestellt werden. A.2 Routinen für unregelmäßige Gitter gridgen erlaubt das Einfügen weiterer Gitterpunkte in ein bestehendes Gitter. Ebenso können zuvor eingefügte Gitterpunkte jederzeit wieder entfernt werden. A.2.1 Die Adaptionsiteration Das Grundschema eines Gitteradaptionsschritts ist wie folgt: (1) Erzeugung von Testpunkten (2) Schleife über alle Testpunkte: (3) Markierung der Testpunkte, die eingefügt werden sollen (4) Schleife über alle Gitterpunkte: (5) Markierung der Gitterpunkte, die entfernt werden sollen (6) Einfügen bzw. Entfernen der markierten Punkte Im Folgenden werden die Routinen für die einzelnen Schritte beschrieben. (1) Erzeugung von Testpunkten Zur Erzeugung der Testpunkte dient die Routine void prepare_adaptation(qgrid *g); Jeder Testpunkte hat genau wie die Gitterpunkte einen Wert. Bei der Erzeugung der testpunkte wird dieser mit dem interpolierten Wert der Gitterfunktion an der entsprechenden Stelle initialisiert. Die erzeugten Testpunkte entsprechen gerade den Gitterpunkten, die durch eine einmalige Verfeinerung jedes Elementes in alle Koordinatenrichtungen erzeugt werden, vgl. Abbildung A.1 in 2d. In Abbildung A.2 ist beispielhaft illustriert, zu welchen Verfeinerungen das Einfügen der dargestellten Testpunkte führt.
5 A.2. ROUTINEN FÜR UNREGELMÄSIGE GITTER 57 Abbildung A.1: Testpunkte eines Elements in 2d Abbildung A.2: Einzufügende Testpunkte und resultierende Verfeinerung (2) Schleife über die Testpunkte Die Schleife über die Testpunkte wird völlig analog zur Schleife über die Gitterpunkte mit den Funktionen int first_testpoint(qgrid *g, double *x); int next_testpoint(qgrid *g, double *x); in einer do...while Schleife programmiert. Intern wird hier der gleiche Zeiger wie für die Gitterpunkte benutzt, weswegen die Routinen double current_nodevalue(qgrid *g); int set_current_nodevalue(qgrid *g, double v); aus Abschnitt A.1.2 auch in der Testpunktschleife verwendet werden können. (3) Markierung der Testpunkte Der aktuelle Testpunkt wird mit der Anweisung void insert_current_testpoint(qgrid *g); als einzufügend markiert. Um den Fehler in einem Testpunkt zu messen, muss sein interpolierter Wert mit dem gewünschten Wert verglichen werden. Da der interpolierte Wert ja gerade der initialisierte Wert des Testpunkts ist, kann er mit
6 58 ANHANG A. DER GITTERGENERATOR GRIDGEN real current_nodevalue(qgrid *g); ausgelesen werden. Um zu vermeiden, dass die Knotenwerte nach Beenden der Verfeinerung noch einmal aktualisiert werden müssen, kann der Wert des Testpunktes bereits in der Fehlerberechnungsschleife (aber nach der Abfrage des initialisierten interpolierten Wertes, da dieser dadurch überschrieben wird!) mittels der bereits bekannten Anweisung int set_current_nodevalue(qgrid *g, double v); mit dem gewünschten Wert v belegt werden. Da in der eigentlichen Verfeinerung des Gitters auch Testpunkte eingefügt werden, die nicht markiert wurden (vgl. Punkt (6)), sollte dies stets für alle Testpunkte gemacht werden. (4) Schleife über die Gitterpunkte siehe Abschnitt A.1.2 (5) Markierung der Gitterpunkte Mit der Anweisung void remove_current_node(qgrid *g); wird der aktuelle Gitterpunkt als zu entfernen markiert. Um festzustellen, ob ein Gitterpunkt entfernt werden soll, muss sein Wert verglichen werden mit dem Wert der Gitterfunktion auf dem um diesen Punkt vergröberten ( coarsened ) Gitter. Den Wert des Gitterpunktes erhält man dazu wie üblich mit double current_nodevalue(qgrid *g); und den Wert auf dem vergröberten Gitter mit double current_coarsevalue(qgrid *g); (6) Einfügen bzw. Entfernen der markierten Punkte Dies geschieht schließlich mit der Anweisung void complete_adaptation(qgrid *g); Die Anweisung fügt alle entsprechend markierten Testpunkte mit ihren Werten in das Gitter ein und entfernt die markierten Gitterpunkte. Im Konfliktfall hat Einfügen Priorität über Entfernen. Zudem wird sicher gestellt, dass sich zwei benachbarte Elemente an den berührenden Hyperebenen nur in maximal einer Koordinatenrichtung und nur um maximal eine Verfeinerungsstufe unterscheiden. Dies vermeidet zum einen degenerierte Gitter und bietet zum anderen eine gewisse Sicherheit gegen Ungenauigkeiten der Fehlerschätzung, die aus der relativ groben Verteilung der Testpunkte entsteht. Durch diesen Mechanismus werden auch Testpunkte in das Gitter eingefügt, die nicht explizit als einzufügend markiert wurden.
7 A.2. ROUTINEN FÜR UNREGELMÄSIGE GITTER 59 Die Routine complete_adaptation(g) gibt am Bildschirm eine Statistik über die Veränderungen des Gitters im abgeschlossenen Adaptionsschritt aus. A.2.2 Hängende Knoten Wenn zwei unterschiedlich feine Elemente zusammenstoßen, entstehen sogenannte hängende Knoten. Dies sind Gitterpunkte, die nicht für alle angrenzenden Elemente Eckpunkte sind. Um die Stetigkeit der Gitterfunktion zu garantieren, müssen die Werte in diesen Knoten durch Interpolation bestimmt werden. Diese Interpolation wird beim Abschließen der Adaption durch complete_adaptation(g) automatisch durchgeführt. Werden aber auf einem unregelmäßigen Gitter Knotenwerte in der üblichen Gitterpunkt- Schleife zugewiesen, ohne dass danach eine Adaption durchgeführt wird, muss diese Interpolation manuell ausgelöst werden. Dazu dient die Anweisung void update_values(qgrid *g); A.2.3 Entfernen von Gitterpunkten aus dem Startgitter Mit remove_current_node(g) können nur Knoten entfernt werden, die in einer vorherigen Adaption mit insert_current_testpoint(g) eingefügt wurden. Um trotzdem das Entfernen von Knoten aus dem Startgitter zu erlauben, kann dieses mit create_grid mit level 1 erzeugt werden. Dies bewirkt, dass das Startgitter aus bereits level mal verfeinerten Elementen besteht. Dies schränkt den Spielraum der Elementgröße ein, weil die Anzahl der Elemente in jeder Koordinatenrichtung ein Vielfaches von 2 level sein muss, erhöht dafür aber die Flexibilität in der Adaptionsroutine. A.2.4 Anisotrope Gitter Unter einer anisotropen Verfeinerung wird die mehrfache Verfeinerung von Elementen in der gleichen Koordinatenrichtung verstanden, vgl. Abb. A.3. Abbildung A.3: Anisotrope Verfeinerung in x 1 Richtung Diese Art von Verfeinerung kann bei gleicher Genauigkeit eine Menge Gitterpunkte (und damit Speicher und Rechenzeit) sparen. Sie kann andererseits aber auch zu numerischen Problemen führen, da Gitterfunktionen auf anisotropen Gittern große Lipschitz-Konstanten aufweisen können. Erfahrungsgemäß überwiegt aber meist der positive Aspekt. Um anisotrope Gitter zu erzeugen, dürfen nur Testpunkte auf den eindimensionalen Kanten der Elemente mit insert_current_testpoint(g) eingefügt werden, denn ansonsten erfolgt automatisch eine Verfeinerung in mehrere Richtungen, vgl. das dritte Beispiel in Abbildung A.2. Um diese zu identifizieren, liefert
8 60 ANHANG A. DER GITTERGENERATOR GRIDGEN int current_testpointtype(qgrid *g); die Dimension der Elementkomponente, auf der sich der aktuelle Testpunkt befindet. Also 0 = Ecke (= Gitterpunkt Testpunkt), 1 = Kante, 2 = Fläche,... Die einfachste Implementierung einer anisotropen Verfeinerung besteht darin, den Fehler nur in Testpunkten mit current_testpointtype(g)= 1 zu messen. Man kann aber auch den Fehler in allen Testpunkten messen und dann abhängig vom Verhältnis der Fehler in den verschiedenen Koordinatenrichtungen entscheiden, welche Testpunkte man in das Gitter aufnehmen möchte. A.2.5 Beispielprogramm Auf der Vorlesungshomepage steht das Beispielprogramm adaptivbeispiel.c zur Verfügung, in dem eine komplette Adaptionsiteration realisiert und ausführlich kommentiert ist. Das Compilieren erfolgt analog zur Routine beispiel.c, vgl. Abschnitt A.4.3. A.3 Grafische Darstellung Zur grafischen Darstellung stehen die matlab Routinen gridplot1d(filename) gridplot2d(filename) gridplot3d(filename, vec, off) zur Verfügung. Die 1d und 2d Variante stellen die Funktion inklusive des Gitters in üblicher Weise dar. Der 3d Version wird zustzlich ein dreidimensionaler Vektor vec und ein Wert off übergeben, durch die eine 2d Hyperebene im R 3 definiert wird. Grafisch dargestellt wird dann der Schnitt durch das Gitter entlang dieser Hyperebene, in dem die Funktionswerte der Gitterfunktion farbig dargestellt werden. Wird der Nullvektor übergeben, so werden alle Elemente dargestellt (was allerdings bereits bei relativ groben Gittern ziemlich lange dauert). A.4 Technische Hinweise Zur Verwendung der oben beschriebenen C Routinen müssen drei Schritte durchgeführt werden. A.4.1 Herunterladen der Routinen Zur Verwendung der C Routinen müssen Sie dazu die Files gridgen.c und gridgen.h von der Vorlesungs Webpage 1 herunterladen. Hier finden sich auch die matlab Routinen zur grafischen Darstellung und die Beispielprogramme. 1 lgruene/stochdynopt07/
9 A.4. TECHNISCHE HINWEISE 61 A.4.2 Einbinden der Header Datei Um die Routinen in Ihrem Programm verwenden zu können, müssen Sie im Kopf die Zeile #include "gridgen.h" einfügen. A.4.3 Compilieren und Linken Nehmen wir an, Ihr Programm ist im File meinprogramm.c gespeichert, und Sie wollen daraus ein ausführbares Programm mit Namen meintest erzeugen. Dazu müssen Sie die folgenden Befehle ausführen (a) Übersetzung der Routinen: gcc -c gridgen.c (Dies muss nach dem Herunterladen nur einmal durchgeführt werden.) (b) Übersetzen Ihres Programms: gcc -c meinprogramm.c (c) Zusammenbinden (Linken) der Programme: gcc meinprogramm.o gridgen.o -lm -o meintest Wenn alles fehlerfrei geklappt hat, können Sie Ihr Programm nun mit meintest bzw. je nach Einstellung des Pfades mit./meintest starten. Auf der Vorlesungshomepage finden Sie unter beispiel.c ein Programm, mit dem Sie diese Schritte testen können.
Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3
Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................
Programmieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11
Wertebereich und Genauigkeit der Zahlendarstellung
Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1
Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1
Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch
Felder, Zeiger und Adreßrechnung
Felder, Zeiger und Adreßrechnung Felder bestehen aus Variablen eines einzigen Datentyps. Bisher kennen wir eindimensionale Felder. In C sind Felder mit beliebigen Dimensionen möglich. Unsere räumliche
Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.
Zeiger C-Kurs 2012, 2. Vorlesung Tino Kutschbach [email protected] http://wiki.freitagsrunde.org 10. September 2012 This work is licensed under the Creative Commons Attribution-ShareAlike
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
Arrays. Einleitung. Deklarieren einer Array Variablen
Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt
1. Referenzdatentypen: Felder und Strings
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
Einführung in die Programmierung II. 5. Zeiger
Einführung in die Programmierung II 5. Zeiger Thomas Huckle, Stefan Zimmer 16. 5. 2007-1- Bezüge als Objekte Bisher kennen wir als Bezüge (Lvalues) nur Variablennamen Jetzt kommt eine neue Sorte dazu,
6. Zeiger Allgemeines Definition eines Zeigers
6. Zeiger www.c-programme.de Stefan Thiemert Kapitel 6 - Seite 1 von 6 6. 1. Allgemeines Zeiger spielen in der Programmierung eine wichtige Rolle. Sie sind wichtig, bei der Arbeit mit Arrays und Funktionen.
Grundlagen der Informatik Vorlesungsskript
Grundlagen der Informatik Vorlesungsskript Prof. Dr. T. Gervens, Prof. Dr.-Ing. B. Lang, Prof. Dr. F.M. Thiesing, Prof. Dr.-Ing. C. Westerkamp 16 AUTOMATISCHES ÜBERSETZEN VON PROGRAMMEN MIT MAKE... 2 16.1
4 Schleifen und Dateien
4 Schleifen und Dateien 4.1 Übungsaufgabe 4.1.1 Aufgabe 1 Schreiben Sie drei C++ Programme: pword_for.cxx, pword_while.cxx, pword_do.cxx. Die Programme sollen den Benutzer höchstens 5 Mal nach einem Passwort
Versuch 3: Kamera 1. In diesem Programm sind die grundlegenden Funktionen der Kamera schon implementiert. Diese Funktionen sind:
Versuch 3: Kamera 1 Was ist ein Bild? Ein Bild ist in diesem Versuch ein zweidimensionales Array vom Typ unsigned char. Jedes Element des Arrays entspricht einem Pixel des Bildes, dessen Wertebereich zwischen
Klausur "ADP" SS 2015
PD Dr. J. Reischer 20.7.2015 Klausur "ADP" SS 2015 Nachname, Vorname Abschluss (BA, MA, FKN etc.) Matrikelnummer, Semester Versuch (1/2/3) Bitte füllen Sie zuerst den Kopf des Angabenblattes aus! Die Klausur
C++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue
C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections Leibniz Universität IT Services Anja Aue Arrays... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte
+ C - Array (Vektoren, Felder)
+ C - Array (Vektoren, Felder) Eindimensionale Arrays Beim Programmieren steht man oft vor dem Problem, ähnliche, zusammengehörige Daten (vom gleichen Datentyp) zu speichern. Wenn man zum Beispiel ein
Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.
Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert
GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT
User Requirements GERICHTETER GEWICHTETER GRAPH DESIGNDOKUMENT Softwareentwicklung Praktikum, Übungsbeispiel 1 Gruppe 18 Andreas Hechenblaickner [0430217] Daniela Kejzar [0310129] Andreas Maller [0431289]
Tag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)
Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke
Theoretische Informatik 1 WS 2007/2008 Prof. Dr. Rainer Lütticke Inhalt der Vorlesung Grundlagen - Mengen, Relationen, Abbildungen/Funktionen - Datenstrukturen - Aussagenlogik Automatentheorie Formale
Objektorientierte Programmierung und Modellierung
Objektorientierte Programmierung und Modellierung Einführung, Teil 2 24.10.17 - WS17/18 Hakan Aksu 1 Raumänderung beachten Dienstag 14:15-15:45 Uhr in M001 (anstatt K101) 2 Ausfalltermine 31.10 Vorlesung
Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE
Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE 754 Standard festgelegt. Es stehen sogenannte einfach
Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch
darstellung Arbeiten mit darstellung werden im Computer durch (kleine) Zahlen dargestellt in C können im Datentyp char gespeichert werden, dieser umfasst ein Byte und gilt als Ganzzahltyp darstellung Arbeiten
Kapitel 12: Induktive
Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter
Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 6 Pkt.) a) Geben
Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50
Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny
Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny 9. Zeiger Arbeitsspeicher / Adressen Der Arbeitsspeicher des Computers (RAM) besteht aus einem Feld von Speicherzellen, beginnend bei Adresse
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
GI Vektoren
Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung
Assoziative Container in C++ Christian Poulter
Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: [email protected] Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue
einlesen n > 0? Ausgabe Negative Zahl
1 Lösungen Kapitel 1 Aufgabe 1.1: Nassi-Shneiderman-Diagramm quadratzahlen Vervollständigen Sie das unten angegebene Nassi-Shneiderman-Diagramm für ein Programm, welches in einer (äußeren) Schleife Integer-Zahlen
Tag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2016/2017 Willkommen zum Informatik-Repetitorium!
Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03
Reihungen Martin Wirsing in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03 2 Ziele Die Datenstruktur der Reihungen verstehen: mathematisch und im Speicher Grundlegende Algorithmen auf Reihungen
WiMa-Praktikum 1. Woche 8
WiMa-Praktikum 1 Universität Ulm, Sommersemester 2017 Woche 8 Lernziele In diesem Praktikum sollen Sie üben und lernen: Besonderheiten der For-Schleife in Matlab Wiederholung des Umgangs mit Matrizen und
FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen
5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden
Einstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
Einführung in die Programmierung für NF MI. Übung 07
Einführung in die Programmierung für NF MI Übung 07 Inhalt Wiederholung Kommentare Wiederholung Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 07 2 Wiederholung Kommentare Kommentare
Übungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
8. Referenzen und Zeiger
8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen
Institut für Informatik und Angewandte Kognitionswissenschaften
Grundlegende Programmiertechniken (»Programmierung«), WS 2007/2008 Übungsblatt 5 Präsenzaufgaben: 11, 12, 13 Hausaufgabe: 14 Aufgabe 11 STRING- UND OBJEKT-VERGLEICH String s1 = new String("Test String");
Organisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr
Organisatorisches Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, 14.10., 14 Uhr bis Do, 23.10., 8Uhr. 14.10.2014 IT I - VO 1 1 IT I: Heute Wiederholung CuP ctd: this Arrays, ArrayLists Schleifen:
S. d. I.: Programieren in C Folie 4-1. im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then"
S. d. I.: Programieren in C Folie 4-1 4 Anweisungen 4.1 if-anweisung 1) if (Ausdruck) 2) if (Ausdruck) } else im Gegensatz zu Pascal gibt es in C kein Schlüsselwort "then" es wird nur der numerische Wert
Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)
Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern
Programmierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
Zeiger (engl. Pointer)
Zeiger (engl. Pointer) Zeiger Ein Zeiger (engl. Pointer) speichert eine Adresse, unter der ein Wert im Speicher des Computers gespeichert werden kann. Eine Variable im Gegensatz speichert einen Wert. Der
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Fallstudie: Lauftagebuch Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 21 Erstellen einer
Übungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
Programmiersprachen Einführung in C
Programmiersprachen Einführung in C Teil 8: Felder und Zeichenketten Prof. Dr. Gliederung Programmiersprachen 1. Von der Maschinensprache zu C 2. Die Struktur von C-Programmen 3. Variable und Datentypen
Beispiele elementarer Datentypen Ganze Zahlen (integer) Unterbereiche Gleitkommazahlen Festkommazahlen
Beispiele elementarer Datentypen Ganze Zahlen (integer) - Werte sind ganze Zahlen in vorgegebenen Bereich (z. B. -2 31 bis 2 31-1) - Übliche Operationen: Arithmetik (z. B. +,-,*, Division mit Rest, Rest
C/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:
Musterlösung Übung 7 Aufgabe 1 Sehen wir uns zu allererst das gegebene Forth Programm an: 0 3 new - list constant list1 list1 5 new - list constant list2 list1 6 new - list constant list3 list2 2 new -
Einstieg in die Informatik mit Java
1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung
Softwareentwicklung II (IB) Blatt 2. Prof. Dr. Oliver Braun. Fakultät für Informatik und Mathematik Hochschule München
Softwareentwicklung II (IB) Blatt 2 Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 18.04.2018 08:07 Abgabe der Aufgabe auf diesem Blatt: bis 02.05.18, 08:00 Uhr durch Pushen
FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren
FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren Prof. Dr. M. Zeller Datum, Zeit Aufgabenblätter erreichbare Punktzahl zugelassene Hilfsmittel, 0800 1000 Uhr (120 min) 16 Seiten (einschl. Deckblatt)
9. Vektoren. (auch Felder/array)
9. Vektoren (auch Felder/array) Motivation Hat man mehrere Objekte gleichen Datentyps, so kann man sie explizit deklarieren, wenn die Anzahl bekannt ist double x1,x2,x3,x4; Nachteile: versagt, -wenn die
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)
5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!
5.4 Arrays Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 Harald Räcke 114/656
Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15
Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen
Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.
C- Kurs 09 Dynamische Datenstrukturen
C- Kurs 09 Dynamische Datenstrukturen Dipl.- Inf. Jörn Hoffmann [email protected] leipzig.de Universität Leipzig InsAtut für InformaAk Technische InformaAk Flexible Datenstrukturen Institut für
Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
Verkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
3.2 Datentypen und Methoden
Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte
Strings. Daten aus Dateien einlesen und in Dateien speichern.
Strings. Daten aus Dateien einlesen und in Dateien speichern. Strings Ein String ist eine Zeichenkette, welche von MATLAB nicht als Programmcode interpretiert wird. Der Ausdruck 'a' ist ein String bestehend
Einführung in die Programmierung für NF. Arrays
Einführung in die Programmierung für NF Arrays ARRAY (REIHUNG) 4 Arrays 2 Array In der Programmierung werden o: Tupel verschiedener Länge benutzt. Beispiel: Vektoren (1.0, 1.0) (0.2, 1.2, 7.0) Beispiel:
5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)
5.1 Mehr Basistypen Außer int, stellt Java weitere Basistypen zur Verfügung. Zu jedem Basistyp gibt es eine Menge möglicher Werte. Jeder Wert eines Basistyps benötigt die gleiche Menge Platz, um ihn im
Klausur Informatik WS 2012/13
Klausur Informatik WS 2012/13 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweies: Voraussetzung für die Teilnahme ist das Bestehen
Praxis der Programmierung
Dynamische Datentypen Institut für Informatik und Computational Science Universität Potsdam Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Dynamische Datentypen 2 Dynamische Datentypen
Grundlagen der Programmierung Teil1 Einheit III Okt. 2010
Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den
m-files sind Folgen von MATLAB-Anweisungen oder Daten-Files.
MATLAB m-files m-files sind Folgen von MATLAB- oder Daten-Files. Erstellen von m-files Über File New M-file wird ein Texteditor geöffnet. Dort wird das m-file als ASCII-File erzeugt und unter name.m im
Einführung in die Programmierung für NF MI. Übung 04
Einführung in die Programmierung für NF MI Übung 04 Inhalt Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 04 2 Arrays Arrays repräsentieren Reihungen von Objekten, z.b. Variablen
3. Übungsblatt zu Algorithmen I im SoSe 2017
Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799
C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.
C++ Teil 3 3.3 Schleifen Man kann bestimme en in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen. for-schleife for-schleife while-schleife do-while-schleife for ( Ausdruck1;
Fragen zur OOP in Java
- 1 - Inhalt Was bedeutet OOP?... 2 Was versteht man unter einer Klasse?... 2 Wie nennt man die Mitglieder einer Klasse?... 2 Wie erzeugt man Objekte?... 2 Wie greife ich auf Member einer Klasse zu?...
Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)
Betriebssysteme, Rechnernetze und verteilte Systeme 1 Crashkurs C (2) Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund [email protected] http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/
Ausgabe:
Aufgabe 2.10: Schreiben Sie ein Programm, das zunächst die Quadratzahlen zu den Zahlen 1-10 mit Hilfe einer While- Schleife und danach die Quadratzahlen zu den Zahlen 3, 6, 9,.., 30 mit Hilfe einer For-Schleife
12. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty
Übungspaket 14 Eindimensionale Arrays
Übungspaket 14 Eindimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung eindimensionaler Arrays Kapitel: 33 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
Programmierkurs C++ Datenstrukturen Seite 1
Programmierkurs C++ Datenstrukturen Seite 1 3 Datenstrukturen 3.1 Arrays Zur Wiederholung als Strukturelement der Programmierung gehört auf der Seite der Datenstrukturen die Liste. Eine Liste kann auf
Advanced Programming in C
Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer
2. Semester, 2. Prüfung, Lösung
2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter
Programmierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
