Skocz do zawartości

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


SOYER

Pomocna odpowiedź

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

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?

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

(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
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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)

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

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ć

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.