• 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,107 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,957 wizyt
0 głosów
1 odpowiedź 171 wizyt
0 głosów
1 odpowiedź 701 wizyt

93,180 zapytań

142,195 odpowiedzi

321,991 komentarzy

62,511 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1873p. - dia-Chann
  2. 1848p. - Łukasz Piwowar
  3. 1831p. - CC PL
  4. 1827p. - Łukasz Eckert
  5. 1769p. - Michal Drewniak
  6. 1761p. - Łukasz Siedlecki
  7. 1758p. - rucin93
  8. 1708p. - Adrian Wieprzkowicz
  9. 1680p. - Tomasz Bielak
  10. 1668p. - Mikbac
  11. 1621p. - rafalszastok
  12. 1506p. - Marcin Putra
  13. 1356p. - ssynowiec
  14. 1289p. - Anonim 3619784
  15. 1169p. - Grzegorz Aleksander Klementowski
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!

...