• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z błędem kodu.

Object Storage Arubacloud
0 głosów
110 wizyt
pytanie zadane 21 listopada 2020 w C i C++ przez Leśny Naleśnik Nowicjusz (120 p.)

Witam,

jestem nowym adeptem sztuki programowania i można powiedzieć, że dopiero bawię się programowaniem, poznając możliwości i metody jakie posiadam. Zmagam się z zadaniem polegającym stworzeniu programu, który po wprowadzeniu do niego wysokości h stworzy taką tabelę w wierszu poleceń o danej ilości wierszy h, najwyżej równej 10.

Przykład dla h=3:

a b c d e
XXX X XXX        X XXXXX
XXX XX XX     XX    XXX
XXX XXX X   XXX      X

Postanowiłem zrobić to za pomocą tworzenia odpowiednich tablic i wypisywania ich wierszami z odpowiednimi odstępami i udało mi się. Jedyny problem, którego przyczyny nie potrafię zidentyfikować związany jest z kolumną "b". Otóż przy niektórych wartościach wysokości h program jakby pomija przy wypisywaniu niektóre wiersze. Przy tym pusty wiersz czasem jest w odpowiadającym miejscu, a czasem nie.

Dla h=4 pomija pierwszy wiersz w kolumnie b

Dla h=6 pierwszy i drugi wiersz w kolumnie b

Dla h= 7 drugi wiersz w kolumnie b

Dla h=8 pierwszy wiersz w kolumnie b

Dla h=9 drugi wiersz w kolumnie b

Dla h=10 pierwszy i drugi wiersz w kolumnie b

Nie widzę tu żadnej zależności, tym bardziej, że po "wyizolowaniu" części kodu odpowiedzialnych tylko za kolumnę b, kolumna wypisuje się prawidłowo dla każdego b. Przypuszczam więc, że jest to problem związany z częścią wypisującą program? Będę bardzo wdzięczny za każdą pomoc :)

Oto mój kod:

#include <cstdio>

int h1, h, i, j, k, o, p;
char x;
char sp;


int main()
{
    char x = 88; //88 w ACII to "X"
    char sp = 0; 
    printf("wprowadz wysokosc: \t");
    scanf("%d", &h1);
    h = h1 - 1;


    char tab_a[h][3];     //deklaracje tablic
    char tab_b[h][h1];
    char tab_c[h][h1];
    char tab_d[h][h1];
    char tab_e[h][h1];
//========================================================================////modul tworzenia tablic
    for(i = 0; i <=h; i++)       //macierz a
    {
        for(j = 0; j <=3; j++)
        {
            tab_a[i][j] = (x);
        }
    }
//========================================================================//
    for(i = 0; i <=h; i++)      //macierz b
    {
        for(j = 0; j <= i; j++)
        {
            tab_b[i][j] = (x);
        }
        for(j = i+1; j <= h; j++)
        {
            tab_b[i][j] = (sp);
        }
    }
//========================================================================//
    for(i = 0; i <=h1; i++)      //macierz c
    {
        for(j = 0; j < (h1-i); j++)
        {
            tab_c[i][j] = (x);
        }
        for(j = (h1-i); j < h1; j++)
        {
            tab_c[i][j] = (sp);
        }
    }
//========================================================================//
    for(i = 0; i <=h; i++)      //macierz d
    {
        for(j = 0; j < (h-i); j++)
        {
            tab_d[i][j] = (sp);
        }
        for(j = (h-i); j < h1; j++)
        {
            tab_d[i][j] = (x);
        }
    }
   //========================================================================//
    for(i = 0; i <=h; i++)      //macierz e
    {
        for(j = 0; j <= i; j++)
        {
            tab_e[i][j] = (sp);
        }
        for(j = i+1; j <= h; j++)
        {
            tab_e[i][j] = (x);
        }
    }
//========================================================================////modul wyjscia
    printf("\t a \t\t\t b \t\t\t c \t\t\t d \t\t\t e \n\n");
    for(i = 0; i <=h; i++)
    {
        printf("\n \t");
//========================================================================// a
        for(j = 0; j <=3; j++)
        {
            printf("%c", tab_a[i][j]);
        }
//========================================================================// b
        printf("\t\t\t");
        for(j = 0; j <=h; j++)
        {
            printf("%c", tab_b[i][j]);
        }
//========================================================================//c
        printf("\t\t\t");
        for(j = 0; j <=h; j++)
        {
            printf("%c", tab_c[i][j]);
        }
//========================================================================//d
        printf("\t\t\t");
        for(j = 0; j <=h; j++)
        {
            printf("%c", tab_d[i][j]);
        }
 //========================================================================//e
        printf("\t\t\t");
        for(j = 0; j <=h; j++)
        {
            printf("%c", tab_e[i][j]);
        }
        for(j = 0; j <=h; j++)
        {
            printf("%c", tab_c[i][j]);
        }
    }
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 21 listopada 2020 przez overcq Pasjonat (21,650 p.)

Nie sprawdzałem wszystkiego, ale wychodzisz poza zakres tablicy.

Po zmianie na:

    char tab_a[h1][3];     //deklaracje tablic
    char tab_b[h1][h1];
    char tab_c[h1][h1];
    char tab_d[h1][h1];
    char tab_e[h1][h1];

oraz linii 43. na

    for(i = 0; i <=h; i++)      //macierz c

działa.

komentarz 21 listopada 2020 przez Leśny Naleśnik Nowicjusz (120 p.)
Faktycznie to był problem. Wielkie dzięki!

Podobne pytania

–3 głosów
1 odpowiedź 299 wizyt
pytanie zadane 6 października 2020 w C i C++ przez Jakub495 Nowicjusz (120 p.)
0 głosów
3 odpowiedzi 458 wizyt
pytanie zadane 11 listopada 2016 w PHP przez Q_Nick Mądrala (5,010 p.)
0 głosów
3 odpowiedzi 319 wizyt
pytanie zadane 30 września 2021 w Offtop przez xPUSTYx Użytkownik (740 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...