2017-11-15 1 views
0

Ich verwende eine doppelte For-Schleife, um jeden Punkt (Koordinatenpaar) in einem rechteckigen Bereich von (-2.0, -1.12) bis (0.47, 1.12) um zu sehen, ob es zum Mandelbrot-Set gehört. Wenn dies der Fall ist, möchte ich eine 1 drucken. Wenn das nicht der Fall ist, möchte ich eine 0 drucken. Die Grundidee besteht darin, Zeile für Zeile eine Reihe von Zeichen zu drucken, die ein vereinfachtes Mandelbrot-Set anzeigen.Drucken eines gesamten Zeichenarrays nach dem Durchlaufen jedes Punkts in einem rechteckigen Bereich

Das ist meine Hauptfunktion:

#include <stdio.h> 
#include "complex.h" 
#include "mandelbrot.h" 

#define STEP_X 0.06175 
#define STEP_Y 0.07466     

int main(void){ 

    int i = 0; 
    char arr[50]; 
    complex_t c, abs, max; 
    max.real = 10000; 
    max.imag = 0; 

    for (c.imag = -1.12; c.imag <= 1.12; c.imag += STEP_Y){ 
      for (c.real = -2.0; c.real <= 0.47; c.real += STEP_X){ 
        abs = abs_complex(mandelbrot(c,15)); 
        if (abs.real < max.real){ 
          arr[i] = 1; 
          i++; 
        } 
        else{ 
          arr[i] = 0; 
          i++; 
        } 
      } 
      printf("%s", arr); 
      i = 0; 
    } 
}           

Das Programm kompiliert ganz gut, aber keine Ausgabe. Ich weiß, dass ich das Array nicht auf die richtige Weise drucken muss, aber für das Leben von mir kann ich nicht herausfinden, wie es geht.

Alle Rückmeldungen, Hinweise oder Tipps würden sehr geschätzt werden.

Vielen Dank im Voraus!

+1

Wo sind Sie * n ul-termining * 'arr' und was ist der Unterschied zwischen' 1' und ASCII ''1''? (Hinweis: [ASCII-Tabelle und Beschreibung] (http://www.asciitable.com/)) –

Antwort

2

Die Probleme, die Sie haben, sind zweifach. (1) Sie kopieren Dezimalwerte zu arr (z. B. 0 und 1) anstelle von ASCII-Zeichen ('0' und '1'). Dezimal 0 und 1 sind nicht druckbar. Ironisch dezimal 0 ist die nullende Zeichen, also, wenn if (abs.real >= max.real) für i == 0arr die leere Zeichenfolge enthält.

Zweitens rufen Sie printf an, ohne versichert zu haben, dass das letzte Zeichen Null-Beendung Zeichen ist. (Sie können dies durch char arr[MAXC] = ""; Initialisierung standardmäßig tun und die Versicherung der Schleife zu i + 1 < 50 && c.real <= 0.47 begrenzt ist oder Sie können einfach bejahend beenden arr mit arr[i] = 0; vor i = 0; Aufruf (oder Ihre Erklärung i innerhalb der ersten for Schleife bewegen und initialisieren).

Dies ist nicht getestet (ich weiß nicht Ihre lokale Header), aber es sieht aus wie Sie bestimmt:.

#include <stdio.h> 
#include "complex.h" 
#include "mandelbrot.h" 

#define MAXC  50 
#define STEP_X 0.06175 
#define STEP_Y 0.07466     

int main(void){ 

    complex_t c, abs, max; 
    max.real = 10000; 
    max.imag = 0; 

    for (c.imag = -1.12; c.imag <= 1.12; c.imag += STEP_Y) { 

     int i = 0;    /* declare/initialize i & arr here */ 
     char arr[MAXC] = ""; /* set to all zero */ 

     for (c.real = -2.0; 
      i + 1 < MAXC && c.real <= 0.47; /* limit to 49 chars max */ 
      c.real += STEP_X) { 

      abs = abs_complex (mandelbrot (c,15)); 

      if (abs.real < max.real) 
       arr[i++] = '1'; /* assign character '1' */ 
      else 
       arr[i++] = '0'; /* assign character '0' */ 
     } 
     arr[i] = 0;    /* nul-terminate line */ 
     printf ("%s\n", arr);  /* output line */ 
    } 
    return 0; 
} 

probieren Sie es und lassen Sie mich wissen, wenn Sie weitere Fragen haben

+0

Eine einzelne Null ist offiziell eine Oktalkonstante, aber sie ist nicht von einer Dezimal-Null zu unterscheiden. –

+0

Du hast mich dort ... Meine oktale Konstante RADAR muss fehlerhaft sein ':)', Good catch JL. Ich weiß genau, was du sagst, aber ich muss zugeben, dass es während der Antwort nie in meinen Gedankenprozess eingetreten ist ... –

+0

Das war genau richtig. Sie, mein Herr, sind ein Gott unter den Menschen. Als Anfänger-Programmierer bin ich immer noch ungläubig, wie Sie das gemacht haben, Header-Dateien fehlen und alles, ohne auch nur den kleinsten Syntaxfehler. –

Verwandte Themen