JASIO


Grupa ID301

JASIO

Wykonali:

Rafał Dąbrowski

Michał Donigiewicz

Tomasz Chmiel

Problemem związanym z tym projektem jest zliczenie drogi jaką przeszedł `Jasio' podróżując po macierzy o dowolnym rozmiarze (niekoniecznie kwadratowej). Istnieje jednak zasada poruszania się. Można mianowicie stąpać tylko po czarnych polach idąc w kierunku odwrotnym do kierunku wskazówek zegara. Trzeba także przejść przez wszystkie te pola aż do końca i wrócić na pozycję wyjściową. Należy także pamiętać, że pola po których chodzimy mogą się powtarzać (kiedy trafimy na ślepą `uliczkę') i nie można tychże powtórzeń doliczyć do sumy przebytych pól.

Zupełnie losową trasę przedstawia poniższy rysunek:

Załóżmy, że następujące wartości odpowiadają kierunkom:

1 -> prawo

-1 -> lewo

2 -> góra

-2 -> dół

Możliwe jest także reprezentowanie kierunków literami, jednakże wtedy skomplikuje się warunek w pętli while. Pozwoliliśmy więc sobie na takie właśnie przedstawienie kierunków.

Jest bardziej `dydaktyczne', łatwiej wyjaśnić zasadę działania oraz wyniki uzyskane w programie są czytelniejsze.

Skoro kierunkami są liczby, to aż się prosi aby skorzystać tu z tablicy liczb całkowitych. Założeniem problemu było, że dostajemy `ścieżkę' po której poruszał się nasz Jasio.

Do zliczania ilości zamalowanych pół nie potrzebna jest nam droga powrotna więc ją pomijamy.

Dostajemy więc tablicę (dla rozważanego rysunku):

-2

-2

1

1

-2

-2

-1

-1

1

1

-2

-2

-2

-1

1

1

Rozwiązaniem tego problemu będzie szukanie sąsiadujących elementów, które w sumie dają wartość zero. Jeśli taką parę znajdziemy - oznacza to, że jedno pole się powtórzyło.

-2

-2

1

1

-2

-2

-1

-1

1

1

-2

-2

-2

-1

1

1

Mamy jedną parę, jednak nie można na tym poprzestać. Mając jedną parę wiemy, że przeszliśmy jedno pole i za chwilę wróciliśmy. A jeśli droga powrotu jest dłuższa niż 1? Wtedy elementy pary będą rozsunięte! Należy więc `rozchodzić' się w obie strony tablicy i porównywać sumy elementów. Jeśli suma jest równa zero - następna para....

-2

-2

1

1

-2

-2

-1

-1

1

1

-2

-2

-2

-1

1

1

...jeśli suma różna od zera - oznacza to, że pojawia się pole jeszcze nie odwiedzone przez naszego bohatera i możemy zaniechać szukania kolejnych przyległych par - dalej jeszcze Jasia nie było, więc nie może się tamtędy wracać!

-2

-2

1

1

-2

-2

-1

-1

1

1

-2

-2

-2

-1

1

1

Przeszukujemy tak tablicę aż do jej końca. Kiedy zostanie on osiągnięty wystarczy zliczone wcześniej pary odjąć od sumy wszystkich pól (rozmiar tablicy) i otrzymujemy liczę pól przez które musiał przejść Jasio.

Oto kod programu obliczającego długość drogi Jasia

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

const int size=10;

int tab[size];

int zlicz();

void wczytaj();

void wypisz();

void main()

{

wczytaj();

wypisz();

};

int zlicz()

{

int p=1, l=0, pary=0, pom=0;

for(p=1;p<=size;p++)

{

pom=p;

while((tab[l]+tab[p])==0 && l>=0 && p<size)

{

pary++;

l--;

p++;

}

l=p;

}

int x=size-pary;

return x;

};

void wczytaj()

{

int kierunek=1;

cout << "Podaj kierunki: '1' -przod '-1' -tyl '2' -gora '-2' -dol " << endl;

for(int i=0;i<size;i++)

{

cin >> kierunek;

tab[i]=kierunek;

}

};

void wypisz()

{

cout << "Jasio naliczyl " << zlicz() << " zamalowanych kwadratow" << endl;

getch();

};

4



Wyszukiwarka

Podobne podstrony:
Wchodzi Jasio na lekcje
Jasio, Śmieszne Kwity
GŁUPI JASIO, J. Kaczmarski - teksty i akordy
Jeździł sobie Jasio
ziemne jasio
JASIO U DOKTORA
Jasio
Andersen Hans Christian Głupi Jasio
Jasio miał 10 lat i był bardzo ciekawski
Hans Christian Andersen Glupi Jasio
jasio
Jasio pyta swojego tatę
Mądry Jasio

więcej podobnych podstron