Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Eine Einführung in die Programmiersprache C und die Grundlagen ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
E<strong>in</strong> etwas grösseres Beispiel zum E<strong>in</strong>satz von Funktionspo<strong>in</strong>tern:<br />
typedef void (*FunPtr)(<strong>in</strong>t *x); /* Typedef, ergibt e<strong>in</strong>fachere Syntax */<br />
/* Anwenden ruft fuer alle Daten <strong>die</strong> Funktion Fkt auf */<br />
void Anwenden(<strong>in</strong>t *Daten, FunPtr Fkt, <strong>in</strong>t Len)<br />
{<br />
while (Len > 0) { /* Solange nicht Datenende erreicht */<br />
Fkt(Daten); /* Funktion auf aktuellen Wert anwenden */<br />
Daten ++; /* Zum naechsten Wert gehen */<br />
Len--;<br />
}<br />
}<br />
/* Funktion ersetzt Wert durch se<strong>in</strong>en Betrag, passt zu FunPtr */<br />
void Betrag(<strong>in</strong>t *Wert)<br />
{<br />
if (*Wert < 0) {<br />
*Wert = -*Wert;<br />
}<br />
}<br />
/* Funktion ersetzt Wert durch se<strong>in</strong> Quadrat, passt zu FunPtr */<br />
void Quadriere(<strong>in</strong>t *Wert)<br />
{<br />
*Wert = *Wert * *Wert;<br />
}<br />
/* Funktion schreibt Wert auf den Bildschirm, passt zu FunPtr */<br />
void Pr<strong>in</strong>t(<strong>in</strong>t *Wert)<br />
{<br />
pr<strong>in</strong>tf("%3d ", *Wert);<br />
}<br />
<strong>in</strong>t ma<strong>in</strong> (<strong>in</strong>t argc, char *argv[])<br />
{<br />
<strong>in</strong>t Daten[] = {-3, -2, -1, 0, 1, 2, 3};<br />
Anwenden(Daten, Pr<strong>in</strong>t, 7); /* Gibt Alle Daten aus */<br />
Anwenden(Daten, Betrag, 7); /* Berechnet Betrag von Daten */<br />
Anwenden(Daten, Pr<strong>in</strong>t, sizeof(Daten)/sizeof(Daten[0])); /* Ausgabe */<br />
/* Mit dem sizeof() Ausdruck wird */<br />
/* <strong>die</strong> Arraygroesse ausgerechnet */<br />
}<br />
Anwenden(Daten, Quadrieren, 7); /* Berechnet Quadrat von Daten */<br />
Anwenden(Daten, Pr<strong>in</strong>t, 7); /* Gibt Alle Daten aus */<br />
return 0;<br />
Damit kann <strong>die</strong> Funktion Anwenden() sehr universell e<strong>in</strong>gesetzt werden, sie kann auch Funktionen<br />
verwenden, <strong>die</strong> beim Programmieren der Funktion Anwenden noch gar nicht bekannt waren.<br />
Durch den E<strong>in</strong>satz der Funktion Anwenden() ist es auch sehr e<strong>in</strong>fach, <strong>die</strong> Datenstruktur zu ändern.<br />
Wenn <strong>die</strong> Daten nicht mehr <strong>in</strong> e<strong>in</strong>em Feld, sondern <strong>in</strong> e<strong>in</strong>er Liste abgelegt werden sollen, muss nur<br />
<strong>die</strong> Funktion Anwenden() angepasst werden. Wenn anstelle der Funktion Anwenden() überall e<strong>in</strong>e<br />
eigene Schlaufe verwendet worden wäre, müssten bei Änderungen alle Schlaufen angepasst werden.<br />
Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 64/147