![]() |
Funkcije (C++)
Imam funkciju (točnije 2 funkcije) u C++ koje računaju pretvorbu iz pravokutnog u polarni oblik (ponukan osnovama elektrotehnike :) ).
ovo je moj program Code:
#include i druga stvar...ovo pod komentarima. to sam prije radio (prijašnji program) ispisivanje rezultata varijable "jot_1" koja je glumila rezultat broj, te "jot_2" koja je glumila rezultat kuta. znači zasebno bi stavio Code:
jot_1=sqrt(a1*a1+a2*a2); Code:
jot_2=atan(a2/a1)*180/M_PI; EDIT: kad sam već tu da pitam, čemu točno služi prototip funkcije (function prototype)? ako ga maknem javlja grešku ALI u slučaju da su funkcije (broj i kut) iza main funkcije. AKO maknem prototip funkcije i stavim te dvije ispred main funkcije sve najnormalnije radi? |
Prototip ti je samo deklaracija kako se funkcija zove i što vraća i što su joj argumenti.
To je stvar da program unaprijed 'zna' kakve će funkcije koristiti, što će vraćati, kakve argumente će primati; i sl. te koliko si memorije mora za takve funkcije osigurati. Koliko ja znam funkcije uvijek vraćaju samo jednu vrijednost. Zapravo, nadam se da iz matematike znaš, da ako za jedan ili više argumenata funkcije dobiješ dvije vrijednosti funcije, to više nije funkcija nego tzv. relacija. Toga u programiranju nema. Malo podrobnije opiši zadatak pa ti možda mogu više pomoć. |
Citiraj:
Citiraj:
Citiraj:
cilj programa je da pretvori dva unesena broj (a1,a2) iz pravokutnog (x+yi) u polarni oblik (x|_y) - pomoću funkcija. ja sam napravio taj program sa dvije funkcije i to radi bez problema, no mene zanima mogu li se ta dva rezultata "(po)spremiti" u jednu funkciju te kako riješiti ovaj "problem" sa ifelse? kako ispitati rezultate koji su tek kasnije "pohranjeni" u funkciji, znači ne računaju se zasebno ispred ispisivanja. evo kako je izgledao stari program (također radi bez problema). Code:
// 1. broj (gore lijevo) |
Ne možeš to strpati u jednu funkciju jer onda kad bi nju pozivao ne bi znao hoće li ti return biti broj ili kut. Ali možeš pokušati stvoriti jedno 1d double polje od 2 elementa (1 za broj i 1 za kut) i da ti funkcija umjesto 2 rezultata vraća polje koje sadrži ta 2 rezultata. Kasnije u ispisu rezultata čitaš prvi član polja za recimo broj a drugi za kut.
Samo se treba mal s poljima 'sprijateljiti' =) Deklaracija je ako se sjećam dobro: double polje[2]; //Stvara polje pod imenom polje sa 2 double elementa. Kasnije kad ih želiš pročitati samo napišeš polje[0] za prvi član i polje[1] za drugi član polja. |
ako zelis bas sa return vratit onda ti treba nesto tipa ovog:
Code:
struct complex { |
a zašto želiš skratit program..ako radi!?
Šta je M_PI meni nece kompajl...prva sam g računarstva a nemam pojma.. |
Jep, bravo rodney! Može se i sa strukturama.
Imaš tu svašta pa se igraj |
Citiraj:
Citiraj:
Citiraj:
Citiraj:
Citiraj:
Citiraj:
Citiraj:
|
|
sve to stoji, ali ja nemrem (ne kužim) odgovor na moje pitanje :)
imam ja zapisano Deklaracijom funkcije obzanjujemo naziv funkcije, broj i tip parametara, te tip povratne vrijednosti. Deklaracija ne sadrži opis što i kako funkcija radi, ona samo daje prototip funkcije (eng. function prototype). Code:
|
|
Citiraj:
Dakle, ako se dobro sjećam, prototipove funkcije koristiš da bi dao kompajleru do znanja što da očekuje od funkcija (metoda), čije tijelo može biti bilo gdje "ispod" Main-a. Kompajler čita program liniju po liniju od vrha (početka) i mora znati kako funkcija izgleda prije nego je "sretne" u samom kodu. Znači, jednostavnije rečeno, ti najaviš da ćeš koristiti funkciju prototipom, u Main-u pozoveš tu funkciju, a kompajler zna da će ona biti realizirana u daljnjem programu (inače javi grešku). Korisno (zapravo i više nego korisno) kad imaš složenije programe. Zašto je kompajler tako "glup"? Klik Doduše, najbolje bi bilo kad bi radio sve u OO paradigmi, znači sve funkcije/metode "trpao" u klase i u Main ostavio samo pozive glavnih funkcija. C++ omogućava ovakav "hibridni" pristup, ali to je :fiju: Zapravo, kad malo bolje pogledam, tvoj program je isključivo proceduralan. Sve je iz C-a, osim ispisa. Ako želiš zbilja (is)koristiti C++, probaj sad napraviti taj isti program pomoću klasa, tako da u Main-u imaš samo nešto tipa (ovo je bez razmišljanja, samo radi ilustracije, dizajn klasa i metoda može naravno biti drukčiji, mogu i ne moraju biti statičke): Code:
int main() |
Citiraj:
dakle da pojednostavimo,recimo imas zasebni modul s funkcijom za zbrajanje dva broja, dodajes dvije datoteke u projekt, 1.header - s prototipom funkcije ( ili deklaracija funkcije ) 2.cpp - s tijelom funkcije ( ili definicija funkcije ) e sad da bi glavni ( nazovimo ga main iako se nemora tako zvati ) modul mogao iskoristiti tu funkciju dovoljno je da ukljucis header te funkcije s #include "blabla.h" te kompajler i linker imaju sve potrebne informacije za izvodjenje programa... Nadalje bitna stvar kod pisanja headera je da se ukljuci tzv header guardiani, radi zastite od multideklaracija... recimo ovako to izgleda za header blabla.h #ifndef BLABLA // obicno se uzima naziv datoteke #define BLABLA int foo(int , int); #endif // BLABLA i tu sad mozes bez problema ukljuciti sve potrbene headere za tu funkciju,bez straha da ce doci do multideklaracije pojedinih headera... pozdrav |
ako ces se upustat u ucenje klasa i struktura imas tu poprilicno lijepo poslozene materijale za pocetak rada u c++ -u:
http://web.math.hr/nastava/rp1/slideovi.php (vjezbe te vise zanimaju :P) a ako ce te i dalje mozda kojim slucajem zanimat klase imas tu svega: http://web.math.hr/nastava/opepp/Slides/slides0.html#(1) http://web.math.hr/~vpetrice/OP/ a ako ce ti trebat rjesit zadacu, odi vamo: kljik:D |
Sva vremena su GMT +2. Sada je 01:18. |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger