Calacul matematic cu ajutorul macroinstructiunilor


andonieandrei


Salut.

Vreau sa rezolv problema din poza atasata (punctul a), am creat o macroinstructiune pentru a efectua mai usor calculul insa rezultatul nu este cel corect, am refcut pe hartie intreg calcul si nu este acelas cu cel oferit de program, unde sa fie gresala?

CODE
#include <stdio.h>
#define VOLUM(h, m, r) (((3.14 * h) / 3) * ((m * m) + (r * r)) + (m * r))

void main (void)
{
    float a, b, c;

    printf("Introdu INALTIMEA trunchiului de con (h): ");
    scanf("%f", &a);

    printf("\nIntrodu RAZA MARE a trunchiului de con (R): ");
    scanf("%f", &b);

    printf("\nIntrodu RAZA MICA a trunchiului de con (r): ");
    scanf("%f", &c);

    printf("\n\n\nVolumul trunchiului de con este: %f", VOLUM(a, b, c));
    getch();

    }
dani.user
#define VOLUM(h, m, r) (((3.14 * h) / 3) * (m * m + r * r + m * r))
 
secretalex92
CITAT (andonieandrei @ 29th August 2009, 19:46) *
CODSURSA
#define VOLUM(h, m, r) (((3.14 * h) / 3) * ((m * m) + (r * r)) + (m * r))

Eu iti recomand
CODSURSA
#define pi 3.14
inline float volum( float h, float m, float r )
{
   return ( ( pi*h ) / 3 ) * ( m*m + r*r + m*r );
}

este mult mai sigur si rapid biggrin.gif
Sau cel mai usor lucru: printf( "%f" , ( ( ( 3.14 * h ) / 3 ) * ( m * m + r * r + m * r ) ) );
andonieandrei
Salut.

Va multumesc pentru raspunsurile anterioare mi-au fost de folos insa acuma aproximativ acelas gen de problema. Vreau sa scriu formula matematica din poza atasata sub forma unei operati in C si dinou rezultatul nu este acelas ca pe hartie.

neagu_laurentiu
Intr-o traducere directa:
(h/3)*(AB+Ab+sqrt(AB*Ab))
andonieandrei
Se pare ca nu functioneaza, am observat ca in fereastra messanges imi apare eroarea: "W8065 Call to function 'sqrt' with no prototype".

Folosesc aceea formula in urmatoarea conditie:
CODE
printf("\nIntrodu inaltimea trunchiului de piramida (h): ");
          scanf("%f", &a);

          printf("\nIntrodu aria bazei mari (AB): ");
          scanf("%f", &b);

          printf("\nIntrodu aria bazei mici (Ab): ");
          scanf("%f", &c);


          if ((a && b && c) > 0)
          {

          cprintf("\nVolumul Trunchiului de piramida cu inaltimea (h) de %f, aria bazei mari (AB) %f si aria bazei mici de %f este: %f", a, b, c, (a/3)*(b+c+sqrt(b*c)));
          }


Am atribuit urmatoarele valori variabilelor:

a = 27

b = 32

c = 32

in mod normal rezultatul ar trebui sa fie 648 dar imi afiseaza 298080.
neagu_laurentiu
#include <math.h> // pentru sqrt()

Ai vrut sa zici 864 !
Daca setezi variabilele de tip float o sa iasa corect. Altfel trebui "trasformari".
 
andonieandrei
Mulrumesc Laurentiu.
secretalex92
N-ar strica sa mai citesti si ce scrie in cartea din care inveti deoarece nu cred ca ti-ar da probleme fara sa explice notiunile pe care le folosesti ... wink.gif
NLC


CITAT (andonieandrei @ 29th August 2009, 19:46) *
Salut.

Vreau sa rezolv problema din poza atasata (punctul a), am creat o macroinstructiune pentru a efectua mai usor calculul insa rezultatul nu este cel corect, am refcut pe hartie intreg calcul si nu este acelas cu cel oferit de program, unde sa fie gresala?

CODSURSA
#include <stdio.h>
#define VOLUM(h, m, r) (((3.14 * h) / 3) * ((m * m) + (r * r)) + (m * r))

void main (void)
{
    float a, b, c;

    printf("Introdu INALTIMEA trunchiului de con (h): ");
    scanf("%f", &a);

    printf("\nIntrodu RAZA MARE a trunchiului de con (R): ");
    scanf("%f", &b);

    printf("\nIntrodu RAZA MICA a trunchiului de con (r): ");
    scanf("%f", &c);

    printf("\n\n\nVolumul trunchiului de con este: %f", VOLUM(a, b, c));
    getch();

    }


ar trebui sa pui:
CODSURSA
#define VOLUM(h, m, r) (((3.14 * (h)) / 3) * (((m) * (m)) + ((r) * (r))) + ((m) *( r)))

altfel daca VOLUM va fi apelat cu m = 3+2 se va evalua 3+2*3+2 ceea ce va fi 11 in loc de 5*5 adica 25.

L.E: ar trebui sa pui (((3.14 * (h)) / 3.0) altfel se va face conversie la int
Reclama
In curand... autoevolution.ro

Teste, stiri, ghiduri, jurnale, forum si multe altele!
Aceasta este o versiune simplificatã a paginii originale. Pentru a vizita versiunea originala click aici.