Wyświetlanie tablicy w osobnej procedurze

0

Witam mam problem, mianowicie napisałem program który tworzy mi tablice o dowolnych wymiarach a x b, użytkownik wpowadza do niej swoje dane. I teraz chciałbym wyświetlić tą tablice w takiej kolejności np.
Tablica 2x3 użytkownik wprowadził swoje dane i wychodzi coś takiego:

[0][0]=1 [0][1]=2 [0][2]=3
[1][0]=4 [1][1]=5 [1][2]=6

#include <iostream>
using namespace std;
int a,b,c,d;
unsigned int wypelnij()
{
	cout << "Podaj wiersze i kolumny: ";
	cin >> a >> b;
	int tab[a][b];
	for (int i=0; i<a; i++)
	{
		for (int j=0; j<b; j++)
		{
			cout << "Podaj wartosc elementu ";
			cin >> tab[i][j];
		}
	}
}
int pokaz()
{
	for (int i=0; i<a; i++)
	{
		for (int j=0; j<b; j++)
		{
			cout << tab[i][j] <<"["<<i<<"]"<<"["<<j<<"]\n" ;
		}
	}
}
int main()
{
	wypelnij();
	pokaz();
}

Program musi być w 2 procedurach, w jednej się tworzy , a w drugiej się wyświetla, kiedy zrobiłem drugą procedure z wyświetlaniem nie mogę się odwołać do tablicy

0

Z tablicą tak tworzoną (int tab[a][b];) niewiele możesz zdziałać oprócz lokalnego użycia, ba nie wszystkie kompilatory to obsłużą.
Najlepszym sposobem jest stworzenie jednowymiarowej tablicy w której trzymać dane wierszami.

0

Jednowymiarowa tablica odpada, chodzi mi tutaj konkretnie o dwuwymiarową. Nie ma opcji aby wywołać tablice w 2 procedurze?

0

Jeżeli stworzysz ją dynamicznie to możesz zwrócić i przekazać.

0

Nie jestem tak biegły w C++ , może jakaś podpowiedź?

0
int** tab = NULL;

//...

tab = new int[a];
for( int i=0; i<a; tab[i++] = new int[b] ) 
0
unsigned int wypelnij()
{
    cout << "Podaj wiersze i kolumny: ";
    cin >> a >> b;
    int tab[a][b];
    for (int i=0; i<a; i++)
    {
        for (int j=0; j<b; j++)
        {
            cout << "Podaj wartosc elementu ";
            cin >> tab[i][j];
        }
    }
} 
unsigned int wypelnij(int **tab[a][b])
{
	cout << "Podaj wiersze i kolumny: ";
	cin >> a >> b;

	for (int i=0; i<a; i++)
	{
		for (int j=0; j<b; j++)
		{
			cout << "Podaj wartosc elementu ";
			cin >> tab[i][j];
		}
	}
}

Powinno to wyglądać tak?

1

Gwarantuje ci że pisanie programów metodą prób i błędów z góry skazane na porażkę.
Weź przeczytaj jakiś kurs.

0

Rozumiem , z tym że próbowałem to zapisywać na kilka sposób i wywala mi notorycznie błędy

1

Panie... Doczytaj Pan, albo zamów gotowy program. Masa ludzi ma tutaj ogłoszenia w sygnaturze.

0

No właśnie o tym ci mówię, jak będziesz "... próbować to zapisywać na kilka sposób ..." to prawdopodobieństwo że uda ci się to zrobić w najbliższym roku jest prawie zerowe.
Natomiast jak przeczytasz jakiś kurs to zrobisz to w 10 min (o ile jesteś bardzo oporny na wiedzę, bo normalnie będzie to szybciej)

0

Udało mi się zrobić tablicę , nie robiłem tego na dynamicznej tylko ustaliłem tablice globalnie. Prosiłbym o pomoc teraz do odwoływania się / wyświetlania tej tablicy w kolejności wierszy
[0][0]=1 [0][1]=2 [0][2]=3
[1][0]=4 [1][1]=5 [1][2]=6
Mam taką procedure :

 int pokaz()
{
	for (int i=0; i<a; i++)
	{
		for (int j=0; j<b; j++)
		{
			cout << tab[i][j] <<"["<<i+1<<"]"<<"["<<j+1<<"]\n";
		}
	}
}

Gdy mam w taki sposób zapisaną procedurę to wyświetla mi tablice w taki sposób
1[1][1]
4[1][2]
5[1][3]
4[2][1]
5[2][2]
6[2][3]

