Hochschule Fulda – FB ET Sommersemester 2010

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

Hochschule Fulda – FB ET Sommersemester 2010
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Funktionen und Module Einführung anhand des Beispiels Wörter sortieren Timm Grams Fachhochschule Fulda Fachbereich Elektrotechnik und Informationstechnik.
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
Hochschule Fulda – FB ET Sommersemester 2010
C Tutorium – Fehlerbehandlung – Knut Stolze. 2 Grundsatz Also ist auch nach jedem Funktionsaufruf auf Fehler zu prüfen!! Jeder(!) Funktionsaufruf kann.
der Universität Oldenburg
Java: Dynamische Datentypen
Indirekte Adressierung
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Informatik II Grundlagen der Programmierung Programmieren in C Add Ons Hochschule Fulda – FB ET Sommersemester Peter.
Einführung in Visual C++
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einführung in die Programmierung Anweisungen und Datentypen
Einfach verkettete Listen
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Programmieren in C Einführung
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Programmieren in C Einführung
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Grundlagen C 5
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Programmieren in C Überblick C "Was ist wichtig?"
Programmieren in C Grundlagen C 3 Hochschule Fulda – FB AI Wintersemester 2013/14 Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Grundlagen C 2
Informatik II Grundlagen der Programmierung Programmieren in C printf() mit variabler Feldbreite Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Einführung
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Funktionen, Adressen, Zeiger Hochschule Fulda – FB ET Sommersemester 2014
Informatik II Grundlagen der Programmierung Programmieren in C Ausflug printf() Hochschule Fulda – FB ET Sommersemester 2014
Hochschule Fulda – FB ET Sommersemester 2014
Programmieren in C Annäherung an C
Programmieren in C Grundlagen C 3
Programmieren in C Module und Bibliotheken Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Programmieren in C Dateien
Programmieren in C Grundlagen C 2
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C Sortieren, Suchen
Hochschule Fulda – FB AI Sommersemester 2014
Programmieren in C "Was ist wichtig?"
Übersicht Nachtrag zu Ausdrücken
Programmieren in C Grundlagen C 1 Hochschule Fulda – FB AI Sommersemester Peter Klingebiel, HS Fulda, DVZ.
Tutorium Software-Engineering SS14 Florian Manghofer.
Programmieren in C Dynamische Listen / Bäume
Programmieren in C Zeichen-/Stringfunktionen Dynamischer Speicher
Programmieren in C Grundlagen C 2
Programmieren in C Grundlagen C 1
Programmieren in C Wie speichert C
Programmieren in C Module und Bibliotheken
 Präsentation transkript:

Informatik II Grundlagen der Programmierung Programmieren in C Module und Bibliotheken 4 Hochschule Fulda – FB ET Sommersemester 2010 http://www.rz.hs-fulda.de/et Peter Klingebiel, HS Fulda, DVZ

