[C++] Przesyłanie argumentów do i z funkcji

Awatar użytkownika
kam_new93
Użytkownik
Użytkownik
Posty: 673
Rejestracja: 18 lip 2009, o 20:13
Płeć: Mężczyzna
Podziękował: 17 razy
Pomógł: 106 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: kam_new93 »

Siema. Nurtuje mnie jedna rzecz a mianowicie chodzi tu o przesylanie danych do funkcji . Język to c++.
Jako że każdy z programistów c++ mówił mi tzn(profesorowie na uczelni) ze funkcje są po to by z korzystac i <przesyłać do nich lub z nich argumenty> i tu moje pytanie.
Po co ?
Skoro mozna wywolac funkcje bezargumentową i w niej zrobic to co chcemy, postaram sie to zoobrazować co mam na myśli:

Kod: Zaznacz cały

funkcja wg nich(profesorów)
int main()
{
licz(argument1,argument2,...,argumentN);
}

void licz(int argument1,int argument2,...,argumentN)
{
tutaj kod cos wykonuje
}
/************************************
ja zrobie to w taki sposób ;
int main()
{
licz(); //tu nie daje ile ma byc argumnetow tak jak ONI to robili 
}
void licz()
{ 
//tutaj kod cos robi i w nim znajduja sie argumenty ,np. argument1,argument2,...,argumentN;
}

reasumując kod robi dokładnie to samo tylko że oni mówią że tak sie nie programuje to ja sie pytam kogoś mądrego dlaczego , niech mi wytłumaczy ponieważ obie wersje działają i odpowiadają ścisle za daną operacje w programie .

dzieki z góry

p.s. afish tagi już poprawione
Ostatnio zmieniony 12 lip 2013, o 08:10 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
MichalPWr
Użytkownik
Użytkownik
Posty: 1625
Rejestracja: 29 wrz 2010, o 15:55
Płeć: Mężczyzna
Lokalizacja: Leszno
Podziękował: 7 razy
Pomógł: 387 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: MichalPWr »

Dlatego, że C++ wykorzystuje coś takiego jak przeciążanie funkcji i pisząc program w ten sposób pozbawiasz się tego.
Oczywiście da się napisać program z funkcjami bez argumentów i operować na konkretnych danych za pomocą this->atrybut.
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: Ser Cubus »

w takim wypadku każda zmienna u Ciebie musi mieć inną nazwę i jakaś funkcja czy cokolwiek może ją przypadkowo zmienić. A można przesyłać arguemnty do funkcji i ten problem znika. Pamiętaj, że nie każdy program ma 10 czy 50 linijek. Jak robisz moduły po tysiące linijek i ktoś inny ma tego używać to czemu ma się martwić czy ktoś czasem nie użył już takiej zmiennej? Inna sprawa masz 3 liczby i funkcję, która dodaje 2 dowolne. Ty byś musiał napisać, aż 3 funkcje robiące dokladnie to samo na innych zmiennych, mi by wysatrczyła jedna, która przyjmuje 2 argumenty
pawel_wr
Użytkownik
Użytkownik
Posty: 22
Rejestracja: 25 paź 2012, o 04:00
Płeć: Mężczyzna
Lokalizacja: wroclaw
Pomógł: 3 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: pawel_wr »

Zrozumiesz , po co wymyślono funkcje z parametrami // nie zawsze chodzi o przeciążenie ,
gdy będziesz musiał napisać złożony , długi program , np. taki mający 4000 linijek kodu.

Jesteś na etapie pisania żłobka programistycznego typu : wczytaj dwie liczby , a potem
dodaj , wymnóż itp. więc nie masz jeszcze pojęcia o sztuce programowania.
Awatar użytkownika
kam_new93
Użytkownik
Użytkownik
Posty: 673
Rejestracja: 18 lip 2009, o 20:13
Płeć: Mężczyzna
Podziękował: 17 razy
Pomógł: 106 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: kam_new93 »

dzieki wielkie zawsze dobrze jak ktoś inny spojrzy na daną sprawe teraz do mnie dotarlo

p.s. szczegolnie tobie panie Serze
Awatar użytkownika
steal
Użytkownik
Użytkownik
Posty: 1043
Rejestracja: 7 lut 2007, o 18:35
Płeć: Mężczyzna
Lokalizacja: Białystok|Warszawa
Podziękował: 6 razy
Pomógł: 160 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: steal »

Tak jak napisał @pawel_wr, na wyższym poziomie pisania programów natrafia się na problemy, które wymagają wykonywania pewnych funkcji na dużych zbiorach danych i nie sposób napisać oddzielnej funkcji dla każdej danej/ych. Wynika to nie tylko z braku czasu/zasobów pamięci, ale przede wszystkim z tego, że nie znamy z góry tych danych! Przykładowo jeżeli program ma dodawać do siebie dwie liczby, a takich par masz zapisanych w pliku tysiąc, to napiszesz tysiąc funkcji? A skąd będziesz wiedział jakie mają wartości? O to w tym chodzi.

Kod: Zaznacz cały

int main(){
    cout << dodaj(5,2);
    cout << dodaj(4,2);

    //Albo w pętli (jak to zrobić Twoim sposobem?)
    for(int i = 0; i < 1000; ++i)
        cout << dodaj(i, 2*i) << " ";
}

int dodaj(int a, in b){
    return a+b;
}

Gouranga
Użytkownik
Użytkownik
Posty: 1588
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 245 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: Gouranga »

Generalnie Twój kod z pierwszego posta jest niezgodny z ideą funkcji. Funkcja ma wykonać na argumentach działania i zwrócić wynik, w funkcji zasadniczo w ogóle nie powinieneś niczego wypisywać (zrozumiesz to byćmoże jak ruszysz kiedyś bazy danych i TransactSQL).
Tak więc taki kod:

Kod: Zaznacz cały

void suma(int a, int b){
  cout << a+b;
}

int main(void){
  suma(2,3);
}
jest błędny, poprawna forma:

Kod: Zaznacz cały

int suma(int a, int b){
  return a+b;
}
int main(void){
  cout << suma(2,3);
}
Jeśli natomiast chcesz zwracać więcej niż jedną rzecz używaj wskaźników.
Awatar użytkownika
MichalPWr
Użytkownik
Użytkownik
Posty: 1625
Rejestracja: 29 wrz 2010, o 15:55
Płeć: Mężczyzna
Lokalizacja: Leszno
Podziękował: 7 razy
Pomógł: 387 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: MichalPWr »

Gouranga, Jest błędny bo? Pomijając inkludy i przestrzeń nazw std.
pawel_wr, Pewnie, że nie zawsze. Podałem to jako przykład, który moim zdaniem najlepiej to obrazuje.
Gouranga
Użytkownik
Użytkownik
Posty: 1588
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 245 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: Gouranga »

Jest błędny z logicznego punktu widzenia, tworzysz funkcję, która będzie potrafiła tylko wyświetlić sumę liczb, gdybyś chciał tylko je dodać ale zamiast wyświetlania np. tę ich sumę jeszcze do czegoś dodać czy coś to nie masz takiej funkcji. Chodzi o robienie uniwersalnych funkcji, które LICZĄ a nie DRUKUJĄ, od drukowania masz cout/printf i w nich dajesz wywołanie funkcji
Ser Cubus
Użytkownik
Użytkownik
Posty: 1406
Rejestracja: 6 maja 2012, o 22:46
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 107 razy
Pomógł: 145 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: Ser Cubus »

Gouranga, nie szarżuj z wskaźnikami. Na początek zalecałbym referencję ^^
Gouranga
Użytkownik
Użytkownik
Posty: 1588
Rejestracja: 16 maja 2013, o 17:56
Płeć: Mężczyzna
Lokalizacja: Trójmiasto
Podziękował: 11 razy
Pomógł: 245 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: Gouranga »

Nie rozumiem, dlaczego ludzie uważają wskaźniki w C za zło, twór szatana i w ogóle coś niewyuczalnego. Przecież one są proste i mega przydatne.
Awatar użytkownika
MichalPWr
Użytkownik
Użytkownik
Posty: 1625
Rejestracja: 29 wrz 2010, o 15:55
Płeć: Mężczyzna
Lokalizacja: Leszno
Podziękował: 7 razy
Pomógł: 387 razy

[C++] Przesyłanie argumentów do i z funkcji

Post autor: MichalPWr »

Gouranga Te dwa małe programy tego nie obrazują. Oba robią dokładnie to samo;)
A dlaczego wskaźniki uważane są za samo zło? Dlatego, że to z nimi związane są najczęściej wycieki pamięci. Chodzi o to, że należy bardzo uważać kiedy i jak zwalniać wskaźnik. Na szczęście z pomocą przychodzi nam biblioteka Boost ze swoimi inteligentnymi wskaźnikami. Są mega przydatne ale na pewno nie proste
ODPOWIEDZ