Jump to content
Sign in to follow this  
konczi1205

feladat C nyelvből

Recommended Posts

Sziasztok!

 

most kezdtük el a programozást, és házira kaptunk egy feladatot, amit többé kevésbe megoldottam, viszont mikor kompilálom a kódot akkor kapok egy hibát.

 

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

main()
{
      float  objem,povrch,a,v,m0;
      printf("Zadajte hodnotu podstavy a");
      scanf("%f",a);
      printf("Zadajte vysku v");    
      scanf("%f",v);
      m0 = sqrt(v^2+(a/2)^2);
      objem = 1/3*(a*v);
      povrch = a*a+4*(a*m0)/2;
      printf("\n Povrch: %f \n Objem: %f \n", objem, povrch);
      system("pause");
      return(0);
      }

 

és itt a hibát a floatra írja ki. Mit rontottam el?! Köszi a választ.

Share this post


Link to post
Share on other sites

Mondjuk ha leírnád a hibát, lehet segítene.

de így kb enynit tudok mondani:

ja és tipp: float helyett double-t használj

 

 

float objem,povrch,a,v,m0;

printf("Zadajte hodnotu podstavy a");

scanf("%f", &a);

printf("Zadajte vysku v");

scanf("%f", &v);

m0 = sqrt((v*v)+((a/2)*(a/2)));

objem = ((1/3)*(a*v));

povrch = ((a*a)+4*(a*m0)/2);

printf("\n Povrch: %f \n Objem: %f \n", objem, povrch);

return(0);

Share this post


Link to post
Share on other sites

Köszönöm szépen!

 

A lényeg az lenne hogy megadjuk a programnak a 4oldalú gúla alapjának az oldalélét valamint a gúla magasságát és ezek alapján ki kell neki számítani a gúla térfogatát és a felszínét.

 

Vagyis a felszín képlettel asszem van 1 kis bibi mert az nem számol semmit :)

Share this post


Link to post
Share on other sites

Szintaktikailag már helyes a program, de szemantikailag nem..

1. A térfogatnál az (1/3) egészként lesz kiértékelve, ami 0, 0-val szorozva az eredmény is 0 lesz..

2. A térfogat képletében az alap hosszát négyzetre kell emelni: objem = (a*a*v)/3;

3. A printf függvény paraméterei rossz sorrendben vannak megadva (vagy a kiíratásnál van felcserélve, nézőpont kérdése :D) (emiatt tűnt úgy, hogy a felszín képlete a hibás)

Helyesen: printf("\n Povrch: %f \n Objem: %f \n", povrch, objem);

 

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

int main()
{
    float objem, povrch, a, v, m0;

    printf("Zadajte hodnotu podstavy a: ");
    scanf("%f", &a);

    printf("Zadajte vysku v: ");
    scanf("%f", &v);

    m0 = sqrt(v*v+a*a/4);

    objem = a*a*v/3;
    povrch = a*a+4*a*m0/2;

    printf("\n Povrch: %f \n Objem: %f \n", povrch, objem);

    return 0;
}

Share this post


Link to post
Share on other sites

De még így sem tökéletes a program, hiszen a float egésszel osztva float lesz, de az egészt float-tá kell konvertálni, így teljesen tökéletesen csak a 2.0-val való osztás az okés

Share this post


Link to post
Share on other sites

Elbizonytalanítottál, így megnéztem, de nem szükséges átkonvertálni, ez ugyanis fordítás során megtörténik, ráadásul a 2es osztásból valójában egy 0.5-el való szorzás lesz (fmul ds:dbl_402130 -> dbl_402130 dq 0.5).

Természetesen ez fordítóként/beállításonként eltérő lehet..

Share this post


Link to post
Share on other sites

Köszi mindenkinek! Azóta olvastam 1 csomót és most már jobban megy és működnek is rendesen! De köszi még 1x a felvilágosítást!

Share this post


Link to post
Share on other sites

Igen, mint írtam, fordítás során azt hiszem preprocesszálási időben elvégzi a fordító, de ez egy kihagyható lépés, ha rögtön 2.0-val osztasz.

De természetesen nem kötekedni akartam, hiszen nekem is rengetegszer segítettél, amit ezúton is köszönök :) (Remélem Javaban is otthon vagy:P )

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Bejelentkezés

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×