elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programacion de un fractal: Triangulo Sierpinsky
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programacion de un fractal: Triangulo Sierpinsky  (Leído 3,642 veces)
karolina.s

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Programacion de un fractal: Triangulo Sierpinsky
« en: 6 Mayo 2014, 22:06 pm »

Hola a todos! Necesito ayuda con un programa que he escrito para generar el triangulo de Sierpinsky. El caso es que el ordenador lee solo el segundo subtriangulo (abajo der) y el primero (abajo izq.) y completamente ignora el tercero (arriba), aunque tenga un indice diferente. Como puedo arreglar este problema? Otro problema que tengo es que necesito que la division del triangulo en tres se aplique a TODOS los nuevos triangulos formados ... por lo que estoy viendo ahora tengo la sensacion que solo se me esta dividiendo el de abajo izq.!ARGGGGG!
Muchas gracias de antemano!

Código
  1. #include <stdio.h>
  2.  
  3. #define NTRIANGULOS 3
  4.  
  5.  
  6. struct Triangulo
  7. {
  8.    float xA,yA;
  9.    float xB,yB;
  10.    float xC,yC;
  11. };
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.    struct Triangulo triangulo[NTRIANGULOS];
  16.    int n,m,p,ntriangulos;
  17.  
  18.    FILE*fout;
  19.    fout=fopen("triangulo.txt","w");
  20.  
  21.    triangulo[0].xA = 0.0;
  22.    triangulo[0].yA = 0.0;
  23.    triangulo[0].xB = 1.0;
  24.    triangulo[0].yB = 0.0;
  25.    triangulo[0].xC = 0.5;
  26.    triangulo[0].yC = 1.0;
  27.    ntriangulos=1.0;
  28.  
  29. do{
  30.  
  31.    for(n=ntriangulos-1; n>=0&&ntriangulos<NTRIANGULOS; n--)
  32.    {
  33. m=ntriangulos;
  34.        /* segundo triangulo */
  35.        triangulo[m].xA=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/2.0 ;
  36.        triangulo[m].yA=triangulo[n].yA;
  37.  
  38.        triangulo[m].xB=triangulo[n].xB;
  39.        triangulo[m].yB=triangulo[n].yB;
  40.  
  41.        triangulo[m].xC=triangulo[n].xA + 3.0*(triangulo[n].xB - triangulo[n].xA)/4.0;
  42.        triangulo[m].yC=triangulo[n].yA + (triangulo[n].yC- triangulo[n].yA)/2.0 ;
  43.  
  44. p=ntriangulos;
  45.        /* tercer triangulo */
  46.        triangulo[p].xA=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4.0;
  47.        triangulo[p].yA=triangulo[n].yA + (triangulo[n].yC - triangulo[n].yA)/2.0;
  48.  
  49.        triangulo[p].xB=triangulo[n].xA + 3*(triangulo[n].xB -triangulo[n].xA)/4.0;
  50.        triangulo[p].yB=triangulo[n].yA + (triangulo[n].yC -triangulo[n].yB)/2.0;
  51.  
  52.        triangulo[p].xC= triangulo[n].xC;
  53.        triangulo[p].yC= triangulo[n].yC;
  54.  
  55.  
  56.        /* primer triangulo - inicial */
  57.  
  58.        triangulo[n].xC=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/4.0;
  59.        triangulo[n].yC=triangulo[n].xA +(triangulo[n].yC - triangulo[n].yA)/2.0;
  60.  
  61.        triangulo[n].xB=triangulo[n].xA + (triangulo[n].xB - triangulo[n].xA)/2.0;
  62.        triangulo[n].yB=triangulo[n].yB;
  63.  
  64.        triangulo[n].xA=triangulo[n].xA;
  65.        triangulo[n].yA=triangulo[n].yA;
  66.  
  67.        ntriangulos++;
  68.  
  69.    }
  70.  
  71. } while(ntriangulos<NTRIANGULOS);
  72.  
  73.  
  74. for(n=0;n<ntriangulos;n++)
  75. {
  76.    fprintf(fout,"%g\t%g\n%g\t%g\n%g\t%g\n",triangulo[n].xA,  triangulo[n].yA, triangulo[n].xB, triangulo[n].yB, triangulo[n].xC, triangulo[n].yC);
  77. }
  78.  
  79.    fclose(fout);
  80.    return(0);
  81. }
  82.  

Code:Blocks, lenguaje C


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Programacion de un fractal: Triangulo Sierpinsky
« Respuesta #1 en: 6 Mayo 2014, 22:53 pm »

Código
  1. int ntriangulos;
  2. // ...
  3. ntriangulos=1.0;

Es una pijotada, pero si la variable es de tipo entero... no le pases floats... y qué pasa si te da por poner 1.5?? funcionará como te esperas?? seguramente no.

Código
  1. m=ntriangulos;
  2. //...
  3. p=ntriangulos;

Esto para que?? si el valor de "p" no cambia después... usa ntriangulos directamente... tener variables duplicadas no tiene sentido y, como norma general, dificulta la legibilidad del código.

Es más, si te das cuenta, m y n tienen el mismo valor en cada iteración del bucle, luego "triangulo[m].loquesea" se pierde cuando llegas a "triangulo[p].loquesea".

Código
  1. do{
  2.  
  3.    for(n=ntriangulos-1; n>=0&&ntriangulos<NTRIANGULOS; n--)
  4.    {
  5.        // ....
  6.        ntriangulos++;
  7.    }
  8.  
  9. } while(ntriangulos<NTRIANGULOS);

¿Ese "ntriangulos" debería estar ahi?? si es así, sería más lógico ponerlo al lado de "n--" para que quede más claro el código.

Es más, si tenemos en cuenta que...

Código
  1.    ntriangulos=1.0;
  2.  
  3. do{
  4.  
  5.    for(n=ntriangulos-1; n>=0&&ntriangulos<NTRIANGULOS; n--)
  6.  

entonces, el bucle for solo se ejecuta una vez... qué sentido tiene eso?

Tu código es bastante confuso y trabado... ah si, y también te recomiendo empezar a practicar con el depurador de código.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Efecto Fractal, Wallpapres con el GIMP
Diseño Gráfico
agustoll 7 5,516 Último mensaje 26 Febrero 2008, 03:42 am
por agustoll
Triangulo De Sierpinsky
Java
zaico 3 5,142 Último mensaje 2 Mayo 2012, 03:31 am
por _teiki
matriz en c++ triangulo
Programación C/C++
yeimival 2 3,944 Último mensaje 11 Mayo 2012, 06:07 am
por yeimival
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines