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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  la funcion generar arcos todas las variables que declaro quedan en 0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: la funcion generar arcos todas las variables que declaro quedan en 0  (Leído 2,127 veces)
Brench

Desconectado Desconectado

Mensajes: 1


Ver Perfil
la funcion generar arcos todas las variables que declaro quedan en 0
« en: 7 Septiembre 2017, 04:10 am »

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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void abrir_html_svg(float x, float y, FILE*archivo);
  5. void cerrar_html_svg(FILE*archivo);
  6. void linea(float x1, float y1, float x2, float y2, FILE*archivo);
  7. void arco_superior(float x1, float y1, float x2, float y2, float r, FILE*archivo);
  8. void arco_inferior(float x1, float y1, float x2, float y2, float r, FILE*archivo);
  9. void generar_arcos(int n, int d, int m, FILE*archivo);
  10.  
  11. void abrir_html_svg(float x, float y, FILE*archivo){//esta funcion inicializa el codigo html y svg con ancho x y largo y
  12.    fprintf(archivo, "<html><body><svg height=""%.3f"" width=""%.3f"">\n", x, y);
  13.    printf("Se inicio el html\n");
  14. }
  15.  
  16. void cerrar_html_svg(FILE*archivo){//esta duncion cierra el codigo html
  17.    fprintf(archivo, "</svg></body></html>");
  18.    printf("Se cerro el html\n\n");
  19. }
  20.  
  21. void arco_superior(float x1, float y1, float x2, float y2, float r, FILE*archivo){
  22.    //esta funcion imprimira uno de los arcos superiores en el archivo
  23.    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);
  24.    printf("Se imprimio el arco superior empezando en %.3f,%.3f hasta %.3f,%.3f y radio %.3f\n", x1,y1,x2,y2,r);
  25. }
  26. void arco_inferior(float x1, float y1, float x2, float y2, float r, FILE*archivo){
  27.    //esta funcion imprimira un arco inferior COMPLETO en el archivo
  28.    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);
  29.    printf("Se imprimio el arco inferior empezando en %.3f,%.3f hasta %.3f,%.3f y radio %.3f\n", x1,y1,x2,y2,r);
  30. }
  31.  
  32. void generar_arcos(int n, int d, int m, FILE*archivo){//esta funcion genera los arcos del archivo
  33.    // n es el numero de capas, d es la longitud del cuadrado exterior y m el margen
  34.    float M = (d+(2*m))/2;
  35.    float delta = (((2*n)+2)/d);
  36.    int c;
  37.    while(n>0){
  38.        float r = n*delta;
  39.        float pix = M+r;
  40.        float piy = M;
  41.        float pfx = M-r;
  42.        float pfy = M;
  43.        if(n%2==1){
  44.            arco_superior(pix,piy,pfx,pfy,r,archivo);
  45.        }else{
  46.            arco_inferior(pix,piy,pfx,pfy,r,archivo);
  47.        }
  48.        n--;c++;
  49.    }
  50.    printf("Se generaron %d capas\n", c);
  51. }
  52.  
  53. void linea(float x1, float y1, float x2, float y2, FILE*archivo){
  54.    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);
  55.    printf("Se imprimio correctamente la linea de: %.3f,%.3f a %.3f,%.3f\n", x1, y1, x2, y2);
  56. }
  57.  
  58.  
  59. int main(){
  60.    int n,d,m, dc;
  61.    n = 5; // numero de capas inferiores y superiores
  62.    d = 300;  // largo del cuadrado exterior en pixeles
  63.    m = 50;  // margen del cuadrado exterior con el limite
  64.    dc = d+2*m;  // largo del area total
  65.  
  66.    FILE * archivo= fopen("main.html", "w");
  67.    if(archivo == NULL){
  68.        printf("Hubo un errror al iniciar el archivo");
  69.        return 1;
  70.    }
  71.  
  72.    abrir_html_svg(dc, dc, archivo);
  73.  
  74.    generar_arcos(n, d, m, archivo);
  75.  
  76.    cerrar_html_svg(archivo);
  77.    fclose(archivo);
  78.    return 0;
  79. }


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


« Última modificación: 7 Septiembre 2017, 04:18 am por engel lex » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: la funcion generar arcos todas las variables que declaro quedan en 0
« Respuesta #1 en: 7 Septiembre 2017, 20:08 pm »

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

Código
  1. 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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines