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

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


kolios13

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

Δημοσ.

Ναι... και βέβαια ασχολήθηκε, έκανε Copy paste πήγε στην παραλία για καφέ, και όταν γύρισε πάτησε F5 να δεί άμα κανένα κορόιδο απάντησε...

Δημοσ.
Ναι... και βέβαια ασχολήθηκε, έκανε Copy paste πήγε στην παραλία για καφέ, και όταν γύρισε πάτησε F5 να δεί άμα κανένα κορόιδο απάντησε...

Για να μην λέει ότι δεν τον βοηθήσαμε με κώδικα, παραθέτω μια λύση σε common lisp.

Παράδειγμα:

>
(game 3 3)
| | | |
| | | |
| | | |
unfinished.
Player one
2
| | |S|
| | | |
| | | |
unfinished.
Player two
1
| |O|S|
| | | |
| | | |
unfinished.
Player one
4
| |O|S|
| |S| |
| | | |
unfinished.
Player two
5
| |O|S|
| |S|O|
| | | |
unfinished.
Player one
6
| |O|S|
| |S|O|
|S| | |
player one won.

Κώδικας,

>
(defclass sos-board ()
 ((state-S
   :initarg :s
   :initform 0
   :accessor state-s
   :documentation "Natural number telling us states S in board")
  (state-O
   :initarg 
   :initform 0
   :accessor state-o
   :documentation "Natural number telling us states P in board")
  (n
   :initarg :row
   :initform (error "row must be specified")
   :reader state-row
   :documentation "Row length of the board")
  (m
   :initarg :column
   :initform (error "column must be specified")
   :reader state-column
   :documentation "Column length of the board")
  (state-won
   :initform 0
   :accessor state-won
   :documentation "Is this game finished? 0 not,
                   1, 2 respectively to players 1,2
                   3 draw")))

(defun ktob (k)
 (expt 2 k))

(defun square (state number)
 (not (zerop (logand state
                     (ktob number)))))

(defmethod get-board ((board sos-board))
 (with-slots (n m)
     board
   (loop for j below m
        collect
        (loop for i below n
           collect (get-square board (+ i (* n j)))))))

(defmethod get-square ((board sos-board) square-number)
 "| | -> unset
  O   -> O set
  S   -> S set"
 (with-slots (state-S state-O)
     board
   (cond ((square state-S square-number) 'S)
         ((square state-O square-number) 'O)
         (t '| |))))

(defmethod print-board ((board sos-board))
 (format t "~{|~{~A|~}~%~}~
            ~[unfinished~;~
              player ~:*~R won~;~
              player ~:*~R won~;~
              tie~].~%"
         (get-board board) (state-won board)))

(defmethod set-square ((board sos-board) square-number mark)
 "Returns nil if square is marked
  returns t else, and marks the square"
 (when (equal '| | (get-square board square-number))
   (with-slots (state-s state-o)
       board
     (if mark
         (incf state-s (ktob square-number))
         (incf state-o (ktob square-number))))
   t))

(defmethod finished-line-p ((board sos-board) line)
 "Check if (car line) (cadr line) (caddr line) finishes the game
  return S if S wins, O if O wins, NIL if the line does not win the game"
 (and (equal (get-square board (car line))
             (get-square board (cadr line)))
      (equal (get-square board (cadr line))
             (get-square board (caddr line)))
      (find (get-square board (car line)) '(S O))))


(defmethod finished-p ((board sos-board) square-number)
 "Check if game is finished in 3x3 area with square-number center"
 (or (finished-line-p board '(0 3 6))
     (finished-line-p board '(1 4 7))
     (finished-line-p board '(2 5 8))
     (finished-line-p board '(0 1 2))
     (finished-line-p board '(3 4 5))
     (finished-line-p board '(6 7 8))
     (finished-line-p board '(0 4 8))
     (finished-line-p board '(2 4 6))))

(defun game (x y)
 (let ((board (make-instance 'sos-board :row x :column y))
       (current-player 2)
       (waiting-player 1))
 (loop
      (rotatef current-player waiting-player)
    (print-board board)
    (format t "Player ~R~%" current-player)
      (let ((input (read)))
        (set-square board input (= current-player 1))
        (when (or (finished-p board input)
                  (= (+ (state-s board)
                        (state-o board))
                     (1- (expt 2 (1+ (* (state-row board)
                                        (state-column board)))))))
          (setf (state-won board) current-player)
          (print-board board)
          (return t))))))

Δημοσ.

Δεν ημουν για καφε σε καμια παραλια. Ξαναλεω εχω 8 εργστηρια και δεν εχω καθολου ελευθερο χρονο. Ποσο μαλλον να κατσω και να μαθω γλωσσα προγραμματισμου μονος μου. Η αληθεια ειναι οτι σκεφτομουn να επαιρνα τον κωδικα απο καποιον και να μαθαινα τι κανει η καθε εντολη ετσι ωστε να μπορω να του την εξηγησω. Την πρωτη που φορα που δεν του την πηγα και του ζητησα βοηθεια ενω την ελεγε πανευκολη οταν την διαβαζε για να μου εξηγησει πως να ξεκινησω ελεγε σιγα "κατσε πως γινεται αυτο καποιο λαθος θα εχει". Και ετσι μου ζητησε να την κανω σε πινακα 3χ3. Ετσι ομως δεν θα εχει νοημα το παιχνιδι. Η θα γινει σαν την τριλιζα με σσσ-οοο η θα βγαζει παντα αυτον που ξεκιναει πρωτος, νικητη. Πρεπει νομιζω να ειναι πανω απο 4χ4 για να δουλεψει. Οπως εδω:http://vlm1.uta.edu/~athitsos/courses/cse4308_fall2007/assignments/assignment4/index.html Επισης κατι αλλο που βρηκα ειναι αυτο: http://www.tech-forums.net/computer/topic/24334.html

Το βρηκα ακομα και σε java applet και σκεφτηκα να επαιρνα τον κωδικα του και να το εκανα πορτ σε C αλλα δεν βρηκα κανενα προγραμμα που να το κανει αυτο. Απο εδω συγκεκριμενα: http://www.rixoyun.com/en/SOS.htm Θα μου πειτε τον χρονο που σπαταλησα για να την βρω ετοιμη θα μπορουσα να ειχα μαθει κατι. Ισως. Αλλα σιγα μην ειχα λυσει την ασκηση. Την εδωσα σε φιλο μου που μολις τελειωσε πανεπιστημιο πληροφορικης και μου ειπε ειναι πολυ δυσκολη. Ο τυπος δικιο εχετε και συγνωμη ειναι ετσι: stateS += 2^k - 1 Συγκεκριμενα τον λινκ τησ ασκησης ειναι αυτο: http://www.2shared.com/file/9065764/52960a7c/ask01.html

Ξερω οτι κανεις απο εσας δεν καθεται και δεν εχει απλετο χρονο για αυτο δεν απαιτω κατι. Εχω διωρια μεχρι την πεμπτη. Αν δεν βρω κατι θα του παω την τριλιζα. Ευχαριστω για τον χρονο σας.

 

---------- Το μήνυμα προστέθηκε στις 01:37 ----------

 

Ποπω ρε drm πολυ καχυποπτος εισαι παντως !;)

 

---------- Το μήνυμα προστέθηκε στις 01:39 ----------

 

teo64x ελπιζω να σε καλυψα. ζητησα και συγνωμη!

Δημοσ.

οπότε με τα καινούργια δεδομένα

ο πίνακας ουσιαστικά αναπαριστάται από 2 δυαδικούς αριθμούς

1) S -->όπου S στον πίνακα βάζουμε 1 και στα άλλα 0

2) Ο -->όπου Ο στον πίνακα βάζουμε 1 και στα άλλα 0

και τα stateS,stateO είναι η μετατροπή του στο δεκαδικό σύστημα.

π.χ.

1 S S

4 5 6

7 8 9

 

αν S=(2,3)--->011000000--->reverse(000000110)--->dec--->StateS=2^1+2^2=2+4=6

Δημοσ.
Δεν ημουν για καφε σε καμια παραλια. Ξαναλεω εχω 8 εργστηρια και δεν εχω καθολου ελευθερο χρονο. Ποσο μαλλον να κατσω και να μαθω γλωσσα προγραμματισμου μονος μου. Η αληθεια ειναι οτι σκεφτομουn να επαιρνα τον κωδικα απο καποιον και να μαθαινα τι κανει η καθε εντολη ετσι ωστε να μπορω να του την εξηγησω. Την πρωτη που φορα που δεν του την πηγα και του ζητησα βοηθεια ενω την ελεγε πανευκολη οταν την διαβαζε για να μου εξηγησει πως να ξεκινησω ελεγε σιγα "κατσε πως γινεται αυτο καποιο λαθος θα εχει". Και ετσι μου ζητησε να την κανω σε πινακα 3χ3. Ετσι ομως δεν θα εχει νοημα το παιχνιδι. Η θα γινει σαν την τριλιζα με σσσ-οοο η θα βγαζει παντα αυτον που ξεκιναει πρωτος, νικητη. Πρεπει νομιζω να ειναι πανω απο 4χ4 για να δουλεψει. Οπως εδω:http://vlm1.uta.edu/~athitsos/courses/cse4308_fall2007/assignments/assignment4/index.html Επισης κατι αλλο που βρηκα ειναι αυτο: http://www.tech-forums.net/computer/topic/24334.html

Το βρηκα ακομα και σε java applet και σκεφτηκα να επαιρνα τον κωδικα του και να το εκανα πορτ σε C αλλα δεν βρηκα κανενα προγραμμα που να το κανει αυτο. Απο εδω συγκεκριμενα: http://www.rixoyun.com/en/SOS.htm Θα μου πειτε τον χρονο που σπαταλησα για να την βρω ετοιμη θα μπορουσα να ειχα μαθει κατι. Ισως. Αλλα σιγα μην ειχα λυσει την ασκηση. Την εδωσα σε φιλο μου που μολις τελειωσε πανεπιστημιο πληροφορικης και μου ειπε ειναι πολυ δυσκολη. Ο τυπος δικιο εχετε και συγνωμη ειναι ετσι: stateS += 2^k - 1 Συγκεκριμενα τον λινκ τησ ασκησης ειναι αυτο: http://www.2shared.com/file/9065764/52960a7c/ask01.html

Ξερω οτι κανεις απο εσας δεν καθεται και δεν εχει απλετο χρονο για αυτο δεν απαιτω κατι. Εχω διωρια μεχρι την πεμπτη. Αν δεν βρω κατι θα του παω την τριλιζα. Ευχαριστω για τον χρονο σας.

 

---------- Το μήνυμα προστέθηκε στις 01:37 ----------

 

Ποπω ρε drm πολυ καχυποπτος εισαι παντως !;)

 

---------- Το μήνυμα προστέθηκε στις 01:39 ----------

 

teo64x ελπιζω να σε καλυψα. ζητησα και συγνωμη!

 

Τι προσπαθείς να μας πεις και ποιον προσπαθείς να πείσεις; Άλλοι τόσοι πως μάθανε δηλαδή; Ψάχνεις να το βρεις έτοιμο και να το κάνεις convert...έλεος...Όλα αυτά δείχνουν άλλον έναν χαλαρό φοιτητή που βαριέται και τα περιμένει όλα έτοιμα και δεν πας πουθενά έτσι! Πραγματικά με έχει εκνευρίσει η στάση σου και η νοοτροπία σου! :mad:

Κάτσε, διάβασε, βρες χρόνο (πάντα υπάρχει! Αρκεί να ψάξεις!) και όταν έχεις γράψει κάτι έλα να σε βοηθήσουμε πάνω σε αυτό.

 

:-)

Δημοσ.

Εγώ λεω να ρίξουμε κλήρο και κάποιος να κάτσει να του γράψει το γαμημένο πρόγραμμα ώστε να περάσει το μάθημα και να συνεχίσει την ζωή του καταλήγοντας να είναι άλλος ένας φυγόπονος βλάκας.

Δημοσ.

Ρε παιδια ας κλεισει καποιος το thread. Δεν μ'αρεσουν τα πραγματα που λετε για μενα. Μαλακια μου που ζητησα βοηθεια εξ αρχης. Ολοι ζουμε με τις επιλογες μας. οπου μπορουσα εχω προσπαθησει. Δεν εξαρταται απο το προγραμμα αν θα περασω το μαθημα. Δεν θελω καμια βοηθεια. Ας κλεισει το θεμα. Οπωσ ειπα πολλες φορες Ευχαριστω.

Δημοσ.

Το να περιορίζουμε τις απαντήσεις μας στο μοτίβο "show us the code" (ή να μην ποστάρουμε καθόλου) είναι αρκετό αν θέλουμε να δείξουμε τη διάθεση απαξίας μας προς τα θέματα τύπου «Λύστε μου την άσκηση». Δεν είναι ανάγκη να δημοσιεύουμε εκδικητικά και σκληρά μηνύματα ή να πηγαίνουμε εν γένει τα πράγματα σε προσωπικό επίπεδο. Σε επόμενα παρόμοια θέματα, ελπίζω (και παρακαλώ θερμά) να μην ξανασυμβεί κάτι τέτοιο.

 

Κατ' απαίτηση του topic starter, το παρόν κλειδώνεται.

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

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

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