Tablica znaków - wypełnianie losowe ?

0

Cześć,

nie wiem w jaki sposób stworzyć planszę, która miałaby wyświetlać puste pola albo 'o'.

Chodzi konkretnie o przypadkek planszy o rozmiarze 60x20 pól, gdzie losowo będzie się przy każdym uruchomieniu wypełniać plansza pustymi polami i literą 'o'. Jak to zrobić, by takie wypełnianie odbywało się losowo?

Chodzi mi o najprostsze możliwe rozwiązanie, bez żadnych zmiennych dynamicznych czy czegokolwiek takiego. :)

0

Losujesz liczbę w przedziale od 0 do 1. Jak wypadnie 1 - wypelniasz 'o', jak wypadnie 0 - nie wypelniasz. I tak dla każdego pola.

0

Mam tyle póki co:

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

const int szerokosc = 60;
const int wysokosc = 20;

void generujpole(char pole[szerokosc][wysokosc])
{
for(int i=0; i<60; i++)
    {
    for(int j=0; j<20; j++)
        {
        pole[i][j] = (0+rand()%1);
        }
    }
}

void wypiszpole(char pole[szerokosc][wysokosc])
{
for(int i=0; i<60; i++)
    {
    for(int j=0; j<20; j++)
        {
        cout << pole[i][j];
        }
    }
}

int main()
{
srand(time(NULL));

char plansza[60][20];
generujpole(plansza[60][20]);
wypiszpole(plansza[60][20]);

    return 0;
}

Tyle, że nie wiem jak zapisać to, by działało podstawienie znaku za spacja lub 'o' za cyfrę 0 lub 1. I wywala błąd:

error: invalid conversion from ‘char’ to ‘char (*)[20]’ [-fpermissive]|   //przy funkcji generujpole w main'ie

Jak to ogarnąć?

0

plansza[60][20] to element Twojej tablicy, więc char (jeden znak). Ty nie chcesz swoim funkcjom przekazywać jednego elementu, Ty chcesz im przekazywać tablice.

Są dwie metody, by to osiągnąć:

  • normalna — użyj std::array
  • tradycyjna — przekaż wskaźnik na pierwszy element tablicy (a tak się ładnie składa, że jest to automatycznie sama nazwa tablicy, więc u Ciebie plansza) i jej rozmiar
0

@Althorion: dziękuję za wyjaśnienie.
Niestety nie korzystam jeszcze ze wskaźników i nie wiem w którym miejscu powinien on być - w argumencie funkcji, czy main?

0

W obu — funkcja przyjmuje wskaźnik, main jej go dostarcza.

0

A jak wygląda wskaźnik w tym przypadku w tablicy dwuwymiarowej, jak to zapisać?

0

Tak samo. Nazwa tablicy w C(++) to jednocześnie wskaźnik na jej pierwszy element, niezależnie co to za tablica, więc w szczególności czy to jest tablica tablic (czyli tablica dwuwymiarowa).

Potrzebujesz tylko znać jej rozmiar, żeby móc po niej nawigować.

0

Dobrze, to w main jest teraz tak:

int main()
{
srand(time(NULL));
char plansza[60][20];
char *wsk_plansza = plansza;

generujpole(wsk_plansza);
wypiszpole(wsk_plansza);

    return 0;
}

Ale nie wiem ja to zapisać w funkcji,

void wypiszpole(char pole[szerokosc][wysokosc])   // wstawić gwiazdkę przed pole?  void wypiszpole(char *pole[szerokosc][wysokosc]) 
{
for(int i=0; i<60; i++)
    {
    for(int j=0; j<20; j++)
        {
        cout << pole[i][j];
        }
    }
}

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