Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

 << zurück
C von A bis Z von Jürgen Wolf
Das umfassende Handbuch für Linux, Unix und Windows
– 2., aktualisierte und erweiterte Auflage 2006
Buch: C von A bis Z

C von A bis Z
1.116 S., mit CD, Referenzkarte, 39,90 Euro
Galileo Computing
ISBN 3-89842-643-2
gp Kapitel 13 Arrays
  gp 13.1 Arrays deklarieren
  gp 13.2 Initialisierung und Zugriff auf Arrays
    gp 13.2.1 Gültigkeitsbereich von Arrays
  gp 13.3 Arrays vergleichen
  gp 13.4 Anzahl der Elemente eines Arrays ermitteln
  gp 13.5 Übergabe von Arrays an Funktionen
  gp 13.6 Arrays aus Funktionen zurückgeben
  gp 13.7 Programmbeispiel zu den Arrays
  gp 13.8 Einlesen von Array-Werten
  gp 13.9 Mehrdimensionale Arrays
  gp 13.10 Mehrdimensionale Arrays initialisieren
    gp 13.10.1 Tic Tac Toe
    gp 13.10.2 Dreidimensionale Arrays
  gp 13.11 Übergabe von zwei- bzw. mehrdimensionalen Arrays an Funktionen
  gp 13.12 Arrays in Tabellenkalkulation einlesen (*.CSV–Dateien)
  gp 13.13 Strings/Zeichenketten (char Array)
    gp 13.13.1 Vom String zur Binärzahl
  gp 13.14 Einlesen von Strings
  gp 13.15 Standard-Bibliothek <string.h>
    gp 13.15.1 strcat() – Strings aneinander hängen
    gp 13.15.2 strchr() – ein Zeichen im String suchen
    gp 13.15.3 strcmp() – Strings vergleichen
    gp 13.15.4 strcpy() – einen String kopieren
    gp 13.15.5 strcspn() – einen Teilstring ermitteln
    gp 13.15.6 strlen() – Länge eines Strings ermitteln
    gp 13.15.7 strncat() – String mit n Zeichen aneinander hängen
    gp 13.15.8 strncmp() – n Zeichen von zwei Strings miteinander vergleichen
    gp 13.15.9 strncpy() – String mit n Zeichen kopieren
    gp 13.15.10 strpbrk() – Auftreten bestimmter Zeichen suchen
    gp 13.15.11 strrchr() – das letzte Auftreten eines bestimmten Zeichens im String suchen
    gp 13.15.12 strspn() – erstes Auftreten eines Zeichens, das nicht vorkommt
    gp 13.15.13 strstr() – String nach Auftreten eines Teilstrings durchsuchen
    gp 13.15.14 strtok() – String anhand bestimmter Zeichen zerlegen


Galileo Computing - Zum Seitenanfang

13.7 Programmbeispiel zu den Arrays  toptop

Das folgende, etwas umfangreichere Beispiel zeigt, welche Möglichkeiten die Verwendung von Arrays bietet. Das Beispielprogramm wertet eine Statistik für zwei Fußballmannschaften aus, und zwar das Tore- und Punkteverhältnis der letzten fünf Spiele, die beide Mannschaften gegeneinander gespielt haben:

/* array13.c */
#include <stdio.h>
#include <stdlib.h>
/* Bilanz aus 5 Spielen */
#define SPIELE 5
#define WIN    3
#define LOSE   0
#define REMIS  1
/* Alle Elemente mit 0 initialisieren */
int Bayern[SPIELE]  = { 0 };
int Borussia[SPIELE]= { 0 };
/* Funktion zum Zaehlen der Punkte */
void punkte(int bm[], int bd[], int count) {
   if(bm[count] > bd[count]) {
      bm[count] = WIN;  /* 3 Punkte für Bayern */
      bd[count] = LOSE;
   }
   else if(bm[count] < bd[count]) {
      bm[count] = LOSE;
      bd[count] = WIN;  /* 3 Punkte für Borussia */
   }
   else if(bm[count] == bd[count]) {
      bm[count] = REMIS; /* 1 Punkt für jeden – Unentschieden */
      bd[count] = REMIS;
   }
}
int main(void) {
   unsigned int tor1, tor2;
   unsigned int tmptor1 = 0, tmptor2 = 0;
   unsigned int punkte_bay = 0, punkte_bor = 0;
   unsigned int count=0;        /* Indexzaehler */
   /* Eingabe des Anwenders */
   printf("Eingabe der letzten %d Spiele\n", SPIELE);
   while(count != SPIELE) {
         printf("%d. Spiel : Bayern – Borrusia\n", count+1);
         printf("Tor(e) Bayern   : ");
         scanf("%2d", &tor1);
         Bayern[count] = tor1;
         printf("Tor(e) Borussia : ");
         scanf("%2d", &tor2);
         Borussia[count] = tor2;
         tmptor1 += tor1;         /*Tore zaehlen Bayern*/
         tmptor2 += tor2;         /*Tore zaehlen Borussia*/
         /* Werte an Funktion punkte() uebergeben */
         punkte(Bayern, Borussia, count);
         /* Punkte zaehlen */
         punkte_bay += Bayern[count];
         punkte_bor += Borussia[count];
         /* Nächstes Spiel */
         count++;
   }
   /* Ausgabe der Statistik */
   printf("\n\nStatistik der letzten %d Spiele\n\n", SPIELE);
   printf("Bayern – Borussia\n");
   printf("Punkte : %2d : %2d\n", punkte_bay, punkte_bor);
   printf("Tore   : %2d : %2d\n", tmptor1, tmptor2);
   return EXIT_SUCCESS;
}

