kolios13 Δημοσ. 9 Νοεμβρίου 2009 Δημοσ. 9 Νοεμβρίου 2009 Γενικές Οδηγίες • Ακολουθήστε τις οδηγίες για την συγγραφή σχολίων και τη μορφοποίηση του κώδικα που έχουμε πει στην τάξη. • Φροντίστε ώστε ο κώδικάς σας να μην προκαλεί μηνύματα προειδοποίησης κατά την μεταγλώττιση (warnings). • Χρησιμοποιήστε την submit για να καταθέσετε την άσκησή σας. Άσκηση 1 (100%-130%) Εικόνα 1. Κενό στυγμιότυπο για Ν = 3 και Μ = 3. Εικόνα 2. Στυγμιότυπο παιχνιδιού για Ν = 4 και Μ = 4. Το πρόγραμμα έχει στόχο να εξομοιώσει μια παραλλαγή από το γνωστό παιχνίδι SOS που παίζετε με 2 παίκτες (δες Εικόνα 1 και Εικόνα 2). Σε κάθε γύρο του παιχνιδιού ο παίκτης μπορεί να επιλέξει ένα άδειο από τα Ν x M τετράγωνα για να βάλει το σύμβολο S ή Ο. Κερδίζει εκείνος που θα καταφέρει να συμπληρώσει πρώτος μια συνεχόμενη τριάδα σε γραμμή ή στήλη ή διαγώνιο με SOS. Αν κάτι τέτοιο δε συμβεί και συμπληρωθούν όλα τα τετράγωνα έχουμε ισοπαλία. Στην υλοποίηση, για να γλιτώσουμε τις Μ*Ν μεταβλητές που θα μπορούσαν να χρησιμοποιηθούν για να δηλώσουν την κατάσταση κάθε τετραγώνου (αν είναι κενό, S ή O), θα χρησιμοποιήσουμε μόνο δύο: τις ακέραιες μεταβλητές int stateS και int stateO. Η stateS κωδικοποιεί τις θέσεις που υπάρχουν S. Αρχικά stateS = 0. Κάθε φορά o που κάποιος παίκτης τοποθετεί σε κάποιο κενό τετράγωνο (έστω στο k τυχαίο κενό τετράγωνο, k ϵ {1,2,…,Ν*Μ}), η state αυξάνεται σύμφωνα με τον τύπο: stateS += 2k-1, αν το σύμβολο στο k τετράγωνο είναι το S 1 2 3 4 5 6 7 8 9 Πίνακας 1. Η αρίθμιση των 9 τετραγώνων του παραδείγματος εικόνας 1. Ακριβώς αντίστοιχα ορίζεται και η stateΟ για τα Ο. Ανάλογα με το μηχάνημα που εργάζεστε/λειτουργικό σύστημα (sizeof(int)) θα πρέπει να ισχύει κάποιος περιορισμός ως προς το γινόμενο Ν * Μ. Στοχός μας είναι να υλοποιηθούν οι παρακάτω συναρτήσεις. (α) 10% Υλοποιείστε κατάλληλη συνάρτηση, int getSquare(int stateS, int stateO, int k) που επιστρέφει 0 αν το τετράγωνο k είναι άδειο, 1 αν έχει S και 2 αν έχει Ο. (β) 30% Υλοποιείστε κατάλληλη συνάρτηση void printState(int stateS, int stateO,int Ν, int Μ) που θα εκτυπώνει τoν πίνακα και τα S, O στις κατάλληλες θέσεις που καθορίζονται από την μεταβλητές stateS και stateO. Να χρησιμοποιηθούν οι χαρακτήρες: - , | , O, S. Το Ν δείχνει τις γραμμές και το Μ της στήλες του πίνακα. Η συνάρτηση θα πρέπει να ελέγχει τις περιπτώσεις λάθος στην είσοδο (τιμές stateS, stateO και γινόμενο Ν*Μ) και να εκτυπώνει κατάλληλο μήνυμα. Για παράδειγμα, αν το stateS = stateO = 0 είναι M = N = 3, θα πρέπει να εκτυπωθεί το σχήμα της εικόνας 1. Για παράδειγμα, αν Μ = Ν = 4, το stateS είναι 1+2^4+2^14 = 16.401 και το stateO είναι 2^2+2^11 = 2052 θα πρέπει να εκτυπωθεί το σχήμα της εικόνας 2. (γ) 20% Υλοποιείστε κατάλληλη συνάρτηση int getWinner(int stateS, int stateO,int N,int M) που επιστρέφει 0 αν δεν υπάρχει νικητής ακόμα, 1 αν υπάρχει νικητής και 2 αν το παιχνίδι είναι ισοπαλία. Ισοπαλία θεωρείτε το παιχνίδι όταν έχουν συμπληρωθεί όλα τα τετράγωνα και δεν υπάρχει νικητής. (δ) 40% Φτιάξτε ένα πρόγραμμα θα υλοποιεί το παιχνίδι. Αρχικά θα ρωτάτε το Μ, Ν και θα γίνεται κατάλληλος έλεγχος για το γινόμενο Μ * Ν. Μετά θα εμφανίζει το παρακάτω μενού. 1. Έξοδος 2. Παιχνίδι με Υπολογιστή 3. Παιχνίδι με άλλο παίκτη 4. Παιχνίδι με υπολογιστή με υπολογιστή Αν ο χρήστης δώσει 1 το πρόγραμμα θα κάνει exit. Αν ο χρήστης δώσει 2 θα ξεκινήσει παιχνίδι με τον υπολογιστή. Αρχικά θα ρωτάει το χρήστη αν θέλει να είναι ο παίκτης 1 ή ο 2 και στην συνέχεια θα παίζει με τον υπολογιστή. Μπορείτε να υλοποιήσετε ό,τι θέλετε εσείς για στρατιγική του υπολογιστή ακόμα και τυχαία επιλογή τετραγώνων. Όσον αφορά το παιχνίδι, μετά από κάθε κίνηση θα εκτυπώνεται o πίνακας με το SOS και θα ρωτάτε ο επόμενος παίκτης, σε ποιο τετράγωνο θέλει να παίξει. Το πρόγραμμα θα πρέπει να ελέγχει αν η επιθυμία του παίκτη είναι νόμιμη (αν το τετράγωνο είναι κενό) και στην περίπτωση λάθους εισόδου να τον ρωτάει ξανά μέχρι να δώσει σωστή θέση τετραγώνου. Επίσης, το πρόγραμμα θα πρέπει να ελέγχει αν το παιχνίδι έχει ολοκληρωθεί (κάποιος έχει κερδίσει ή έχουμε ισοπαλία) και να εκτυπώνει το αντίστοιχο μήνυμα. Bonus +30%: Αν ο χρήστης δώσει 4 έχουμε: 4. Παιχνίδι με υπολογιστή με υπολογιστή Ο ένας υπολογιστής θα παίζει τυχαία και ο άλλος θα παίζει με κάποια στρατιγική που θα υλοποιήσετε εσείς. Θα πρέπει να υλοποιήσετε και ένα επιπλέον πρόγραμμα που θα υπολογίζει τη πιθανότητα να κερδίσει η στρατιγική τον τυχαίο τρόπο, εξομοιώνοντας 1.000 παινχίδια σε 5 x 5 πίνακα και μετρώντας πόσες φορές έχει κερδίσει ο καθένας. Το bonus που θα πάρετε στην άσκηση προκύπτει από τη πιθανότητα x% η στρατιγική να κερδίσει τον τυχαίο τρόπο, x = (αριθμός των παιχνιδιών που κέρδισε η στρατιγική σας / 1.000)* 100%. Aν είναι x% η ζητούμενη πιθανότητα θα έχετε 30% - 0.8*(100%-x%) bonus. Οπότε για παράδειγμα, αν είναι x = 100% έχετε 30% μπόνους, αλλιώς αν είναι x = 90% έχετε 22% bonus, κτλ. Γενική Σημείωση: Αν κάποιος αντιμετωπίζει προβλήματα με μεταβλητά τα Ν, Μ μπορεί να υλοποιήσει το παιχνίδι μόνο για σταθερά Ν = Μ = 5. Τότε θα έχει συνολική μείωση βαθμολογίας κατά 20%. θελει να την κανω σε C εστω ακομα και αν ο πινακασ του σοσ ειναι 3χ3. Το θεμα ειναι οτι η σχολη στην οποια ειμαι δεν εχει καμια σχεση με προγραμματισμο. Μπορει κανεισ να βοηθησει?
djpaul1963 Δημοσ. 9 Νοεμβρίου 2009 Δημοσ. 9 Νοεμβρίου 2009 Κι αφού η σχολή δεν έχει καμία σχέση με προγραμματισμό γιατί δεν του λες να πάει για ψάρεμα (ή κυνήγι) και να φάτε μετά όλοι μαζί?
drm Δημοσ. 9 Νοεμβρίου 2009 Δημοσ. 9 Νοεμβρίου 2009 Αρχίσαμε... βλέπω έχει παραγίνει το κακό τώρα τελευταία στο forum... Οι ασκήσεις είναι για να τις κάνετε μόνοι σας. Ξεκίνα με ότι μπορείς και εάν κολήσεις κάπου θα βοηθήσουμε... Αλλά το να κάνεις ένα copy/paste και να μας ζητάς να σπαταλήσουμε χρόνο για να λύσουμε μία άσκηση ενώ εσύ θα κάθεσαι για καφέ είναι αστείο...
kolios13 Δημοσ. 10 Νοεμβρίου 2009 Μέλος Δημοσ. 10 Νοεμβρίου 2009 Ρε παιδια δηλαδη να ξεκινησω να διαβαζω γλωσσα C απο το μηδεν?(Δεν λεω οτι δεν γινεται αλλα αυτα τα πραγματα θελουν χρονο και θεληση) Δηλαδη αν ο καθηγητης ειναι απαλευτος και δεν εχω αλλη λυση? και δεν ειναι οτι εγω θα ειμαι για καφε οπως ειπε ενας φιλος πιο πανω. Ειμαι στο πτυχιο και εχω 8 εργαστηρια (απο δευτερα εωσ παρασκευη με χιλιες δυο αλλες εργασιες),(σκ δουλευω) και παρα ειναι γεματο το προγραμμα μου. Συγκεκριμενα το μαθημα λεγεται Τεχνολογια αισθητηρων. Απο εκει να καταλαβετε. Ο τυπος δεν παει καλα. Απλα θελει να του παραδωσουμε κατι για να εχει. Τελοσπαντων αν θελει καποιος και μπορει ας βοηθησει. Αν δεν το επιτρεπουν οι κανονες του φορουμ θα το εκτιμουσα αν μου την εστελνε καποιος με πμ.
ippo00 Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Λες ότι θες χρόνο και θέληση, προφανώς σου λείπει θέληση. Για μια 20ευρη cosmokarta στην έλυνα πάντως
Dr.Fuzzy Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Ο "τύπος" μια χαρά πάει... Εγώ πάλι αν θες με ένα service στο αυτοκίνητό μου σου την κάνω μετά χαράς. Κάτσε και στρώσε τον ..λο σου κάτω και τα ξαναλέμε όταν έχεις κώδικα να μας δείξεις.
drm Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Φίλε, έχε υπόψιν σου ότι και εμείς είμασταν φοιτητές και ξέρουμε πώς πάνε τα πράγματα...
kolios13 Δημοσ. 10 Νοεμβρίου 2009 Μέλος Δημοσ. 10 Νοεμβρίου 2009 Επρεπε να ειχα βαλει γυναικειο nickname. Ολο και καποιος θα ειχε βοηθησει.Ευχαριστω!
ippo00 Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 χαχα πίστεψε με οχι, μου πέρασε από το μυαλο να το κάνω λόγω του 13 αλλά μου πέρασε.
Crizzt Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Κολιε13, οταν λες οτι θες βοηθεια, τι εννοεις? Εισαι σε καποια σχολη τυπου μηχανολογιας απο οτι καταλαβαινω. Ε, ηρθε η ωρα να μαθεις τα βασικα για προγραμματισμο σε C. Θα σου χρησιμευσει σε πολλες περιπτωσεις. Ξεκινα εσυ και αμα κολλησεις καπου εδω ειμαστε να σε βοηθησουμε σε συγκεκριμενες ερωτησεις.
kolios13 Δημοσ. 10 Νοεμβρίου 2009 Μέλος Δημοσ. 10 Νοεμβρίου 2009 Ναι τυπου μηχανολογιας θα μπορουσες να το πεις. Eψαξα τρεις ωρες στο νετ και δεν βρηκα τιποτα παρομοιο. Μονο την τριλιζα η οποια ειναι πολυ πιο ευκολη σαν ιδεα. Μακαρι να υπηρχε μαθημα για προγρμματισμο θα ηθελα να μαθω. Απλα αυτο ειναι κατι τελειως διαφορετικο και πρεπει να ξεκινησω απο το μηδεν μονος μου. Θα του παραδωσω την τριλιζα αρχικα και αν χρειαστω καπου βοηθεια θα σας πω.
C6WGMN Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Έχεις δώσει λάθος την εκφώνηση. Πρέπει να είναι δικό σου το λάθος, όταν αντέγραφες την εκφώνηση στο post. συγκεκριμένα: η state αυξάνεται σύμφωνα με τον τύπο: stateS += 2k-1, αν το σύμβολο στο k τετράγωνο είναι το S υποπτεύομαι ότι είναι: > stateS += 2^k - 1
virxen75 Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Έχεις δώσει λάθος την εκφώνηση. Πρέπει να είναι δικό σου το λάθος, όταν αντέγραφες την εκφώνηση στο post. συγκεκριμένα: υποπτεύομαι ότι είναι: > stateS += 2^k - 1 +1 και εγώ το υποπτεύομαι αυτό αλλά λείπουν οι εικόνες που αναφέρει (εικόνα 1,εικόνα 2) για να το διασταυρώσω.
teo64x Δημοσ. 10 Νοεμβρίου 2009 Δημοσ. 10 Νοεμβρίου 2009 Copy-paste ολόκληρη την εκφώνηση της άσκησης, μαζί με τις εργαστηριακές οδηγίες που δίνει ο καθηγητής(!), με αναφορές σε εικόνες σχετικές με την άσκηση οι οποίες λείπουν(!!) και ζητάει βοήθεια γιατί στο Google δε βρήκε κάτι παρόμοιο(!!!). Σίγουρα ασχολήθηκε ο topic starter.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.