przekazywanie wartości tablicy 2 wymiarowej w Visual C++

RBator1
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 5 sie 2022, o 12:18
Płeć: Mężczyzna
wiek: 48

przekazywanie wartości tablicy 2 wymiarowej w Visual C++

Post autor: RBator1 »

Szanowni Państwo.
Uprzejmie proszę o informację jak właściwie przekazać wartość tablicy 2 wymiarowej.
Poniżej zamieściłem niedziałający przykład, gdzie zarówno wczytaj , jak i wypisz mają error C2660:function does not take 1 arguments
Oto przykład:

Kod: Zaznacz cały

#include<iostream>
#include<string>
using namespace std;
 
void wczytaj (float tab[2][3],int[2][3])
{
for (int i=1;i<2;i++)
{
for (int j=1;j<3;j++)
{
tab[1][1]=1;
tab[1][2]=3;
}
}
}
void wypisz (float wartosc[2][3[,int[2][3])
{
for (int i=1;i<2;i++)
{
for (int j=1;j<3;j++)
{
cout<<i<<j<<wartosc[i][j]<<endl;
}
}
}
int main()
{
float wartosc[2][3];
wczytaj (wartosc [2][3]);
wypisz (wartosc [2][3]);
system("pause");
return 0;
}
Ostatnio zmieniony 1 lut 2025, o 22:16 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Brak tagów [code].
RBator1
Użytkownik
Użytkownik
Posty: 37
Rejestracja: 5 sie 2022, o 12:18
Płeć: Mężczyzna
wiek: 48

Re: przekazywanie wartości tablicy 2 wymiarowej w Visual C++

Post autor: RBator1 »

Podobny kod, tylko ,że dla tablicy 1 wymiarowej

Kod: Zaznacz cały

void wczytaj (float tab[],int n)
{
tab[1]=1;
tab[2]=3;
tab[3]=2;
}
void wypisz (float wartosc[],int n)
{
for(int i=1;i<n;i++)
cout<<i<<wartosc[i]<<endl;
}
int main()
{
float wartosc[4];
wczytaj(wartosc,4);
wypisz(wartosc,4);
system("pause");
return 0;
}
Ostatnio zmieniony 2 lut 2025, o 14:19 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Brak tagów [code].
Awatar użytkownika
Dasio11
Moderator
Moderator
Posty: 10305
Rejestracja: 21 kwie 2009, o 19:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 41 razy
Pomógł: 2429 razy

Re: przekazywanie wartości tablicy 2 wymiarowej w Visual C++

Post autor: Dasio11 »

Funkcja zdefiniowana jako void wczytaj( float tab[2][3], int[2][3] ) potrzebuje dwóch argumentów, a ty podajesz jeden:

Kod: Zaznacz cały

wczytaj( wartosc[2][3] );
Zgaduję że drugi argument jest niezamierzony, więc możesz zmienić sygnaturę funkcji na

Kod: Zaznacz cały

void wczytaj( float tab[2][3] )
i problem powinien zniknąć.

Z tym, że błędów jest więcej:

- w sygnaturze funkcji void wypisz(float wartosc[2][3[,int[2][3]) oprócz niepotrzebnego drugiego argumentu jest jeszcze literówka.

- wczytaj[2][3] to nie cała tablica tylko pojedyncza zmienna typu float, w dodatku leżąca poza tablicą - używanie jej może spowodować naruszenie ochrony pamięci (segfault). Powinieneś wywołać funkcje w ten sposób:

Kod: Zaznacz cały

wczytaj( wartosc );
wypisz( wartosc );
Dodatkowo kod w paru miejscach choć jest poprawny językowo, to chyba robi nie to co chcesz.

Kod: Zaznacz cały

for (int i=1;i<2;i++)
{
for (int j=1;j<3;j++)
{
tab[1][1]=1;
tab[1][2]=3;
}
}
Ta pętla jest bez sensu, bo ma dwa przebiegi i w drugim tylko powtarza to co zrobiła w pierwszym. Jeśli chcesz przypisać każdej komórce dokładnie jedną wartość, zrób tak:

Kod: Zaznacz cały

for( int i = 0; i < 2; ++i )
for( int j = 0; j < 3; ++j )
{
  tab[i][j] = <wartość>;
}
- Ta pętla

Kod: Zaznacz cały

for (int i=1;i<2;i++)
{
for (int j=1;j<3;j++)
{
cout<<i<<j<<wartosc[i][j]<<endl;
}
}
też nie wyświetli wszystkich komórek tablicy, tylko dwie, a do tego każda linijka sklei się w jeden ciąg cyfr. Sensowniej jest tak:

Kod: Zaznacz cały

for( int i = 0; i < 2; ++i )
for( int j = 0; j < 3; ++j )
{
  cout << "[" << i << "][" << j << "] -> " << wartosc[i][j] << endl;
}
Ogólnie tablica zadeklarowana jako float wartosc[2][3]; ma sześć komórek indeksowanych parami liczb zaczynających się od zera: wartosc[0][0], wartosc[0][1], wartosc[0][2], wartosc[1][0], wartosc[1][1], wartosc[1][2].
ODPOWIEDZ