Felder und Zeiger 1 Bekannt: Felder und Zeiger werden in C ganz ähnlich behandelt Wesentlichster Unterschied: Felder sind dimensioniert  ihnen ist ein fester Speicherort zugeordnet  für die zu speichernden Objekte / Feldelemente ist Platz vorhanden Zeiger weisen erst nach Zuweisung oder dyn. Allozierung auf den Speicherort ihrer Objekte Feldvariable  Adresse des 1. Elements Feldindizes  Offset im Feld Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 2 Beispiel char-Felder oder Strings #define N 32 char buf[32] = {...}; /* N char-Feld */ char *bp1; /* dangling Ptr */ char *bp2; /* dangling Ptr */ int i; bp1 = buf; /* bp1 -> &buf[0] */ bp2 = malloc(N); /* bp2 -> N char */ for(i=0; i<N; i++) /* Kopieren */ bp2[i] = bp1[i]; /* Zeiger ~ Feld */ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 3 Konstante Dimensionierung von Feldern double df[100]; /* Feld mit 100 Elementen */ Variable Dimensionierung von Feldern nur für automatische Feldvariable zulässig void fun(int n) { double df[n]; /* Feld mit n Elementen */ ... } Grund: Feldgröße muss beim Anlegen / bei Speicherzuweisung des Felds bekannt sein statisch / global  Compilezeit automatisch / lokal  Eintritt in Funktion / Block Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 4 variable Dimensionierung von statischen und globalen Feldern häufig benötigt Lösung  dynamische Feldallozierung Beispiel: double-Feld dynamisch duplizieren double *dbldup(double d[], int n) { double *df; int i; df = calloc(n, sizeof(double)); for(i = 0; i < n; i++) df[i] = d[i]; return(df); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 5 Beispielanwendung: sortierte Tabellen für schnelle Ausgabe und Suche in Datenbank-Anwendungen  Programm personal2.c Idee: Personaldaten: dynamisch in Liste speichern  beliebig Einträge einfügen und entfernen schnelle Suche / Ausgabe  interessierende Listenelemente (Pers-Nr, Name, usw.) werden in dynamisch erzeugten Feldern als Zeiger gespeichert und sortiert Aktualisierung bei jeder Änderung in der Liste Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 6 dynamische Liste  sortierte Felder Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 7 /* aus Personalliste p -> sortierte Felder */ void makelists(person_p p, int n){ if(pno) /* Feld existiert bereits */ free(pno); /* -> Speicher freigeben */ /* Feld pno neu erzeugen und initial. */ pno = makepers(p, n); /* Feld mit Ptrn nach Pers.-Nr. sortieren */ bsortv((void **)pno, n, (int (*)(void *, void *))compno); if(pnn) free(pnn); pnn = makepers(p, n); bsortv((void **)pnn, n, (int (*)(void *, void *))compnn); ... Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 8 /* aus Liste p Feld mit n Zeigern erzeugen */ person_p *makepers(person_p p, int np) { person_p *n; int i; /* Speicher fuer npers Zeiger allozieren */ n = (person_p *)calloc(np+1,sizeof(person_p)); if(p == NULL) { /* Fehler bei Allozierung */ perror("makepers"); exit(1); } /* Zeiger aus Liste in Feld kopieren */ for(i = 0; p; i++, p = p->np) n[i] = p; return(n); } Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Felder und Zeiger 9 Personalprogramm personal2.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 1 Funktionen zum Handling von Datum / Zeit und Zeitmessungen #include <time.h> Grundtyp und -funktion (Systemcall) typedef long time_t; time_t time(time_t *t) liefert die aktuelle Systemzeit in Sekunden seit dem 1.1.1970, 00:00:00 ist t != NULL  t enthält Systemzeit Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 2 Zeit als String char *ctime(time_t *t); liefert die Zeit in t als String Beispiel: #include <time.h> time_t t; t = time(NULL); printf("%s", ctime(&t)); Ausgabe: Thu Jun 10 19:52:59 2010 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 3 Datentyp struct tm für Zeit und Datum struct tm { int tm_sec; /* Sekunden: 0-59 */ int tm_min; /* Minuten: 0-59 */ int tm_hour; /* Stunden: 0-23 */ int tm_mday; /* Tag des Monats: 1-31 */ int tm_mon; /* Monate seit Jan: 0-11 */ int tm_year; /* Jahre seit 1900 */ int tm_wday; /* Tage seit Sonnt.: 0-6 */ int tm_yday; /* Tage seit 1.1.: 0-365 */ int tm_isdst; /* Sommerzeit: +1 */ }; Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 4 struct tm *localtime(time_t *t) besetzt aus der Systemzeit in t die Elemente im struct tm und liefert einen Zeiger darauf Beispiel: time_t tt; /* Zeit seit 1.1.1970 */ struct tm *tl; /* Datum-/Zeit-Struct */ int d, m, y; /* Tag, Monat, Jahr */ tt = time(NULL); /* akt. Zeit holen */ tl = localtime(&tt); /* Struct besetzen */ d = tl->tm_mday; /* -> Tag */ m = tl->tm_mon + 1; /* -> Monat */ y = tl->tm_year + 1970; /* -> Jahr */ printf("%d.%d.%d\n", d, m, y); Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 5 Beispielprogramm datum.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 6 einfache Messungen der CPU-Zeit Typ und Funktion typedef long clock_t; clock_t clock(void); verbrauchte CPU-Zeit zwischen zwei Aufrufen von clock() in Mikrosekunden clock_t t1, t2, tu; t1 = clock(); /* Erste Messung */ system("bsort1 S S.bs"); t2 = clock(); /* Neue Messung */ tu = t2 - t1; /* CPU-Zeit in us */ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Datum und Zeit 7 Beispielprogramm clock.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 1 Funktionen für numerische Berechnungen in der Mathebibliothek libm.a muss ggfs. beim Binden explizit angegeben werden, z.B. bei UNIX cc num.c -o num -lm #include <math.h> Typen float, double, long double viele Konstanten, z.B. #define M_E 2.7182818284590452354 #define M_PI 3.14159265358979323846 Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 2 einige wichtige Funktionen double sin(double x) Sinus von x double cos(double x) Cosinus von x double tan(double x) Tangens von x double sinh(double x) Sinus Hyperbolicus double cosh(double x) Cosinus Hyperbolicus double tanh(double x) Tangens Hyperbolicus double exp(double x) Exponentialfunktion ex double log(double x) nat. Logarithmus ln(x) double log10(double x) Logarithmus log10(x) Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 3 weitere wichtige Funktionen double pow(double x, double y) xy Argumentfehler bei x = 0 und y < 0 oder bei x < 0 und y nicht ganzzahlig double sqrt(double x) Wurzel von x, x >= 0 double ceil(double x) kleinster ganzzahliger Wert, der nicht kleiner als x ist double floor(double x) größter ganzzahliger Wert, der nicht größer als x ist double fabs(double x) Absolutwert | x | double fmod(double x, double y) Rest x/y Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 4 Beispiel: log2.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 5 Beispiel: splot.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 6 Was zeigt diese Grafik? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 7 Und diese? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 8 … und diese? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 9 Was zeigen Grafik und Fläche? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 10 Numerische Integration: Trapezregel Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 11 Trapez-Algorithmus in C double a, b, h, I; double x, y; int i, n; h = (b – a) / n; I = 0.0; for(i = 0; i <= n; i++) { x = a + i * h; /* xi berechnen */ y = func(x); /* yi berechnen */ if(i == 0 || i == n) /* bei y0, yn: */ I = I + y / 2.0; /* I += y/2 */ else /* sonst: */ I = I + y; /* I += y */ } I = I * h; /* I = I * h */ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 12 Programm trapez.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 13 Numerische Integration: Simpsonformel Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 14 Simpson-Algorithmus in C for(i = 0; i <= n; i++) { x = a + i * h; /* xi berechnen */ y = func(x); /* yi berechnen */ if(i == 0 || i == n) /* bei y0, yn: */ I = I + y; /* I += y */ else if(i % 2) /* i gerade: */ I = I + 4.0 * y; /* I += 4 * y */ else /* i ungerade: */ I = I + 2.0 * y; /* I += 2 * y */ } I = I * h / 3; /* I = I * h/3 */ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 15 simpson.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 16 Integrationsprogramm integral1.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 17 Wie ist integral1.c zu erweitern, um ... korrekte Flächenintegrale zu berechnen? Differenzen der Int-methoden zu berechnen? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Mathematische Funktionen 18 Integrationsprogramm integral2.c Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 1 Kennen Sie Ihren Stromverbrauch? Kennen Sie Ihre Stromkosten? Kennen Sie Ihr Verbrauchsprofil? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 2 bisher: ein Meßwert / Jahr Versorger sind spätestens zum 30.12.2010 lt. EnWG verpflichtet, "einen Tarif anzubieten, der einen Anreiz zu Energieeinsparung oder Steuerung des Energieverbrauchs setzt"  monatliche Stromabrechnung  intelligente Stromzähler (Smartmeter)  1 Meßwert / Sekunde  Stromverbrauchsprofil analysierbar Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 3 Versorger sind lt. EnWG seit 1.1.2010 zum Angebot von Smartmetern bei Neubauten oder Großrenovierungen verpflichtet Smartmeter werden angeboten von Versorgern, z.B. YelloStrom http://www.yellostrom.de/privatkunden/sparzaehler/index.html oder von Drittanbietern z.B. in Kooperation mit Google PowerMeter http://www.google.com/powermeter/about/ aber auch im Selbstbau und -einbau, z.B. http://volkszaehler.org/ Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 4 Smartmeter: 1 Messung / Sekunde Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 5 Wir arbeitet Smartmeter-Monitoring? Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 6 Bessere Verbrauchsübersichten Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 7 Profil des Stromverbrauchs Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 8 Stromverbrauchsprofil von Einzelgeräten Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 9 Profil des Stromkunden möglich Programmieren in C - Peter Klingebiel - HS Fulda - DVZ

Anwendung Smartmeter 10 Entwicklung eines Programms zum Auslesen des "intelligenten Stromzählers" 3 Stromkreise sind zu messen 1 Meßwert / Sekunde 15 Minuten messen, dann Übertragung der Meßwerte an Versorger / Drittanbieter Programmieren in C - Peter Klingebiel - HS Fulda - DVZ