Προς το περιεχόμενο

Ασκηση σε C...


kolios13

Προτεινόμενες αναρτήσεις

Δημοσ.

Γενικές Οδηγίες

 

• Ακολουθήστε τις οδηγίες για την συγγραφή σχολίων και τη μορφοποίηση του κώδικα που έχουμε πει στην τάξη.

• Φροντίστε ώστε ο κώδικάς σας να μην προκαλεί μηνύματα προειδοποίησης κατά την μεταγλώττιση (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. Το θεμα ειναι οτι η σχολη στην οποια ειμαι δεν εχει καμια σχεση με προγραμματισμο. Μπορει κανεισ να βοηθησει?

Δημοσ.

Κι αφού η σχολή δεν έχει καμία σχέση με προγραμματισμό γιατί δεν του λες να πάει για ψάρεμα (ή κυνήγι) και να φάτε μετά όλοι μαζί?

Δημοσ.

Αρχίσαμε... βλέπω έχει παραγίνει το κακό τώρα τελευταία στο forum...

 

Οι ασκήσεις είναι για να τις κάνετε μόνοι σας.

 

Ξεκίνα με ότι μπορείς και εάν κολήσεις κάπου θα βοηθήσουμε...

 

Αλλά το να κάνεις ένα copy/paste και να μας ζητάς να σπαταλήσουμε χρόνο για να λύσουμε μία άσκηση ενώ εσύ θα κάθεσαι για καφέ είναι αστείο...

Δημοσ.

Ρε παιδια δηλαδη να ξεκινησω να διαβαζω γλωσσα C απο το μηδεν?(Δεν λεω οτι δεν γινεται αλλα αυτα τα πραγματα θελουν χρονο και θεληση) Δηλαδη αν ο καθηγητης ειναι απαλευτος και δεν εχω αλλη λυση? και δεν ειναι οτι εγω θα ειμαι για καφε οπως ειπε ενας φιλος πιο πανω. Ειμαι στο πτυχιο και εχω 8 εργαστηρια (απο δευτερα εωσ παρασκευη με χιλιες δυο αλλες εργασιες),(σκ δουλευω) και παρα ειναι γεματο το προγραμμα μου. Συγκεκριμενα το μαθημα λεγεται Τεχνολογια αισθητηρων. Απο εκει να καταλαβετε. Ο τυπος δεν παει καλα. Απλα θελει να του παραδωσουμε κατι για να εχει. Τελοσπαντων αν θελει καποιος και μπορει ας βοηθησει. Αν δεν το επιτρεπουν οι κανονες του φορουμ θα το εκτιμουσα αν μου την εστελνε καποιος με πμ.

Δημοσ.

Ο "τύπος" μια χαρά πάει...

 

Εγώ πάλι αν θες με ένα service στο αυτοκίνητό μου σου την κάνω μετά χαράς.

 

Κάτσε και στρώσε τον ..λο σου κάτω και τα ξαναλέμε όταν έχεις κώδικα να μας δείξεις. :-)

Δημοσ.

Φίλε, έχε υπόψιν σου ότι και εμείς είμασταν φοιτητές και ξέρουμε πώς πάνε τα πράγματα...

Δημοσ.

Κολιε13, οταν λες οτι θες βοηθεια, τι εννοεις? Εισαι σε καποια σχολη τυπου μηχανολογιας απο οτι καταλαβαινω. Ε, ηρθε η ωρα να μαθεις τα βασικα για προγραμματισμο σε C. Θα σου χρησιμευσει σε πολλες περιπτωσεις. Ξεκινα εσυ και αμα κολλησεις καπου εδω ειμαστε να σε βοηθησουμε σε συγκεκριμενες ερωτησεις.

Δημοσ.

Ναι τυπου μηχανολογιας θα μπορουσες να το πεις. Eψαξα τρεις ωρες στο νετ και δεν βρηκα τιποτα παρομοιο. Μονο την τριλιζα η οποια ειναι πολυ πιο ευκολη σαν ιδεα. Μακαρι να υπηρχε μαθημα για προγρμματισμο θα ηθελα να μαθω. Απλα αυτο ειναι κατι τελειως διαφορετικο και πρεπει να ξεκινησω απο το μηδεν μονος μου. Θα του παραδωσω την τριλιζα αρχικα και αν χρειαστω καπου βοηθεια θα σας πω.

Δημοσ.

Έχεις δώσει λάθος την εκφώνηση. Πρέπει να είναι δικό σου το λάθος, όταν αντέγραφες την εκφώνηση στο post.

 

συγκεκριμένα:

η state αυξάνεται σύμφωνα με τον τύπο:

stateS += 2k-1, αν το σύμβολο στο k τετράγωνο είναι το S

υποπτεύομαι ότι είναι:

>
stateS += 2^k - 1

Δημοσ.
Έχεις δώσει λάθος την εκφώνηση. Πρέπει να είναι δικό σου το λάθος, όταν αντέγραφες την εκφώνηση στο post.

 

συγκεκριμένα:

 

υποπτεύομαι ότι είναι:

>
stateS += 2^k - 1

 

+1

 

και εγώ το υποπτεύομαι αυτό αλλά λείπουν οι εικόνες που

αναφέρει (εικόνα 1,εικόνα 2) για να το διασταυρώσω.

Δημοσ.

Copy-paste ολόκληρη την εκφώνηση της άσκησης, μαζί με τις εργαστηριακές οδηγίες που δίνει ο καθηγητής(!), με αναφορές σε εικόνες σχετικές με την άσκηση οι οποίες λείπουν(!!) και ζητάει βοήθεια γιατί στο Google δε βρήκε κάτι παρόμοιο(!!!). Σίγουρα ασχολήθηκε ο topic starter.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

Επισκέπτης
Αυτό το θέμα είναι πλέον κλειστό για περαιτέρω απαντήσεις.
  • Δημιουργία νέου...