locochris94 Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 Λοιπον καταρχην ειμαι πρωταρης στον προγραμματισμο στην C και δυσκολευομαι καπως με την ιδεα της αναδρομης . Εχω λοιπον να κανω μια εργασια για την σχολη η οποια ειναι το παιχνιδι της τριλιζας οπου ο χρηστης καλειται να παιξει με τν υπολογιστη. Ο καθηγητης μας ειπε οτι η υλοποιηση πρεπει να γινει με μια αναδρομικη συναρτηση tictactoe(char a[3][3],char player) η οποία δέχεται ένα πίνακα 3 3 που περιγράφει μια τρίλιζα, ένα χαρακτήρα που περιγράφει τον επόμενο παίκτη (’X’ ή ’O’) και επιστρέφει ένα χαρακτήρα που είναι ο παίκτης που κερδίζει, ή ’\0’ αν δεν κερδίζει σίγουρα κάποιος παίκτης. Ο πίνακας a θα πρέπει να περιέχει την προτιμότερη κίνηση του παίκτη, ή κάποια από τις προτιμότερες. Αν η τρίλιζα που δίνεται έχει ήδη νικητή, η συνάρτηση θα τον επιστρέφει και δεν θα αλλάζει την τρίλιζα. Η συνάρτηση θα πρέπει να δοκιμάζει μία-μία τις κινήσεις του παίκτη σε κάθε κενή θέση της τρίλιζας, να υπο- λογίζει αναδρομικά ποιός παίκτης (αν υπάρχει) κερδίζει σε κάθε περίπτωση, και να επιλέγει την κίνηση με το καλύτερο αποτέλεσμα. Δεν ζηταω να μου δωσετε την λυση απλα λιγο να με βοηθησετε με την λογικη της αναδρομης σε αυτην την περιπτωση . Ευχαριστω .
gega Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 Ριξε μια ματια εδω (http://erwnerve.tripod.com/prog/recursion/tictctoe.htm ) πιστευω να σε βοηθησει! Για περισσοτερα δες εδω ( https://www.google.com/search?q=tictactoe+recursive&oq=tictactoe+recursive&sugexp=chrome,mod=14&sourceid=chrome&ie=UTF-8 ) Αν και για πρωτο εξαμηνο πολυ αναδρομη πεφτει TIP: Εχει υποθει πολλες φορες αλλα καλο ειναι να μαθεις το google αρκετα καλα ωστε να μπορεις να ψαχνεις αυτο που θες... Ειδικα στο CSD
locochris94 Δημοσ. 16 Δεκεμβρίου 2012 Μέλος Δημοσ. 16 Δεκεμβρίου 2012 Τις σελιδες που με εδωσες τις εχω δει αλλα εξακολουθω να μην καταλαβαινω ( και για το google εχω ψαξει αρκετα αλλα τζιφος ) . Επισης μας ειπε οτι δεν πρεπει να χρησιμοποιησουμε την min max και απ οτι ειδα η λογικη του δευτερου link ειναι αυτη , βεβαια μπορει και να κανω λαθος γιατι οπως προειπα εχω αρκετες δυσκολιες στην κατανοηση της αναδρομης .
lion2486 Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 η λογική της αναδρομής φαντάζομαι ότι η συνάρτηση θα ελέγχει από μια κατάσταση όλες τις πιθανότητες να κερδίσει κάποιος... αν σε κάθε περίπτωση είναι ένας παίχτης θα το εμφανίζει και θα τελειώνει (πιθανόν η επικοινωνία της αναδρομής θα γίνεται με κάποια global μεταβλητή..). αυτό θα γίνεται λογικά συμπληρώνοντας κάθε φορά και το επόμενο στοιχείο στην τρίλιζα και με τα 2 πιθανά σύμβολα καλώντας 2 φορές τον εαυτό της... Edit: Αν βρεις κάποια πολύ καλή λύση στο bot αλγόριθμο μπες και στο https://www.hackerrank.com/level/1
Star_Light Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 Έχει φτιαξει ο migf1 μια τριλιζα σε C ... αλλα αν πας τετοια στον καθηγητη σου παιζει να σε παρει χαλαρα χαμπαρι.
locochris94 Δημοσ. 16 Δεκεμβρίου 2012 Μέλος Δημοσ. 16 Δεκεμβρίου 2012 Σας παραθετω ολη την εκφωνηση : 2.1 Δεδομένα Χρησιμοποιήστε ένα πίνακα 3 3 για να αναπαραστήσετε την κατάσταση μιας τρίλιζας: char a[3][3]; όπου ένα τετράγωνο θα περιέχει το χαρακτήρα ’\0’ αν η θέση είναι κενή, το χαρακτήρα ’X’ αν έχει παίξει ο παίκτης Χ στη θέση, ή το χαρακτήρα ’O’ αν έχει παίξει ο παίκτης Ο στη θέση. 2.2 Αναδρομή Το πρόγραμμα πρέπει να υλοποιεί την αναδρομική συνάρτηση: int tictactoe(char a[3][3], char player); η οποία δέχεται ένα πίνακα 3 3 που περιγράφει μια τρίλιζα, ένα χαρακτήρα που περιγράφει τον επόμενο παίκτη (’X’ ή ’O’) και επιστρέφει ένα χαρακτήρα που είναι ο παίκτης που κερδί- ζει, ή ’\0’ αν δεν κερδίζει σίγουρα κάποιος παίκτης. Ο πίνακας a θα πρέπει να περιέχει την προτιμότερη κίνηση του παίκτη, ή κάποια από τις προτιμότερες. Αν η τρίλιζα που δίνεται έχει ήδη νικητή, η συνάρτηση θα τον επιστρέφει και δεν θα αλλάζει την τρίλιζα. Η συνάρτηση θα πρέπει να δοκιμάζει μία-μία τις κινήσεις του παίκτη σε κάθε κενή θέση της τρίλιζας, να υπο- λογίζει αναδρομικά ποιός παίκτης (αν υπάρχει) κερδίζει σε κάθε περίπτωση, και να επιλέγει την κίνηση με το καλύτερο αποτέλεσμα. 2.3 Χρήση σε παιχνίδι Χρησιμοποιήστε την αναδρομική συνάρτηση για να φτιάξετε ένα παιχνίδι τρίλιζας. Το παι- χνίδι θα πρέπει να ζητά από τον χρήστη τις κινήσεις του παίκτη X και να χρησιμοποιεί την παραπάνω συνάρτηση για να βρίσκει την καλύτερη κίνηση του παίκτη ’O’, συνεχίζοντας μέχρι να νικήσει κάποιος ή να γεμίσει η τρίλιζα. 2.4 Βοηθητικές συναρτήσεις Μπορεί να σας φανεί χρήσιμο να κατασκευάσετε τις παρακάτω βοηθητικές συναρτήσεις. Οι συναρτήσεις αυτές ίσως σας διευκολύνουν αλλά δεν είναι απαραίτητες για τη λύση της άσκησης, και δεν βαθμολογούνται χωριστά. • Μια συνάρτηση που τυπώνει την κατάσταση της τρίλιζας στην οθόνη (βλ. 3η σειρά ασκή- σεων). void print_tictactoe(char a[3][3]); • Μια συνάρτηση που ελέγχει αν μια τρίλιζα έχει κενό και επιστρέφει 1 αν έχει, ή 0 αν όχι. int hasempty(char a[3][3]);• Μια συνάρτηση που ελέγχει αν υπάρχει νικητής και τον επιστρέφει, ή ’\0’ αν δεν υπάρχει. char check(char a[3][3]); • Μια συνάρτηση που αντιγράφει ένα 3 3 πίνακα χαρακτήρων σε ένα άλλο 3 3 πίνακα χαρακτήρων. void copy(char new[3][3], char orig[3][3]);
Retromaniac Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 Τι ακριβώς βοήθεια θες με την λογική της αναδρομής;
locochris94 Δημοσ. 16 Δεκεμβρίου 2012 Μέλος Δημοσ. 16 Δεκεμβρίου 2012 Δεν μπορω να καταλαβω τι ακριβως θα κανει η αναδρομικη συναρτηση
Retromaniac Δημοσ. 16 Δεκεμβρίου 2012 Δημοσ. 16 Δεκεμβρίου 2012 Τι ακριβώς θα κάνει ή πώς θα το κάνει; Γιατί το 1ο περιγράφεται με αρκετή λεπτομέρεια.
Retromaniac Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Οκ. Οπότε θες τον κώδικα για την αναδρομή;
migf1 Δημοσ. 17 Δεκεμβρίου 2012 Δημοσ. 17 Δεκεμβρίου 2012 Έχει φτιαξει ο migf1 μια τριλιζα σε C ... αλλα αν πας τετοια στον καθηγητη σου παιζει να σε παρει χαλαρα χαμπαρι. Thanks για την αναφορά, όμως η δικιά μου δεν πληροί τις προδιαγραφές αυτής της άσκησης (δεν έχει αναδρομή, χρησιμοποιεί minmax, είναι μη βέλτιστη -έως και κακογραμμένη- σε κάποια σημεία που ελέγχει για opponent forks, κλπ Βασικά εγώ την είχα φτιάξει περισσότερο ως ολοκληρωμένο παράδειγμα χρήσης του GTK+2 ως GUI για την πλατφόρμα των Windows.
locochris94 Δημοσ. 17 Δεκεμβρίου 2012 Μέλος Δημοσ. 17 Δεκεμβρίου 2012 ναι θελω τν κωδικα αλλα μονο της αναδρομικης συναρτησης
Retromaniac Δημοσ. 18 Δεκεμβρίου 2012 Δημοσ. 18 Δεκεμβρίου 2012 ναι θελω τν κωδικα αλλα μονο της αναδρομικης συναρτησης Αυτό δυστυχώς κατά την αποψή μου είναι κάτι που πρέπει να το κάνεις μόνος, αλλιώς πως θα μάθεις; Όποιαδήποτε άλλη βοήθεια ευχαρίστως.
locochris94 Δημοσ. 18 Δεκεμβρίου 2012 Μέλος Δημοσ. 18 Δεκεμβρίου 2012 Οκ απλα μηπως θα μπορουσες να με πεις κατι για να με βαλεις σε μια σωστη πορεια ?
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα