Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Dlaczego ten kod nie działa poprawnie?


Rekomendowane odpowiedzi

Opublikowano
#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;

    int q[n][n];

    int z = n;
    for(int i = 0; i < z; ++i)
    {
        int x;
        cin >> x;

        if(x == 0)
        {
            --i;
            --z;
            continue;
        }

        for(int j = n; j > 0 && x > 0; --x)
        {
            q[i][--j] = 1;
        }
    }

    for(int i = 0; i < n; ++i)
    {
        for(int j = 0; j < n; ++j)
        {
            cout << (q[j][i] == 1 ? "X" : " ");
        }

        cout << endl;
    }

    return 0;
}

Piramidka jest niepoprawna, tutaj jest po lewej jak powinna wygladac a jak wyglada:

 

http://prntscr.com/91woxb

Hello there.

Opublikowano

@@.Bumek662.

Zadeklarowałeś tablicę, ale jej nie zainicjowałeś, więc jej elementy będą posiadały losowe wartości. Wartości tablicy q uzyskane za pomocą debuggera GDB:

> print (int[5][5]) **q
$1 = {{1, 5767168, 1342177377, 1966616996, 1}, {4200940, 4633448, 2686528, 1, 1}, {1997698208, 1156064823, 1, 1, 1}, {5, 1, 2686604, 1, 1}, {4199040, 112, 0, 4199543, 1}}

Widać teraz, dlaczego wyjście programu jest takie, a nie inne. W innych kompilatorach wartości elementów tablicy mogą się różnić - właśnie dlatego kod z linku podanego przez użytkownika @M4niak działa poprawnie.

 

Rozwiązaniem twojego problemu będzie wypełnienie tablicy zerami zaraz po jej deklaracji:

int q[n][n];

for (int i = 0; i < n; ++i)
{
    for (int j = 0; j < n; ++j)
    {
        q[i][j] = 0;
    }
}
Opublikowano

 

@@.Bumek662.

Zadeklarowałeś tablicę, ale jej nie zainicjowałeś, więc jej elementy będą posiadały losowe wartości. Wartości tablicy q uzyskane za pomocą debuggera GDB:

> print (int[5][5]) **q
$1 = {{1, 5767168, 1342177377, 1966616996, 1}, {4200940, 4633448, 2686528, 1, 1}, {1997698208, 1156064823, 1, 1, 1}, {5, 1, 2686604, 1, 1}, {4199040, 112, 0, 4199543, 1}}

Widać teraz, dlaczego wyjście programu jest takie, a nie inne. W innych kompilatorach wartości elementów tablicy mogą się różnić - właśnie dlatego kod z linku podanego przez użytkownika @M4niak działa poprawnie.

 

Rozwiązaniem twojego problemu będzie wypełnienie tablicy zerami zaraz po jej deklaracji:

int q[n][n];

for (int i = 0; i < n; ++i)
{
    for (int j = 0; j < n; ++j)
    {
        q[i][j] = 0;
    }
}

Dziekuje bardzo <3

 

http://prntscr.com/93k585a wiesz moze jak pozbyc sie tych spacji na poczatku niektorych przykladow? przez to nie dziala on nadal poprawnie bo wskazuje bledna odpowiedz ;/

Hello there.

Opublikowano

a wiesz moze jak pozbyc sie tych spacji na poczatku niektorych przykladow?

Jednym z rozwiązań jest stworzenie bufora, do którego będą dodawane znaki, sprawdzanie, czy zawiera on przynajmniej jeden X i jeśli tak - wyświetlenie całej linii.

 

Gotowy kod poniżej.

 

 

for(int i = 0; i < n; ++i)
{
  string s = "";
  for(int j = 0; j < n; ++j)
  {
    s += (q[j][i] == 1 ? "X" : " ");
  }

  if (s.find('X') != string::npos)
    cout << s << endl;
} 

 

 

Opublikowano

Jednym z rozwiązań jest stworzenie bufora, do którego będą dodawane znaki, sprawdzanie, czy zawiera on przynajmniej jeden X i jeśli tak - wyświetlenie całej linii.

 

Gotowy kod poniżej.

 

 

for(int i = 0; i < n; ++i)
{
  string s = "";
  for(int j = 0; j < n; ++j)
  {
    s += (q[j][i] == 1 ? "X" : " ");
  }

  if (s.find('X') != string::npos)
    cout << s << endl;
} 

 

 

Dziekuje bardzo.

 

Jednak na platformie wyskakuje mi ze niektore to zle odpowiedzi..

http://prntscr.com/93vh3u

 

Jakies pomysly czemu, i czy jest moze jakis inny sposob na to by dzialalo?

 

Tutaj tresc zadania

http://prntscr.com/93vhda

Hello there.

Opublikowano

W treści zadania, w trzecim przykładzie widać puste kolumny w miejscach, gdzie wejście jest równe 0. Twój kod natomiast, jeśli x == 0, przesuwa resztę kolumn w lewo. Usuń dekrementację zmiennych i oraz z:

if(x == 0)
  continue;
Opublikowano

 

W treści zadania, w trzecim przykładzie widać puste kolumny w miejscach, gdzie wejście jest równe 0. Twój kod natomiast, jeśli x == 0, przesuwa resztę kolumn w lewo. Usuń dekrementację zmiennych i oraz z:

if(x == 0)
  continue;

co to dekrementacja zmiennych? ;v

nie jestem pewien, czy na pewno, ale zdaje mi sei ze te bledy moga wynikac przez to, iz po calej figurze poajwia sie jedna linijka wiecej pod tym

Hello there.

Opublikowano

To jest dekrementacja:

x--;
--x;

W przykładzie 3. w treści zadania pojawiają się puste kolumny, natomiast w twoim kodzie, po wpisaniu tych samych wartości - nie.

Zmień

if(x == 0)
{
  --i;
  --z;
  continue;
}

na

if (x == 0)
  continue;

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...