Skocz do zawartości
Treker

Kurs programowania uC AVR w C (WinAVR, Kurs AVR-GCC)

Pomocna odpowiedź

po czymś takim a ma wartość taką jaką zwróciła funkcja()

A jaką wartość zwróci funkcja(b, c) ?

Udostępnij ten post


Link to post
Share on other sites

taka jaką masz w definicji tej funkcji w wyrażeniu return. Np funkcja

funkcja(a, b) {return a+b;}

zwróci sumę argumentów

Udostępnij ten post


Link to post
Share on other sites

A że zapytam, po co całe to zwracanie? Potrzebna jest jakaś konkretna liczba? W bascom czasem zwracana była zmienna ERR i jeśli równała się 1 to znaczy że był błąd.

Udostępnij ten post


Link to post
Share on other sites

W C możesz zwrócić dowolną wartość z funkcji. Nie musisz niczego zwracać wystarczy ,że dasz return 0; I nie wywołujesz jej wtedy przez zmienną tylko normalne funkcja(); W nawiasach podajesz wartości które odbierasz w funkcji mogą to być wartości albo zmienne. Nie musisz nic "wysyłać" do funkcji.

Udostępnij ten post


Link to post
Share on other sites

Czytam Symfonię C++ i stanąłem na rozdziale

5.3 - Przesyłanie argumentów do funkcji przez wartość

i nie mogę przejść dalej. No nie czaję tego, a nie chcę niczego pomijać.

Udostępnij ten post


Link to post
Share on other sites

no na takim prostym przykładzie jaki podałem to może się wydawać bezsensowne, ale to zwracanie lub nie wartości jest bardzo pożyteczne. Możesz na przykład zrobić funkcję która jako argument przyjmuje łańcuch znaków i nie zwraca wartości tylko wysyła je od razu na wyświetlacz.

Z drugiej strony jeśli funkcja zwraca wartość to możesz użyć jej do przypisania nowej wartości zmiennej jak powyżej albo wywołać tak samo jak funkcję która nic nie zwraca.

A to zwracanie służy właśnie do zapisywania funkcji do zmiennych, kontroli błędów albo jakiś własnych celów. Popatrz na przykład na taką prostą funkcję:

dzielenie(a, b)

{

if(b==0) return -1;

else if(a/b<0) return -2;

else return a/b;

}

Powiedzmy że potrzebujesz wyniku dzielenia dwóch argumentów ale tylko jeśli jest on dodatni. Dzięki użyciu powyższej funkcji otrzymujesz wynik dzielenia jeśli wszystko przebiegnie zgodnie z planem albo dwie różne informacje o błędzie (-1 lub -2) jeśli coś poszło nie tak. Później jeśli chcesz to gdzieś w kodzie wykorzystać, możesz napisać

if((a=dzielenie(b,c))>-1)

{dalszy program}

else

{info o błędzie i dzięki wartości a możesz dodać informację o rodzaju błędu}

Udostępnij ten post


Link to post
Share on other sites

W całym tym wywodzie nie rozumiem tylko jednego. Co robi to:

dzielenie(a, b) 

Co się dzieje w tym wyrażeniu? Dzielenie? Mnożenie? Pojęcia nie mam.

Reszta jest prosta:

Jeśli b równe jest 0 to zwróć wartość -1

lub jeśli dzielenie a przez b będzie mniejsze niż 0 to zwróć -2

w przeciwnym razie zwróć dzielenie a przez b

Dobrze?

Udostępnij ten post


Link to post
Share on other sites

matrix: mam dla Ciebie dobrą radę: zamiast wertować książkę po prostu napisz jakąś aplikację. Wtedy zrozumiesz, dlaczego różne rozwiązania są ważne bądź użyteczne i przećwiczysz w praktyce to czego się uczysz. Wiele z tego co mówisz utwierdza mnie w przekonaniu, że Bascom jest ZUY.

Zwracanie służy dwóm celom:

