Skocz do zawartości

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


Pomocna odpowiedź

struct sensors{
  int temp, dzien, miesiac, rok;
};
struct sensors [grzejnikiMin, grzejnikiMax, cwuMin, cwuMax]; // i tak 30 pozycji?

jak potem odnieść się do konkretnej komórki np. cwuMin, poprzez indeks? Ale to musiałbym pamiętać w której co siedzi.

Czego nie rozumiem?

Nie, to nie tak. Tablice służą do przechowywania danych które można stablicować, Ty masz 30 różnych zmiennych.

Dam Ci przykład - masz 10 identycznych akwariów, każde ma swój numerek, w każdym takie same rybki, mierzysz np. temperaturę i kiedy rybki były karmione:

struct akwarium {
  int tempMin;
  int tempMax;
  time_t nakarmione;
} akwaria[10];

 

Wtedy odwołujesz się przez indeks, np.:

x=akwarium[7].tempMin;

Co innego, gdy masz różne rybk i akwaria są podpisane:

struct akwarium {
  int tempMin;
  int tempMax;
  time_t nakarmione;
} welony, skalary, piranie, rekiny.

Wtedy odwołujesz się normalnie, np.:

x=rekiny.tempMin;

Oczywiście możesz mieć kombinacje, np:

struct akwarium {
  int tempMin;
  int tempMax;
  time_t nakarmione;
} welony, skalary[2], piranie[5], rekiny.

 

  • Pomogłeś! 1

No to ja mam różne rybki:-) tak? Bo mam 15 czujników, ale w każdym czujniku 2 opcje, czyli ostatni przykład z Twojego ostatniego posta jest ok, si? 

(edytowany)
struct sensors{
  int temp, dzien, miesiac, rok;
};
struct sensors grzejniki[2], cwu[2], piec[2];// 1 komórka w tablicy to min, 2 komórka to max

void saveTemp(struct sensors *wsk, int odczytTemp){
  for(int i= 0; i<2; i++) {
  wsk[i].temp = odczytTemp;
  wsk[i].dzien = now.day();
  wsk[i].miesiac = now.month();
  wsk[i].rok = now.year();
}}

//gdzieś w kodzie
if(temp_grzejniki<grzejniki[0].temp){
 saveTemp(&grzejniki[0].temp, temp_grzejniki);
}
if(temp_grzejniki>grzejniki[1].temp){
 saveTemp(&grzejniki[1].temp, temp_grzejniki);
}
//itd.

Coś takiego? 

EDIT: chyba trochę namieszałem z tą pętlą for

Edytowano przez SOYER
2 minuty temu, ethanak napisał:

Prawie dobrze, ale "prawie" robi wielką różnicę.

Tablice indeksuje się od zera a nie od jedynki.

 

 

Poprawiłem od razu po wstawieniu.:-))

Reszta, że dobrze?

struct sensors{
  int temp, dzien, miesiac, rok;
};
struct sensors grzejniki[2], cwu[2], piec[2];// 1 komórka w tablicy to min, 2 komórka to max

void saveTemp(struct sensors *wsk, int odczytTemp){
  
  wsk->temp = odczytTemp;
  wsk->dzien = now.day();
  wsk->miesiac = now.month();
  wsk->rok = now.year();
}

//gdzieś w kodzie
if(temp_grzejniki<grzejniki[0].temp){
 saveTemp(&grzejniki[0].temp, temp_grzejniki);
}
if(temp_grzejniki>grzejniki[1].temp){
 saveTemp(&grzejniki[1].temp, temp_grzejniki);
}
//itd.

Lepiej?

Tyle że ja nie wiem co program ma robić (i nie chcę wiedzieć, akurat w tej chwili aż tek się nie nudzę, mam nieprzekraczalny termin uruchomienia nowej wersji softu dla firmy na 1 marca)

Generalnie stworzyles trzy tablice dwu elementowe...wszystkie identyczne...jedyna zaleta ze nazwy inne i prosciej w kodzie sie poslugiwac...wada natomiast to taka ze nie mozesz wszystkiego "obrobic" na raz...

  • Lubię! 1
1 minutę temu, farmaceuta napisał:

Generalnie stworzyles trzy tablice dwu elementowe

będzie ich powiedzmy 15

2 minuty temu, farmaceuta napisał:

jedyna zaleta ze nazwy inne i prosciej w kodzie sie poslugiwac

no bo jak inaczej(jak nie przez nazwę) mam się odwołać w kodzie do powiedzmy czujnika cwu który jest dajmy na to 12 w kolejności, przez indeks wspólnej tablicy, ale kto będzie wiedział który czujnik na którym miejscu siedzi, jak to ugryźć? czy tak zostawić?

4 minuty temu, farmaceuta napisał:

nie mozesz wszystkiego "obrobic" na raz...

tak, zgoda, ale na raz obrabiam tylko przy uruchomieniu programu, potem zależnie od odczytów, pytanie czy to jeszcze upraszczać

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