2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module. 2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module

Ähnliche Dokumente
Mechanismus Aufrufer Funktion Funktion Aufrufer Parameter ja mit Hilfe von Zeigern Funktionswert nein ja globale Variablen ja ja

3 Module in C. 4 Gültigkeit von Namen. 5 Globale Variablen (2) Gültig im gesamten Programm

Übungen zur Systemprogrammierung I Wintersemester 2001/2002

1 Zeiger als Funktionsargumente. U3-1 einfache swap_double Funktion. 1 Zeiger als Funktionsargumente. 1 Zeiger als Funktionsargumente.

F Zeiger, Felder und Strukturen in C

Zentrale Fragestellung. Grundsätzliche Überlegungen über die Struktur eines Programms vor Beginn der Programmierung. Verschiedene Design-Methoden

Problem: Gliederung betrifft nur die Aktivitäten, nicht die Struktur der Daten

c dl SPiC (Teil C, SS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1 Zeigervariable := Behälter für Verweise ( Adresse) Beispiel int x = 5;

F Zeiger, Felder und Strukturen in C

Programmieren in C/C++ und MATLAB. Programmieren in C/C++ und MATLAB. Sebastian Bauer Sven Willert Sabine Schmidt

Grundlagen der Programmierung Prof. H. Mössenböck. 7. Arrays

3. Gültigkeit von Definitionen

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

2 Beispiel Sinusberechnung

Objektorientierte Programmierung. Objektorientierte Programmierung. Objektorientierte Programmierung. Objektorientierte Programmierung

Systemnahe Programmierung in C (SPiC)

E Mikrocontroller-Programmierung. E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie) 1 Mikrocontroller-Umgebung. E.1 Überblick.

Dr. Monika Meiler. Inhalt

Teil II. Literatur zur C-Programmierung:

Programmieren in C/C++ und Matlab

Objektorientierte Programmierung

Universität Heidelberg 13. Oktober 2016 Institut für Informatik Prof. Dr. Klaus Ambos-Spies Nadine Losert

Ausdrücke haben einen Wert sin(math.pi) wird zu 1 sin(kreisradius) wird zur Laufzeit ausgewertet. Informatik I Kapitel 6

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Präsenz-Aufgaben = i. (a) i 15 = i 14 i = (i 2 ) 7 i = ( 1) 7 i = i i 15 = 0 + ( 1)i, i (i i) = i 1 = i i 15 = 0 + 1i,

Gliederung. Kapitel 1: Endliche Automaten

Automaten mit dot erstellen

Die Keplersche Fassregel

( ), Lösungen zum Übungsblatt Differentialrechnung. für Funktionen einer Variablen für Naturwissenschaftler (HM1) = +

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einstieg in die Informatik mit Java

Musterlösungen zum 6. Übungsblatt

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

(Analog nennt man a die und b die des Winkels β.)

Überblick: Teil C Systemnahe Softwareentwicklung

[Strukturen] Vereinbarung Verwendung Operationen mit struct Zeiger auf struct Strukturen auf dem Heap Datenstrukturen gebildet mit struct union

Bestimmtes (Riemannsches) Integral / Integral als Grenzwert einer Summe : Bedeutung: Fläche unter einer Funktion innerhalb bestimmter Grenzen

Aufgabe 30: Periheldrehung

Programmierkurs C++ Datenstrukturen Seite 1

S 1. Definition: Ein endlicher Automat ist ein 5-Tupel. Das endliche Eingabealphabet

4. Lineare Gleichungen mit einer Variablen

MC-Serie 12 - Integrationstechniken

FORMALE SYSTEME. Kleene s Theorem. Wiederholung: Reguläre Ausdrücke. 7. Vorlesung: Reguläre Ausdrücke. TU Dresden, 2.

Einführung in Mathcad H.

Zusatzaufgabe 1 für Informatiker

K Ergänzungen zur Einführung in C

Datenstrukturen & Algorithmen Lösungen zu Blatt 2 FS 12

Nachname:... Vorname:... MatrNr.:... Klausur PR2. Erstellen Sie eine Struktur für eine Komplexe Zahl mit den Elementen real und imag vom Typ double.

Datenstrukturen & Algorithmen Lösungen zu Blatt 2 FS 16

Regiomontanus - Gymnasium Haßfurt - Grundwissen Mathematik Jahrgangsstufe 9

Algorithmische Bioinformatik I

Lernkarten. Analysis. 11 Seiten

Universität Karlsruhe Institut für Theoretische Informatik. Klausur: Informatik III

RWTH Aachen Lehrgebiet Theoretische Informatik Rossmanith Dreier Hark Kuinke. SS 2017 Blatt

G1 Trigonometrie. G1 Trigonometrie. G1.1 Die trigonometrischen Grundfunktionen und ihre wichtigsten Eigenschaften

Einstieg in die Informatik mit Java

HA-Lösung TA-Lösung Diskrete Strukturen Tutoraufgabenblatt 2. Besprechung in KW44

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Der Begriff der Stammfunktion

Einstieg in die Informatik mit Java

Physische Datenstrukturen

Programmiersprachen Einführung in C

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

9 Längen- Flächen- und Volumenmessung

Erstellen einer DLL-Datei zur Verwendung in LabView 8.2 mittels Microsoft Visual C Express Edition

Lösungen zum Ergänzungsblatt 4

Grundbegriffe der Informatik

Praxis der Programmierung

Algorithmentheorie. 15 Suchen in Texten (1)

Verwendung Vereinbarung Wert einer Funktion Aufruf einer Funktion Parameter Rekursion. Programmieren in C

1) Gegeben sei ein endlicher, erkennender Automat, definiert durch: f z, definiert durch das Zustandsdiagramm: a,b. z 3

Pointer und Arrays. INE1, Montag M. Thaler, Office TG208. ZHAW, M. Thaler, K. Rege, G.

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1

Informatik - Übungsstunde

Beispiel für ein eindimensionales Array

1. Voraussetzung. 2. Erstmalig anmelden Login beantragen. Online Fahrzeug-Registrierung. Anleitung

Ulrich Stein

10 Anwendungen der Integralrechnung

Felder in C. Felder stellen eine Reihung von Elementen gleichen Typs dar. Man spricht auch von Vektoren oder Arrays.

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Dreireihige Determinanten

Beispiele: cos(x) dx = sin(x) + c (1) e t dt = e t + c (2)

1.7 Inneres Produkt (Skalarprodukt)

Systemnahe Programmierung in C (SPiC)

Übersicht. Informatik 1 Teil 9: komplexe Datentypen (Strukturen, Enumerationen, Unions)

TECHNISCHE UNIVERSITÄT MÜNCHEN

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!

Satz 6.5 (Mittelwertsatz der Integralrechnung) Sei f : [a, b] R stetig. Dann gibt es ein ξ [a, b], so dass. b a. f dx = (b a)f(ξ) f dx (b a)m.

C- Kurs 09 Dynamische Datenstrukturen

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Viel Erfolg bei der Bearbeitung der Aufgaben!

Programmierung mit C Zeiger

4 Prozessor-Datenpfad

Transkript:

2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 10 Werteustusch zwischen Funktionen Mechnismus Aufrufer Funktion Funktion Aufrufer Prmeter j mit Hilfe von Zeigern Funktionswert nein j glole Vrilen j j Verwendung gloler Vrilen? Vrilen, die von mehreren Funktionen verwendet werden und/oder oft ls Prmeter üergeen werden müssten Menge der Funktionen muss üerschur leien Zugriff uf Modul egrenzen (glole sttic-vrilen) sonst sehr schlechter Progrmmierstil Vrilen, die keiner Funktion ls Vrile oder Prmeter fest zugeordnet werden können grundsätzlich frgwürdig evtl. ein Design-Fehler? sonst Modul suchen, dem die Vrile zugeordnet werden knn Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-41 2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 11 Getrennte Üersetzung von Progrmmteilen Beispiel Huptprogrmm (Dtei fplot.c ) #include "trig.h" #define INTERVALL 0.01 /* * Funktionswerte usgeen */ int min(void) chr c; doule i; printf("funktion (Sin, Cos, Tn, Cot)? "); scnf("%x", &c); switch (c) cse T : for (i=-pi/2; i < PI/2; i+=intervall) printf("%lf %lf\n", i, tn(i)); rek;; return(0); Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-42

2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 11 Getrennte Üersetzung Beispiel (2) Heder-Dtei (Dtei trig.h ) #include <stdio.h> #define PI 3.1415926535897932 doule tn(doule), cot(doule); doule cos(doule), sin(doule); Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-43 2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 11 Getrennte Üersetzung Beispiel (3) Trigonometrische Funktionen (Dtei trigfunc.c ) #include "trig.h" doule tn(doule x) return(sin(x)/cos(x)); doule cot(doule x) return(cos(x)/sin(x)); doule cos(doule x) return(sin(pi/2-x)); Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-44

2 Kurzeinführung in die Progrmmiersprche C 2.7 Progrmmstruktur & Module 11 Getrennte Üersetzung Beispiel (4) Trigonometrische Funktionen Fortsetzung (Dtei trigfunc.c ) doule sin (doule x) doule summe; doule x_qudrt; doule rest; int k; k = 0; summe = 0.0; rest = x; x_qudrt = x*x; while ( fs(rest) > 1e-9 ) summe += rest; k += 2; rest *= -x_qudrt/(k*(k+1)); return(summe); Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-45 8Zeiger(-Vrilen) 2. 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 1 Einordnung Konstnte: Bezeichnung für einen Wert 0110 0001 Vrile: Bezeichnung eines Dtenojekts Zeiger-Vrile (Pointer): Bezeichnung einer Referenz uf ein Dtenojekt chr *p = &; p Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-46

2 Üerlick 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) ' Eine Zeigervrile (pointer) enthält ls Wert die Adresse einer nderen Vrilen der Zeiger verweist uf die Vrile Üer diese Adresse knn mn indirekt uf die Vrile zugreifen Drus resultiert die große Bedeutung von Zeigern in C Funktionen können ihre Argumente verändern (cll-y-reference) dynmische Speicherverwltung effizientere Progrmme Aer uch Nchteile! Progrmmstruktur wird unüersichtlicher (welche Funktion knn uf welche Vrile zugreifen?) häufigste Fehlerquelle ei C-Progrmmen Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-47 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 3 Definition von Zeigervrilen Syntx: Typ *Nme ; Beispiele int x = 5; x 5 int *ip; ip ➊ ➋ int y; ip = &x; ➊ y 5 y = *ip; ➋ Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-48

2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 4 Adressopertoren Adressopertor &. &x Verweisopertor *. der unäre Adress-Opertor liefert eine Referenz uf den Inhlt der Vrilen (des Ojekts) x *x der unäre Verweisopertor * ermöglicht den Zugriff uf den Inhlt der Vrilen (des Ojekts), uf die der Zeiger x verweist Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-49 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente ' Prmeter werden in C y-vlue üergeen die ufgerufene Funktion knn den ktuellen Prmeter eim Aufrufer nicht verändern uch Zeiger werden y-vlue üergeen, d. h. die Funktion erhält lediglich eine Kopie des Adressverweises üer diesen Verweis knn die Funktion jedoch mit Hilfe des *-Opertors uf die zugehörige Vrile zugreifen und sie verändern cll-y-reference Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-50

2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); void swp (int *, int *) int ; = *; * = *; * = ; Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-51 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); ➊ ➊ void swp (int *, int *) int ; = *; * = *; * = ; Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-52

