konczi1205 0 #1 Posted 2012 Feb. 15 , 17:57:05 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
ModThisName 1 #2 Posted 2012 Feb. 15 , 22:23:05 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
konczi1205 0 #3 Posted 2012 Feb. 15 , 22:38:23 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
kosztur 0 #4 Posted 2012 Feb. 20 , 19:19:02 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 ) (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
ModThisName 1 #5 Posted 2012 Feb. 21 , 18:38:22 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
kosztur 0 #6 Posted 2012 Feb. 21 , 20:06:03 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
konczi1205 0 #7 Posted 2012 Feb. 22 , 18:30:10 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
ModThisName 1 #8 Posted 2012 Feb. 22 , 18:31:54 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