farmaceuta Luty 24, 2022 Udostępnij Luty 24, 2022 saveTemp2(czujniki, odczyty); odczyty sa globalne wiec wogole nie musisz robic argumentu...generalnie jak juz @ethanak wsponial to robienie bez konca wskaznikow (powielanie tablicy struktur) to tylko strata pamieci (i czasu)...tu wogole wskaznik nie potrzebny jest.. bo ta tablica jest globalna...no ja Ci wiele nie doradze bo zbyt [kwadratowo] sie zrobilo (bede utrzymywal, ze nie potrzebnie)
ethanak Luty 24, 2022 Udostępnij Luty 24, 2022 2 minuty temu, farmaceuta napisał: bede utrzymywal, ze nie potrzebnie A ja będę utrzymywał, że zabieranie głosu na temat "potrzebne/niepotrzebne" w takim kontekście bez znajomości całego kodu jest bez sensu i świadczy jedynie o tym, że albo się nie zna powodów zastosowania takiej czy innej konstrukcji i plecie się co ślina na język przyniesie, albo się jej po prostu nie rozumie i na wszelki wypadek (żeby nikt nie zapytał i się nie wydało) twierdzi się, że bez tego jest lepiej. Którą wersję wybierasz?
farmaceuta Luty 24, 2022 Udostępnij Luty 24, 2022 (edytowany) 2 godziny temu, ethanak napisał: A ja będę utrzymywał, że zabieranie głosu na temat "potrzebne/niepotrzebne" w takim kontekście bez znajomości całego kodu jest bez sensu i świadczy jedynie o tym, że albo się nie zna powodów zastosowania takiej czy innej konstrukcji i plecie się co ślina na język przyniesie, albo się jej po prostu nie rozumie i na wszelki wypadek (żeby nikt nie zapytał i się nie wydało) twierdzi się, że bez tego jest lepiej. Zgodze sie ale nie akurat w kontekscie tego co wczesniej napisalem...co do znajomosci kodu to interesuje mnie tylko to ze do struktur zapisuje min i max temperature jesli trzeba...to wszystko (o tym mowil @SOYER ) 2 godziny temu, ethanak napisał: Którą wersję wybierasz? A taka... define LICZBA_CZUJNIKÓW 15 struct sensors{ czujnik_temp tempmin, tempmax, dzienmin, dzienmax, miesiacmin, miesiacmax rokmin, rokmax, godzmin, godzmax, minutamin, minutamax; }; struct sensors czujniki[LICZBA_CZUJNIKÓW]; void saveTemp(){ for (i = 0; i < LICZBA_CZUJNIKÓW; i++) { if(czujniki[i].czujnik_temp < czujniki[i].tempmin){ czujniki[i].tempmin = czujniki[i].czujnik_temp; czujniki[i].dzienmin = now.day(); czujniki[i].miesiacmin = now.month(); czujniki[i].rokmin = now.year(); // etc } if(czujniki[i].czujnik_temp > czujniki[i].tempmax){ czujniki[i].tempmax = czujniki[i].czujnik_temp; czujniki[i].dzienmax = now.day(); czujniki[i].miesiacmax = now.month(); czujniki[i].rokmax = now.year(); // etc } } (Sory za dziwna skladnie...mam popi.......................telefon) juz nie wytrzymam z tym trupem... Co do kodu (jest niekompletny) to wybral bym go nie dlatego ze ja go napisalem, tylko dlatego ze jest bardziej czytelny..(dla mnie!) dodatkowo temperatura konkretnego czujnika odrazu w konkretnej strukturze Edytowano Luty 24, 2022 przez farmaceuta
SOYER Luty 24, 2022 Autor tematu Udostępnij Luty 24, 2022 (edytowany) enum{grzejniki, cwu, piec, slonce, grunt, zew, wilg, cisnienie, LICZBA_CZUJNIKOW=8}; int odczyty[8]; struct sensors{ int temp, dzien, miesiac, rok; }; struct sensors czujniki[LICZBA_CZUJNIKÓW][2]; void saveTemp(struct sensors *wsk, int *odczyt){ wsk->temp = odczyt; wsk->dzien = now.day(); wsk->miesiac = now.month(); wsk->rok = now.year(); } void saveTemp2 (struct czujniki *czujnik, int *wskaznikNaOdczyty) { for(i=0; i<LICZBA_CZUJNIKÓW; i++{ if (wskaznikNaOdczyty[i] < czujnik[i][0].temp) saveTemp(&czujnik[i][0], odczyty[i]); if (wskaznikNaOdczyty[i] > czujnik[i][1].temp) saveTemp(&czujnik[i][0], odczyty[i]); }} //wywołanie: saveTemp2(czujniki, odczyty); Słusznie prawicie, co teraz? Co do funkcji saveTemp2, ja to rozumiem tak wywołuję funkcję saveTemp2 z argumentami czujniki i odczyty. w ciele funkcji sprawdzam czy (po kolei) 1,2,3... pozycja w tablicy odczyty jest mniejsza niż zawartość 1,2,3.. komórki pierwszego wymiaru tablicy czujniki, drugi wymiar tablicy to [0] bo sprawdzam minimum, jeśli tak to odpalam funkcję saveTemp i przekazuję jej że ma zapisać w tablicy czujniki[1,2,3...][0...min] to co zawarte w tablicy odczyty[1,2,3...]. Dobrze myślę? Gdzie i czemu źle wpisuję &, *, [] ? Edytowano Luty 24, 2022 przez SOYER
ethanak Luty 24, 2022 Udostępnij Luty 24, 2022 Dlaczego drugi parametr saveTemp to wskaźnik i dlaczego dwie linijki dalej magicznue na się zmienić w inta?
SOYER Luty 24, 2022 Autor tematu Udostępnij Luty 24, 2022 w moim mniemaniu to wskaźnik na tablicę odczyty[], jak to poprawnie zapisać?
ethanak Luty 24, 2022 Udostępnij Luty 24, 2022 A do czego w saveTemp potrzebujesz wskaźnika na tablicę odczyty? Przecież tam podajesz konkretną wartość konkretnego odczytu!
farmaceuta Luty 24, 2022 Udostępnij Luty 24, 2022 50 minut temu, SOYER napisał: w moim mniemaniu to wskaźnik na tablicę odczyty[], jak to poprawnie zapisać? saveTemp(&czujnik[i][0], odczyty[i]); saveTemp(&czujnik[i][0], odczyty[i]); nazwa tablicy jest wskaznikiem (stalym) na pierwszy jej element...z naciskiem na pierwszy uzywajac nawiasow kwadratowych otrzymujesz juz wartosc sod danego adresu a nie sam adres...czyli tak (chyba) saveTemp(&czujnik[i][0], &odczyty[i]); saveTemp(&czujnik[i][0], &odczyty[i]);
SOYER Luty 24, 2022 Autor tematu Udostępnij Luty 24, 2022 @ethanakczyli void saveTemp(struct sensors *wsk, int void saveTemp(struct sensors *wsk, int odczyt){ i tu bez zmian: if (wskaznikNaOdczyty[i] < czujnik[i][0].temp) saveTemp(&czujnik[i][0], odczyty[i]); ?
ethanak Luty 24, 2022 Udostępnij Luty 24, 2022 Po puhw ten wskazniknaodczyty i czym on się różni od odczyty?
SOYER Marzec 5, 2022 Autor tematu Udostępnij Marzec 5, 2022 enum{grzejniki, cwu, piec, slonce, grunt, zew, wilg, cisnienie, LICZBA_CZUJNIKOW=8}; int odczyty[8]; struct sensors{ int temp, dzien, miesiac, rok; }; struct sensors czujniki[LICZBA_CZUJNIKÓW][2]; void saveTemp(struct sensors *wsk, int *odczyt){ wsk->temp = odczyt; wsk->dzien = now.day(); wsk->miesiac = now.month(); wsk->rok = now.year(); } void saveTemp2(){ for(i=0; i<LICZBA_CZUJNIKÓW; i++{ if (odczyty[i] < czujniki[i][0].temp) saveTemp(&czujnik[i][0], &odczyty[i]); if (odczyty[i] > czujniki[i][1].temp) saveTemp(&czujnik[i][0], &odczyty[i]); }} //wywołanie: saveTemp2(); Cześć, po tygodniu wracam, przeczytałem jeszcze raz kilka ostatnich stron tego wątku. Powyżej wklejam kolejną wersję kodu. Rozumiem, że jeśli i struktura struct sensors czujniki[LICZBA_CZUJNIKÓW][2]; jak i tablica z odczytami z czujników int odczyty[8]; są globalne to mogę się do nich odwoływać bezpośrednio, tak też zrobiłem w funkcji saveTemp2() Nie wiem czy prawidłowo przekazuję argumenty do funkcji saveTemp()?
Elvis Marzec 5, 2022 Udostępnij Marzec 5, 2022 (edytowany) @SOYER, nie gniewaj się, ale używanie tablic 2-wymiarowych to bardzo kiepski pomysł. Jeśli nie wierzysz, to popatrz poniżej i poszukaj błędu: if (odczyty[i] < czujniki[i][0].temp) saveTemp(&czujnik[i][0], &odczyty[i]); if (odczyty[i] > czujniki[i][1].temp) saveTemp(&czujnik[i][0], &odczyty[i]); Jako podpowiedź, pomyśl czy za miesiąc, dwa, albo za pół roku będziesz pamiętał co oznacza "czujnik[ i][0]", a co "czujniki[ i][1]". Edytowano Marzec 5, 2022 przez Elvis 1
SOYER Marzec 6, 2022 Autor tematu Udostępnij Marzec 6, 2022 Ja pewnie będę pamiętał, bo tych szkiców malutko piszę, w tym przypadku tablica też nieduża, ale rozumiem, że pomysł jest nietęgi dla ew. przypadku rozwinięcia tego do większych rozmiarów. Co proponujesz? Zakładamy dwie(?) funkcje, jedna od razu, przy uruchomieniu programu, zapisuje wszystkie odczyty z czujników jako max i min wraz z datą, druga co jakiś czas, po kolejnym odczycie, sprawdza wartości i ew. zapisuje nowe max lub min wraz z datą.
Elvis Marzec 6, 2022 Udostępnij Marzec 6, 2022 @SOYER Zacznij może od poprawienia błędu, wtedy będzie łatwiej
SOYER Marzec 6, 2022 Autor tematu Udostępnij Marzec 6, 2022 if (odczyty[i] < czujniki[i][0].temp) saveTemp(&czujnik[i][0], &odczyty[i]); if (odczyty[i] > czujniki[i][1].temp) saveTemp(&czujnik[i][1], &odczyty[i]); Poprawiłem ewidentny błąd, ale nie wiem czy tylko o to chodziło.
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »