PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl



Ähnliche Dokumente
1 Vom Problem zum Programm

Zählen von Objekten einer bestimmten Klasse

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Das Leitbild vom Verein WIR

Anleitung über den Umgang mit Schildern

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Was meinen die Leute eigentlich mit: Grexit?

Leichte-Sprache-Bilder

Professionelle Seminare im Bereich MS-Office

Geld Verdienen im Internet leicht gemacht

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Kompilieren und Linken

Repetitionsaufgaben Wurzelgleichungen

40-Tage-Wunder- Kurs. Umarme, was Du nicht ändern kannst.

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Version 0.3. Installation von MinGW und Eclipse CDT

Eva Douma: Die Vorteile und Nachteile der Ökonomisierung in der Sozialen Arbeit

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Informatik 1 Tutorial

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Java Kurs für Anfänger Einheit 5 Methoden

GEONET Anleitung für Web-Autoren

TeamSpeak3 Einrichten

Festplatte defragmentieren Internetspuren und temporäre Dateien löschen

Anwendungsbeispiele Buchhaltung

Was ich als Bürgermeister für Lübbecke tun möchte

Schrittweise Anleitung zur Erstellung einer Angebotseite 1. In Ihrem Dashboard klicken Sie auf Neu anlegen, um eine neue Seite zu erstellen.

Diese Anleitung wurde erstellt von Niclas Lüchau und Daniel Scherer. Erste Anmeldung. Schritt 1: Anmeldung..2. Schritt 2: Passwort setzen 3

.htaccess HOWTO. zum Schutz von Dateien und Verzeichnissen mittels Passwortabfrage

Monatstreff für Menschen ab 50 Temporäre Dateien / Browserverlauf löschen / Cookies

Einführung in die Java- Programmierung

Fotogalerie mit PWGallery in Joomla (3.4.0) erstellen

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Einführung in die Java- Programmierung

Wie man eigene Programme erstellt

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Wie halte ich Ordnung auf meiner Festplatte?

Kurzanleitung. MEYTON Aufbau einer Internetverbindung. 1 Von 11

Einkaufen im Internet. Lektion 5 in Themen neu 3, nach Übung 10. Benutzen Sie die Homepage von:

Objektorientierte Programmierung

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

teamsync Kurzanleitung

Einführung in PHP. (mit Aufgaben)

! " # $ " % & Nicki Wruck worldwidewruck

GeoPilot (Android) die App

Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung bis

So funktioniert das online-bestellsystem GIMA-direkt

Was ist Sozial-Raum-Orientierung?

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Wir machen neue Politik für Baden-Württemberg

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Schritte 4. Lesetexte 13. Kosten für ein Girokonto vergleichen. 1. Was passt? Ordnen Sie zu.

Übung 9 - Lösungsvorschlag

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

10.1 Auflösung, Drucken und Scannen

Wichtige Forderungen für ein Bundes-Teilhabe-Gesetz

Übungen zu C++ Kapitel 1

Dokumentation für das Spiel Pong

Tutorial -

Menü auf zwei Module verteilt (Joomla 3.4.0)

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Datensicherung und Wiederherstellung

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Informatik I Tutorial

Ein Hinweis vorab: Mailkonfiguration am Beispiel von Thunderbird

Eine kleine Anleitung zum Kurs Homepage selbst erstellen

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Weltenbummler oder Couch-Potato? Lektion 10 in Themen neu 3, nach Übung 5

1. LINEARE FUNKTIONEN IN DER WIRTSCHAFT (KOSTEN, ERLÖS, GEWINN)

Arbeiten mit UMLed und Delphi

Eigenen Farbverlauf erstellen

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Die Post hat eine Umfrage gemacht

Studieren- Erklärungen und Tipps

Objektbasierte Entwicklung

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

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

Europäischer Fonds für Regionale Entwicklung: EFRE im Bundes-Land Brandenburg vom Jahr 2014 bis für das Jahr 2020 in Leichter Sprache

Reporting Services und SharePoint 2010 Teil 1

Der Kalender im ipad

Anbindung des eibport an das Internet

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

Das Persönliche Budget in verständlicher Sprache

Grundlagen von Python

Die i-tüpfelchen: Favicons

Einführung in die Programmierung

SFTP SCP - Synology Wiki

Installationsleitfaden kabelsafe backup professional unter MS Windows

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Die Programmiersprache C99: Zusammenfassung

Einrichten eines HBCI- Zugangs mit Bank X 5.1

4D Server v12 64-bit Version BETA VERSION

Unperfekthaus-Tutorial: Wordpress

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Zugriff auf Daten der Wago über eine Webseite

Dr. Monika Meiler. Inhalt

Erstellen der Barcode-Etiketten:

Transkript:

PROGRAMMIEREN MIT C Allgemeine hinweise Alles was hier beschrieben wird, soll auch ausprobiert werden. Warum C? Weil die coolen Dinge mit C am einfachsten gehen. Das werden wir in den folgenden Übungen noch sehen. 1. C-Code kompilieren Ich empfehle die Anleitung http://c.learncodethehardway.org/book/index.html im Internet als begleitende Literatur für die Programmieraufgaben. Wenn etwas zum Programmieren mit C unklar ist, ndet man in der Regel im Internet sehr schnell eine Antwort. Für alle Programmieraufgaben empfehle ich auch wärmstens Linux als Betriebssystem und gcc als Compiler zu verwenden. Als Editor kann man zum Beispiel gedit verwenden. Schreibe mit C ein Programm, welches Hallo Welt in die Konsole schreibt, kompiliere es und führe es aus. Das einfachste C-Programm sieht folgendermaÿen aus: main ( i n t argc, char argv ){ }, wird kompiliert mit dem Befehl gcc o programm programmcode. c (-o steht für output) und ausgeführt mit dem Befehl. / programm Mit p r i n t f (" Hallo Welt\n " ) ; kann man Dinge auf die Konsole schreiben, muss aber die entsprechende Bibliothek einbinden, indem man am Anfang des Programmcodes #include <s t d i o. h> angibt. Um den Befehl zum Kompilieren nicht jedes Mal neu eingeben zu müssen kann man ihn einfach in eine Datei (die am Besten immer compile heiÿt) schreiben, die man dann mit Hilfe des Befehls chmod +x ausführbar macht und wie ein normales Programm mit. / compile startet. Man kann in dieser Datei auch mehrere Befehle hintereinander ausführen indem man sie getrennt durch && hintereinander schreibt. Es empehlt sich, auch eine Datei clean anzulegen, welche die durch compile erzeugten Dateien wieder löscht. 1

PROGRAMMIEREN MIT C 2 2. Funktionen, Standarddatentypen Schreibe zwei Funktionen, die, x und eine boolsche Variable b verlangen und berechnen und zurückgeben, eine für int und eine für double. Um bool zu benutzen muss #include <stdbool. h> { x 3 geladen werden. Den Inhalt von den Dateien *.h ndet man schnell im Internet. x 3, falls b wahr, falls b falsch Pointer In C gibt es im Prinzip keine Arrays, aber man kann auf dem heap (Arbeitsspeicherbereich, in dem nicht das Programm und nicht die lokalen Variablen liegen) n Standarddatentypen hintereinander abspeichern und diese dann mittels ihrer Speicheradressen abrufen. Ein sogenannter Pointer beinhaltet eine Speicheradresse und kennt auch die Gröÿe des bei dieser Adresse abgespeicherten Datentyps. Man deniert einen solchen Pointer mit dem Befehl double meinneuerpointer ; Bevor wir eine Pointervariable verwenden können, müssen wir ihr eine Adresse zuweisen, an der wir auch Speicher reserviert haben. Speicher kann man mit void malloc ( i n t i ), speziell also void malloc ( s i z e o f ( Datentyp ) Arraylaenge ) bestellen. malloc ist im Paket stdlib.h (am Anfang unseres Quellcodes müssen wir jetzt immer #include <stdlib.h> schreiben) und hat als Rückgabetyp einen void-pointer (void*), der weiÿ, wo der bestellte Speicher sitzt, aber nicht, wie groÿ die darin enthaltenen Datentypen sind (zum Beispiel: double und long haben 64bit, char und byte haben 8 bit). Man kann aber ohne weiteres den void-pointer, den man von malloc bekommt zu beliebigem Pointer-typ casten. Das geht zum Beispiel so double meinneuerpointer ; meinneuerpointer = malloc ( s i z e o f ( double ) ) ; malloc schreibt nichts in den Speicher, das heiÿt man kann auf den bestellten Speicher zugreifen, aber er besitzt am Anfang keine denierten Werte sondern recht zufällige Daten, die an der Stelle vorher im Speicher waren. Wenn man den reservierten Speicherbereich mit Nullen gefüllt haben will, dann kann man statt malloc auch calloc verwenden. Jetzt wo wir den Pointer auch initialisiert haben, können wir zum Test seine Speicheradresse auslesen. p r i n t f (" Pointeradresse i s t %p\n", meinneuerpointer ) ; (%p steht für pointer) gibt die Speicheradresse des Pointers in Dezimaldarstellung aus. Mit dem Stern auf der linken Seite bekommt man den Inhalt einer Speicheradresse und kann ihn auslesen beziehungsweise schreiben. Zum Beispiel so double x = meinneuerpointer ;

