Ayuda en Proyecto Simple

Iniciado por bestfriend, 15 Mayo 2015, 23:13 PM

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

bestfriend

Hola soy nuevo y llevo alrededor de 2 meses "programando" y necesito ayuda porque mi programa no me devuelve el resultado de un dato en especifico (la altura C). El proyecto es el siguiente https://drive.google.com/file/d/0B-T3GRGCH9STWHNHM2ZUdWl0ZzA/view?usp=sharing

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
//Variables Globales
float b1,b2,b3,d1,d3,h;
float I,C;
float d2=(h-d1-d3),A1=(b1*d1),A2=(b2*d2),A3=(b3*d3);

//Funciones
void entrada(){
    printf("Hola! Este programa esta diseñado para calcular el momento de inercia(I) y la altura(C) de nuestro Proyecto 1\n");
    printf(" \n");
    printf("Primero ingrese los datos de anchura de la viga (b1,b2,b3)\n");
    printf(" \n");
    printf("Ingrese el dato de b1\n");
    scanf("\n%f",&b1);
    printf("Ingrese el dato de b2\n");
    scanf("\n%f",&b2);
    printf("Ingrese el dato de b3\n");
    scanf("\n%f",&b3);
    printf("Ahora proceda a ingresar los datos de altura de altura de la viga (d1,d3,h)\n");
    printf("Ingrese el dato de d1\n");
    scanf("\n%f",&d1);
    printf("Ingrese el dato de d3\n");
    scanf("\n%f",&d3);
    printf("Ingrese el dato de h\n");
    scanf("\n%f",&h);
}

void calculo(){
     float x=d1,y=(h-C-(d1/2)),z=d2,k=(d3+(d2/2)-C),j=d3,p=(C+(d3/2));
     
     x=pow(x,3);
     y=pow(y,2);
     z=pow(z,3);
     k=pow(k,2);
     j=pow(j,3);
     p=pow(p,2);
     
     I=(b1*x/12)+(A1*y)+(b2*z/12)+(A2*k)+(b3*j/12)+(A3*p);
     C=(A1*(h-(d1/2)))+(A2*(d3+(d2/2)))+(A3*(d3/2))/(A1+A2+A3);
}
     
//Programa Principal
main(){
      entrada();
      printf("A continuacion se muestran los resultados del calculo\n");
      calculo();
      printf(" \n");
      printf("La altura C de la viga es: %.2f\n",C);
      printf("El momento de inercia I es: %.2f\n",I);
      system("pause");
     
}
     


Cualquier critica y consejo es absolutamente bienvenido soy un novato en este mundo :rolleyes:

Stakewinner00

Para comenzar, no es buena práctica poner todo de variables globales, cuesta más depurar errores.


kaiserr

#2
Para continuar, creo que C no te dará el resultado que quieres porque le falta un parentesis para englobar todas las sumas y luego dividirlas en el denominador.

Ahora:

C=(A1*(h-(d1/2)))+(A2*(d3+(d2/2)))+(A3*(d3/2))/(A1+A2+A3);


Solución:

C=((A1*(h-(d1/2)))+(A2*(d3+(d2/2)))+(A3*(d3/2)))/(A1+A2+A3);


Primero se evaluarán las operaciones de multiplicación , división y módulo y luego las de suma y resta.

Un consejo, cuando quieras debuguear un programa de manera cutre, puede poner prints en las zonas que te interesen conocer el valor de una variable.
Si utilizas algún IDE puedes utilizar los debuguers que incorporan y seguir las variables a lo largo de la ejecución.

engel lex

#3
hola...

primero... no mezcles librerías standard de c++ con las de c.. usa siempre o unas u otras...

Código (cpp) [Seleccionar]
#include <cstdio>
#include <cstdlib>
#include <cmath>


a tu error lo que dice kaiserr es cierto... el calculo está malo... recomiendo los cálculos hacerlos por partes para que tengas una buena legibilidad y usar variables tan legibles como puedas para que el código sea fácil de interpretar...

creo que esto no solo resuelve el problema, sino que ayuda a leer el código mucho veces mejor... al final para el compilador va a ser idéntico...

Código (cpp) [Seleccionar]
void calculo(){
     float x = d1;
     float y = h - C - (d1 / 2);
     float z = d2;
     float k = d3 + (d2 / 2) - C;
     float j = d3;
     float p = C+(d3/2);

     x = pow(x, 3);
     y = pow(y, 2);
     z = pow(z, 3);
     k = pow(k, 2);
     j = pow(j, 3);
     p = pow(p, 2);

     I = b1 * x / 12;
     I += A1 * y;
     I += b2 * z / 12;
     I += A2 * k;
     I += b3 * j /12;
     I += A3*p;

     C = A1 * (h - d1 / 2);
     C += A2 * (d3 + d2 / 2);
     C += A3 * d3 / 2;
     C /= A1 + A2 + A3;
}


(sabiendo que primero se divide y multiplica, después se suma y resta)

lo que dice Stakewinner00 es muy cierto... no es buena practica hacer todo en variables globales... eso se guarda para cuando no hay más solución práctica, sin contar que la linea 7 es terrible...

Código (cpp) [Seleccionar]
float d2=(h-d1-d3),A1=(b1*d1),A2=(b2*d2),A3=(b3*d3);

no le has dado ningún valor a las variables... va a hacer calculos con la basura que consiga en la ram

es como que lleges a alguien y le digas "si me dices cuanto es A*B + C, te doy 100$" y despues de decirle "te equivocaste A era 1, B era 1 y C era 0"
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.