Skocz do zawartości

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


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?

 

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
(edytowany)
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
(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

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[]);

 

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[]);

 

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)

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?

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

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)

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

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