SOYER Napisano Luty 21, 2022 Udostępnij Napisano Luty 21, 2022 Cześć, nawiązując do wątku poruszonego w komentarzach tego artykułu, proszę o pomoc w przeróbce kawałka kodu, na "prostszy" z wykorzystaniem wskaźników. Będzie to moje pierwsze podejście praktyczne do wskaźników więc proszę o wyrozumiałość i cierpliwość:). Kod, a raczej jego fragment: temp_grzejniki_max = temp_grzejniki; dzien_temp_grzejniki_max = now.day(); miesiac_temp_grzejniki_max = now.month(); rok_temp_grzejniki_max = now.year(); temp_grzejniki_min = temp_grzejniki; dzien_temp_grzejniki_min = now.day(); miesiac_temp_grzejniki_min = now.month(); rok_temp_grzejniki_min = now.year(); temp_cwu_max = temp_cwu; dzien_temp_cwu_max = now.day(); miesiac_temp_cwu_max = now.month(); rok_temp_cwu_max = now.year(); temp_cwu_min = temp_cwu; dzien_temp_cwu_min = now.day(); miesiac_temp_cwu_min = now.month(); rok_temp_cwu_min = now.year(); Widzimy tu zapisywanie maksymalnej i minimalnej temperatury z dwóch czujników, wraz z datą tego zdarzenia. Teraz wklejam kod kolegi @ethanak z wymienionego wcześniej linku, który tam służył jako przykład, a tutaj(moim zdaniem) nadawał by się do obróbki ww. linijek mojego kodu. int divide(int a, int b, int *remainder) { if (remainder) *remainder = a % b; return a/b; } // i gdzieś w kodzie int wynik1, wynik2, reszta1, reszta2; wynik1=divide(dzielna1, dzielnik1, &reszta1); wynik2=divide(dzielna2, dzielnik2, &reszta2); Jednak pomny doświadczeń, zanim zacznę się produkować i wchodzić na tą górkę poproszę starszych w wierze kolegów o naprowadzenie, czy te linijki to na pewno najlepszy sposób na rozwiązanie akurat tego problemu, czy może jednak zacząć inaczej. P.S. patrz drugie zdanie z tego posta:)). Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 21, 2022 Udostępnij Luty 21, 2022 (edytowany) fun(&dzien_temp_grzejniki_max, &miesiac_temp_grzejniki_max, &rok_temp_grzejniki_max); void fun(int*a,int*b,int*c) { *a = now.day; *b = now.month; *c = now.year; } Mi takie cos przychodzi do glowy...ale moze ktos cos krotszego podpowie😉 (akurat tutaj za wiele sie nie zmienia, tyle ze wywolanie funkcji w jednej linijce...ale krocej nie jest😉) Edytowano Luty 21, 2022 przez farmaceuta Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 21, 2022 Autor tematu Udostępnij Luty 21, 2022 Ja skrobie szkic, a jeszcze bardziej się po glowie... saveMinMax(int *minimum, int *day, int *month, int *year, int temp) { // if(minimum) *minimum = temp; if(day) *day = day(); if(month) *month = month(); if(year) *year = year(); } // i gdzieś w kodzie int temp_grzejniki_min, dzien_temp_grzejniki_min, miesiac_temp_grzejniki_min, rok_temp_grzejniki_min, temp_grzejniki; // i cała reszta zmiennych saveMinMax(&temp_grzejniki_min, &dzien_temp_grzejniki_min, &miesiac_temp_grzejniki_min, &rok_temp_grzejniki_min); Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Luty 21, 2022 Udostępnij Luty 21, 2022 (edytowany) @SOYER Może zacznij od poczytania o strukturach. Wskaźniki też się przydadzą, ale o ile ładniej wyglądałoby coś w rodzaju: temp_grzejniki.wartosc = temp; temp_grzejniki.dzien = now.day(); temp_grzejniki.miesiac = now.month(); temp_grzejniki.rok = now.year(); Edytowano Luty 21, 2022 przez Elvis 1 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
farmaceuta Luty 21, 2022 Udostępnij Luty 21, 2022 Mysle ze z tych if'ow to mozna zrezygnowac w takiej sytuacji bo wskaznik napewno bedzie na cos wskazywal...ale niech sie madrzejsi wypowiedza..😉 Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 21, 2022 Autor tematu Udostępnij Luty 21, 2022 2 minuty temu, Elvis napisał: @SOYER Może zacznij od poczytania o strukturach. Wskaźniki też się przydadzą, ale o ile ładniej wyglądałoby coś w rodzaju: temp_grzejniki.wartosc = temp; temp_grzejniki.dzien = now.day(); temp_grzejniki.miesiac = now.month(); temp_grzejniki.rok = now.year(); Nie bardzo rozumiem, przecież tak wygląda mój pierwszy kod. Czy też ta kropka ma znaczenie? Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Luty 21, 2022 Udostępnij Luty 21, 2022 Przed chwilą, SOYER napisał: Czy też ta kropka ma znaczenie? Oczywiście że ma. 1 Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 21, 2022 Autor tematu Udostępnij Luty 21, 2022 1 minutę temu, Elvis napisał: Oczywiście że ma. Zawsze miło Cię widzieć w moim wątku, dzięki, poczytam w takim razie o strukturach. To pewnie szeroki temat. Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Luty 21, 2022 Udostępnij Luty 21, 2022 Najpierw definiujesz sobie strukturę, np.: struct zdarzenie { float wartosc; int dzien; int miesiac; int rok; }; Poźniej, jak będziesz jej używał, to nie musisz przekazywać wszystkich wartości oddzielnie, przykładowo: void save_temp(struct zdarzenie *z, float temp) { z->wartosc = temp; z->dzien = now.day(); z->miesiac = now.month(); z->rok = now.year(); } I taka funkcja wystarczy do zapisywania wszystkich zdarzeń, np. save_temp(&czujnik1_max, 1); save_temp(&czujnik1_min, 2); save_temp(&czujnik2_max, 3); save_temp(&czujnik2_min, 4); 1 Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 21, 2022 Udostępnij Luty 21, 2022 1 minutę temu, SOYER napisał: Zawsze miło Cię widzieć w moim wątku, dzięki, poczytam w takim razie o strukturach. To pewnie szeroki temat. To nie uzywasz jeszcze struktur? E to poczytaj, bo to tez strasznie przydatne...masz np. 5 czujnikow i 5 zmiennych dla kazdego, upychasz to w tablice struktur i za pomaca indeksow i for robisz z tym co chcesz...ladnie, prosto to wyglada...bez powielania tego samego kodu dla obslugi tych zmiennych.. 1 1 Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 21, 2022 Autor tematu Udostępnij Luty 21, 2022 8 minut temu, farmaceuta napisał: nie uzywasz jeszcze struktur? Ja lamer samouk jestem:) Pracowity, uparty, pyskaty, ale lamer:). Poczytam o tych strukturach. 1 Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 22, 2022 Autor tematu Udostępnij Luty 22, 2022 (edytowany) 22 godziny temu, Elvis napisał: Najpierw definiujesz sobie strukturę, np.: struct zdarzenie { float wartosc; int dzien; int miesiac; int rok; }; Poźniej, jak będziesz jej używał, to nie musisz przekazywać wszystkich wartości oddzielnie, przykładowo: void save_temp(struct zdarzenie *z, float temp) { z->wartosc = temp; z->dzien = now.day(); z->miesiac = now.month(); z->rok = now.year(); } I taka funkcja wystarczy do zapisywania wszystkich zdarzeń, np. save_temp(&czujnik1_max, 1); save_temp(&czujnik1_min, 2); save_temp(&czujnik2_max, 3); save_temp(&czujnik2_min, 4); Ok @Elvisjuż wiem co napisałeś😀. Najpierw tworzymy strukturę z czterema zmiennymi które nam są potrzebne do każdego z czujników. Następnie tworzymy funkcję która odwołuje się do naszej struktury, a poprzez wskaźnik w argumencie, po wywołaniu będzie zapisywać dane do konkretnych zmiennych(bez tworzenia ich kopii) gdzie chcemy mieć to zapisane. Wreszcie w prosty sposób wywołujemy naszą funkcję dla każdego z czujników, przekazując tej funkcji adres zmiennej gdzie ma zapisać dane, oraz odczytaną teperaturę. Dobrze? Fajne te struktury, wskaźniki też. 🍻🍻🍻 Dzisiaj już nie dam rady, jutro wkleję kod, to będziemy poprawiać. Edytowano Luty 22, 2022 przez SOYER Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 22, 2022 Autor tematu Udostępnij Luty 22, 2022 (edytowany) Prośba do admina o dodanie w temacie na końcu słów "i struktur"😁 Edytowano Luty 22, 2022 przez SOYER Cytuj Link do komentarza Share on other sites More sharing options...
farmaceuta Luty 22, 2022 Udostępnij Luty 22, 2022 typedef struct { x; y; z; } Dane; Dane dane[5]; void (Dane * stru) { for(int i= 0; i<5; i++) { stru[i].x = costam; stru[i].y = costam; stru[i].z = costam; } } Mozna tez robic te tablice struktur jak powyzej...za jednym zamachem wypelniasz wszystkie zmienne..(ale to tylko taki przyklad niekoniecznie Cie interesujacy😉), wszystko zalezy od potrzeb.. Cytuj Link do komentarza Share on other sites More sharing options...
SOYER Luty 23, 2022 Autor tematu Udostępnij Luty 23, 2022 Cześć, pytanie czy to: void save_temp(struct zdarzenie *z, float temp) { z->wartosc = temp; z->dzien = now.day(); z->miesiac = now.month(); z->rok = now.year(); } to to samo co: void save_temp(struct zdarzenie *z, float temp) { z.wartosc = temp; z.dzien = now.day(); z.miesiac = now.month(); z.rok = now.year(); } Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!