Wyświetlenie tablicy ze znaków

0

Musze napisać prosty program, który będzie wyświetlał liczby od 0 do 9 zaprogramowane ze znaków z tablic. Tutaj jest kod mojego programu:

#include <iostream>

using namespace std;

char tab1[ 10 ][ 6 ];

int wyswietl_0()
{
    
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 6; j++ )
        {
            tab1[ i ][ j ] = NULL;
        }
    }
    
    tab1[ 0 ][ 2 ] = { 2 };
    tab1[ 1 ][ 1 ] = { 2 };
    tab1[ 2 ][ 1 ] = { 2 };
    tab1[ 3 ][ 1 ] = { 2 };
    tab1[ 4 ][ 1 ] = { 2 };
    tab1[ 5 ][ 1 ] = { 2 };
    tab1[ 6 ][ 1 ] = { 2 };
    tab1[ 7 ][ 1 ] = { 2 };
    tab1[ 8 ][ 1 ] = { 2 };
    tab1[ 9 ][ 2 ] = { 2 };
    tab1[ 9 ][ 3 ] = { 2 };
    tab1[ 9 ][ 4 ] = { 2 };
    tab1[ 8 ][ 5 ] = { 2 };
    tab1[ 7 ][ 5 ] = { 2 };
    tab1[ 6 ][ 5 ] = { 2 };
    tab1[ 5 ][ 5 ] = { 2 };
    tab1[ 4 ][ 5 ] = { 2 };
    tab1[ 3 ][ 5 ] = { 2 };
    tab1[ 2 ][ 5 ] = { 2 };
    tab1[ 1 ][ 5 ] = { 2 };
    tab1[ 0 ][ 4 ] = { 2 };
    tab1[ 0 ][ 3 ] = { 2 };
    
    for( int i = 0; i < 10; i++ )
    { cout << endl;
        for( int j = 0; j < 6; j++ )
        {
            cout << tab1[ i ][ j ] << " ";
        }
    }
    cout << endl;
}

int wyswietl_1()
{
    
    for( int i = 0; i < 10; i++ )
    {
        for( int j = 0; j < 6; j++ )
        {
            tab1[ i ][ j ] = NULL;
        }
    }
    
    tab1[ 3 ][ 0 ] = { 2 };
    tab1[ 2 ][ 1 ] = { 2 };
    tab1[ 1 ][ 2 ] = { 2 };
    tab1[ 0 ][ 3 ] = { 2 };
    tab1[ 1 ][ 3 ] = { 2 };
    tab1[ 2 ][ 3 ] = { 2 };
    tab1[ 3 ][ 3 ] = { 2 };
    tab1[ 4 ][ 3 ] = { 2 };
    tab1[ 5 ][ 3 ] = { 2 };
    tab1[ 6 ][ 3 ] = { 2 };
    tab1[ 7 ][ 3 ] = { 2 };
    tab1[ 8 ][ 3 ] = { 2 };
    tab1[ 9 ][ 3 ] = { 2 };
    
    for( int i = 0; i < 10; i++ )
    { cout << endl;
        for( int j = 0; j < 6; j++ )
        {
            cout << tab1[ i ][ j ] << " ";
        }
    }
    cout << endl;
}

int main()
{
    wyswietl_0();
    wyswietl_1();
    
    return 0;
}

Mam zaprogramowane dwie liczby 0 i 1. Problem jest w tym że liczby wyświetlają się pionie jedna pod drugą, a chciał bym żeby wyświetlały się w poziomie, jedna koło drugiej. Jestem bardzo początkującym programistą i kompletnie nie mam koncepcji jak wykonać takie wyświetlanie w poziomie. Czy to by trzeba było zrobić jakąś tablice np. [10] na [100] i w nią wpisać te mniejsze tablice z cyframi?. Jak takie coś zrobić, ma ktoś jakiś pomysł? Jak ktoś mnie nie zrozumiał o co mi chodzi, to poniższy screen powinien wyjaśnić o co mi chodzi:

user image

Pozdrawiam

2
int main()
{
    wyswietl_0();
    wyswietl_1();
 
    return 0;
}

