Wyświetlanie tablicy w osobnej procedurze

Wyświetlanie tablicy w osobnej procedurze
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
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

Kopiuj
#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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Ola Nordmann
pfff On tą tablicę stworzył lokalnie w funkcji "wypelnij".
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
0

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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
0

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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Ola Nordmann
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:414
0
Kopiuj
int** tab = NULL;

//...

tab = new int[a];
for( int i=0; i<a; tab[i++] = new int[b] ) 

<img src="http://scontent-a-vie.xx.fbcdn.net/hphotos-ash3/1379478_311850692288742_1730250652_n.jpg" />
Geniusz zua :>
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
0
Kopiuj
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];
        }
    }
} 
Kopiuj
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?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Ola Nordmann
To jest antypattern - programowanie progresywne.
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
0

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

Ola Nordmann
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:414
1

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


<img src="http://scontent-a-vie.xx.fbcdn.net/hphotos-ash3/1379478_311850692288742_1730250652_n.jpg" />
Geniusz zua :>
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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)


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
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 :

Kopiuj
 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]

edytowany 1x, ostatnio: PanPsiok
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
0

Wrzuciłem tablicę jako 1,1

Kopiuj
 #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 ?

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
1

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

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

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
PP
  • Rejestracja:około 10 lat
  • Ostatnio:około 10 lat
  • Postów:8
0

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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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".

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 2x, ostatnio: _13th_Dragon
Ola Nordmann
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:414
0
Kopiuj
#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.


<img src="http://scontent-a-vie.xx.fbcdn.net/hphotos-ash3/1379478_311850692288742_1730250652_n.jpg" />
Geniusz zua :>
edytowany 3x, ostatnio: Ola Nordmann
_13th_Dragon
Proszę daj mi namiar na swego dostawcę - mocne to coś co palisz ;P
Ola Nordmann
Skąd przypuszczenie, że coś palę?
_13th_Dragon
np: cout&lt;&lt;tab[i][j]&lt;&lt;'['&lt;&lt;int(i/(a))&lt;&lt;']'&lt;&lt;'['&lt;&lt;i++%b&lt;&lt;']'&lt;&lt;endl ); - skąd to j w indeksacji tab i tp. W twoim wydaniu - albo coś palisz albo jesteś nietrzeźwy.
Ola Nordmann
Albo skopiowałem i przerobiłem jego zapis, bo mi się pisać nie chciało i pominałem to ;)
_13th_Dragon
Gdyby byłeś "czysty" to zauważyłbyś jeszcze dwa miejsca wystąpienia i,j a po wystąpieniu dwa razy i/b i dwa razy i%b zorientowałbyś się że jednak podwójna pętla to dobro. Poza tym na trzeźwo po wpisaniu (i/(a))&lt;&lt;']'&lt;&lt;'['&lt;&lt;i++%b - w mózgu od razu żaróweczka zaczyna mrugać - WTF czemu w jednym miejscu /a a w drugim %b ? No i w innych postach też świadectwa są ;P
Ola Nordmann
Czasem specjalnie staram się skomplikować, a na forum jestem jednym okiem to piszę z rozmachu. Powinno być /b %b poprawiłem to też. W sumie chętnie bym się znietrzeźwił jak już tak namawiasz ;P
_13th_Dragon
Nie wiem czy wiesz, ale w organizmie czasami brak czegoś objawia się identycznie jak nadmiar, co prawda w przypadku alkoholu to tylko podczas delirium.
Ola Nordmann
Nie mogę pić :/ Muszę szukać pracy.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)