Jak napisac funkcje ktora sprawdza czy tablica jest zapelniona

0

szukam rozwiazania jak mogłbym napisac funkcje sprawdzajaca czy tablica jest pelna

Moj kod

#include <iostream>

using namespace std;

plansza()
{
    cout << "\n\n\n\t\t|\t\t|\t\t";
    cout << "\n\t1\t|\t2\t|\t3\n";
    cout << "----------------------------------------------\n";
    cout << "\t4\t|\t5\t|\t6\t\n";
    cout << "----------------------------------------------\n";
    cout << "\t7\t|\t8\t|\t9\t\n";
    cout << "\t\t|\t\t|\t\t\n\n\n\n\n\n";
}

int i;

playerO()
{
    cout << "Podaj pole graczu O\n";
    cin >> i;
}

int x;
playerX()
{
    cout << "Podaj pole graczu X\n";
    cin >> x;
}

char tablica[10] = {0,0,0,0,0,0,0,0,0,0};
plansza_wtrakcie()
{
    tablica[i] = 'O';
    tablica[x] = 'X';
    cout << "\n\n\n\t\t|\t\t|\t\t";
    cout << "\n\t" << tablica[1] << "\t|\t" << tablica[2] << "\t|\t" << tablica[3] << "\n";
    cout << "----------------------------------------------\n";
    cout << "\t" << tablica[4] << "\t|\t" << tablica[5] << "\t|\t" << tablica[6] << "\t\n";
    cout << "----------------------------------------------\n";
    cout << "\t" << tablica[7] << "\t|\t" << tablica[8] << "\t|\t" << tablica[9] << "\t\n";
    cout << "\t\t|\t\t|\t\t\n\n\n\n\n\n";
}

int b;
void pelna()
{
    for (int a = 0; a < 9; a++ )
    {
        cout << '\n' << a << '\n' ;
        if ( tablica[a] != 0)
        {

            b = 1;

        }
        return;
    }
}

int main()
{
    char tablica[10] = {0,0,0,0,0,0,0,0,0,0};
    cout << "\t\t\t\t\t\tKOLKO KRZYRZYK\n";
    cout << "------------------------------------------------------------------------------------------------------------------------";
    cout << "Graczu pierwszy zostal ci przypisany O\n";
    cout << "Graczu drugi zostal ci przypisany X\n";
    plansza();
    do
    {
    pelna();
    playerO();
    plansza_wtrakcie();
    playerX();
    plansza_wtrakcie();
    }while(b == 1);
}




2

Zakładam, że przez „zapełniona” masz na myśli „ustawiono wartość każdego z jej elementów”.

Jeśli tak, to musisz mieć jakąś wartość „nieprawidłową” (zero?), i patrzeć, czy w zadanej tablicy się wciąż pojawia (więc nie została wszędzie nadpisana, więc tablica nie jest „zapełniona”). Pomocne może być std::find oraz std::optional.

0

a mozesz bardziej na chlopski rozum

4

Możesz to zrobić na 2 sposoby:

  1. Po stworzeniu zainicjalizować każdą komórkę na coś nie będące X ani O. Jednakże trzeba będzie za każdym razem przelecieć po tablicy i sprawdzać, czy występuje komórka nie zawierająca X czy O.
    albo lepiej:
  2. Mieć licznik maksymalnych możliwych ruchów, w tym wypadku 9, i zmniejszać go po każdym poprawnym dodaniu X lub O. Kiedy licznik się wyzeruje oznaczać to będzie, iż nic więcej do tablicy już nie wpiszesz.
0

@MasterBLB: danke , danke juz wiem jak to zrobic ale tematu nie zmakne zeby w razie problemu sie muc zglosic jeszcze raz danke```

danke

1

Znaczy, czego nie rozumiesz?

Tablica w C(++) to takie ułożone jeden z drugim „pojemniki” na wartości. Tam zawsze coś jest, jakaś wartość, tak samo jak w szufladzie zawsze coś masz, chociażby powietrze. Potrzebujesz zatem mieć jakąś „pustą” wartość — ustalasz sobie, że „jak jest ???, to tam nic nie ma” („jak jest powietrze, to tam nic nie ma”).

To w przypadku ogólnym. W przypadku szczególnym (piszesz konkretną rzecz — grę w kółko i krzyżyk) chcesz pewnie mieć jakiś typ (enum?) na potencjalne wartości pół — kółko, krzyżyk, nic. I wtedy możesz patrzeć, czy się gdzieś „nic” pojawia, czy nie.

Albo tak jak MasterBLB napisał, mieć licznik wolnych pól i go zmniejszać gdy jakieś pole zajmujesz. Pozostaje Ci wtedy pilnować, czy nie robisz wielokrotnych zapisów (więc nie zużywasz kolejnego pola, tylko wykorzystujesz już zużyte).

0

@Althorion: ci tez ```

danke

0

a takie pytanko jak to zpisac sposobem 2)

0
StachuBond9 napisał(a):

