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

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

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.