Loczek [ El Loco Boracho ]
Projekt w C++
Witam,
zabieram sie właśnie za projekt na programowanie, z tym, że pewnie bede miał sporo pytań, a czasu bardzo nie wiele, dlatego pozwoliłem sobie założyć ten wątek. Z programowania jestem kiepski, tak więc prosze o wyrozumiałość :P
Treść zadania:
“Przedstawię teraz program, który pisałem na nowo w wielu językach, jako mój problem standardowy, od lat sześćdziesiątych. Nazwałem go gra 'Odgadnij moje zwierze'
(...) Użytkownik proszony jest o wyobrażenie sobie jakiegoś zwierzęcia. Program zaczyna od pytania: "Czy to jest beagle?" Jeśli uŜytkownik miał na myśli psa tej rasy, odpowiada: 'Tak'. Program gratuluje sam sobie swojej przenikliwości, dziękuje uŜytkownikowi za udział w grze i na tym koniec. Jeśli jednak użytkownik nie myślał o beagle'u, pisze: 'Nie'. Zasmucony program odpowiada: 'Przykro mi, nie zgadłem, o jakim zwierzęciu myślałeś. Powiedz mi, jakie to zwierze i podaj mi pytanie, na które odpowiedz brzmi: <<tak>>, dla Twojego zwierzęcia oraz: <<nie>>, dla beagle'a.'
Na przykład, jeśli użytkownik myślał o pstrągu, powinien wpisać: 'pstrąg' oraz pytanie: 'Czy jest to ryba?'. Odpowiedz będzie twierdząca dla pstrąga i przecząca dla beagle'a. Program dziękuje uŜytkownikowi i kończy się.
Jednakże, kiedy użytkownik gra po raz drugi, dzieje się cos innego. Program prosi o pomyślenie o zwierzęciu a następnie zadaje pytanie: "Czy jest to ryba?" Jeśli użytkownik odpowie twierdząco, program pyta: "Czy jest to pstrąg?" Jeśli jednak uŜytkownik odpowie przecząco na pierwsze pytanie, program pyta: "Czy to jest beagle?" Jeśli uŜytkownik pomyślał bądź o pstrągu, bądź o beagle'u, program wygrywa. W przeciwnym razie, przyznaje się do przegranej i ponownie prosi użytkownika o podanie zwierzecia oraz pytania dotyczacego tego zwierzecia, na które w przypadku beagle'a i pstraga odpowiedz będzie przecząca.“ [J.Marasco, Software Development Egde]
Należy napisach program do przedstawionej wyżej gry.
Generalnie planuje to zrobić na podstawie drzewa binarnego:
pytanie - tak, przechodzi do lewego potomka, nie do prawego i tak aż do zgadnięcia. Do tego obsługa plików, tak żeby program zapamiętywał odpowiedzi.
Zabieram sie do roboty. Macie jakieś rady?
b4rt3kk [ Pretorianin ]
hmm ja bym to zrobił na takiej zasadzie że:
program odczytuje z pliku pierwsza linijkę np: pstrag;czy to jest ryba?;
jesli wpisow jest wiecej, to zczytuje linijka po linijce, oddzielając (separator ;) odpowiedz od pytania.
Jesli na wszystkie pytania odpowiedz jest przecząca, to wtedy program pyta o nowy wpis do pliku :)
Loczek [ El Loco Boracho ]
b4rt3kk: linijka po linijce było by banalnie prosto... Ale wtedy, pytania nie były by ze sobą powiązane. Moim zdaniem musi to być oparte na grafach, żeby pytanie czy to jest ryba i odpowiedź twierdząca, wykluczały dalsze pytania o borsuki i inne kojoty ;)
slowik [ NightInGale ]
albo graf albo drzewo binarne ;-)
przy czym ja bym sugerowal to zrobic na listach list chociazby dlatego ze takich drzewek rosnacych obok siebie bedzie duzo no i kluczowal kolejne zapytania wg pojedycznego wyrazu po ''czy to' jest''
Loczek [ El Loco Boracho ]
Słowik: Drzewo binarne to też graf o ile sie nie myle :)
Ale zostane chyba przy drzewie binarnym bo mam już jakąś koncepcje :P
slowik [ NightInGale ]
tak drzewo to szczegolny przypadek grafu jednak brzewo ma wiecej wlasciwosci niegrafowych ;-)
no i na binarnym tego nie zrobisz dlaczego? ryb istnieje conajmniej kilka gatunkow ;-)
Loczek [ El Loco Boracho ]
Słowik: no tak ale to chyba tak ma działać... np
"czy to jest ryba?"
"tak" -> idzie w lewo
"czy to jest łosoś"
"nie" -> idzie w prawo
i tutaj kolejne pytanie ale już dotyczące ryb np
"czy to jest ryba słodkowodna"
"tak"
"czy to jest karp"
itd.
Przynajmniej ja tak rozumiem zadanie.
yasiu [ Senator ]
tylko zle ulozyles pytania w tym przykladzie, najlepiej bedzie to dzialalo, jesli pytania beda od najmniej szczegolowych do najbardziej
czyli jestli to ryba, to czy slodkowodna, jesli to slodkowodna, to czy zyje w jeziorach, jesli nie, to po kolei pytamy o te, co zyja w rzekach, strumieniach i kaluzach =]
Moby04 [ Legionista ]
A ja bym oparl calosc na bazie danych i mial po problemie:
robimy tabelke w postaci
| id | pytanie | zaleznosc tak | zaleznosc nie |
Teraz odczytujesz z tabeli pierwsze pytanie i czekasz na odpowiedz. Jak odpowiedz jest twierdzaca to szukasz pierwszego pojawienia sie wpisu z zaleznoscia od tego pytania. Calosc zmiescisz w 100 liniach kodu dzieki temu :D
Loczek [ El Loco Boracho ]
yasiu: ale taką forme narzuca treść zadania -> pytanie ogólne, jeśli odp tak -> pytanie o konkretne zwierze, jeśli odp. nie -> kolejne pytanie ogólne itd.
Generalnie już mniej więcej mam pogląd jak to ma wyglądać. Zaimplementowałem drzewo binarne, tylko teraz musze pogłówkować jak to połączyć z obsługą plików... :)
yasiu [ Senator ]
edit: bzdure logiczna napisalem :)