• 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?

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+5 głosów
1,111 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,960 wizyt
0 głosów
1 odpowiedź 171 wizyt
0 głosów
1 odpowiedź 704 wizyt

93,187 zapytań

142,203 odpowiedzi

322,022 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2345p. - dia-Chann
  2. 2306p. - Łukasz Piwowar
  3. 2295p. - Łukasz Eckert
  4. 2282p. - CC PL
  5. 2252p. - Tomasz Bielak
  6. 2219p. - Łukasz Siedlecki
  7. 2215p. - rucin93
  8. 2201p. - Michal Drewniak
  9. 2156p. - Marcin Putra
  10. 2152p. - Adrian Wieprzkowicz
  11. 2105p. - Mikbac
  12. 1941p. - Anonim 3619784
  13. 1733p. - rafalszastok
  14. 1480p. - Michał Telesz
  15. 1469p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...