2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); void swp (int *, int *) int ; = *; * = *; * = ; Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-53 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); void swp (int *, int *) int ; = *; ➋ * = *; * = ; * ➋ Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-54

2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); void swp (int *, int *) int ; = *; * = *; ➌ * = ; * * ➌ Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-55 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); void swp (int *, int *) int ; = *; * = *; * = ; ➍ * ➍ Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-56

2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 5 Zeiger ls Funktionsrgumente (2) void swp (int *, int *); int min() int, ; swp(&, &); ➊ void swp (int *, int *) int ; = *; ➋ * = *; ➌ * = ; ➍ ➊ ➌ ➍ ➋ Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-57 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 6 Zeiger uf Strukturen Konzept nlog zu "Zeiger uf Vrilen" Adresse einer Struktur mit &-Opertor zu estimmen Zeigerrithmetik erücksichtigt Strukturgröße Beispiele struct student stud1; struct student *pstud; pstud = &stud1; /* pstud stud1 */ Besondere Bedeutung zum Aufu verketteter Strukturen Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-58

2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 6 Zeiger uf Strukturen (2) Zugriff uf Strukturkomponenten üer einen Zeiger Beknnte Vorgehensweise *-Opertor liefert die Struktur.-Opertor zum Zugriff uf Komponente Opertorenvorrng echten (*pstud).est = n ; (*pstud).est = n ; unleserlich! Syntktische Verschönerung ->-Opertor (*pstud).est pstud->est = = n ; n ; Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-59 2 Kurzeinführung in die Progrmmiersprche C 2.8 Zeiger(-Vrilen) 7 Zusmmenfssung Vrile int ; 5 Zeiger int ; *p = &; 5 p Struktur struct int ; sint ; chr c;; struct s s1 = 2, ; s1 2 Zeiger uf Struktur int struct ; s *sp = &s1; s1 2 sp Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-60

9Felder 2. 2 Kurzeinführung in die Progrmmiersprche C 2.9 Felder 1 Eindimensionle Felder eine Reihe von Dten desselen Typs knn zu einem Feld zusmmengefsst werden ei der Definition wird die Größe des Felds ngegeen Größe muss eine Konstnte sein C99 ei loklen Feldern uch zur Lufzeit erechnete Werte zulässig der Zugriff uf die Elemente erfolgt durch Indizierung, eginnend ei Null Definition eines Feldes Typ Nme [ Größe ] Initilisierung ; Beispiele: int x[5]; doule f[20]; Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-61 2 Kurzeinführung in die Progrmmiersprche C 2.9 Felder 2 Initilisierung eines Feldes, = konstnter Ausdruck Ein Feld knn durch eine Liste von konstnten Ausdrücken, die durch Komm getrennt sind, initilisiert werden int prim[4] = 2, 3, 5, 7; chr nme[5] = O, t, t, o, \0 ; wird die explizite Felddimensionierung weggelssen, so estimmt die Zhl der Initilisierungskonstnten die Feldgröße int prim[] = 2, 3, 5, 7; chr nme[] = O, t, t, o, \0 ; werden zu wenig Initilisierungskonstnten ngegeen, so werden die restlichen Elemente mit 0 initilisiert Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-62

2 Kurzeinführung in die Progrmmiersprche C 2.9 Felder 3 Initilisierung eines Feldes (2) Felder des Typs chr können uch durch String-Konstnten initilisiert werden chr nme1[5] = "Otto"; chr nme2[] = "Otto"; Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-63 2 Kurzeinführung in die Progrmmiersprche C 2.9 Felder 4 Zugriffe uf Feldelemente Indizierung: Feldnme [ Ausdruck ] woei: 0 <= Wert(Ausdruck) < Feldgröße Beispiele: prim[0] == 2 prim[1] == 3 nme[1] == t nme[4] == \0 Jürgen Kleinöder Universität Erlngen-Nürnerg Informtik 4, 2010 SS 2010 Systemprogrmmierung (02-Einf-jk.fm 2010-04-22 13.53) A 2-64