[c++]tablice odczyt kilku komórek tablicy

W tym miejscu zadajemy pytania na temat języka C++, dzielimy się swoją wiedzą, udzielamy wsparcia, rozwiązujemy problemy programistyczne.
Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

[c++]tablice odczyt kilku komórek tablicy

Postautor: foreste » sobota 24 wrz 2016, 07:51

Mam problem z rozgryzieniem odczytu kilku jednocześnie komórek tablicy mając

Kod: Zaznacz cały

DigitalOut   led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};

z niej wybrać
3 obiekty PC-2 ,PF-0 i PC-13
zapisując
jako led[moje komórki] = 0;
da rade napisać , czy trza użyć wektorów tablicowych i wrzucać tam moje komórki ?.
czy wyłuskiwać komórki i za pomocą for pętli i if ?.
♫,♫.¨♫

SuperGość
Uber Geek
Uber Geek
Posty: 2346
Rejestracja: piątek 04 wrz 2015, 09:03

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: SuperGość » sobota 24 wrz 2016, 09:16

Jak to jest problem dotyczący ogólnych rozważań języka C++ to należy pisać w odpowiednim miejscu i tam też przenoszę ;)

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: Antystatyczny » sobota 24 wrz 2016, 16:17

Zapewne i tym razem chodzi o MBED, więc trochę trzeba będzie zgadywać, bo nie używam tego tworu.

Tutaj masz tablicę ośmiu obiektów klasy DigitalOut:

Kod: Zaznacz cały

DigitalOut   led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};


Nie widziałem prototypu tej klasy, ale przypuszczam, że do tablicy zostaną wstawione obiekty odpowiadające pinom określonym w liście inicjalizacyjnej, a zatem:

led[0] - PC3,
led[1] - PC2,
led[2] - PF1,
led[3] - PF0,
led[4] - PC15,
led[5] - PC14,
led[6] - PC13,
led[7] - PB7

Zasadniczo można wyzerować piny używając takiego zapisu:

Kod: Zaznacz cały

led[1] = led[3] = led[6] = 0;


Można stosować pętlę for oraz wewnątrz warunek if, który sprawdzi kolejne bity zmiennej i odpowiednio ustawi poszczególne obiekty led. Oto przykład:

Kod: Zaznacz cały

DigitalOut led[8]  {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};   /* tablica obiektow typu DigitalOut */
   uint8_t x = 0xAA;   /* jakas przypadkowa wartosc */
   
   for (uint8_t i = 0; i < 8; ++i)
   {
      if( x & (1 << i) != 0 )/* test poszczegolnych bitow w zmiennej x */
      {
         led[i] = 1;
      }
      else
      {
         led[i] = 0;
      }
   }
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: foreste » sobota 24 wrz 2016, 16:38

Antystatyczny pisze:Zapewne i tym razem chodzi o MBED, więc trochę trzeba będzie zgadywać, bo nie używam tego tworu.

Tutaj masz tablicę ośmiu obiektów klasy DigitalOut:

Kod: Zaznacz cały

DigitalOut   led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};


Nie widziałem prototypu tej klasy, ale przypuszczam, że do tablicy zostaną wstawione obiekty odpowiadające pinom określonym w liście inicjalizacyjnej, a zatem:

led[0] - PC3,
led[1] - PC2,
led[2] - PF1,
led[3] - PF0,
led[4] - PC15,
led[5] - PC14,
led[6] - PC13,
led[7] - PB7

Zasadniczo można wyzerować piny używając takiego zapisu:

Kod: Zaznacz cały

led[1] = led[3] = led[6] = 0;


Można stosować pętlę for oraz wewnątrz warunek if, który sprawdzi kolejne bity zmiennej i odpowiednio ustawi poszczególne obiekty led. Oto przykład:

Kod: Zaznacz cały

DigitalOut led[8]  {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};   /* tablica obiektow typu DigitalOut */
   uint8_t x = 0xAA;   /* jakas przypadkowa wartosc */
   
   for (uint8_t i = 0; i < 8; ++i)
   {
      if( x & (1 << i) != 0 )/* test poszczegolnych bitow w zmiennej x */
      {
         led[i] = 1;
      }
      else
      {
         led[i] = 0;
      }
   }

Mam pytanie dotuczającej mojej tablicy , jaki typ danych tablicy pasuje do danych w mojej tablicy
uint8_t x = 0xAA; /* jakas przypadkowa wartosc */

Wyjaśnij m i tą liczbę 0xAA czym ona jest tym kodzie? , czy tylko to losowa liczba ?.
♫,♫.¨♫

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: Antystatyczny » sobota 24 wrz 2016, 16:45

foreste pisze:Mam pytanie dotuczającej mojej tablicy , jaki typ danych tablicy pasuje do danych w mojej tablicy


Żeby odpowiedzieć na to pytanie, musiałbyś tu wkleić prototyp klasy DigitalOut, bo kompletnie nie znam MBED.

foreste pisze:Wyjaśnij m i tą liczbę 0xAA czym ona jest tym kodzie? , czy tylko to losowa liczba ?.


Masz napisane w komentarzu, że jest to jakaś przypadkowa wartość wpisana do zmiennej x. Ot, taką miałem fantazję, nic poza tym. Równie dobrze mogłem wpisać zero lub jakąkolwiek inną wartość.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: foreste » sobota 24 wrz 2016, 16:50

Ostatnio zmieniony sobota 24 wrz 2016, 16:52 przez foreste, łącznie zmieniany 1 raz.
♫,♫.¨♫

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: Antystatyczny » sobota 24 wrz 2016, 16:52

Zgodnie z tym, co jest napisane w dokumentacji, operator = przyjmuje typ int.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: foreste » sobota 24 wrz 2016, 19:29

Po zdefiniowaniu typu tablicy led typerm int pojawił błąd kompilacji aplikacji
kod

Kod: Zaznacz cały

#include "mbed.h"
 
DigitalIn mybutton(USER_BUTTON);
DigitalOut int led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};
 
int main() {
   
    for(int x=0; x<8; x++) {
        led[x] = 1 ;
    }
  while(1) {
          led[1] = led[5] = led[7] = 0;
      wait(1);
      led[1] = led[5] = led[7] = 1;
      wait(1);
  }
}


log kompilacji
*** Using Compiler 'V5.06 update 3 (build 300)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin'
Build target 'Nucleo_read_button2'
compiling main.cpp...
main.cpp(4): error: #84: invalid combination of type specifiers
DigitalOut int led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};
main.cpp(4): warning: #3337-D: list initialization syntax is a C++11 feature
DigitalOut int led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};
main.cpp(17): warning: #1-D: last line of file ends without a newline
}
main.cpp: 2 warnings, 1 error
".\build\uvision5\Nucleo_read_button2.axf" - 1 Error(s), 2 Warning(s).
Target not created.
Build Time Elapsed: 00:00:04
♫,♫.¨♫

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: Antystatyczny » sobota 24 wrz 2016, 19:33

Kod: Zaznacz cały

DigitalOut int led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};


zamień na:

Kod: Zaznacz cały

DigitalOut  led[8] {PC_3, PC_2, PF_1, PF_0, PC_15, PC_14, PC_13, PB_7};


ponieważ DigitalOut to typ, więc nie możesz tam dodać typu int.

Dodatkowo, w związku z: "main.cpp(4): warning: #3337-D: list initialization syntax is a C++11 feature", musisz w ustawieniach kompilatora ustawić dialekt języka C++11, by móc korzystać z listy inicjalizacyjnej.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
j23
Expert
Expert
Posty: 506
Rejestracja: czwartek 08 paź 2015, 18:40

Re: [c++]tablice odczyt kilku komórek tablicy

Postautor: j23 » sobota 24 wrz 2016, 21:04

foreste pisze:Mam pytanie dotuczającej mojej tablicy , jaki typ danych tablicy pasuje do danych w mojej tablicy

Nie wiem czy dobrze zrozumiałem co zamierzasz zrobić Kolego, ale jeżeli chcesz tylko wybadać ZAKRES typu zmiennej (który z tego co pisze Kolega Antystatyczny jest typem już gdzieś zdefiniowanym), to możesz użyć operatora "sizeof", np.

Kod: Zaznacz cały

#include <iostream>
#include "twoj_plik_gdzie_jest_zdefiniowany_typ_danych_DigitalOut.h"
int main()
{
    std::cout << "Rozmiar DigitalOut to: "<< sizeof(DigitalOut[8])<< '\n'
              << "No pain no gain";
}


Wówczas nie bawisz się w dociekanie czy jest to int, short int, czy cokolwiek innego (bo możesz nie wiedzieć co to za typ danych DigitalOut, a interesuje Cię tylko tak naprawdę rozmiar), więc na podstawie tego co wyrzuci ci sizeof masz informacje jaki jest maksymalny rozmiar tych danych.

Więcej informacji w linkach poniżej:
http://en.cppreference.com/w/cpp/language/sizeof
http://cpp0x.pl/kursy/Kurs-C++/Poziom-1/Pojecie-zmiennej-i-podstawowe-typy-danych/11

Pozdrawiam! j23
Internet łączy ludzi, którzy dzielą się swoimi zainteresowaniami, pomysłami i potrzebami, bez względu na geograficzne (przeciwności).
BOB TAYLOR, PARC


Wróć do „Pisanie programów w C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości