zi+1 = zi2, mit c, z komplex und z0 = 0
bis zum Divergieren (hier: ||zi||2 = zrei2 + zimi2 >= 4) als Ergebnis zurückliefert.
Hinweis Beachten Sie, daß ANSI-C keine komplexen Zahlen unterstützt. Verwenden Sie daher folgende Umformung: zrei+1 = zrei * reqi - zimi * zimi + cre und zimi+1 = 2 * zrei * zimi + cim.
Brechen Sie die Auswertung spätestens nach 255 Iterationen ab.
Werten Sie diese Funktion im Bereich von cre = -3.2 ... 3.2 und cim = -2.4 ... 2.4 grafisch aus, indem c auf
Bildschirmkoordinaten transformiert wird (xScreen=(x-xMax/2)*0.01, yScreen=(y-yMax/2)*0.01)) und der Farbwert
des dort zu setzebdeb Pixels das jeweilige Funktionsergebnis ist.
Verwenden Sie folgendes Programmskelett:
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
int main(void)
{int x, y, xMax, yMax;
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "e:\\bc\\bgi"); /* Pfad von egavga.bgi */
if (graphresult() != grOk) return 1; / *error */
xMax = getmaxx(); yMax = getmaxy();
for /* alle erlaubten x-Koordinaten */
for /* alle erlaubten y-Koordinaten */
putpixel( x, y, CountIterations((x-xMax/2)*0.01, (y-yMax/2)*0.01) );
getch(); closegraph();
return 0;
}
/* Header-Datei einbinden */
#include <graphics.h>
#include <stdio.h>
#include <conio.h>
#define MAX_ITERATIONS 255 /* Max. Anzahl der Iterationen */
int CountIterations(double cre, double cim)
{
double zre, zim, zredummy;
int i;
zre = 0; /* Realteil auf 0 setzen */
zim = 0; /* Imaginaerteil auf 0 setzen */
for (i = 1; i <= MAX_ITERATIONS; i++) /* Iterationen */
{
zredummy = zre; /* Realteil merken, wird spaeter noch benoetigt */
zre = zre * zre - zim * zim + cre; /* neuen Realteil berechnen */
zim = 2 * zredummy * zim + cim; /* neuen Imaginaerteil berechnen */
if (zre * zre + zim * zim >= 4) /* Abbruchbedingung */
return(i); /* Anzahl der Iteration zurueckgeben */
}
return(MAX_ITERATIONS); /* Max. Anzahl der Iterationen zurueckgeben */
}
int main(void) /* hier beginnt das Hauptprogramm */
{
int x, y, xMax, yMax;
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "\\tc\\bgi"); /* Pfad von egavga.bgi */
if (graphresult() != grOk)
return(1); /* error */
xMax = getmaxx();
yMax = getmaxy();
for (x = 0; x < xMax; x++) /* alle erlaubten x-Koordinaten */
{
for (y = 0; y < yMax; y++) /* alle erlaubten y-Koordinaten */
{
putpixel(x, y, CountIterations((x - xMax / 2) * 0.01, (y - yMax / 2) * 0.01));
}
}
getch();
closegraph();
return(0); /* Das Hauptprogramm gibt am Ende 0 zurück, da kein Fehler aufgetreten ist. */
}