Wyświetlanie tablicy dwuwymiarowej

0

Hej, sorrki ze pytam bo prosty temat ale moze mi ktos wytlumaczyc czemu program nie pojawia talicy?

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;


int licznik;
int licznik2;

char tab[10][10]= {
     {'x','x','x','x','x','x','x','x','x','x'},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {' ',' ',' ',' ',' ',' ',' ',' ',' ',' '},
           {'x','x','x','x','x','x','x','x','x','x'}
     };






int wyswietlanie_tablicy (char** tab,int licznik,int licznik2)
{
    for (licznik =0 ;licznik <=9; licznik++)
    {
         for (licznik2  =0; licznik2 <=9; licznik2++)
    {
        cout << tab[licznik][licznik2];
    }
    cout << "\n";
    }
}


int main()
{
    wyswietlanie_tablicy;
    cout << "skonczylem";
    return 0;
}

// z gory dzieki za pomoc

0

@Dawid WILK:

Jakbyś czytał wyniki kompilatora, to przynajmniej rozpaczliwie wyje od ostrzeżeń, jak nie błędów.
jedno z tych ostzreżeń wyraźnie ci mówi, jaki jest problem z wyswietlanie_tablicy;

0

@ZrobieDobrze bardzo dziekuje ci za odp ale to juz wiem to tez taki dalem tytul ale prosze o dokladne wywtlumaczenie problemu

4

char** tab nie zadziała bo to tablica wskaźników do tablic znaków. Definicja zmiennej tab[10][10] zadeklaruje ciągły obszar pamięci ze stoma znakami. Prawidłowe prototypy to char tab[10][10] albo char (*tab)[10]. To mogłoby wyglądać np. tak:

#include <cstdio>
#include <iostream>
#include <string>

using namespace std;

constexpr int width  = 10;
constexpr int height = 6;

char tab[height][width] = {{'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'},
                           {'*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'},
                           {'*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'},
                           {'*', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '*'},
                           {'*', ' ', ' ', '?', ' ', ' ', ' ', ' ', ' ', '*'},
                           {'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x', 'x'}};

void wyswietlanie_tablicy1(char (*tablica)[width], int h) {
    for (int y = 0; y < h; y++) {
        for (int x = 0; x < width; x++) {
            cout << tablica[y][x];
        }
        cout << "\n";
    }
}

int main() {
    wyswietlanie_tablicy1(tab, height);
    cout << "skonczylem\n";
    return 0;
}

przy przekazywaniu do funkcji tablicy najwyższy wymiar degraduje się do wskaźnika, więc gdy masz taką deklarację:

void wyswietl(char tab[5][10]);

to ta funkcja przyjmie wiele różnych tablic:

char tab[1][10];
char tab[2][10];
char tab[3][10];
...
char tab[n][10];

Ta 5ka to tylko takie pobożne życzenie co do wymiaru tablicy, dlatego bezpieczniej jest wielkość najwyższego wymiaru podawać jako dodatkowy parametr, albo stosować array lub vector

0

@jvoytech dzieki wielkie za odp bo wlasnie z tym mialem zagwostke,doceniam fest, niech ci sie darzy

0

@jvoytech:
Obiawiam się, że taką drogą na skróty niczego istotnego kol @Dawid WILK: nie nauczyłeś

1

Piszesz niby w C++, po ch..ińskiego sobie życie utrudniasz?

#include <iostream>
#include <vector>
using namespace std;

void show(const vector<vector<char>> &tb)
{
	for(const auto &row:tb)
	{
		for(const auto &col:row) cout<<col;
		cout<<endl;
	}
}

void frame(vector<vector<char>> &tb)
{
	if(!tb.size()) return;
	for(auto &row:tb) row.front()=row.back()='|';
	for(auto &ch:tb.front()) ch='-';
	for(auto &ch:tb.back()) ch='-';
	tb.front().front()='+';
	tb.back().back()='+';
	tb.front().back()='+';
	tb.back().front()='+';
}

int main()
{
    const size_t size=10;
    vector<vector<char>> tb(size,vector<char>(size,' '));
    frame(tb);
    show(tb);
	return 0;
}
3
void wyswietlanie_tablicy(auto& tab) {
	for (auto& row : tab) {
		for (auto val : row) {
			cout << val;
		}
		cout << "\n";
	}
}

wyswietlanie_tablicy(tab);

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