0

Dla globalnej tablicy nie masz szansy zmiany rozmiaru, no chyba że zapodasz rozmiar jakiś 1000x1000 i będziesz pilnować jego przestrzegania.
Co do pytania, "\n" przechodzi na następny wiersz.

0

Wrzuciłem tablicę jako 1,1

 #include <iostream>
using namespace std;
int a,b,c,d;
int tab[1][1];

I po prostu potem zmieniam jej wielkość przez a,b
Działa to najważniejsze :) tak wiem "\n" to przejście na kolejny wiersz. Ale właśnie w jaki sposób napisać to wyświetlanie tak aby tablica wyświetlała mi się w kolejności wierszami ?

1

To że działa to czysty przypadek.
Zmień na:

int tab[1][1];
int a,b,c,d;

i już nie działa za każdym razem.

0

No racja , rozumiem że wracam do punktu wyjścia i pomocy co do wyświetlania nie otrzymam?

1

Za kasę otrzymasz cokolwiek, co do pomocy:

  1. Dostałeś pomoc w postaci porady poczytania kursów. http://4programmers.net/Forum/1103856
  2. Dostałeś pomoc w postaci wyjaśnienia co jest odpowiedzialne za łamanie wiersza. http://4programmers.net/Forum/1103928
  3. Dostałeś pomoc w postaci linku z opisem jak się przydziela tablice dwuwymiarowe. http://4programmers.net/Forum/1103826
  4. Dostałeś pomoc w postaci przykładu jak przydziela się tablice dwuwymiarowe. http://4programmers.net/Forum/1103839
    Jeżeli powyższe nie uważasz za pomoc to wygląda na to że pomyliłeś znaczenie słowa "pomoc" ze znaczeniem wyrażenia "odwalcie prace za mnie frajerzy".
0
#include <iostream>
using namespace std;
int a,b,c,d; //Naucz się nazywać zmienne poprawnie. Nie wiadomo co to jest. Powinieneś tutaj zrobić strukturę z odpowiednio nazwanymi polami i tablicą jednowymiarową rzutowaną do dwóch wymiarów. 
unsigned int wypelnij() //unsigned int?! unsigned int?! Ratuje Cię tylko to, że IDE (albo komplikator nie jestem pewien) dodaje return 0 przy braku zwracanej wartości.Powinno być void. Tablica powinna tu iść do listy argumentów jako in-out.
{
    cout << "Podaj wiersze i kolumny: ";
    cin >> a >> b; //A gdzie czyszczenie bufora po pobraniu wartości? Tym bardziej, że zostaje nawet przy poprawnym podaniu danych zostaje pusty {ENTER}.
    int tab[a][b];
    for (int i=0; i<a; i++) //Zagnieżdżona pętla? Da się to zrobić w jednej!
    {
        for (int j=0; j<b; j++)
        {
            cout << "Podaj wartosc elementu ";
            cin >> tab[i][j];
        }
    }
}
//Ta funkcja tworzy tablicę, wypełnia ją elementami i zapomina o niej. Całkowicie bezcelowe działanie.

int pokaz() //Dlaczego int? (Patrz opis nagłówka wyżej).
{
    for (int i=0; i<a; i++) //Bezsensowne zagnieżdżanie. for( int i=0; i<a*b; cout<<tab[int(i/(b))][i%b]<<'['<<int(i/(b))<<']'<<'['<<i++%b<<']'<<endl );
    {
        for (int j=0; j<b; j++)
        {
            cout << tab[i][j] <<"["<<i<<"]"<<"["<<j<<"]\n" ; //Stringi? Dla jednego znaku? Taki zapis tworzy masę głupich i bezużytecznych danych. 
            //Co to jest tab[i][j]? Tab nie istnieje w tym zakresie. To się skompilowało?
        }
        //Jeśli chcesz podzielić to na wiersze to chyba tutaj powinieneś drukować nową linie.
    }
}
int main()
{
    wypelnij();
    pokaz();
    //Nie brakuje tutaj czegoś?
}

Kolejna sprawa. Powiedziałeś, że to mają być procedury. Procedury nie zwracają wartości. U Ciebie zwracają, choć niejawnie. Terminologia też leży krzyżem i błaga o uwagę.

Dalej twierdzisz, że chcesz, żeby ktoś Ci po prostu napisał jak to zrobić?

Siądź do kursu, naucz się podstaw i proś o pomoc, kiedy będziesz rozumiał co robisz i co chcesz zrobić. Inaczej się nie dogadamy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1