ein Kapitel zurück                                           ein Kapitel weiter

Weitere Funktionen in der Headerdatei <stdlib.h> will ich schnell im Schnelldurchlauf machen.

Zufallszahlen mit rand() und srand()
Kommen wir zuerst zur Funktion...

int rand(void);  

...liefert eine Pseudo-Zufallszahl im Bereich 0 bis RAND_MAX zurück. Beispiel...

/*Download:rand1.c*/
#include <stdlib.h> #include <stdio.h> int main() { int zufallszahl,i; for(i=0;i<5;i++) printf("Die Zufallszahl lautet %d\n",zufallszahl=rand()); return 0; }

Wenn sie das Programm ausführen bekommen sie 5 verschiedene Zufallszahlen zwischen 0 und RAND_MAX zurück. Aber spätestens wenn sie das Programm jetzt ein 2. Mal starten werden sie merken das sich diese Zufallszahlen immer wieder wiederholen. Das Problem an der Funktion rand() liegt daran das die Funktion immer den selben Startpunkt zur Berechnung der Zufallszahl benutzt. Dafür gibt es jetzt die Funktion...

void srand(unsigned int startwert);  

...nun können wir den Startpunkt für unsere Zufallszahl benutzen....

/*Download:rand2.c*/
#include <stdlib.h> #include <stdio.h> int main() { int zufallszahl,i,startpunkt; printf("Geben sie irgendeine Zahl ein : "); scanf("%d",&startpunkt); srand(startpunkt); for(i=0;i<5;i++) printf("Die Zufallszahl lautet %d\n",zufallszahl=rand()); return 0; }

Nun wollen wir aber nicht andauernd einen Startwert für unseren Zufallsgenerator eingeben, denn zum einen ist dies Umständlich und zum anderen sollten sie 2mal den gleichen Wert eingeben bekommen sie wieder dieselben Zahlen zurück. Was eignet sich also besser als unsere time() Funktion für den Startwert. Und was machen wir falls wir eine Zufallszahl im Bereich zwischen 1 und 10 benötigen? Dazu eignet sich bestens unser Modulo-Operator '%'......

/*Download:srand.c*/
#include <stdlib.h> #include <stdio.h> #include <time.h> int main() { int zufallszahl,i; srand(time(NULL)); for(i=0;i<5;i++) printf("Die Zufallszahl lautet %d\n",zufallszahl=rand()%10+1); return 0; }

Nun erhalten wir schon etwas bessere Zufallszahlen im Bereich zwischen 1-10. Ich will in einem späteren Kapitel etwas genauer zu diesem Thema Zufallszahlen kommen.

Absolutwerte

Mit den Funktionen...

long int labs(long int zahl);
int abs(int zahl);  

...erhalten wir den Absolutwert zum ganzzahligen Argument zahl....

/*Download:abs.c*/
#include <stdlib.h> #include <stdio.h> int main() { int zahl=5; printf("%d",abs(zahl-20)); return 0; }

Quotient und Rest einer Division

Die Funktion....

div_t div(int zaehler, int nenner);
ldiv_t ldiv(long int zaehler, long int nenner);  

div_t und ldiv_t sind Strukturtypen mit folgendem Inhalt....

typedef struct{
                int quot; /* quotient */
                int rem;   /* remainder */
              } div_t;  

...bzw...

typedef struct{
                long int quot; /* quotient */
                long int rem;   /* remainder */
              } ldiv_t;  

...rechnet zaehler/nenner. Der Rest des Wertes steht in rem, falls die Rechnung ungenau ist, und der Quotient in steht in quot. Beispiel....

/*Download:quot.c*/
#include <stdlib.h> #include <stdio.h> div_t x; int main(void) { x = div(10,3); printf("10 div 3 = %d Rest %d\n", x.quot, x.rem); return 0; }

Diese Funktion macht im Prinzip nichts anderes als zu rechnen...

quot=zaehler/nenner;
rem=zaehler%nenner;  

In der Headerdatei <stdlib.h> befinden sich auch eine Funktion zur Binären Suche und eine Sortierfunktion (Quicksort). Diese will ich aber in einem späteren Kapitel durchnehmen wenn es um das Thema Sortieren bzw. Suchen geht.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf