• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak wypełnić tablice dwuwymiarowe NIE losowymi danymi?

Object Storage Arubacloud
+5 głosów
953 wizyt
pytanie zadane 12 kwietnia 2015 w C i C++ przez Piotr Skóra Użytkownik (680 p.)

Witam

Mam problem z wypełnieniem tablicy w języku c++

Tablice deklaruję a następnie chce użyć funkcji która ją wypełni i przeprowadzi na niej jakieś tam obliczenia. Wyczytałem że można wpisać w argumencie funkcji wskaźnik do tablicy żeby później nic nie zwracać, tak też zrobiłem. Niestety dostaje komunikat z błędem "Expression syntax"  przed pierwszą wartością w tablicy. Nie ma innego wyjścia jak wpisywać wartości po kolei ?

A więc tak, funkcja wypełniająca tablice

void wypelnianie_macierzy(float(&Tab)[8][8])
{
Tab[8][8] = {{kalibracja[0].x, kalibracja[0].y, 1, 0, 0, 0, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].x},
        {0, 0, 0, kalibracja[0].x, kalibracja[0].y, 1, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].y},
        {kalibracja[1].x, kalibracja[1].y, 1, 0, 0, 0, -kalibracja[1].x*punkty_nar[1].x, -kalibracja[1].y*punkty_nar[1].x},
        {0, 0, 0, kalibracja[1].x, kalibracja[1].y, 1, -kalibracja[1].x*punkty_nar[1].x, -kalibracja[1].y*punkty_nar[1].y},
        {kalibracja[2].x, kalibracja[2].y, 1, 0, 0, 0, -kalibracja[2].x*punkty_nar[2].x, -kalibracja[2].y*punkty_nar[2].x},
        {0, 0, 0, kalibracja[2].x, kalibracja[2].y, 1, -kalibracja[2].x*punkty_nar[2].x, -kalibracja[2].y*punkty_nar[2].y},
        {kalibracja[3].x, kalibracja[3].y, 1, 0, 0, 0, -kalibracja[3].x*punkty_nar[3].x, -kalibracja[3].y*punkty_nar[3].x},
        {0, 0, 0, kalibracja[3].x, kalibracja[3].y, 1, -kalibracja[3].x*punkty_nar[3].x, -kalibracja[3].y*punkty_nar[3].y}};
}

main

int main()
{   
float Tab[8][8];
wypelnianie_macierzy(Tab);
}

Próbowałem też wypełniać linijka po linijce, w ten sposób

 Tab[0][8] = {kalibracja[0].x, kalibracja[0].y, 1, 0, 0, 0, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].x};

Taki zapis również powoduje wyświetlenie błędu.

Jeżeli to ma znaczenie to program piszę w Borland C++ builder

3 odpowiedzi

+3 głosów
odpowiedź 12 kwietnia 2015 przez Grabarz Bywalec (2,880 p.)
void wypelnienie_macierzy(float tablica[][8], int x)
{ for (int index_x = 0; index_x < x; ++index_x)
  { for (int index_y = 0; index_y < 8; ++index_y)
     tablica[index_x][index_y] = 0; /* Jakakolwiek wartość */ } }

lub

void wypelnienie_macierzy(float tablica[][8], int x)
{ for (int index_x = 0; index_x < x; ++index_x)
  { tablica[index_x][0] = 1;
    tablica[index_x][1] = 2;
    tablica[index_x][2] = 3;
    tablica[index_x][3] = 4;
    tablica[index_x][4] = 5;
    tablica[index_x][5] = 6;
    tablica[index_x][6] = 7;
    tablica[index_x][7] = 8; } }

Wywołanie:

int main()
{ float tablica[8][8];
  wypelnienie_macierzy(tablica, 8); }

 

komentarz 12 kwietnia 2015 przez Piotr Skóra Użytkownik (680 p.)
Niestety, pierwszy sposób kojarzy mi się właśnie z wypełnianiem tablicy losowymi wartościami, zawse jest ta pętla. Drugi sposób możliwe że dało by radę dostosować do tej macierzy, dodać kilka pętli jeszcze. Ciągle mam wrażenie że pętle użyte tutaj to tylko utrudnianie sobie życia, myślałem że skoro mogę wypełnić tablice odrazu przy zadeklarowaniu pierwszą metodą to powinno się dać ją wypełnić później, tylko coś źle robię.
+2 głosów
odpowiedź 12 kwietnia 2015 przez daan Pasjonat (17,640 p.)

wpisujesz tablice kwadratową złożoną z 64 zmiennych w element Tab[8][8] ? tak nie powinno być :) dodatkowo tablica ma najwiekszy indeks Tab[7][7] wiec jakim cudem masz w indeksie 8 ? przekraczasz zakres i to dosc konkretnie :P Przekazanie tablicy dwuwymiarowej do funkcji za pomocą wskaźnika : 

typ funkcja(typ **tablica, int wielkosc)
{
// tutaj mozna juz uzywac zapisu tablica[][] ale trzeba 
// uwazac aby nie wyjsc poza wielkosc tablicy
}

 

komentarz 12 kwietnia 2015 przez Piotr Skóra Użytkownik (680 p.)

Teraz to się skołowałem, po kolei.

Faktycznie tablica może być z indeksem "7", zapomniałem że liczymy od "0".

Czyli zapisując float Tab[7][7] tworzę tablice która ma 8 wierszy a każdy z tych wierszy ma 8 kolumn.

0 1 2 3 4 5 6 7
1              
2              
3              
4              
5              
6              
7              

Co daje nam 64 pola do wypełnienia.

Teraz pisząć 

float Tab[7][7]={{kalibracja[0].x, kalibracja[0].y, 1, 0, 0, 0, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].x},
        {0, 0, 0, kalibracja[0].x, kalibracja[0].y, 1, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].y},
        {kalibracja[1].x, kalibracja[1].y, 1, 0, 0, 0, -kalibracja[1].x*punkty_nar[1].x, -kalibracja[1].y*punkty_nar[1].x},
        {0, 0, 0, kalibracja[1].x, kalibracja[1].y, 1, -kalibracja[1].x*punkty_nar[1].x, -kalibracja[1].y*punkty_nar[1].y},
        {kalibracja[2].x, kalibracja[2].y, 1, 0, 0, 0, -kalibracja[2].x*punkty_nar[2].x, -kalibracja[2].y*punkty_nar[2].x},
        {0, 0, 0, kalibracja[2].x, kalibracja[2].y, 1, -kalibracja[2].x*punkty_nar[2].x, -kalibracja[2].y*punkty_nar[2].y},
        {kalibracja[3].x, kalibracja[3].y, 1, 0, 0, 0, -kalibracja[3].x*punkty_nar[3].x, -kalibracja[3].y*punkty_nar[3].x},
        {0, 0, 0, kalibracja[3].x, kalibracja[3].y, 1, -kalibracja[3].x*punkty_nar[3].x, -kalibracja[3].y*punkty_nar[3].y}};

Powinienem wypełnić tą tablice tym czym chce. Ale z indeksem równym "7" nie działa bo jest błąd "too many initializers" z indeksem 8 działa dobrze, a raczej chyba dobrze, bo nie mam nic co mi pokaże co siedzi w tej tablicy.

Chyba o czymś zapomniałem...
 

komentarz 12 kwietnia 2015 przez daan Pasjonat (17,640 p.)
nie nie, ja Ci mówie o działaniu na istniejącej tablicy, w tym przykładzie jaki podałeś ty tworzysz nowa tablice i tutaj podajesz ile ma mieć faktycznie kolumn i wierszy czyli przy tworzeniu podajesz 8 ale przy odczytywaniu i ogólnie operacjach na już istniejącej tablicy możesz podać max 7 bo liczymy od 0 :)
+1 głos
odpowiedź 12 kwietnia 2015 przez Aress Mądrala (6,410 p.)
A spróbuj wpisać samemu coś do tablicy i zmień rozmiar np na 2 /2
komentarz 12 kwietnia 2015 przez Piotr Skóra Użytkownik (680 p.)

Próbowałem

Jak wpisywałem w taki sposób 

Tab[0][0]=  coś;
Tab[[0][1]= cos1;
.
.
.
Tab[8][8]=cos63;

to działało, ale nie jest to ani ładne ani szybkie :P 
Ale jesli tablice zadeklaruje i odrazu ją wypełnie tymi danymi to działa taki zapis
 

  float Tabzz[8][8]={{kalibracja[0].x, kalibracja[0].y, 1, 0, 0, 0, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].x},
        {0, 0, 0, kalibracja[0].x, kalibracja[0].y, 1, -kalibracja[0].x*punkty_nar[0].x, -kalibracja[0].y*punkty_nar[0].y},
        {kalibracja[1].x, kalibracja[1].y, 1, 0, 0, 0, -kalibracja[1].x*punkty_nar[1].x, -kalibracja[1].y*punkty_nar[1].x},
        {0, 0, 0, kalibracja[1].x, kalibracja[1].y, 1, -kalibracja[1].x*punkty_nar[1].x, -kalibracja[1].y*punkty_nar[1].y},
        {kalibracja[2].x, kalibracja[2].y, 1, 0, 0, 0, -kalibracja[2].x*punkty_nar[2].x, -kalibracja[2].y*punkty_nar[2].x},
        {0, 0, 0, kalibracja[2].x, kalibracja[2].y, 1, -kalibracja[2].x*punkty_nar[2].x, -kalibracja[2].y*punkty_nar[2].y},
        {kalibracja[3].x, kalibracja[3].y, 1, 0, 0, 0, -kalibracja[3].x*punkty_nar[3].x, -kalibracja[3].y*punkty_nar[3].x},
        {0, 0, 0, kalibracja[3].x, kalibracja[3].y, 1, -kalibracja[3].x*punkty_nar[3].x, -kalibracja[3].y*punkty_nar[3].y}};

Tylko że nie mogę wpisać tych danych przy deklaracji tablicy.

Podobne pytania

0 głosów
1 odpowiedź 1,739 wizyt
0 głosów
1 odpowiedź 145 wizyt
0 głosów
1 odpowiedź 525 wizyt

92,584 zapytań

141,433 odpowiedzi

319,668 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...