Skocz do zawartości

Prośba o pomoc przy przeróbce kodu na taki z wykorzystaniem wskaźników


SOYER

Pomocna odpowiedź

5 minut temu, SOYER napisał:

eliminacji wszystkiego co niemożliwe

Niemożliwe to jest otwarcie parasola w d... wróć, otwarcie jest możliwe, niemożliwe jest wyjęcie otwartego bez uszkodzenia.

7 minut temu, SOYER napisał:

jeśli jest spełniony if dla min, dla danego czujnika, to nie ma opcji by był spełniony dla max

Ja bym nie był tego taki pewien... co na początku ląduje w tych zmiennych?

 

Link do komentarza
Share on other sites

A, odpoczynek sobie zrobiłem, to jeszcze jedno uproszczenie:
 

void saveTemp2 (struct czujnik *czujnik, int temp)
{
    if (temp < czujnik[0].temp) saveTemp(&czujnik[0], temp);
    if (temp > czujnik[1].temp) saveTemp(&czujnik[1], temp);
}

                               

Zawsze potem mniej pisania...

  • Pomogłeś! 1
Link do komentarza
Share on other sites

define LICZBA_CZUJNIKÓW 15

struct sensors{
  int tempmin, tempmax, dzien, miesiac, rok;
};
struct sensors czujniki[LICZBA_CZUJNIKÓW];

void saveTemp(struct sensors *wsk, int odczytTemp){
  for (i = 0; i < LICZBA_CZUJNIKÓW; i++) {
  if(odczytTemp < wsk[i]->tempmin){
  wsk[i]->tempmin = odczytTemp;
  wsk[i]->dzien = now.day();
  wsk[i]->miesiac = now.month();
  wsk[i]->rok = now.year();
  }
  if(odczytTemp > wsk[i]->tempmax){
  wsk[i]->tempmax = odczytTemp;
  wsk[i]->dzien = now.day();
  wsk[i]->miesiac = now.month();
  wsk[i]->rok = now.year();
  }
}
}

niewiem czy o to chodzilo...w kazdym razie mi o to chodzilo;-) i gdzies tam wywolujesz sobie tylko ta funkcje z argumentem &czujniki...ten drugi parametr nie jest konieczny bo pewnie ntemperatura jest globalna

PS...nie wiem czy indeks z dobrej strony strzalki...tak jeszcze nie uzywalem

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

(edytowany)

Połączyłem kod(sprytny) @ethanak z for @farmaceuta:

void saveTemp2 (struct czujniki *czujnik, int temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp < czujnik[i][0].temp) saveTemp(&czujnik[0], temp);
    if (temp > czujnik[i][1].temp) saveTemp(&czujnik[1], temp);
}}

//wywołanie:
saveTemp2(&czujniki[][], pomiar[]);

Jest ok?

Cały kod:


 

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 odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}


void saveTemp2 (struct czujniki *czujnik, int temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp < czujnik[i][0].temp) saveTemp(&czujnik[0], temp);
    if (temp > czujnik[i][1].temp) saveTemp(&czujnik[1], temp);
}}

//wywołanie:
saveTemp2(&czujniki[][], odczyty[]);
Edytowano przez SOYER
Link do komentarza
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

Poprawka:

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 odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}


void saveTemp2 (struct czujniki *czujnik, int temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp < czujnik[i][0].temp) saveTemp(&czujnik[0], odczyty[i]);
    if (temp > czujnik[i][1].temp) saveTemp(&czujnik[1], odczyty[i]);
}}

//wywołanie:
saveTemp2(&czujniki[][], pomiar[]);

 

Link do komentarza
Share on other sites

Kolejna poprawka:

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, *odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}


void saveTemp2 (struct czujniki *czujnik, int temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp < czujnik[i][0].temp) saveTemp(&czujnik[0], &odczyty[i]);
    if (temp > czujnik[i][1].temp) saveTemp(&czujnik[1], &odczyty[i]);
}}

//wywołanie:
saveTemp2(&czujniki[][], pomiar[]);

 

Link do komentarza
Share on other sites

Jak dla mnie za duzo tych nawiasow sie porobilo...😉 I chyba zle przekazujesz &czujnik[0]...pamietaj ze teraz masz tablice dwuwymiarowa czyli powinno byc &czujnik[0][0]...( Niech mnie ktos poprawi)

Link do komentarza
Share on other sites

5 minut temu, ethanak napisał:

saveTemp2(&czujniki[][], pomiar[]);

Po jakiemu to?

Nie przepisuj bezmyślnie tylko zastanów się, co robi funkcja saveTemp2

funkcja saveTemp2  sprawdza czy aktualna temperatura jest mniejsza lub większa od zapisanej w tablicy, a jeśli tak to odpala funkcję saveTemp() by ew. cos nadpisać.

Teraz mam tak:

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, *odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}


void saveTemp2 (struct czujniki *czujnik, int temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp < czujnik[i][0].temp) saveTemp(&czujnik[0], &odczyty[i]);
    if (temp > czujnik[i][1].temp) saveTemp(&czujnik[1], &odczyty[i]);
}}

//wywołanie:
saveTemp2(&czujniki[][], pomiar[]);

Rozumiem, że wywołanie saveTemp2 to moja wyobraźnia, jak to zrobić poprawnie? Wywalić te wszystkie kwadraty?

 Co z resztą szkicu?

Link do komentarza
Share on other sites

Przy przekazywaniu tablic jako argumentu nie stosuje sie nawiasow kwadratowych...ampersanda tez nie trzeba bo nazwa tablicy to wskaznik (staly) na jej pierwszy element...chyba o to koledze @ethanak chodzilo...a jak cos zle napisalem to najwyzej kopa zarobie..😉

Link do komentarza
Share on other sites

3 minuty temu, SOYER napisał:

 


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, *odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}


void saveTemp2 (struct czujniki *czujnik, int temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp < czujnik[i][0].temp) saveTemp(&czujnik[0], &odczyty[i]);
    if (temp > czujnik[i][1].temp) saveTemp(&czujnik[1], &odczyty[i]);
}}

//wywołanie:
saveTemp2(&czujniki[][], pomiar[]);

 Wywalić te wszystkie kwadraty?

Ja jednak zostal bym przy tablicy jedno wymiarowej i dopisal daty dla temp min i max...i do tego jedna funkcja...bo sie juz troszke skomplikowalo (przynajmniej jak dla mnie)

Link do komentarza
Share on other sites

Parę poprawek:

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, *odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}


void saveTemp2 (struct czujniki *czujnik, *temp)
{
  for(i=0; i<LICZBA_CZUJNIKÓW; i++{

    if (temp[i] < czujnik[i][0].temp) saveTemp(&czujnik[0], &odczyty[i]);
    if (temp[i] > czujnik[i][1].temp) saveTemp(&czujnik[1], &odczyty[i]);
}}

//wywołanie:
saveTemp2(czujniki, odczyty);

zmieniłem drugi min. argument dla saveTemp2 i to nieszczęsne wywołanie

Link do komentarza
Share on other sites

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ę »
×
×
  • 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.