oder so meinneuerpointer = 5. 5 ; PROGRAMMIEREN MIT C 3 Man nennt das Dereferenzieren des Pointers. Sobald man den Speicher auf den ein Pointer zeigt nicht mehr verwendet, sollte man immer f r e e ( meinneuerpointer ) ; aufrufen, um den Speicher wieder freizugeben. Was kann man jetzt mit diesen Pointern machen? Man kann sie zum Beispiel als Argument an eine Funktion übergeben, die Funktion ändert den Speicher auf den der Pointer zeigt, und nachdem die Funktion beendet ist, kann man den Speicher auslesen. Ab jetzt gehört es zu jeder Programmieraufgabe mit valgrind. / programm zu überprüfen, ob jeglicher mit malloc bestellter Speicher ordnungsgemäÿ mit free wieder abgegeben wurde. valgrind beschwert sich zum Beispiel, wenn man einen Pointer benutzt ohne ihn initialisiert zu haben oder nachdem man ihn gefreet hat oder wenn man vergisst am Programmende alle verwendeten Pointer zu freen. Es sollte immer ERROR SUMMARY: 0 e r r o r s from 0 contexts ( suppressed : 0 from 0) am Ende erscheinen und am Besten auch keine Warnungen geben. Arrays Um in C ein Array zu denieren, kann man einfach einen Pointer verwenden, und statt sizeof(datentyp) einfach sizeof(datentyp)*n an Speicherplatz reservieren. Also folgendermaÿen: i n t n = 3 ; double meinzweiterpointer = malloc ( s i z e o f ( double ) n ) ; Damit zeigt der Pointer jetzt auf die erste Adresse eines Speicherbereichs, der so lang ist, dass n Datentypen vom Typ double hineinpassen, hintereinander. Um den i-ten double aus diesem Array aufzurufen, kann man mittels des Additionsoperators + den Pointer i Stellen weiter schieben und dann mit dem * den double im Speicher anfordern, also folgendermaÿen (Klammern sind wichtig): ( meinzweiterpointer +1) = 5. 5 ; double x = ( meinzweiterpointer +1); Eine Kurzschreibweise hierfür, die ich auch empfehle, ist meinzweiterpointer [ 1 ] = 5. 5 ; double x = meinzweiterpointer [ 1 ] ; Wenn ein Array nicht mehr verwendet wird, muss es genauso, wie alle anderen Pointer mit free freigegeben werden: f r e e ( meinzweiterpointer ) ; Die Länge von einem solchen Array muss man sich separat abspeichern und zum Beispiel an eine Funktion als separates Argument übergeben. Zum Beispiel so i n t meinefunktion ( double arraypointer, i n t laenge )

PROGRAMMIEREN MIT C 4 Structs Structs sind so etwas wie Objekte in Java. Man deniert zum Beispiel ein Struct mit Namen Vector wie folgt: s t r u c t Vector { double values ; i n t height ; } ; Benutzen kann man das struct dann so: s t r u c t Vector meinvector = malloc ( s i z e o f ( s t r u c t Vector ) ) ; ( meinvector ). height = 3 ; Da meinvector als Pointer auf ein Struct deniert ist, müssen wir erst dereferenzieren und dann können wir wie in Java mit dem.-operator das Datenfeld auslesen. Da man dies recht häug tut, gibt es auch wieder eine alternative schreibweise. Äquivalent ist meinvector >height = 3 ; Wie auch bei allen anderen Pointern folgt am Ende f r e e ( meinvector ) ; 3. Eine Matrix-Klasse Schreibe ein Struct namens Matrix, welches eine Matrix der Gröÿe width height darstellt und ein Struct namens Vector für einen Vektor der Höhe height. Implementiere auÿerdem die Funktionen s t r u c t Matrix new_matrix ( i n t width, i n t height ) s t r u c t Vector new_vector ( i n t height ) und void delete_matrix ( s t r u c t Matrix m) void delete_vector ( s t r u c t Vector v ) welche diese structs initialisieren und allen benötigten Speicher reservieren beziehungsweise den Speicher freigeben. Beachte dass man für jede dieser Funktionen jeweils zweimal malloc beziehungsweise free aufrufen muss. Schreibe auch folgende Funktionen s t r u c t Matrix ones ( i n t height, i n t width ) s t r u c t Matrix eye ( i n t s i z e ) void printmatrix ( s t r u c t Matrix matrix ) void printvector ( s t r u c t Vector vector ) welche eine Matrix voll mit Einsen und eine Identitätsmatrix erstellen beziehungsweise eine Matrix oder einen Vektor in die Konsole ausgeben. Implementiere auch die folgenden Funktionen:

PROGRAMMIEREN MIT C 5 s t r u c t Matrix transpose ( s t r u c t Matrix m) s t r u c t Matrix multiply ( s t r u c t Matrix m1, s t r u c t Matrix m2) s t r u c t Vector multiply ( s t r u c t Matrix m1, s t r u c t Vector v ) SDL und OpenGL Da wir später im Kurs SDL 2.0 (simple direct media layer) und OpenGL 1.3 (open graphics library) verwenden werden, kann man sich die Webseiten dieser Projekte schonmal ansehen. Für OpenGL sind die Kapitel 1, 2 und 3 aus http://www.glprogramming.com/red/ für uns relevant. Alle nötigen Funktionen werden aber auch während der Übung kurz erläutert.