Die Bildschirmausgabe des Programms könnte (abhängig von den Eingabewerten) z.B. so aussehen:

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 13.5   Ausgabe des Programmbeispiels

Das Programm, Schritt für Schritt erläutert:

int Bayern[SPIELE]  = { 0 };
int Borussia[SPIELE]= { 0 };

Hier wird jeweils ein Array mit dem Wert 0 initialisiert. Sehr wichtig im Programm ist die Variable

unsigned int count = 0;

Mit ihr wird die Anzahl der gespielten Spiele gezählt.

In der while-Schleife der Hauptfunktion werden Sie aufgefordert, das Endergebnis jedes einzelnen Spiels einzugeben. Der Wert wird an die Arrays mittels

Bayern[count] = tor1;
...
Borussia[count] = tor2;

übergeben. War das erste Ergebnis beispielsweise 2:1 für Bayern, dann bekommen die Elemente mit dem Index 0 folgende Werte:

Bayern[0] = 2;
...
Borussia[0] = 1;

Diese beiden Werte werden danach mit der Anzahl absolvierter Spiele an die Funktion void punkte(…) übergeben:

punkte(Bayern, Borussia, count);

Tatsächlich werden hier die Anfangsadressen der Arrays an die Funktion punkte() übergeben. Dort wird mit if-else-Anweisungen überprüft, welcher der beiden Werte höher ist. Dabei ist das aktuelle Ergebnis von Interesse, welches mit dem Index [count] angegeben ist. Im konkreten Beispiel (2:1) wäre folgende Bedingung wahr:

if(bm[count] > bd[count]) {
      bm[count] = WIN;   /* 3 Punkte für Bayern */
      bd[count] = LOSE;
   }

Somit werden den Elementen der Arrays folgende Werte zugewiesen:

bm[0] = 3    /* Punkte für Bayern */
bd[0] = 0    /* Punkte für Borussia */

Wenn Borussia siegen sollte, überprüft die Funktion punkte() die nächste Bedingung. Die letzte else-if-Anweisung steht für ein Unentschieden beider Mannschaften, und jeder bekommt einen Punkt. Danach fährt das Programm fort mit der while-Schleife der Hauptfunktion. Dort wird mit

count++;

der Indexzähler um 1 erhöht, und es kommt die nächste Abfrage der Werte für:

Bayern[1]=... und Borussia[1]=...

Es werden so lange Werte eingegeben, bis

while(count != SPIELE)

unwahrheitsgemäß abbricht. Das ist der Fall, sobald count == SPIELE wird, also 5 Spiele gespielt wurden. Anschließend wird die Gesamtpunktzahl von jedem Team auf dem Bildschirm ausgegeben. Zur Vergabe von Punkten wurden hier symbolische Konstanten verwendet, falls sich im Reglement wieder einmal etwas in der Punktevergabe ändert.

 << zurück
  
  Zum Katalog
Zum Katalog: C von A bis Z
C von A bis Z
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Shell-Programmierung






 Shell-Programmierung


Zum Katalog: Linux-UNIX-Programmierung






 Linux-UNIX-Programmierung


Zum Katalog: C/C++






 C/C++


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Reguläre Ausdrücke






 Reguläre Ausdrücke


Zum Katalog: Linux






 Linux


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Galileo Press 2006
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de