@MasterBLB: danke , danke juz wiem jak to zrobic ale tematu nie zmakne zeby w razie problemu sie muc zglosic jeszcze raz danke```

danke

Nie takie są tutaj zasady savoir-vivre - dobrym zwyczajem jest praktykować zasadę "1 problem - 1 wątek", a nie dopisywać nowe, często kompletnie niepowiązane z oryginalnym pytaniem zagadnienia do wcześniej założonego tematu. Ponadto inny dobry zwyczaj już znasz, to jest zaznaczanie ptaszkiem odpowiedzi którą uznałeś za pomocną w rozwiązaniu problemu, przy czym uwaga - tak się zaznaczyć da tylko jedną! Dzięki temu inne osoby widzą, że problem jest rozwiązany, i jak mają podobny łatwo znajdą podpowiedź.

0
 for(int a = 0; a < 9; a++);
    {
    playerO();
    plansza_wtrakcie();
    playerX();
    plansza_wtrakcie();
    }

ja to tak zapislaem

2
  1. gdzieś musisz zdefiniować zmienną int iloscRuchow = 9
  2. w metodach playerO i playerX dać na końcu iloscRuchow--. Taka dygresja tutaj - nie masz zabezpieczenia przed nadpisaniem już zajętego pola, ale to temat na inny wątek.
  3. zmienić główną pętlę while na while(iloscRuchow)
0

do jutra i dowidzenia

ave programistom

2

Najładniej — zrobić swoją klasę z std::array i licznikiem wolnych pól, i przeciążyć odpowiednio operator[].

Ale jak dla początkującego, to można też i po prostu trzymać na boku jakąś zmienną z wolnymi polami i pamiętać, żeby ją zmniejszać za każdym razem, jak robisz zapis do tablicy.

0
StachuBond9 napisał(a):

a mozesz bardziej na chlopski rozum

To się tylko do zaorania nadaje, na zmienne globalne to wszyscy świeci programiści się w grobie przewracają.

Masz problem z samymi bytami, np ważne w tym wątku słowo "tablica" nie jest w pełni okreslona bez szczegółów, a te są globalami.
jeśli już piszesz w C ze strumieniami, to daj chociaz argumenty funkcji

A choć implementacja jest kiepska, pytanie jest ciekawe, warto je wyrazić obiektowo


class Table { 
    char t[9];
public:
  bool isEmpty() { ... }
}

1
StachuBond9 napisał(a):
>  for(int a = 0; a < 9; a++);
>     {
>     playerO();
>     plansza_wtrakcie();
>     playerX();
>     plansza_wtrakcie();
>     }
> ``` 
 
fiknąłeś się dając średnik na końcu linii z for-em. To powoduje, iż tak naprawdę napisałeś
```c++
for (int a = 0; a < 9; a++)
{}

czyli pustą pętlę.

0

witam jeszcze raz
napislaem tak jak @MasterBLB: mi powiedzial i nic niedziala wysylam kod ktory zroblilem


using namespace std;

plansza()
{
    cout << "\n\n\n\t\t|\t\t|\t\t";
    cout << "\n\t1\t|\t2\t|\t3\n";
    cout << "----------------------------------------------\n";
    cout << "\t4\t|\t5\t|\t6\t\n";
    cout << "----------------------------------------------\n";
    cout << "\t7\t|\t8\t|\t9\t\n";
    cout << "\t\t|\t\t|\t\t\n\n\n\n\n\n";
}

int i;
int ilosc_ruch = 9;
playerO()
{
    cout << "Podaj pole graczu O\n";
    cin >> i;
    ilosc_ruch--;
}

int x;
playerX()
{
    cout << "Podaj pole graczu X\n";
    cin >> x;
    ilosc_ruch--;
}

char tablica[10] = {0,0,0,0,0,0,0,0,0,0};
plansza_wtrakcie()
{
    tablica[i] = 'O';
    tablica[x] = 'X';
    cout << "\n\n\n\t\t|\t\t|\t\t";
    cout << "\n\t" << tablica[1] << "\t|\t" << tablica[2] << "\t|\t" << tablica[3] << "\n";
    cout << "----------------------------------------------\n";
    cout << "\t" << tablica[4] << "\t|\t" << tablica[5] << "\t|\t" << tablica[6] << "\t\n";
    cout << "----------------------------------------------\n";
    cout << "\t" << tablica[7] << "\t|\t" << tablica[8] << "\t|\t" << tablica[9] << "\t\n";
    cout << "\t\t|\t\t|\t\t\n\n\n\n\n\n";
}

int main()
{
    char tablica[10] = {0,0,0,0,0,0,0,0,0,0};
    cout << "\t\t\t\t\t\tKOLKO KRZYRZYK\n";
    cout << "------------------------------------------------------------------------------------------------------------------------";
    cout << "Graczu pierwszy zostal ci przypisany O\n";
    cout << "Graczu drugi zostal ci przypisany X\n";
    plansza();
    while(ilosc_ruch)
    {
        playerO();
        plansza_wtrakcie();
        playerX();
        plansza_wtrakcie();
    }
}



0

Przede wszystkim masz błędne definicje funkcji, powinno być void playerX() nie playerX()
Poza tym while'a trzeba zapisać tak while(ilosc_ruch > 0)

0

Dziekuje i szykuje do zakonczenia

0

A jeszcze coś - w oryginale miałeś do-while, i pod taką konstrukcję była podpowiedź; nie przyuważyłem zmiany na while'a. Czyli finalnie zapis winien być:

do
{
//te twoje funkcje wyświetlające planszę i ruch gracza
}
while (ilosc_ruch > 0)
0

koniec

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