la funcion generar arcos todas las variables que declaro quedan en 0

Iniciado por Brench, 7 Septiembre 2017, 04:10 AM

0 Miembros y 1 Visitante están viendo este tema.

Brench

Necesito ayuda con este trabajo, no se alguien podra encontrar el error, el siguiente programa trata de realizar un grafico en html con svg y c con manipulacion de archivos, sin embargo en la funcion generar arcos todas las variables que declaro dentro esa funcion estan trabados en 0, y no se porque sucede eso. El codigo es el siguiente:

#include <stdio.h>
#include <stdlib.h>

void abrir_html_svg(float x, float y, FILE*archivo);
void cerrar_html_svg(FILE*archivo);
void linea(float x1, float y1, float x2, float y2, FILE*archivo);
void arco_superior(float x1, float y1, float x2, float y2, float r, FILE*archivo);
void arco_inferior(float x1, float y1, float x2, float y2, float r, FILE*archivo);
void generar_arcos(int n, int d, int m, FILE*archivo);

void abrir_html_svg(float x, float y, FILE*archivo){//esta funcion inicializa el codigo html y svg con ancho x y largo y
   fprintf(archivo, "<html><body><svg height=""%.3f"" width=""%.3f"">\n", x, y);
   printf("Se inicio el html\n");
}

void cerrar_html_svg(FILE*archivo){//esta duncion cierra el codigo html
   fprintf(archivo, "</svg></body></html>");
   printf("Se cerro el html\n\n");
}

void arco_superior(float x1, float y1, float x2, float y2, float r, FILE*archivo){
   //esta funcion imprimira uno de los arcos superiores en el archivo
   fprintf(archivo, "<path d='M%.3f,%.3fA%.3f,%.3f 0 0,1 %.3f,%.3f' stroke='red' stroke-width='1' fill='none'></path>\n", x1,y1,r,r,x2,y2);
   printf("Se imprimio el arco superior empezando en %.3f,%.3f hasta %.3f,%.3f y radio %.3f\n", x1,y1,x2,y2,r);
}
void arco_inferior(float x1, float y1, float x2, float y2, float r, FILE*archivo){
   //esta funcion imprimira un arco inferior COMPLETO en el archivo
   fprintf(archivo, "<path d='M%.3f,%.3fA%.3f,%.3f 0 0,0 %.3f,%.3f' stroke='red' stroke-width='1' fill='none'></path>\n", x1,y1,x2,y2,r);
   printf("Se imprimio el arco inferior empezando en %.3f,%.3f hasta %.3f,%.3f y radio %.3f\n", x1,y1,x2,y2,r);
}

void generar_arcos(int n, int d, int m, FILE*archivo){//esta funcion genera los arcos del archivo
   // n es el numero de capas, d es la longitud del cuadrado exterior y m el margen
   float M = (d+(2*m))/2;
   float delta = (((2*n)+2)/d);
   int c;
   while(n>0){
       float r = n*delta;
       float pix = M+r;
       float piy = M;
       float pfx = M-r;
       float pfy = M;
       if(n%2==1){
           arco_superior(pix,piy,pfx,pfy,r,archivo);
       }else{
           arco_inferior(pix,piy,pfx,pfy,r,archivo);
       }
       n--;c++;
   }
   printf("Se generaron %d capas\n", c);
}

void linea(float x1, float y1, float x2, float y2, FILE*archivo){
   fprintf(archivo, "<line x1=%.3f x2=%.3f y1=%.3f y2=%.3f style=""stroke:rgb(255,0,0);stroke-width:2"" />>\n", x1, x2, y1, y2);
   printf("Se imprimio correctamente la linea de: %.3f,%.3f a %.3f,%.3f\n", x1, y1, x2, y2);
}


int main(){
   int n,d,m, dc;
   n = 5; // numero de capas inferiores y superiores
   d = 300;  // largo del cuadrado exterior en pixeles
   m = 50;  // margen del cuadrado exterior con el limite
   dc = d+2*m;  // largo del area total

   FILE * archivo= fopen("main.html", "w");
   if(archivo == NULL){
       printf("Hubo un errror al iniciar el archivo");
       return 1;
   }

   abrir_html_svg(dc, dc, archivo);

   generar_arcos(n, d, m, archivo);

   cerrar_html_svg(archivo);
   fclose(archivo);
   return 0;
}



· Los códigos deben ir en etiquetas GeSHi
· Los títulos deben ser descriptivos
>aquí las reglas del foro
-Engel Lex

ivancea96

El resultado de una operación entre 2 números enteros (int en este caso) es otro número entero.

float delta = (((2*n)+2)/d);
Al dividir entre d, el resultado será entero y no tendrá decimales. Da igual que le asignes a un float, el resultado es int de principio.

La solución más simple es que los parámetros sean float también, por ejemplo.