[c++] problem z funkcjami

ElMo

Użytkownik
Dołączył
Grudzień 7, 2003
Posty
16
Siema mam problem. Posiadam ksiazke Symfonia c++ w ktorej opisane sa funkcje, lecz jestem ciezko kapujacy i nie moge ich rozgrysc. I bardzo probil bym o wytlumaczenie jak i gdzie stosowac funkcje i co one robia. Znalazlem ten z ksiazce przyklad :

Kod:
#include <iostream>

#include <conio.h>

using namespace std;





long potega(int stopien, long liczba);

/******************************************************/

int   main()

{

int pocz, koniec;

    system("cls");

     cout << "Program na obliczanie poteg liczb"

          << "calkowitychn"

          << "z zadanego przedzial n"

          << "Podaj poczatek przedzialu : ";

     cin >> pocz;



     cout << "nPodaj koniec przedzialu : ";

     cin >> koniec;



     // petla drukujaca wyniki z danego  przedzialu

     if (koniec < pocz) 

     {

     system("cls");

     cout << "Poczatek przedzialu nie moze byc wiekszy od jego konca";

     getch();

     return main();

     }

     for(int i = pocz; i <= koniec; i++)

     {

          cout << i

               << "  do kwadratu = "

               << potega(2, i)                 // wywol funkcji

               << "  a do szescianu = "

               << potega(3, i)                  // wywol funkcji

               << endl;

     }



getch();



}

/*****************************************************/

long potega(int stopien, long liczba)

{

long wynik = liczba;

     for(int i = 1; i < stopien; i++)

     {

          wynik = wynik * liczba;

                    // zwiezlej mozna zapisac to samo jako  :

                    //          wynik *= liczba;

     }

     return wynik; //

}

Jest tutaj przyklad na ktorym prosilbym o wyjasnienie funkcji. Mam nadzije ze ktos bedzie skory do pomocy. Prosil bym takze o nie pisanie postow w stylu "a poszukaj sobie" gdyz szukalem i bylo tak znacznie gorzej wytlumaczone nic w symfoni, wiec juz kompletnie sie pogubilem. Pozdrawiam i z gory dziekuje
<
 

Herr Cooker

Użytkownik
Dołączył
Sierpień 30, 2005
Posty
6
Hmmm nie będe Ci tłumaczył czym jest ww funkcja(nic by Ci to nie dało i z kazdą następną definicją funkcji musiałbyś zakładać taki właśnie topic :wink: ), za to podam Ci definicję ogólną
funkcji (pisana z głowy, więc powinieneś zrozumiec).
smile.gif



TAK

A więc funkcja to jakby program w programie (podprogram) zwracający wartość ( czyli może np. wykonać obliczenia).
Kazda funkcja posiada właśną nazwę, jedna funkcja powinna wykonywać określone zadanie
(jeżeki jest ono zbyt skomplikowane zaleca się rozbić funkcję na kilka podfunkcji)
KAŻDY program w C++ posiada jedną funkcję : main()
Jake jest jej znaczenie ??
A no dzięki niej możesz wywołac inne funkcje, które mogą wywołac inne funkcje itd.
WNIOSEK : bez funkcji main nie ma funkcji
<




Mam nadzieję, że to jest jasne.
Jezeli jeszcze czegoś nie wiesz pytaj w tym topicu.


P.S.
Chyba napiszę w podpiszie "moge pomóc w C++"

P.S. 2

@ElMo
Nie używaj conio.h i getch.
Ww działaja tylko pod windą.

Pozdrawiam
 

ElMo

Użytkownik
Dołączył
Grudzień 7, 2003
Posty
16
Od razu dziekuje Ci za odpowiedz, ale mam jeszcze kilka pytan.

Originally posted by Herr Cooker
@ElMo
Nie używaj conio.h i getch.
Ww działaja tylko pod windą.

Akurat ten przyklad wzielem z ksiazki "Symfonia C++", ale na przyszlosc bede pamietal.

Co do pytania to staralem sie wszystkie programy zawarte w tej ksiazce sobie zrozumiec i wlasnie z tym mialem ( i innymy wykorzystujaje funkcje) nielada problem. A wiec bardzo bym prosil o wytlumaczenie po czesci tego programu.

Kod:
for(int i = pocz; i <= koniec; i++)

     {

          cout << i

               << "  do kwadratu = "

               << potega(2, i)                 // wywol funkcji

               << "  a do szescianu = "

               << potega(3, i)                  // wywol funkcji

               << endl;

     }

To jeszcze rozumie jako tako, ale kolejna czesc

Kod:
long potega(int stopien, long liczba)

{

long wynik = liczba;

     for(int i = 1; i < stopien; i++)

     {

          wynik = wynik * liczba;

                    // zwiezlej mozna zapisac to samo jako  :

                    //          wynik *= liczba;

     }

     return wynik; //

}

mnie dobija. Kompletnie nie rozumie o co w tym biega. I po co tam jest jakies "long potega(int stopien, long liczba)" Wiem ze to funkcja:D ale calkowicie jej nie rozumie. Wiec prosil bym o pomoc.

Pozdrawiam.
 

Herr Cooker

Użytkownik
Dołączył
Sierpień 30, 2005
Posty
6
Słowniczek
smile.gif


int- 4 bajtowa zmienna
long- też zmienna
<


Cały zapis oznacza przypisanie przypisanie literału do zmiennej.
Nie wiesz jeszcze czegoś ?? Pytaj !!
BTW: proponuję C++ dla każdego
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Kod:
long potega(int stopien, long liczba)  { 

/*funkcja przyjmuje dwa argumenty przez wartosc long przed nazwa funkcji oznacza ze funkcja po wykonania swojego ciala zwroci jakas wartosc typu long (kolega wyzej wspomnial czym rozni sie long od int) potraktuj funkcje jako pudelko do ktorego cos wrzucasz potrzasasz nim i wylatuje z niego zupelnie cos nowego - w naszym przypadku do pudelka wrzucamy dwie liczby - jedna o nazwie stopien a druda liczba. zatem long przed funkcja oznacz ze po potrzasnieciu otrzymamy jakas liczbe typu long - jaka? zobaczmy co dzieje sie w ciele funkcji z wrzuconymi liczbami.*/

  long wynik = liczba; 

/*tworzymy nowa zmienn typu long - wynik i przypisujemy do niej jedna z wrzuconych liczb */

  for(int i=1; i<stopien; i++)  { 

/*petle wylonujemy dopuki i jest mniejsze od wartosci znajdujacej sie pod nazwa stopien - a zmienna ta jak wiemy jest druga wrzucona liczba!*/

    wynik = wynik * liczba; 

/*teraz zmienna wynik bedzie zawierala wynik z mnozenia samej siebie przez liczba */

  } 

  return wynik; 

/*a tu z naszego pudelka wypada tajemnicza liczba typu long o ktorej swiadczyl przedrostek przed nazwa funkcji.*/

}

Kod:
for(int i=pocz; i<=koniec; i++)  {  //warunki petli chyba jasne

  cout<<i<<"  do kwadratu = "<<potega(2, i)  

/*do strumienia standardowego wyjscia przekazujemy po kolei: i - liczbe, " do kwa..." - tekst, oraz - no wlasnie co?powyzej pisalismy long przed nazwa a tu? kiedy wywolujemy funkcje nie musimy tego podawac - pamietamy ze ta funkcja(pudelko) aby poprawnie dzialalo potrzebuje dwoch liczb jako argumenty - w naszym przypadku te dwie liczby to: 2 oraz i. zatem zapis - "potega(2, i)" - oznacza poprawnie skonfigurowane pudelko - nazwane 

wywolaniem funkcji. skoro pudelko ma to czego potrzebowalo zatem powinno zwrocic nam wynik(ktory otrzymujemy - patrz wyzej) - i wo wlasnie ten wynik bedacy liczba typu long trafia do strumienia*/      

        <<"  a do szescianu = "<<potega(3, i)<<endl; 

/*teraz wrzucamy do strumienia tekst i znowu liczbe - wynik poprawnego wywolania funkcji.*/

}

Troche smiesznie to opisalem ale wydaje mi sie ze latwiej bedzie Ci/Wam zrozumiec zasade dzialania funkcji
<
Wspomne tylko ze tak tlumaczyl nam wykladowca zasade dzialania funkcji matematycznych
smile.gif
 

ElMo

