ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Σχετικά έγγραφα
ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΕΠΛ132 Άσκηση 3 - Αρχές Προγραμματισμού ΙΙ Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

ΚΕΦΑΛΑΙΟ 9 ΒΑΣΙΚΕΣ ΕΝΤΟΛΕΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Διαδικασιακός Προγραμματισμός

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής

Διαδικασιακός Προγραμματισμός

Σχηματίζοντας Γραφικές Παραστάσεις για Ημίτονο και Συνημίτονο και Ελέγχοντας Περιορισμούς σε Συστάδες Καρτών Τόμπολας

Διαδικασιακός Προγραμματισμός

Παίζοντας Τόμπολα. Ημερομηνία Ανάρτησης: 16/03/2017 Ημερομηνία Παράδοσης: 30/03/2017, 23:59

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΡΓΑΣΙΑ 3. Παίζοντας Sudoku. Ημερομηνία Ανάρτησης: 16/03/2018 Ημερομηνία Παράδοσης: 03/04/2018, 09:00

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Κεφάλαιο 7 ο Βασικές Έννοιες Προγραμματισμού (σελ )

ΓΛΩΣΣΑ ΑΛΦΑΒΗΤΟ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΤΑΘΕΡΕΣ ΜΕΤΑΒΛΗΤΕΣ

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

ΟΜΟΣΠΟΝΔΙΑ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑΔΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2019 Β ΦΑΣΗ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

επιµέλεια Θοδωρής Πιερράτος

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΕΠΑΝΑΛΗΠΤΙΚΟ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ ΠΑΝΕΛΛΑΔΙΚΩΝ ΣΧΟΛΙΚΟΥ ΕΤΟΥΣ

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

