Skocz do zawartości

Sposób na zapisanie danych w tablicy.


Pomocna odpowiedź

Napisano

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.

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

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

@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]

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

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?

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

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.

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