Solars C++ Kurs
Programmieren leicht erlernt
Das erste Programm

Zusatzinfos

Hier werden Funktionen vorgestellt, welche zum Schreiben eigener Programme sehr hilfreich sein können.

Mathematische Funktionen:

Alle hier vorgestellten mathematischen Funktionen benötigen die Headerdatei math.h. Benutzen sie zum Einbinden der Headerdatei den Befehl '#include <math.h>' ganz am Anfang des Programms.

Die Quadratwurzel:
dErgebnis = sqrt( dZahl );

Zahl1 hoch Zahl2:
dErgebnis = pow( dZahl1, dZahl2 );

Cosinus:
dErgebnis = cos( dZahl );

Sinus:
dErgebnis = sin( dZahl );

Exponentialfunktion:
dErgebnis = exp( dZahl );

Natürlicher Logarithmus:
dErgebnis = log( dZahl );

Logarithmus:
dErgebnis = log10( dZahl );

Text-Funktionen

Alle hier vorgestellten Text-Funktionen benötigen die Headerdatei string.h. Benutzen sie zum Einbinden der Headerdatei den Befehl '#include <string.h>' ganz am Anfang des Programms.

Text aneinanderhängen:
Diese Funktion hängt den szString2 an den szString1 dran.
strcat( szString1, szString2);

Einen Text kopieren:
Diese Kopiert szString2 nach szString1.
strcpy( szString1, szString2);

Die Länge eines Textes herausfinden:
Diese Funktion gibt die Anzahl der Buchstaben eines Textes zurück.
nZahl = strlen( szString );

In Kleinbuchstaben umwandeln:
Diese Funktion wandelt alle Buchstaben in szString in Kleinbuchstaben um.
_strlwr( szString );

In Großbuchstaben umwandeln:
Diese Funktion wandelt alle Buchstaben in szString in Großbuchstaben um.
_strupr( szString );

Text umdrehen:
Diese Funktion schreibt szString rückwärts.
_strrev( szString );

Zufallszahlen

Zufallszahlen lassen sich recht einfach mit vorgefertigten Funktionen erzeugen.

Folgende Headerdateien müssen eingebunden werden, um Zufallszahlen zu erzeugen:
#include <stdlib.h>
#include <time.h>
#include <math.h>

Mit folgender Zeile wird der Zufallszahlengenerator initialisiert:
srand( (unsigned) time( NULL) );

Mit srand( nZahl ); wird der Startwert der Zufallszahlen festgelegt. Wenn nZahl immer gleich groß ist, würden später jedesmal die gleichen 'Zufallszahlen' gezogen werden. Deshalb sollte nZahl bei jedem Start eine andere Größe haben.
Die Funktion time( NULL ) gibt die Anzahl der Sekunden seit 0:00 Uhr am 01.01.1970 zurück. Damit ist der Zufallsgenerator bei jedem Programmstart mit einem neuen Wert initialisiert.
Da time einen Wert vom Typ signed zurückgibt, aber srand einen Wert vom Typ unsigned erwartet, muß der Datentyp noch umgewandelt werden. Dies geschieht mit der Angabe des Datentypes in Klammer direkt vor der Variablen.

Ab jetzt känn jederzeit eine Zufallszahl erzeugt werden.
Eine Zufallszahl kann man jederzeit mit dem Befehl rand() holen. Dieser Befehl gibt eine Zahl zwischen 0 und RAND_MAX zurück. RAND_MAX ist eine Konstante, welche im Programm als solche benutzt werden kann wie eine Zahl.

double dRand;
int nZahl;

// Zufallszahl holen: //
dRand = rand();

// Daraus eine Zahl zwischen 0 und 1 erstellen: //
dRand /= RAND_MAX;

// Daraus eine Würfelzahl erstellen: //
dRand = dRand * 6 + 1;
nZahl = (int) dRand

In diesem Beispiel wurde ein Würfel mit 6 Augen programmiert.
dRand * 128 hätte z.B. eine zahl von 0 bis 127 ergeben können. Da nZahl ein Integer ist, werden die Zahlen auf ganze Zahlen gerundet.

Zum Abschluß der Zusatzinfos noch ein vollständiges Programm mit einem Zufallsgenerator:

main.cpp
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

main()
{
  double dRand;
  int nWuerfel1;
  int nWuerfel2;

  srand( (unsigned) time( NULL ) );

  dRand = rand();
  dRand /= RAND_MAX;
  dRand = dRand * 6 + 1;
  nWuerfel1 = (int) dRand;

  dRand = rand();
  dRand /= RAND_MAX;
  dRand = dRand * 6 + 1;
  nWuerfel2 = (int) dRand;

  cout << "Mit dem ersten Wuerfel wurde eine ";
  cout << nWuerfel1 << " gewuerfelt.\n";
  cout << "Mit dem zweiten Wuerfel wurde eine ";
  cout << nWuerfel2 << " gewuerfelt.\n";
  cout << "Sie koennen deshalb ";
  cout << nWuerfel1 + nWuerfel2 << " Felder weiterziehen.\n";

  if ( nWuerfel1 == nWuerfel2 )
  {
    cout << "Da sie einen Pasch gewuerfelt haben,";
    cout << " duerfen sie gleich nocheinmal wuerfeln.\n";
  }

  return 0;
}

Der erste Würfel wird bei diesem Programm über einen längeren Zeitraum immer die selbe Augenzahl würfeln.
Dies liegt daran, wie srand und rand zusammenarbeiten.

Das Problem läßt sich aber leicht umgehen, indem man direkt nach srand einmal rand aufruft.

Wenn also im vorherigem Programm die Zeile
  srand( (unsigned) time( NULL ) );
durch die Zeilen
  srand( (unsigned) time( NULL ) );
  rand();
ersetzt wird, werden beide Würfel richtig funktionieren.