for for for for( . */

7.1 Αλφάβητο. 7.2 Τύποι δεδομένων. 7.3 Σταθερές. 7.4 Μεταβλητές. 7.5 Αριθμητικοί τελεστές. 7.6 Συναρτήσεις. 7.7 Αριθμητικές εκφράσεις. 7.

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Να το ξαναγράψετε χρησιμοποιώντας αντί για την εντολή Για Τέλος_επανάληψης: α. την εντολή Όσο Τέλος_επανάληψης

Ακρότατα πίνακα, χωρίς min, max, μόνο με pos

Εισαγωγή στον Προγραμματισμό

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

8. Η δημιουργία του εκτελέσιμου προγράμματος γίνεται μόνο όταν το πηγαίο πρόγραμμα δεν περιέχει συντακτικά λάθη.

Διαδικασιακός Προγραμματισμός

Επαναληπτικό διαγώνισμα στην Α.Ε.Π.Π - 18 / Απριλίου / 2010 ΘΕΜΑ 1

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

GreekLUG Ελεύθερο Λογισμικό & Λογισμικό Ανοικτού Κώδικα

scanf() scanf() stdin scanf() printf() int float double %lf float

ΚΕΦΑΛΑΙΟ 2 ΑΛΓΟΡΙΘΜΟΙ ΔΟΜΗ ΑΚΟΛΟΥΘΙΑΣ ΘΕΩΡΙΑ

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ Θέμα Α

Αντικειμενοστρεφής Προγραμματισμός -Python. Κ.Π. Γιαλούρης

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

Ο βρόχος for Η εντολή for χρησιμοποιείται για τη δημιουργία επαναληπτικών βρόχων στη C

ΑΡΧΗ 2ΗΣ ΣΕΛΙΔΑΣ Γ Α... Β

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 131: ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I ΕΡΓΑΣΙΑ 2


Α2. Να γράψετε στο τετράδιο απαντήσεών σας το κατάλληλο τμήμα κώδικα, κάνοντας τις απαραίτητες αλλαγές σύμφωνα με την εκάστοτε εκφώνηση:

Παράδειγμα 2. Λύση & Επεξηγήσεις. Τέλος_επανάληψης Εμφάνισε "Ναι" Τέλος Α2

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

Εισαγωγή στη γλώσσα προγραμματισμού C++14

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Εισαγωγή στη γλώσσα προγραμματισμού Fortran 95

Αναδρομή. Τι γνωρίζετε για τη δυνατότητα «κλήσης» αλγορίθμων; Τι νόημα έχει;

Τυπικές χρήσεις της Matlab

Γραπτές Απολυτήριες Εξετάσεις Ιουνίου 2008 ΘΕΜΑΤΑ. ΘΕΜΑ 1 ο Σημειώστε δίπλα σε κάθε φράση (Σ) αν είναι σωστή ή (Λ) αν είναι λάθος.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΓΡΑΜΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ με το EXCEL

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. Microsoft Excel Μέρος 1

Προγραμματιστικό Περιβάλλον

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΗΤΗ ΝΟΗΜΟΣΥΝΗ

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. Microsoft Excel Μέρος 1

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

ΕΠΛ 034: Εισαγωγή στον Προγραμματισμό για ΗΜΥ

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

Δομημένος Προγραμματισμός

Σκοπός. Αλγεβρικοί και Λογικοί Υπολογισμοί στη PASCAL

ΟΜΑΔΑ Ε ΓΕΩΡΓΙΟΥ ΦΩΤΕΙΝΗ ΗΛΙΟΥΔΗ ΑΦΡΟΔΙΤΗ ΜΕΤΑΛΛΙΔΟΥ ΧΡΥΣΗ ΝΙΖΑΜΗΣ ΑΛΕΞΑΝΔΡΟΣ ΤΖΗΚΑΛΑΓΙΑΣ ΑΝΔΡΕΑΣ ΤΡΙΓΚΑΣ ΑΓΓΕΛΟΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Φροντιστήρια Επίγνωση Προτεινόμενα Θέματα Πανελλαδικών ΑΕΠΠ 2015

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

2 ΟΥ και 7 ΟΥ ΚΕΦΑΛΑΙΟΥ

ΘΕΜΑ Α. Α2. Να αναφέρετε από τι εξαρτάται η επιλογή του καλύτερου αλγορίθμου ταξινόμησης. Μονάδες 4. Σελίδα 1 από 8

Ενδεικτικές Ερωτήσεις Θεωρίας

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Σχολικό Βιβλίο - Κεφάλαιο 7 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ PASCAL ΠΑΡΟΥΣΙΑΣΗ 13

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΟΜΟΣΠΟΝ ΙΑ ΕΚΠΑΙ ΕΥΤΙΚΩΝ ΦΡΟΝΤΙΣΤΩΝ ΕΛΛΑ ΟΣ (Ο.Ε.Φ.Ε.) ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ ΕΠΑΝΑΛΗΠΤΙΚΑ ΘΕΜΑΤΑ 2017 A ΦΑΣΗ

Εισαγωγή στην Αριθμητική Ανάλυση

Διαδικασιακός Προγραμματισμός

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΤΡΙΩΡΗ ΓΡΑΠΤΗ ΔΟΚΙΜΑΣΙΑ

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τμήμα Πληροφορικής ΕΠΛ 232 Προγραμματιστικές Τεχνικές και Εργαλεία ΑΣΚΗΣΗ 1 The Kenken Puzzle Διδάσκων: Δημήτρης Ζεϊναλιπούρ Υπεύθυνοι Εργαστήριων: Πύρρος Μπράτσκας & Παύλος Αντωνίου Ημερομηνία Ανάθεσης: Τέταρτη, 12 Σεπτεμβρίου 2018 Ημερομηνία Παράδοσης: Παρασκευή, 21 Σεπτεμβρίου 2018, ώρα 14:00 (ο κώδικας να υποβληθεί σε zip μέσω του Moodle) http://www.cs.ucy.ac.cy/courses/epl232 Ι. Στόχος Στην εργασία αυτή θα ασχοληθούμε με βρόγχους, ελέγχους, στατικούς δισδιάστατους πίνακες, συναρτήσεις, μορφοποιημένη είσοδο/έξοδο στην οθόνη, είσοδο/έξοδο σε αρχεία. Επίσης θα γίνει η επί μέρους χρήση των πιο κάτω εργαλείων: ο οδηγός σχολίων θα πρέπει να δοθεί σε doxygen, χρήση της ulimit για ενδεχομένη προσαρμογή της στοίβας του προγράμματος και η time για εύρεση του χρόνου εκτέλεσης του προγράμματος. ΙΙ. Περιγραφή του Παιχνιδιού Για αυτήν την άσκηση πρέπει να υλοποιήσετε ένα παιχνίδι, με όνομα Kenken puzzle, το οποίο είναι μια παραλλαγή του γνωστού παιχνιδιού Sudoku. Όπως και στο Sudoku, ο στόχος κάθε Kenken puzzle είναι να γεμίσει ένα πλέγμα με ψηφία από 1 έως 4 για ένα πλέγμα 4 4, από 1 έως 5 για ένα 5 5, κτλ έτσι ώστε κανένα ψηφίο να μην εμφανίζεται περισσότερες από μία φορές σε οποιαδήποτε σειρά ή σε οποιαδήποτε στήλη. Το μέγεθος του πλέγματος θα είναι δηλωμένο σαν σταθερά στο πρόγραμμά σας. Επιπλέων, ένα πλέγμα KenKen χωρίζεται σε ομάδες κελιών που ονομάζονται "κλουβιά" (cages), τα οποία έχουν τον περιορισμό ότι: οι αριθμοί των κελιών σε κάθε κλουβί πρέπει να παράγουν έναν συγκεκριμένο αποτέλεσμα όταν συνδυάζονται χρησιμοποιώντας ένα δοσμένο μαθηματικό τελεστή. Για αυτήν την εργασία, οι μαθηματικές τελεστές που πρέπει να υλοποιηθούν, είναι η πρόσθεση και ο πολλαπλασιασμός. Δυο κελιά θεωρούνται ότι μπορούν να ανήκουν στο ίδιο κλουβί, εάν έχουν κοινή 1 πλευρά (τα κελιά τα οποία έχουν εφαπτόμενες γωνίες -corners - δεν μπορούν να θεωρούνται μέλη του ίδιου κλουβιού Για παράδειγμα, στο puzzle της εικόνας 1, οι αριθμοί των κελιών του πάνω αριστερού κλουβιού, πρέπει να έχουν γινόμενο 16. 2 4 1 3 1 2 3 + 4 3 1 4 2 4 3 2 1 Εικόνα 1 Kenken puzzle (αριστερά) και μια από τις ενδεχόμενα περισσότερες λύσεις του (δεξιά).

Ζητούμενα Άσκησης ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου Ζητούμενο αυτής της άσκησης είναι η κατασκευή ενός προγράμματος, kenken.c, στη γλώσσα προγραμματισμού C, το οποίο δοθέντος ενός πλέγματος Kenken puzzle, επιτρέπει στον χρήστη να βρει μια λύση. Το πρόγραμμα πρέπει να υλοποιεί τις ακόλουθες λειτουργίες: Λειτουργία 1 (Ανάγνωση Αρχείου) O χρήστης δίνει στην γραμμή εντολών το όνομα ενός αρχείου inputfile.txt που περιέχει ένα Kenken puzzle το οποίο διαβάζεται στην μνήμη. Εντάξετε στο πρόγραμμα σας μια συνάρτηση readpuzzle(your_parameters) (όπου your_parameters μπορεί να είναι όσες παράμετροι θεωρείτε αναγκαίες) η οποία θα διαβάζει ένα άλυτο Kenken puzzle από ένα αρχείο κειμένου σε μια δομή δεδομένων (π.χ., short kenken[n][n];). Ένα Kenken puzzle αποθηκεύεται ως ακολούθως: Η πρώτη γραμμή του αρχείου πρέπει να καθορίζει το μέγεθος του puzzle. Κάθε επόμενη γραμμή θα πρέπει να αναφέρεται σε ένα κλουβί. Το πρώτο στοιχείο σε κάθε γραμμή περιέχει τον περιορισμό (π.χ. "16*") ακολουθούμενο από τις συντεταγμένες των κελιών του κλουβί. Για παράδειγμα, το παραπάνω puzzle της εικόνας 1 θα παρουσιαστεί σε ένα αρχείο ως: 4 16* (1,1) (1,2) (2,2) 7+ (1,3) (1,4) (2,3) 4+ (2,1) (3,1) 4+ (2,4) 12* (3,2) (4,1) (4,2) 8* (3,3) (3,4) 3+ (4,3) (4,4) Μπορείτε να ανακτήσετε περισσότερα αρχεία εισόδου από το συνοδευτικό αρχείο as1- supplementary.zip ή παράγοντας τα δικά σας αρχεία εισόδου (αλλά και τις λύσεις) με χρήση της ιστοσελίδας https://tirl.org/software/kenken/ Η αρχική παρουσίαση του Kenken puzzle της εικόνας 1 στην οθόνη πρέπει να είναι στην παρακάτω μορφή: a=16* b=7+ c=4+ d=4+ e=12* f=8* g=3+ a a b b c a b d c e f f e e g g Εικόνα 2 Παρουσίαση Kenken puzzle Όπως φαίνεται στην εικόνα 2, το κάθε κλουβί τα οποία αναπαρίσταται από ένα χαρακτήρα του αλφαβήτου. Στο πρώτο κλουβί (καθώς διαβάζονται οι γραμμές του αρχείου) δίνεται ο χαρακτήρας a, στο 2 ο ο b, στο 3 ο ο c κλπ. Επίσης, στην κορυφή του puzzle εμφανίζονται οι τιμές που καθορίζουν τους περιορισμούς του Kenken puzzle. Σημείωση: Το πρόγραμμα σας θα πρέπει να ορίζει μια σταθερά π.χ., #define N 10 η οποία θα προσδιορίζει (πριν την μεταγλώττιση) το μέγιστο μέγεθος του Kenken puzzle που μπορεί να χειριστεί το πρόγραμμα σας. Κατά την διάρκεια της ανάγνωσης του αρχείου πρέπει να κάνετε τους κατάλληλους ελέγχους για την ορθότητα του μεγέθους και της δομής του αρχείου και να δώσετε τα κατάλληλα μηνύματα λάθους εάν αυτό απαιτείται. Υποθέστε επίσης ότι για προτακτικούς λόγους το puzzle δεν θα έχει παραπάνω από 26 κλουβιά (πληθικός αριθμός των πεζών χαρακτήρων του λατινικού αλφαβήτου). 2 από 16

Λειτουργία 2 (Διαδραστική Επίλυση Kenken puzzle) Εντάξετε στο πρόγραμμα σας μια συνάρτηση play(your_parameters)η οποία θα επιτρέπει σε ένα παίκτη να εισάγει επαναληπτικά κάποιες τιμές, βάση των κανονισμών του παιχνιδιού, μέχρι να επιλυθεί το Kenken. Πιο συγκεκριμένα, όταν ξεκινήσει η εκτέλεση του παιχνιδιού σας τότε ο χρήστης καλείται να εισάγει κάποια δεδομένα στην μορφή "i,j=val". Κάθε φορά που ο χρήστης δίνει ένα αριθμό, το πλέγμα πρέπει να αλλάξει μορφή, π.χ., σε κάποια χρονική στιγμή αν θέλει να δώσει τιμή για το κελί στη 2 η γραμμή και 2 η στήλη, το πλέγμα πρέπει να εμφανιστεί ως παρακάτω (προσέξετε ότι οι τιμές των κελιών έχουν δεξιά στοίχιση): >i,j=val: for entering val at position (i,j) >i,j=0 : for clearing cell (i,j) >0,0=0 : for saving and ending the game Notice: i,j,val numbering is from [1..4] >2,2=2 2a 4a b b 1c 2a b 4d 3c e f f e e g g Το παιχνίδι θα πρέπει να υποστηρίζει τις εξής περιπτώσεις: a. Εισαγωγή Αριθμού (εντολή: i,j=val): Αν ο χρήστης δώσει ως εντολή εισαγωγής 1,2=4 τότε δηλώνει ότι θέλει να τοποθετήσει τον αριθμό 4 στην 1η γραμμή και 2η στήλη (σημειώστε ότι για ένα 4x4 Kenken οι γραμμές αριθμούνται από το 1 έως το 4). Στη συνέχεια, γίνεται έλεγχος αν η τιμή που έδωσε ο χρήστης μπορεί να εισαχθεί στο συγκεκριμένο κελί βάσει των κανόνων του Kenken (υπόδειξη: μπορείτε να φτιάξετε μια ξεχωριστή συνάρτηση για να κάνει τον έλεγχο αυτό, την οποία θα καλείτε από την play()). Εάν η εισαγωγή ολοκληρώνει το παιχνίδι τότε ο χρήστης πρέπει να λαμβάνει το κατάλληλο μήνυμα και να εκτυπώνεται το επιλυμένο Kenken στην οθόνη. Εάν δεν ολοκληρώνεται το παιχνίδι τότε απλά ξανά-παρουσιάζεται το Kenken στην οθόνη και ζητείται από τον χρήστη να δώσει την επόμενη του εισαγωγή. Η συνάρτηση play() πρέπει να δίνει τα κατάλληλα μηνύματα λάθους εάν: o o Ο χρήστης δίνει εντολή σε άλλη μορφή ή δίνει μια μη έγκυρη τιμή στο i,j,val. Ο χρήστης ζητά να γίνει η τοποθέτηση σε κελί που περιέχει ήδη κάποιο άλλο αριθμό (είτε δοσμένο ή του χρήστη) ή σε θέση εκτός των ορίων του πίνακα Kenken. Υπόδειξη: Για να διαβάσετε τρεις αριθμούς στην μορφή που ζητείται μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή. if (scanf("%d,%d=%d",&i,&j,&val)!= 3) { while (getchar()!= '\n') {}; printf("wrong format of command\n"); } /* Η πιο πάνω εντολή διαβάζει 3 αριθμούς από τον χρήστη όπου ο πρώτος χωρίζεται από τον δεύτερο με κόμμα και ο τρίτος χωρίζεται από τον δεύτερο με ίσον. Αν η scanf επιστρέψει 3, η ανάγνωση ήταν επιτυχής και θα εκτελεστεί η εντολή που ακολουθεί το if. Στην αντίθετη περίπτωση διαβάζονται και αγνοούνται οι χαρακτήρες μέχρι την επόμενη αλλαγή γραμμής.*/ 3 από 16

b. Διαγραφή Αριθμού (εντολή: i,j=0): Αν ο χρήστης δώσει ως εντολή εισαγωγής το 1,2=0 τότε δηλώνει ότι θέλει να διαγράψει το περιεχόμενο του κελιού (1,2). c. Διακοπή Παιχνιδιού (εντολή: 0,0=0): Αν ο χρήστης δώσει ως εντολή εισαγωγής 0,0=0 τότε δηλώνει ότι θέλει να σταματήσει την εκτέλεση του παιχνιδιού. Σε αυτή την περίπτωση διακόπτεται το παιχνίδι και αποθηκεύεται ο πίνακας Kenken σε αρχείο όπως περιγράφεται στη λειτουργία 3. Η σύνταξη κλήσης του προγράμματος για αυτήν την λειτουργία θα είναι:./kenken -i inputfilename όπου: o -i - είναι το όρισμα που λέει στο πρόγραμμα ότι πρέπει να εκτελέσει τη Λειτουργία 2. o inputfilename - είναι το όνομα του αρχείου εισόδου που περιέχει τα δεδομένα του Kenken puzzle. Λειτουργία 3 (Αποθήκευση λύσης) Εντάξετε στο πρόγραμμα σας μια συνάρτηση writepuzzle(your_parameters)η οποία αποθηκεύει στο αρχείο out-filename.txt (όπου filename.txt το όνομα του αρχείου που περιείχε το αρχικό παιχνίδι) το Kenken puzzle που βρίσκεται στην μνήμη. Για παράδειγμα, για το puzzle της εικόνας 1, το αρχείο εξόδου πρέπει να περιέχει τους αριθμούς: 2a 4a 1b 3b 1c 2a 3b 4d 3c 1e 4f 2f 4e 3e 2g 1g Αυτή τυγχάνει να είναι και μια λύση του puzzle της εικόνας 1. Λειτουργία 4 (Αυτόματη Επίλυση Kenken puzzle) Για να λυθεί αυτόματα ένα Kenken puzzle, μπορούμε να χρησιμοποιήσουμε ένα αλγόριθμο o οποίος παράγει όλους του συνδυασμούς τιμών για τα κελιά (περιοριστείτε για λόγους απόδοσης σε μικρές τιμές του N, π.χ., 5) που ικανοποιούν τους περιορισμούς του παιχνιδιού, δηλαδή κάθε γραμμή και κάθε στήλη φέρουν μια διακριτή ακέραια τιμή και επίσης να ικανοποιούνται οι περιορισμοί των κλουβιών όπως αναλύθηκαν νωρίτερα. Η πιο πάνω διαδικασία, η οποία είναι brute-force (τυφλή ή απληροφόρητη), είναι η απλούστερη και υπολογιστικά ακριβότερη μέθοδος για επίλυση τέτοιων προβλημάτων, ωστόσο επαρκεί για να αναδείξει τη χρησιμότητα των υπολογιστών για αυτόματη επίλυση προβλημάτων. Για αυτήν την περίπτωση, η σύνταξη κλήσης του προγράμματος για αυτήν την λειτουργία θα είναι: $./kenken -s inputfilename όπου: o -s - είναι το όρισμα που λέει στο πρόγραμμα ότι πρέπει να εκτελέσει τη Λειτουργία 3. o inputfilename - είναι το όνομα του αρχείου εισόδου που περιέχει τα δεδομένα του Kenken puzzle. Παρακαλώ όπως χρονομετρήσετε τον χρόνο εκτέλεσης του solver σας με τον πιο κάτω τρόπο: $ time./kenken -s inputfilename real user sys 0m0.987s 0m0.974s (αυτό σε ένα Intel Core Duo θα πάρει σχεδόν 1 δευτερόλεπτο!) 0m0.007s Εάν έχετε χρόνο και διάθεση, προσπαθήσετε να σκεφτείτε τρόπους για να βελτιώσετε τον χρόνο εκτέλεσης του επιλυτή σας. Οι καλύτερες λύσεις ενδέχεται να πάρουν και μπόνους στη βαθμολογία. 4 από 16

ΙΙΙ. Γενικές Οδηγίες ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου Το πρόγραμμα σας θα πρέπει να συμβαδίζει με το πρότυπο ISO C, να περιλαμβάνει εύστοχα και περιεκτικά σχόλια, να έχει καλή στοίχιση και το όνομα κάθε μεταβλητής, σταθεράς, ή συνάρτησης να είναι ενδεικτικό του ρόλου της. Να χρησιμοποιήσετε το λογισμικό τεκμηρίωσης doxygen έτσι ώστε να μπορούμε να μετατρέψουμε τα σχόλια του προγράμματός σας σε HTML αρχεία και να τα δούμε με ένα browser. Η συστηματική αντιμετώπιση της λύσης ενός προβλήματος περιλαμβάνει στο παρόν στάδιο τη διάσπαση του προβλήματος σε μικρότερα ανεξάρτητα προβλήματα που κατά κανόνα κωδικοποιούμε σε ξεχωριστές συναρτήσεις. Για αυτό τον λόγο σας καλούμε να κάνετε χρήση συναρτήσεων και άλλων τεχνικών δομημένου προγραμματισμού που διδαχτήκατε στο ΕΠΛ131. Επίσης, σας θυμίσουμε ότι κατά την διάρκεια της εκτέλεσης του προγράμματος σας αυτό θα πρέπει να δίνει τα κατάλληλα μηνύματα σε περίπτωση λάθους. Τέλος το πρόγραμμα σας θα πρέπει να μεταγλωττίζεται στις μηχανές του εργαστηρίου. Παρακαλώ όπως μελετηθούν ξανά οι κανόνες υποβολής εργασιών όπως αυτοί ορίζονται στο συμβόλαιο του μαθήματος. Επίσης να ακολουθήσετε τα πιο κάτω βήματα όταν υποβάλετε την άσκηση σας στο Moodle: 1. Δημιουργείστε ένα κατάλογο με το όνομά σας π.χ., PyrrosBratskas/ χωρίς να αφήνετε κενά στο όνομα του καταλόγου. 2. Βάλτε μέσα στον κατάλογο αυτό όλα τα αρχεία της εργασίας (κώδικας, doxygen configuration file, README.md) που πρέπει να υποβάλετε. 3. Συμπιέστε (zip) τον κατάλογο (και όχι τα αρχεία ξεχωριστά) χρησιμοποιώντας την εντολή zip c PyrrosBratskas.zip PyrrosBratskas/* 4. Βεβαιωθείτε ότι κάνατε σωστά τα τρία προηγούμενα βήματα 5. Ανεβάστε στο Moodle το συμπιεσμένο αρχείο π.χ., PyrrosBratskas.zip ΙV. Κριτήρια αξιολόγησης Λειτουργία 1 (Ανάγνωση Αρχείου) 10 Λειτουργία 2 (Διαδραστική επίλυση Kenken) 35 Λειτουργία 3 (Αποθήκευση Kenken): 10 Λειτουργία 4 (Αυτόματη επίλυση Kenken): 35 Γενική εικόνα (ευανάγνωστος κώδικας, σχολιασμός, κλπ.) 10 ΣΥΝΟΛΟ 100 5 από 16

V. Παραδείγματα εκτέλεσης >./kenken -i kk5x5.txt a=9+ b=4+ c=2+ d=10+ e=1+ f=8* g=11+ h=3+ i=4+ j=15* k=12* l=2+ m=5+ 0a 0b 0c 0d 0e 0a 0a 0g 0d 0d >1,1=3 3a 0b 0c 0d 0e 0a 0a 0g 0d 0d >1,2=4 3a 4b 0c 0d 0e 0a 0a 0g 0d 0d >1,3=2 6 από 16

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου 3a 4b 2c 0d 0e 0a 0a 0g 0d 0d >1,4=5 3a 4b 2c 5d 0e 0a 0a 0g 0d 0d >1,5=1 0a 0a 0g 0d 0d >2,1=5 7 από 16

5a 0a 0g 0d 0d >2,2=4 Error: Illegal value insertion! 5a 0a 0g 0d 0d >2,2=1 5a 1a 0g 0d 0d >2,3=4 5a 1a 4g 0d 0d 8 από 16

>2,4=3 5a 1a 4g 3d 0d >2,5=1 Error: Illegal value insertion! 5a 1a 4g 3d 0d >2,5=3 Error: Illegal value insertion! 5a 1a 4g 3d 0d >2,4=0 9 από 16

Value cleared! 5a 1a 4g 0d 0d >2,4=2 5a 1a 4g 2d 0d >2,5=3 >3,1=1 10 από 16

1f 0g 0g 0h 0i >3,2=2 1f 2g 0g 0h 0i >3,3=5 1f 2g 5g 0h 0i >3,4=3 1f 2g 5g 3h 0i 11 από 16

>3,5=4 >4,1=4 4f 0j 0k 0k 0l >4,2=5 4f 5j 0k 0k 0l 12 από 16

>4,3=3 4f 5j 3k 0k 0l >4,4=1 4f 5j 3k 1k 0l >4,5=2 >5,1=2 13 από 16

2f 0j 0j 0k 0m >5,2=3 2f 3j 0j 0k 0m >5,3=1 2f 3j 1j 0k 0m >5,4=1 Error: Illegal value insertion! 14 από 16

2f 3j 1j 0k 0m >5,4=4 2f 3j 1j 4k 0m >5,5=5 ***Game solved*** 2f 3j 1j 4k 5m 15 από 16

>./kenken -s kk5x5.txt a=9+ b=4+ c=2+ d=10+ e=1+ f=8* g=11+ h=3+ i=4+ j=15* k=12* l=2+ m=5+ ***Game solved*** 2f 3j 1j 4k 5m >time./kenken -s kk5x5.txt a=9+ b=4+ c=2+ d=10+ e=1+ f=8* g=11+ h=3+ i=4+ j=15* k=12* l=2+ m=5+ ***Game solved*** 2f 3j 1j 4k 5m real user sys 0m0.311s 0m0.309s 0m0.002s 16 από 16