- podawanie komunikatów o błędach/wyjątkach

- podawanie wyniku pewnych operacji lub działania peryferiów procesora, np. możesz mieć zapisaną w pamięci procesora tablicę wartości jednej ćwiartki sinusa. Możesz stworzyć kilka funkcji, które z niej korzystają, np. sinus i cosinus i zwracają wartość funkcji.

Udostępnij ten post


Link to post
Share on other sites

w sumie to ja tam błąd zrobiłem powinno być

int dzielenie(int a, int b)

i to oznacza że definiuję funkcję która zwraca wartość int, ma nazwę dzielenie i dwa argumenty typu int o nazwach a i b. Jeżeli gdzieś w głównym kodzie programu użyję później wyrażenia

x = dzielenie(1, 2)

to x przyjmie wartość z returna, wartość a funkcji będzie wynosić 1, natomiast b wyniesie 2.

A tak przy okazji małe zadanie - ile będzie równało się x i dlaczego. To częsty trick na który chyba każdy się już złapał podczas pisania w C.

Udostępnij ten post


Link to post
Share on other sites

GAndaLF, to ja od siebie dodam zadanie:

y = dzielenie(5, 3);

bo dla 1,2 odpowiedź ktoś może dać dobrą, ale źle wyjaśnić.

Udostępnij ten post


Link to post
Share on other sites

Ja na obecną chwilę rezygnuję z C. Już nic nie jarzę.To dla mnie za trudne.

Udostępnij ten post


Link to post
Share on other sites

Poddajesz się i tyle 😋 potem będziesz żałował, naprawdę.

Udostępnij ten post


Link to post
Share on other sites
Poddajesz się i tyle 😋 potem będziesz żałował, naprawdę.

Poddaję się bo tego nie ogarniam. Nie rozumiem tak wielu rzeczy że szok. Dużo do tej pory zrozumiałem, ale chyba większości jednak nie czaję.

Bascom był dużo prostszy, żadnego zwracania, podstawienie jednego wyrażenia pod drugie to proste słowo ALIAS, deklaracja zmiennych to zwykłe DIM, port to port a pin to pin.

A w C? Jakieś funkcje, wyrażenia, wywoływanie funkcji z argumentem. Nic z tego nie kojarzę. Kiedy funkcje a kiedy bez? Co oznacza coś takiego:

int x(int a, int b)

zadeklarowanie zmiennej x ? A co robią zmienne int a i b w nawiasie?

Udostępnij ten post


Link to post
Share on other sites

nie wiem ile razy już tłumaczyliśmy ten zapis ale dla ciebie to dalej zmienne a nie funkcje.

Moim zdaniem twoim głównym problemem jest właśnie znajomość bascoma i to że C jest zupełnie inne, takie bardziej matematyczne. Dlatego cały czas powielasz te same błędy opierając się na błędnym wyobrażeniu. Żeby było śmieszniej uważam, że łatwiej by ci było nauczyć się asemblera na avry bo on jest na tyle inny, że nabrał byś świeżego spojrzenia a wtedy już C stało by się dla ciebie proste i logiczne.

Udostępnij ten post


Link to post
Share on other sites
Moim zdaniem twoim głównym problemem jest właśnie znajomość bascoma i to że C jest zupełnie inne, takie bardziej matematyczne.

Myślę że nie matematyczna strona jest problemem a to że nigdzie nie jest to wyjaśnione naprawdę od podstaw. Matematyczną stronę to ja raczej jarzę.

nie wiem ile razy już tłumaczyliśmy ten zapis ale dla ciebie to dalej zmienne a nie funkcje.

Dla mnie jest to zmienna ponieważ słowo INT dla mnie to deklaracja zmiennej. Zapis:

INT x

zadeklaruje zmienną integer?

Mało tego, przykłady z książki Symfonia C++ nie potwierdzają tego co pisze w owej książce autor, bo nie chcą się kompilować.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...