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

zadanie maturalne-2016-Gra w życie

Object Storage Arubacloud
0 głosów
2,185 wizyt
pytanie zadane 30 listopada 2016 w C i C++ przez Krystek102 Bywalec (2,440 p.)
Witam,mam duży problem z zadaniem,pierwszy raz nie wiem jak do takiego zadania podejść,jak zapisać kod(nwm jak zapisać funkcje,która będzie mi rozważać,czy komórka jest żywa ,czy nie,podać strukturę kodu ),jak ktoś by mógł wytłumaczyć,naprowadzić byłbym wdzięczny

Gra w życie została wymyślona w 1970 roku przez Johna Conwaya.
Rozpatrujemy wariant, w którym plansza składa się z komórek rozmieszczonych obok siebie
na prostokątnej siatce o wymiarach n × m, w której numeracja wierszy i kolumn zaczyna się
od 1. Każda komórka może być w jednym z dwóch stanów: żywa ”X” lub martwa ”.”.
Przyjmijmy, że komórki z prawej krawędzi siatki sąsiadują z komórkami z lewej krawędzi
siatki, a komórki z górnego wiersza sąsiadują z komórkami dolnego wiersza siatki. Każda
komórka ma 8 sąsiadów, połączonych z nią bokiem lub wierzchołkiem.
Układ komórek podlega ewolucji. W następnym pokoleniu będą żywe tylko te komórki,
które w bieżącym pokoleniu spełniają jeden z dwóch warunków:
• Komórka jest żywa i ma dwóch lub trzech żywych sąsiadów (inaczej umiera
z samotności lub na skutek zbyt dużego zagęszczenia).
• Komórka jest martwa, ale ma dokładnie trzech żywych sąsiadów.
Uwaga:
Planszę stanu komórek w nowym pokoleniu można wyznaczyć, tylko jeżeli ma się kompletne
dane z poprzedniego pokolenia.

W pliku gra.txt zapisany jest układ komórek na siatce o wymiarach: 12 wierszy
i 20 kolumn – rozmieszczenie żywych i martwych komórek w pierwszym pokoleniu. Każdy
wiersz siatki jest zapisany w osobnym wierszu pliku.
Uwaga:
Dla przykładu z pliku – w jedenastym pokoleniu – komórka w pierwszym wierszu i dziesiątej
kolumnie jest martwa i ma trzech żywych sąsiadów.

liczbę żywych sąsiadów dla komórki w drugim wierszu i dziewiętnastej kolumnie
w trzydziestym siódmym pokoleniu.

Zadanie 5.2. (4 pkt)
Podaj liczbę żywych komórek w drugim pokoleniu tego układu.
Zadanie 5.3. (4 pkt)
W którym pokoleniu (sprawdzamy maksymalnie do 100) układ żywych i martwych komórek
się ustali (w bieżącym pokoleniu jest identyczny jak w poprzednim)?
Podaj, które to pokolenie oraz liczbę żywych komórek w tym pokoleniu

1 odpowiedź

0 głosów
odpowiedź 30 listopada 2016 przez lnkoc Stary wyjadacz (13,960 p.)
Robisz sobie tablicę zmiennych typu bool i wypełniasz ją danymi o życiu komórek:

true - żywa

false - martwa

następnie w każdym pokoleniu wywołuje się funkcja sprawdzająca liczbę żywych sąsiadów dla każdej komórki z osobna i ustalająca na ich podstawie jej stan (wędrówka po wszystkich okolicznych elementach tablicy i wynik). Każda komórka powinna mieć 8 sąsiadów dlatego trzeba wziąć pod uwagę warunki brzegowe (nie wszystkie komórki będą miały ich dokładnie po 8) i moim zdaniem sprawdzać tylko te, które mają.
komentarz 3 grudnia 2016 przez Krystek102 Bywalec (2,440 p.)
mógłbyś zapisać jak napisać te wędrówki po wszystkich elementach tablicy?bo mi nie wychodzi to nic...
komentarz 3 grudnia 2016 przez lnkoc Stary wyjadacz (13,960 p.)
for (int i = 1; i < N - 1; i++) {
     for(int j = 1; j < M - 1; j++) {
         int licznik = 0;
         // sądziedzi z wiersza powyżej
         if(tab[i - 1][j - 1] == true) licznik++;
         if(tab[i - 1][j] == true) licznik++;
         if(tab[i - 1][j + 1] == true) licznik++;
         // sąsiedzi z aktualnego wiersza
         if(tab[i][j - 1] == true) licznik++;
         if(tab[i][j + 1] == true) licznik++;
         // sąsiedzi z wiersza poniżej
         if(tab[i + 1][j - 1] == true) licznik++;
         if(tab[i + 1][j] == true) licznik++;
         if(tab[i + 1][j + 1] == true) licznik++;
         // sprawdzenie czy komórka jest żywa czy martwa
         if ((tab[i][j] == true) && ((licznik == 3) || (licznik == 2)) ) tab[i][j] = true;
         else {
             if(licznik == 3) tab[i][j] = true;
             else tab[i][j] = false;
         }
    }
}

 

Podobne pytania

0 głosów
0 odpowiedzi 1,051 wizyt
+1 głos
1 odpowiedź 3,024 wizyt
pytanie zadane 23 sierpnia 2016 w C i C++ przez Blue Obywatel (1,180 p.)
+2 głosów
2 odpowiedzi 2,364 wizyt
pytanie zadane 12 czerwca 2018 w Inne języki przez lucelka Początkujący (260 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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!

...