W taki (sekwencyjny) sposób tego niestety nie zrobisz (tzn. dałoby się, ale to by było dużo bardziej skomplikowane), bo wypisuje się na ekran liniami, i nie można 'wrócić' do poprzedniej po wypisaniu jednej.

Możesz za to zrobić funkcje przyjmującą wszystkie cyfry do wyświetlenia, i robiącą to "na raz". Jakiś prosty przykład (nie wiem czy typów nie przekomplikowałem, aczkolwiek działa):

#include <iostream>

const char *zero[5] = {
    " xxx ",
    "x   x",
    "x   x",
    "x   x",
    " xxx "
};

const char *one[5] = {
    "   x ",
    "  xx ",
    " x x ",
    "   x ",
    "   x "
};

typedef const char *num_array[5]; // typedef dla uproszczenia

num_array *numbers[2] = { &zero, &one };

void display(int firstId, int secondId) { // firstId - pierwsza cyfra do wypisania, secondId - druga
    const char **first = *numbers[firstId];
    const char **second = *numbers[secondId];

    for (int row = 0; row < 5; row++) { // po kolei wypisanie wszystkich wierszy
        std::cout << first[row] << " " << second[row] << "\n";
    }
}

int main() {
    display(1, 0);
}
0

Dzięki wielkie za odpowiedz i nakierowanie mnie jak to powinno wyglądać, bardzo mi pomogłeś ;)
Mam tylko jedno pytanie co tam robią wszędzie te *? Czym się różni

const char *one[5]

od tego const char one[5]

0

W to drugie da się wpisać tylko 5 znaków jeden z których to znak końca.

0

No dobrze a w ten pierwszy to ile się da wpisać? Więcej niż 5? Jeżeli tak to dla czego w nawiasie jest liczba 5 skoro wyświetla wiecej niż 5 znaków?

1

Pierwsze to "tablica pięciu napisów" (albo "tablica pięciu wskaźników na znak"), drugie to "tablica pięciu znaków".

Alternatywnie można zapisać (jeśli bardziej tak widać):

typedef const char *napis;
napis one[5] = {
    // ...
}
0

Dzięki za odpowiedzi, tylko jeszcze nie mogę ogarnąć jak działa ta funkcja display, pętle rozumiem ale to co się dzieje nad pętlą to jakaś czarna magia jak dla mnie :D

0

A tak:

#include <iostream>
using namespace std;
 
void display(unsigned val)
  {
   static const char *dig[][10]=
     {
         { " xxx  ", "   x  " },
         { "x   x ", "  xx  " },
         { "x   x ", " x x  " },
         { "x   x ", "   x  " },
         { " xxx  ", "   x  " }
     };
   for(int y=0;y<sizeof(dig)/sizeof(*dig);++y,cout<<endl) for(unsigned i=val;i;i/=10) cout<<dig[y][i%10];
  }
 
int main()
  {
   display(101);
   return 0;
  }

http://ideone.com/byhTkf

0

Też nie rozumiem jak to działa, tak samo jak u kolegi wyżej. Nie rozumiem na jakiej zasadzie program wie co wypisać po podaniu mu argumentów display(101), nie mam pojęcia skąd on wie że ma wyświetlić 1 0 i 1. W programie podanym przez @msm też tego właśnie nie rozumiem ;)

@Edit
Dobra dziękuje już prawie rozumiem :D nie kumam jeszcze tylko tego

cout<<dig[y][i%10]

co robi ten % o co z tym chodzi?

0

Witam to znowu ja ;)

Mam jeszcze jeden problem odnośnie tego "projektu". Muszę te tablice z liczbami wprowadzić w ruch np. żeby jeździły od lewej strony ekranu do prawej. O ile problemu nie mam ze zrobieniem takiej animacji na pojedynczej linijce tekstu(gotoxy), to na tablicy już nie potrafię tego zrealizować. Ktoś mi doradził abym to zrobił za pomocą "timera", ale wszystkie przykłady, które znalazłem tyczyły się już programowania okienkowego a nie w konsoli. Możecie mi pomóc zrobić taka animacje?

Pozdrawiam :)

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