Skocz do zawartości

Sposób na zapisanie danych w tablicy.


blaboon

Pomocna odpowiedź

Witam wszystkich. Proszę o rozwiązanie mojego problemu zapisu danych w tablicy.

Podaję przykład prawidłowej deklaracji, o którą mi chodzi:

          byte mojatablica[5] = {1, 2, 3, 4, 5};

Teraz co w przypadku gdy wcześniej deklaruję pustą tablicę bez wstawiania danych:

          byte mojatablica[5];

natomiast w dalszym kodzie chciałbym uzupełnić dane właśnie w taki sposób:

          mojatablica[5] = {1, 2, 3, 4, 5};

 

Czyżby dane w taki sposób można było zapisywać tylko w momencie deklaracji tablicy?

Poddaję się po kilku godzinach prób i poszukiwań.

Bardzo proszę o pomoc.

Link do komentarza
Share on other sites

@blaboon witam na forum 🙂 

nawiasy klamrowe służą inicjalizacji więc ta druga linia nie jest poprawna. Zamiast tego możesz posłużyć się pętlą for, którą uzupełnisz wartości elementów tablicy, albo bezpośrednio przed wpisanie wartości ręcznie. Innych metod nie znam.

Link do komentarza
Share on other sites

Dziękuję za odpowiedź.

Musiałem przebudowałem kompletnie kod. Wcześniej chciałem to zrobić trochę bardziej czytelnie.

Dane były mapą cyfr do wyświetlenia w dość nietypowej matrycy LED. Wyglądały dokładnie tak

cyfra 0,                 cyfra 1,               cyfra 2                  … do 9.

{1,1,1,                   {0,0,1,                   {1,1,1,

 1,0,1,                    0,0,1,                     0,0,1,

 1,0,1,                    0,0,1,                     1,1,1,

 1,0,1,                    0,0,1,                     1,0,0,

 1,1,1}                   0,0,1}                     1,1,1}  

Tablice były deklarowane w Switch Case i wybierane w zależności od cyfry więc była tylko jedna możliwość wyboru. Jednak kompilator zarzucił mi redeklarację zmiennej. Zadeklarowałem więc zmienną tablicową wcześniej, chcąc w wyborze Switch Case przypisać do niej konkretną w danym momencie mapę cyfry. Właśnie w tym momencie utknąłem.

Widać wypociłem coś czego maszyna nie potrafi jeszcze zrozumieć 🙂.

Link do komentarza
Share on other sites

@blaboon to może zrób tablicę dwuwymiarową (albo 1 z odpowiednimi przesunięciami), np. tu masz taką tablicę:

 float macierz[3][4] = {
   { 1.6, 4.5, 2.4, 5.6 },  /* pierwszy wiersz */
   { 5.7, 4.3, 3.6, 4.3 },  /* drugi wiersz */
   { 8.8, 7.5, 4.3, 8.6 }   /* trzeci wiersz */
 };

i wtedy element 0 to indeksy: macerz[0][0], macerz[0][1], macerz[0][2] i macerz[0][3]

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

11 godzin temu, blaboon napisał:

cyfra 0,                 cyfra 1,               cyfra 2                  … do 9.
{1,1,1,                   {0,0,1,                   {1,1,1,
1,0,1,                    0,0,1,                     0,0,1,
1,0,1,                    0,0,1,                     1,1,1,
1,0,1,                    0,0,1,                     1,0,0,
 1,1,1}                   0,0,1}                     1,1,1}  

@blaboon Pokaż proszę cały kod, bo te zagnieżdżone nawiasy klamrowe w deklaracji wyglądają dla mnie dość egzotycznie i nie rozumiem jaką właściwie strukturę chciałeś zadeklarować

Edytowano przez bjrk
Wskazanie adresata
Link do komentarza
Share on other sites

Jeśli nie chcemy zastanawiać się nad problemem który nie istnieje, musimy zrozumieć co chciałeś @blaboon naprawdę zrobić. Ja rozumiem to w ten sposób, że planujesz jakiś rodzaj generatora znaków do matrycy LED. Czy tak? Jak chcesz to zorganizować? Czy potrzebujesz obrazy wyświetlanych znaków? Czy każda pozycja to de facto binarne 0/1 oznaczające "segment świeci/zgaszony" czy to jest jakoś bardziej skomplikowane? Napisz więcej o tym swoim pomyśle. Ale nie jak to zrobiłeś (bo nie znając języka możesz iśc złą drogą) tylko opisz sprzęt na jakim to działa i co program ma robić. Wtedy każdy wymyśli jakieś rozwiązanie i go zapoda. Język nie wspiera tablic trójwymiarowych, co najwyżej dwu. Z kolei istnieją mechanizmy do ręcznego rozbudowywania. ale nie wiemy czy tu są konieczne. Być może potrzebujesz wskaźników na tablice - to też działa gdy np. chcesz przekazać jakąś do funkcji, ale nie da się pomóc nie rozumiejąc co jest celem. Inicjalizacja z użyciem nawiasów klamrowych działa tylko w miejscu deklaracji i to wystarcza - jest szybka i w zasadzie nie zajmuje miejsca w kodzie (no chyba, że nie-statycznych zmiennych automatycznych w funkcjach). Dlaczego chciałbyś robić to gdzie indziej?

Link do komentarza
Share on other sites

40 minut temu, marek1707 napisał:

Język nie wspiera tablic trójwymiarowych, co najwyżej dwu

O jakim języku mówisz? Bo kolega z tego co widzę używa C++...

(tak w rzeczywistości to język w ogóle nie wspiera tablic wielowymiarowych z dwuwymiarowymi włącznie, ale niech to pozostanie naszą słodką tajemnicą; dla zainteresowanych skąd się te tablice wielowymiarowe biorą do poczytania np. tutaj).

Link do komentarza
Share on other sites

Dziękuję wszystkim za zainteresowanie tematem.

Tak to jest można powiedzieć, generator znaków do tablicy LED. Kod działa na Arduino. Ze względu na ograniczoną pamięć tej platformy oraz moją wrodzoną skłonność do oszczędzania komórek pamięci, chciałem zapisywać w zmiennej lokalnej tylko jedną, w danym momencie wykorzystywaną cyfrę. Pomysł z tablicą dwuwymiarową oczywiście działa ale jest jeszcze bardziej opasły. Przygodę z programowaniem zaczynałem z Commodore 64, chyba to nauczyło mnie oszczędności. Z reguły pisałem programy na PC w VB, VBA i Delphi, rzadko programuję mikrokontrolery.

Tym razem poradziłem sobie nie używając zmiennych a wpisując znaki w kod programu. Tam mam jeszcze sporo miejsca 🙂 .

Jeszcze raz dziękuję wszystkim za pomoc. Nie wiedziałem, że nawiasy klamrowe działają tylko w miejscu deklaracji.

Pozdrawiam.

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.