Skocz do zawartości

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


Pomocna odpowiedź

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.

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.

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ć.

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}

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?

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.

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.

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?

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.

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ć.

Link to post
Share on other sites
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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!

Anonim
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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.