Użytkownik
Dołączył
Grudzień 7, 2003
Posty
16
Ogromne DZIEKI dla Was, teraz juz zrozumialem ten przyklad
<
Poprostu nie wiedzialem co oznaczalo
Kod:
long potega(int stopien, long liczba)
oraz poco w tym przypadku
Kod:
potega(2, i)
jest umieszczone "2" oraz "i" . Ale posty fl3a oraz Herr Cooker wszystko mi wyjasnily. Jeszcze raz dzieki i w razie watpliwosci wiem do kogo mam sie zwrocic
<


Pozdrawiam.
 

ElMo

Użytkownik
Dołączył
Grudzień 7, 2003
Posty
16
Ahhhh.... to znowu ja. Zrozumialem to teoretycznie ale praktycznie nie. Dopiero dzis probowalem cos sklecic w c++ i wyszlo takie cos(oczywiscie bledne :cry: ).

Kod:
#include <iostream>

#include <conio.h>  

using namespace std;



int kwadrat(int liczba);  <------- tutaj tworzylem (nie wiedzialem jakiego slowa uzyc) funkcje



int main()

{



int a, liczba; <---- to raczej nie potrzebne lecz ciagle kompilator "mowil" ze "a" i l"iczba" sa nie zdeklarowane



cin >> a;   <------- tutaj chcialem wprowadzic aby a bylo dajmy na to 10



cout << kwadrat(a); <------ tutaj mialo wyprowadzac kwadrat z liczby a (a = 10)  czyli 100



int kwadrat(int liczba); <---- tutaj mialy sie dokonywac obliczenia



    {

    wynik = liczba * liczba;   <----  wynik mial byc rowny liczbie razy liczbie , czyli 10 * 10

    return wynik; <----- mialo niby ahhh.... zreszta nie wiem co mialo :p aha chyba mialo podawac wynik 

    }



}

Wiem ze to zalosne co ja tu wyprawiam, ale dopiero sie ucze a kto mi to wytlumaczy jak nie Wy. Przyjmuje najgorsze krytyki z przyjemnoscia. W koncu sie nie znam a probuje cos tworzyc
<
To by bylo na tyle. Pozdrawiam i dziekuje.


PS. Uzylem tu :
#include <iostream>
#include <conio.h>
using namespace std ;

Poniewaz sam nie bardzo wiedzialem co mam uzyc, a w przykladzie z ksiazki sprawowaly sie dobrze.
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Kod:
#include<iostream.h> 

#include<conio.h>  



int kwadrat(int liczba)

{

  int wynik = liczba*liczba;   

  return wynik;

}



void main() 

/*standardowo powinno sie stosowac void dla main - aczkolwiek niektore kompilatory oczekuja inta (DevC++) - dlatego polecam na poczatek kompilator zawarty w Borland C++ Builder 6 Personal - chyba ze od razu poradzisz sobie z Borland Compilerem 5.5 - nie ma on interfejsu graficznego!*/

{ 

int a;

/*tylko zmienna a bedzie nam potrzebna*/

cin>>a;   

cout<<kwadrat(a);

/*jesli uzyl bys zapisu int main() wowczas musialbys w tym miejscu zastosowac return 0; a przed nim getch(); - ale ta funkcje zapewne juz znasz.*/

}
 

ElMo

Użytkownik
Dołączył
Grudzień 7, 2003
Posty
16
Po raz kolejny fl3a okazal sie niezastapiony. Ogromne dzieki jeszcze raz. Teraz widze ze namodzilem troszke w przykladzie. Ja wlasnie uzywam kompilatora Borland w wersji 5.5. Co do tego "void" to zapamietam i bede stosowal. A czy nie ma roznicy czy
Kod:
int kwadrat(int liczba)

{

  int wynik = liczba*liczba;   

  return wynik;

}
umieszcze na poczatku czy na koncu??
 

fl3a

Użytkownik
Dołączył
Marzec 12, 2005
Posty
538
Jesli na poczatku zastosujesz prototyp funkcji - int kwadrat(int liczba); - wowczas definicja/deklaracja (zawsze mi sie myli) moze byc np. na koncu. Ja wole stosowac definicje/deklaracje dla krotkich funkcji na poczatku tak jak podalem Ci w przykladzie. Wszystko zalezy od Ciebie. A co do kompilatora - dobry wybor.

Zycze powodzenia w dalszej nauce - a w razie problemow sluze pomoca
smile.gif
 
Do góry Bottom