to post PASS PASS FAIL

Σχετικά έγγραφα
Sheet1_2. - Δεν απελευθερώνεις τη δυναµικά δεσµευµένη µνήµη. - Η έξοδος του προγράµµατός σου δεν είναι ακριβώς όπως ζητούσε η άσκηση.

Βαθμός Σχόλια. lab6 PASS PASS. - Πολύ καλή δουλειά, αλλά προσπάθησε να κάνεις την άσκηση χρησιµοποιώντας συναρτήσεις από το string.

FAIL PASS PASS οριακά

Sheet1_2 FAIL. - To πρόγραµµα δεν κάνει compile Δεν παρέδωσε FAIL

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

Βαθμός Σχόλια. lab PASS 1194 PASS 1238 PASS 1239 PASS

lab5 -Ο κώδικάς σου είναι σωστός αλλά από εδώ και στο εξής προσπάθησε να βάζεις σχόλια στην µορφή που ζητάει το φυλλάδιο

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

lab11 - Να εκτυπώνεις πιο κατατοπιστικά µηνύµατα λάθους. Αν είναι όλα ίδια, δεν είναι ξεκάθαρο ποιο αρχείο έχει πρόβληµα.

Sheet1_2. - Δεν υπάρχουν σχόλια συναρτήσεων - Να χρησιµοποιείς πιο περιγραφικά ονόµατα µεταβλητών (και σίγουρα όχι απλούς χαρακτήρες όπως c, d) Page 1

lab14grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Βαθμός Σχόλια. lab8. οριακά PASS 1194 PASS

Sheet3_2. Τα literals (3.0, 1.5, κτλ) πρέπει να ορίζονται ως σταθερές.

lab2 -Στην printf να βάζεις \n έτσι ώστε να αλλάζει γραµµή όποτε σου εµφανίζει κάποιο µήνυµα.

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1

-Δεν έχεις σχόλια, καλό θα ήταν να έχεις πιο περιγραφικό σχόλιο στην αρχή

- Το πρόγραµµα σας δίνει τα αναµενόµενα αποτελέσµατα.

Πανεπιστήµιο Θεσσαλίας, THMMY HY120, Σεπτέµβριος 2015 ΟΝΟΜΑΤΕΠΩΝΥΜΟ:

Βαθμός Σχόλιο. lab3_grades

lab10grades - Το αποτέλεσµα της τοµής θα έπρεπε να εµφανίζετε µέσα σε εισαγωγικά "Helo".

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

ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ. 812 PASS Καλή δουλειά

lab9grades Άσκηση 1 - Σωστοί τύποι (παραµέτρων και επιστρεφόµενης τιµής) της series_cosh.

lab2grades - Στη scanf υπολογίζετε τουλάχιστον 5 χαρακτήρες %5.2f προδιαγραφές που ζητούνται στην εκφώνηση. -

οριακό PASS 402 PASS Πολύ σωστά, µπράβο οριακό PASS

Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ. οριακό PASS

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

lab6grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ Διαδικαστικά: Όλα οκ.

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

Ενδεικτικές λύσεις και στατιστικά

lab7grades -Σωστή χρήση της sprintf -Σωστά ανιχνεύετε τον χαρακτήρα που πρέπει να αφαιρέσετε. -Σωστή µεταφορά στοιχείων µια θέση αριστερά.

Στην clearlist: - Όλα ok. οριακό PASS

ΑΕΜ ή username. Sheet2

Τα ονόµατα των φακέλων πρέπει να έχουν το επίθετά σας και όχι τα username που χρησιµοποιείτε στα εργαστήρια.

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Τετάρτη 7/12/2016, 21:00

Παράδοση άσκησης: οκ, αλλά προσέξτε τις νέες οδηγίες για την ονοµασία του φακέλου.

Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ 321 FAIL

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Sheet PASS 1426 PASS 1428 PASS. Page 1

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

lab9grades -Έπρεπε να χρησιµοποιήσεις την sprintf για το formatting των strings.

Λύσεις για τις ασκήσεις του lab5

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 5/12/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/2016, 21:00

lab6grades - Δεν έχετε δηλώσει το βαθµό βάσης ως σταθερά. - Το µήνυµα εισόδου θέλει χαρακτήρα κενού ' ' στο τέλος και όχι TAB '\t'.

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

Παράδοση άσκησης: Εστάλη με καθυστέρηση. Να μην επαναληφθεί Προσέξτε τις νέες οδηγίες για την ονομασία του φακέλου.

Η γλώσσα προγραμματισμού C

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

Προγραμματισμός Ι (ΗΥ120)

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Άσκηση 2: -Δεν παραδόθηκε. Το εµαιλ είχε λάθος θέµα. Έπρεπε να είναι CE120 lab6

- Ο τελευταίος έλεγχος στη συνάρτηση είναι περιττός. Αν έχει φτάσει µέχρι εκεί το πρόγραµµα, τότε αναγκαστικά το µήκος είναι >= του PASSWD_MIN_LEN.

Εισαγωγή στον Προγραμματισμό (με. τη C)

lab5grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ ΑΣΚΗΣΗΣ ΑΛΛΑ ΣΧΟΛΙΑ

Χαρακτηριστικά αναδροµής

lab4grades Παράδοση ασκήσεων: -Όλα καλά Άσκηση 1η: -Σωστή 357 PASS

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Εκφώνηση άσκησης. Η Κρεμάλα σαν παιχνίδι. Ανάλυση. Μέρος Α Αναφoρά, ανάλυση τακτικής. Υλοποίηση του παιχνιδιού «Κρεμάλα»

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Μ.Σ. lab12grades FAIL. η συνθήκη για έξοδο είναι και αυτή σωστή. Οριακό PASS. στα string. - σωστή και η κλήση της συνάρτησης.

Η γλώσσα προγραμματισμού C

Εργαστήριο 5. Εαρινό Εξάμηνο

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

lab7grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

- Σωστή χρήση του προσδιοριστή const για την σταθερά pi. Καλό θα ήταν επιλέξετε κεφαλαία γράµµατα για το όνοµα της σταθεράς.

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

for for for for( . */

Μεθόδων Επίλυσης Προβλημάτων

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

Υπολογισμός - Εντολές Ελέγχου

Η γλώσσα προγραμματισμού C

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Μαθήματα από τα εργαστήρια

Δομημένος Προγραμματισμός (ΤΛ1006)

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

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

Transcript:

AEM COMMENTS - Να δίνεις περιγραφικά ονόµατα σε όλες τις µεταβλητές (τι είναι τα k, flag, temp?) - Το.katastash πρέπει να γίνεται reset σε 0 στην euresh_grammatos, µετά από κάθε κλήση στη search_the_word. 0001 0002 0003 0004 0005 0006 0008 - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή του block κάθε συνάρτησης. - Πρόσεχε τη στοίχιση - Να χρησιµοποιείς περιγραφικές µεταβλητές (όχι m, k) - Πολύ καλή δουλειά κατα τα άλλα. - Segmentation fault στη γραµµή 50 - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών. Τι είναι τα a,b,c,d? - Δεν υπάρχουν σχόλια. - Αν υπήρχαν καλά σχόλια και καλά ονόµατα µεταβλητών,θα ήταν πολύ πιο εύκολο να βρεθει πού οφείλεται το segmentation fault. 0009 0010 - Segmentation fault στη γραµµή 74 διότι βάζεις δεδοµένα στο word χωρίς να το έχεις αρχικοποιήσει (εποµένως το word περιέχει µια άκυρη διεύθυνση). Έπρεπε είτε να είχες δεσµευσει µνήµη δυναµικά για το word ή να το έχεις δηλώσει ως στατικό πίνακα. - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή του block κάθε συνάρτησης. - Η αναδροµική συνάρτηση επιστρέφει µια τιµή την οποία δεν πρέπει να αγνοείς. - Πρέπει να υπάρχει ένα base case που ελέγχει αν ελέγθηκε όλη η λέξη. - Το BoxStatus πρέπει να γίνεται reset µετά από κάθε κλήση στην αναδροµική συνάρτηση (µέσα στη main) Page 1

0011 0012 0013 0014 0015 0016 0018 0019 0020 0021 - Άσχηµη στοίχιση - Πρέπει να καλείς τη συνάρτηση mhdenismos µετά από κάθε κλήση στη search_words (µέσα στη main) - Καλή δουλειά κατά τα άλλα. - Το όνοµα του αρχείου που παρέδωσες είχε έναν επιπλέον κενό χαρακτήρα - φρόντιζε να ονοµάζεις σωστά το αρχείο κάθε φορά - Μην αγνοείς τα warnings του compiler! - Μη χρησιµοποιείς σχόλια C++ - Το πρόγραµµα δεν κάνει compile. Αν είχες σωστή στοίχιση, θα είχες βρει εύκολα το λάθος (λείπει κάποια αγκύλη). 0022 Αντιγραφή 0023 0025 0026 0027 Αντιγραφή 0028 - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών (πχ, όχι k, flag, check). Ειδικά το flag δεν είναι καθόλου προφανές τι κάνει. - Η συνάρτηση sximatismos_lexis επιστρέφει µια τιµή. Αυτή την τιµή δεν πρέπει να την αγνοείς, αλλά να την αποθηκεύεις σε µια µεταβλητή και να τη χρησιµοποιείς για να επιστρέψεις αναλόγως 0 ή 1. Το τρυκ που έχεις µε το flag κάνει το πρόγραµµά σου δυσνόητο. - Πρέπει να κάνεις reset το.used σε 0 µετά από κάθε κλήση στην sximatismos_lexis (µέσα στη main) Page 2

0030 - Σωστά έχεις δηλώσει το SIZE, αλλά πρέπει και να το χρησιµοποιείς! - Μη χρησιµοποιείς "περιεργα" τρυκ για να βγαίνεις από for. Γι' αυτό υπάρχει το break. - Η αναδροµική συνάρτηση λειτουργεί σωστά, αλλά το πρόγραµµα βγάζει λάθος αποτελέσµατα όταν δίνονται πολλαπλές λέξεις. 0033 Αντιγραφή 0034 '1186 Αντιγραφή 1072 1073 1074 - Όταν βρίσκεις µια λέξη, πρέπει να σταµατάς την αναζήτηση γι'αυτή τη λέξη. - Η αναδροµική συνάρτηση επιστρέφει µια τιµή. Κάθε φορά που κάνεις αναδροµική κλήση πρέπει να αποθηκεύεις και να χρησιµοποιείς αυτή την τιµή (στη συγκεκριµένη περίπτωση να την επιστρέφεις). Με τον τρόπο που έχεις κάνει την υλοποίηση, το αποτέλεσµα δεν επιστρέφεται ποτέ. Δες το παράδειγµα του λαβύρινθου. - Το.pass πρέπει να γίνεται reset σε 0 στη findletter, µετά από κάθε κλήση στη Builder. - Δεν υπάρχουν σχόλια συναρτήσεων. - Μη χρησιµοποιείς σχόλια τύπου C++ - Τι είναι το r? Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών - Άσχηµη στοίχιση - Κάνεις µεν reset το.katilhmeno σε 0, αλλά έπρεπε να το κάνεις κάθε φορά µετά την κλήση στην evresh_lexewn Page 3

to post 1075 1077 1079 1080 - Όταν χρησιµοποιείς scanf για να διαβάσεις µια συµβολοσειρά, πρέπει να προσδιορίζεις πάντα το πλήθος των χαρακτήρων που πρέπει να διαβαστούν. - Στη σύγκριση p == strlen(string) - 1, δεν έπρεπε να αφαιρείς το 1. -Δεν πρέπει να αγνοείς το αποτέλεσµα της συνάρτησης anadromi µετά από κάθε αναδροµική κλήση. Στη συγκεκριµένη άσκηση έπρεπε να το επιστρέφεις. Δες το παράδειγµα του λαβύρινθου. Αυτό που κάνεις εσύ, είναι να επιστρέφεις πάντα 1, γι αυτό σου βγάζει ότι όλες οι λέξεις υπάρχουν. Αντί για anadromi(board...); return 1; έπρεπε να είχες γράψει return anadromi (board...); - To result έπρεπε να το είχες αρχικοποιήσει σε 0. - Πολύ καλή δουλειά µε το enum, αλλά γιατί δεν το χρησιµοποιείς µετά? Για παράδειγµα, αντί για board[i][j].use = 1; έπρεπε να είχες γράψει board[i][j].use = it_can_be_written; - Κάνεις µεν reset το use σε 1, αλλά το κάνεις σε λάθος σηµείο. Έπρεπε να γίνεται είτε αµέσως µετά την κλήση στην anadromi (πριν δηλαδή το break) ή αµέσως µετά τη γραµµή prwto = string[0]; - Πρόσεχε τη στοίχιση - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή του κάθε block συνάρτησης. - Πολύ σωστή η χρήση των YES/NO αντί για 1/0, αλλά έπρεπε να τα χρησιµοποιείς παντού όπου χρειάζεται. Να µη λες 'found = YES' και δυο γραµµές πιο κάτω 'if (found == 1)' - Το πρόγραµµά σου λειτουργεί µόνο για συγκεκριµένο πλήθος λέξεων. Η εκφώνηση ζητούσε να διαβάζεις το πλήθος των λέξεων από το πληκτρολόγιο. - Το chararray[i][j].check=1; έπρεπε να γίνεται µετά τον έλεγχο του τρέχοντος γράµµατος. - segmentation fault λόγω ατέρµονης αναδροµής. - Να δίνεις περιγραφικά ονόµατα σε όλα τα αναγνωριστικά. Τι σηµαίνει struct k t[n][n]? - Πρέπει να µηδενίζεις το.avl µετά από κάθε κλήση στη resursion (µέσα στη main) - Άσχηµη στοίχιση. - Το πρόγραµµα δε διαβάζει σωστά την είσοδο (δε διαβάζει το seed όπως ζητά η εκφώνηση) - Δε θέτεις πουθενά το seed. - Το πρόγραµµα βρίσκει µια λέξη µόνο αν είναι στην αρχή του πίνακα. Αν το πρόγραµµά σου ήταν πιο καλογραµµένο (καλή στοίχιση, καλά ονόµατα µεταβλητών) θα ήταν εύκολο να βρεθεί το λάθος. Page 4

1081 1082 1084 1085 1086 1087 - Κάνεις µεν reset το.val σε 0, αλλά το κάνεις σε λάθος σηµείο. Έπρεπε να γίνεται αµέσως µετά την κλήση στην find_word (στη main) - Πολύ καλή δουλειά κατά τα άλλα - Άσχηµη στοίχιση - Καλά τα σχόλια στον κώδικα, αλλά δεν υπάρχουν σχόλια συναρτήσεων - Όταν χρησιµοποιείς scanf για να διαβάσεις µια συµβολοσειρά, πρέπει να προσδιορίζεις πάντα το πλήθος των χαρακτήρων που πρέπει να διαβαστούν. - Γιατί χρησιµοποιείς 1 && FindWord(pinakas,word+1,i-1,j);? Είναι ακριβώς το ίδιο µε FindWord(pinakas,word+1,i-1,j); - Μη χρησιµοποιείς σχόλια C++ - Καλή δουλειά κατα τα άλλα. - Να χρησιµοποιείς µεριγραφικά ονόµατα µεταβλητών. Τι είναι τα i, j, k, l, z, c? - Οι θέσεις ενός πίνακα µεγέθους SIZE αριθµούνται από 0 έως και SIZE-1, όχι από 1 εως και SIZE. Αυτό το λάθος είναι αδικαιολόγητο. - Γιατί καλείς δύο φορές την αναδροµική συνάρτηση? anazhthsh(lekseis, i, j, k, l, z, c, box); apotelesma = anazhthsh(lekseis, i, j, k, l, z, c, box); Η πρώτη κλήση είναι περιττή. -Το αποτέλεσµα YES/NO πρέπει να εκτυπώνεται µόνο όταν γνωρίζουµε µε βεβαιότητα αν µια λέξη υπάρχει ή όχι. Με τον τρόπο που το έχεις κάνει, εκτυπώνεται κάποιο αποτέλεσµα κάθε φορά που βρίσκει το πρώτο γράµµα. - Πρέπει να κάνεις reset το.used σε 1 µετά από κάθε κλήση στην anazhthsh (µέσα στη main) - Πρέπει κάθε φορά που µπαίνεις στην αναδροµική συνάρτηση να ελέγχεις αν το τρέχον γράµµα της λέξης είναι ίδιο µε το τρέχον γράµµα του πίνακα. Εσύ ελέγχεις πάντα το επόµενο µε αποτέλεσµα να µη λειτουργεί σωστά η συνάρτησή σου. Page 5

1088 1089 1091 1093 1095 1097 - Η ReadAndFindLetter έπρεπε να εξαντλεί όλο τον πίνακα ψάχνοντας για τη λέξη. Με τον τρόπο που την έχεις υλοποιήσει, επιστρέφει αµέσως µετά την πρώτη πιθανή εµφάνιση της λέξης. - Ο έλεγχος και ανάθεση στο.used έπρεπε να γίνεται στη search. - Δεν υπάρχει κάποιο base case που να ελέγχει αν το τρέχον γράµµα της λέξης είναι ίδιο µε το τρέχον γράµµα του πινακα. Ελέγχεις κάθε φορά το επόµενο γράµµα (οπότε "πηδάς" ένα) - Οι δηλώσεις των µεταβλητών πρέπει να στοιχίζονται όπως και οι υπόλοιπες εντολές - Υπάρχουν σχόλια συναρτήσεων, αλλά είναι ελειπή - για παράδειγµα, δεν εξηγείς τι σηµαίνουν οι παράµετροι - θα βοηθούσε να είχες δώσει καλύτερα ονόµατα σε κάποιες παραµέτρους (πχ row, column αντί για j, k) - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή του κάθε block συνάρτησης. - Να χρησιµοποιείς σταθερές (µε #define ή const) για όλα τα µεγέθη πινάκων. - Καλή δουλειά κατα τα άλλα. - Άσχηµη στοίχιση - Δεν υπάρχουν σχόλια συναρτήσεων - Καλή δουλειά κατά τα άλλα. - Πολύ καλή δουλειά κατά τα άλλα. 1098 1100 - Να δίνεις περιγραφικά ονόµατα σε όλες τις µεταβλητές. Για παράδειγµα, τι είναι τα n, result2 στη main? - Έχεις µπερδέψει το πότε η.timh_elegxou πρέπει να είναι 1 και πότε 0. Θα βοηθούσε πολύ να είχες χρησιµοποιήσει enumeration ή κάποια #defined τιµή αντί για 0/1 - Στη search_word έπρεπε να επιστρέφεις το results αντί για το 1. Με τον τρόπο που το κάνεις, επιστρέφει 1 σε περιπτώσεις που δε θα έπρεπε. - Μετά από κάθε κλήση στη search_word (εντός της main) θα έπρεπε να κάνεις reset το.timh_elegxou. Page 6

1101 1102 1104 - Πρόσεχε τη στοίχιση - Στην αναδροµική συνάρτηση έπρεπε να ελέγχεις αν το.checked είναι 0 (και αν ναι, να επιστρέφεις αµέσως 0) πριν τον έλεγχο if ((pinaka[x][y].characters == word[i])&&(i == wordsize-1)){ - Κατά τα άλλα καλή δουλειά - Πρέπει να κάνεις reset το.used σε 0 µετά από κάθε κλήση στην anadromh (εντός της elegxos_lekshs) - Στην αναδροµική συνάρτηση ξεχνάς να ελέγχεις το χαρακτήρα που βρίσκεται µια γραµµή πιο κάτω από τον τρέχοντα χαρακτήρα. 1105 1109 - Εξαιρετική δουλειά, µπράβο! 1110 1111 1113 1114 - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή της συνάρτησης. - Όταν χρησιµοποιείς scanf για να διαβάσεις µια συµβολοσειρά, πρέπει να προσδιορίζεις πάντα το πλήθος των χαρακτήρων που πρέπει να διαβαστούν. - Να δίνεις περιγραφικά ονόµατα στις µεταβλητές. Τι είναι το temp? - Ενδιαφέρον τρόπος σκέψης για την αναδροµική συνάρτηση. Έπρεπε όµως να έχεις σχόλια συνάρτησης που να εξηγούν τη λειτουργία της. - Κάνεις µεν reset το.used σε 0, αλλά το κάνεις σε λάθος σηµείο. Έπρεπε να γίνεται αµέσως µετά την κλήση στην search_leks (στη main) - Kαλή δουλειά κατά τα άλλα - Να χρησιµοποιείς σταθερές (µε #define ή const) για τα µεγέθη όλων των πινάκων. - Τα base cases πρέπει να ελέγχεται πάντα πριν την αναδροµική κλήση. - Καλή δουλειά κατα τα άλλα. Page 7

1115 1116 1117 1118 1119 1120 1121 - Υπάρχει περιττός κώδικας στην αναδροµική συνάρτηση. Το παρακάτω δεν έχει καµια επίδραση στη λειτουργία της συνάρτησης: if ( found == 0 ) { column++; characters[row][column].used = 0; index++; } Επίσης, ο κώδικας θα µπορούσε να είναι πιο συµµαζεµένος. Για παράδειγµα,οι γραµµές 254-257 θα µπορούσαν να είχαν γραφτεί characters[row][column].used = 1; return searchotherchars(characters, word, found, index+1, row, column-1); Τέλος, η παράµετρος found δεν έχει λόγο ύπαρξης. Κατα τα άλλα, καλή δουλειά, µπράβο. - Πρέπει να κάνεις reset το.diathesimotita σε 1 µετά από κάθε κλήση στην sximatismos_leksewn (µέσα στη main) - Ο σωστός τρόπος να ελέγξεις αν η λέξη έχει τερµατίσει, είναι : if( *lekseis=='\0'). To if(lekseis==null) ελέγχει αν ο δείκτης lekseis δείχνει σε NULL. - Επιπλέον, αν η λέξη έχει τερµατίσει, τότε σηµαίνει πως βρέθηκε, άρα πρέπει να επιστρέφουµε 1, όχι 0. - Αν η λέξη βρεθεί, δεν πρέπει να συνεχίζει η αναζήτηση γι' αυτή. - Άσχηµη στοίχιση - Σωστά κάνεις reset το.visit, αλλά έπρεπε να το κάνεις πιο κάτω, µετά από κάθε κλήση στη search_word. - Πολύ καλή δουλειά, µπράβο! - Δήλωσες πολύ σωστά το µέγεθος, αλλά έπρεπε να το χρησιµοποιείς κιόλας. - Κάνεις µεν reset το timh σε 0, αλλά το κάνεις σε λάθος σηµείο. Έπρεπε να γίνεται αµέσως µετά την κλήση στην anadromh (στη main) - Πολύ καλή δουλειά γενικά, µπράβο. Page 8

1122 1123 1124 1126 1127 1128 - Πρέπει να κάνεις reset το.dia8esimotita σε 0 µετά από κάθε κλήση στην evresi (µέσα στη vres_1to_gramma) - Δεν υπάρχουν καθόλου σχόλια 1129 Αντιγραφή 1130 1131 1133 1135 1137 - Εξαιρετική δουλειά κατά τα άλλα, µπράβο! - Πρέπει να κάνεις reset το.xrhsh σε 0 µετά από κάθε κλήση στην evresh_leksis (µέσα στη main) - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών (τι είναι το g?) - Τα σχόλια συναρτήσεων δεν ακολουθούν τις προδιαγραφές - Πρόσεχε τη στοίχιση - Πρέπει να κάνεις reset το one_or_zero µετά από κάθε κλήση στην anazitisi (µέσα στη main) - Πρέπει να καλείς τη midenismos µέσα στο διπλό for (µετά ή πριν από κάθε κλήση στη search) - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών (τι είναι τα k,l,m,n, num1?) - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή του κάθε block συνάρτησης. Page 9

1139 1141 1142 - Δε χρησιµοποιείς σωστά το --. Ξαναδιάβασε τη διαφορά ανάµεσα στο x-- και στο --x. Επίσης, σε πολλά σηµεία έχεις χρησιµοποιήσει ++ ενώ το σωστό θα ήταν +1 - Πρέπει να κάνεις reset το.timi µετά από κάθε κλήση στην anadromiki_sinartisi (µέσα στη main) - Δεν υπάρχουν καθόλου σχόλια - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών. Τι είναι τα a, b, k? - Η αναδροµική συνάρτηση θα µπορούσε να είναι πιο συµµαζεµένη. Οι έλεγχοι για τα όρια του πίνακα θα µπορούσαν να γίνονται µέσω µιας συνάρτησης στην αρχή της findword. Γενικά, όταν βλεπεις ότι επαναλαµβάνεις πολύ κώδικα, τότε πάντα υπάρχει πιο κοµψός τρόπος να κάνεις αυτό που θέλεις. - Κατα τα άλλα, καλή δουλειά. - Καλή δουλειά! 1144 - Πολύ καλή δουλειά, µπράβο! 1145 1146 1148 1149 - Πρέπει να κάνεις reset το.availability σε UNUSED µετά από κάθε κλήση στην findword (µέσα στη main) - Σωστά θέτεις το flag (το οποίο θα µπορούσε να έχει και πιο περιγραφικό όνοµα) σε 1 όταν βρεθεί η λέξη, αλλά µετά θα έπρεπε και να ελέγχεις την τιµή του flag ώστε να βγαίνεις από την επανάληψη και να σταµατά η αναζήτηση για τη συγκεκριµένη λέξη. - Πολύ καλή δουλειά κατά τα άλλα. - Κατά σύµβαση, τα ονόµατα των µεταβλητών ξεκινούν από µικρό γράµµα στη C - Πρόσεχε τη στοίχιση - Το.Use πρέπει να γίνεται reset σε 0 στη main, µετά από κάθε κλήση στη WordFinder. Page 10

1150 1152 - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών (όχι counterthree) - Σωστά έχεις δηλώσει το SIZE, αλλά πρέπει και να το χρησιµοποιείς όπου χρειάζεται. - Κατά σύµβαση οι σταθερές γράφονται µε κεφαλαία - Σωστά κάνεις reset το.periexomeno, αλλά σε λάθος σηµείο. Έπρεπε να το κάνεις αµέσως µετά την κλήση στην euresh_lexhs. - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών. Τι είναι τα g, k, j? - Ελλειπή σχόλια συναρτήσεων. - Πρόσεχε τη στοίχιση 1155 1157 1158 - Ποτέ να µη χρησιµοποιείς καθολικές µεταβλητές χωρίς λόγο. - Να χρησιµοποιείς #define ή const για τα µεγέθη πινάκων. - Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνουν τα i3, j3, k3, res3, a, b, k, i, j, l, m, c,d,e,f,w,r,p,q? - Άσχηµη στοίχιση - Κώδικας όπως ο παρακάτω, κάνει το πρόγραµµά σου πιο δυσνόητο χωρίς να υπάρχει λόγος: a = Array[i][j].gramma; b = words2[k]; if (a == b)... Γιατί να µην πεις άµεσα: if (Array[i][j].gramma == words2[k])... - Αν η κλήση της search µέσα στη find_first_char επιστρέψει true, τότε πρέπει να σταµατάς την αναζήτηση της συγκεκριµένης λέξης. - Η make_array πρέπει να καλείται µόνο µια φορά, στην αρχή. Είναι περιττό να την καλείς µέσα από την αναδροµική συνάρτηση και καταναλώνει χρόνο και µνήµη χωρίς λόγο. - Κάθε φορά που κάνεις αναδροµική κλήση, δεν πρέπει να αγνοείς το αποτέλεσµα (και στη συγκεκριµένη άσκηση πρέπει να το επιστρέφεις) - Η συνάρτηση δε λειτουργεί σωστά. Αν είχες καλύτερα ονόµατα µεταβλητών ή έστω σχόλια, θα έψαχνα να βρω γιατι... - Ο σχολιασµός δεν είναι σύµφωνος µε τις προδιαγραφές. Page 11

- Segmentation fault στη γραµµή 71 γιατί προσπαθείς να προσπελάσεις δείκτη που δεν έχει αρχικοποιηθεί. Επιπλέον, έχεις δηλώσει τη µεταβλητή results ως δείκτη σε int, αλλά µετά της αναθέτεις το αποτέλεσµα µιας συνάρτησης που επιστρέφει char. - Έχεις δηλώσει την strsearch να επιστρέφει char, αλλά επιστρέφει 0/1. Γιατί δεν την έκανες int? - Για να ελέγξουµε αν ένα string περιέχει µόνο το '\0',\ η σύνταξη είναι if (*str2 == '\0'), όχι if (str2 == '\0') 1159 1160 1161 Αντιγραφή 1171 1172 1177 1178 - Η εντολή letters[alfabito]='\0'; γράφει πέρα των ορίων του πίνακα και ως αποτέλεσµα σβήνει κάποια άλλη µεταβλητή και το πρόγραµµα δε λειτουργεί σωστά. Σε ένα πίνακα µεγέθους ALFABITO, το τελευταίο στοιχείο βρίσκεται στη θέση ALFABITO-1. Στο συγκεκριµένο πίνακα, είναι λάθος να αναθέτεις το '\0' σε οποιαδήποτε θέση του. - Έπρεπε να καλείς τη zero(table) µετά από κάθε κλήση στη search (εντός της main). - Όταν προσθέτουµε µηδέν σε κάποια ποσότητα, η ποσότητα δεν αλλάζει. Ποιος είναι ο λόγος που το κάνεις αυτό στην εντολή apotelesma=0+search(...)? - Η αναδροµική κλήση στη γραµµή 98 δεν εξυπηρετεί τίποτα και δεν υπάρχει λόγος να γίνεται. - Πολύ άσχηµη στοίχιση - Να δίνεις περιγραφικά ονόµατα στις µεταβλητές σου. Τι είναι τα m,n,k? - Στη C οι δηλώσεις µεταβλητών πρέπει να βρίσκονται στην αρχή του κάθε block συνάρτησης. - Αν η λέξη βρεθεί, δε χρειάζεται να συνεχιστεί το ψάξιµο - αλλά το τρυκ µε το exist_sum είναι ενδιαφερουσα ιδέα και λειτουργεί σωστά - Στο base case που συγκρίνεις το b µε το word_length, έπρεπε να έχεις <, όχι <=, και στην περίπτωση που δεν είναι, να επιστρέφεις 1. Γενικά, τα base cases πρέπει να ελέγχονται πριν την αναδροµική κλήση. - Αν το πρόγραµµά σου ήταν πιο καλογραµµένο (στοίχιση, ονόµατα µεταβλητών), θα ήταν πολύ πιο εύκολο να βρεθεί που είναι το λάθος. Page 12

1180 1181 1184 - Να δίνεις περιγραφικά ονόµατα σε όλα τα αναγνωριστικά (γιατί ονόµασες a το πεδίο του struct?) - Καλή δουλειά κατα τα άλλα. 1185 1187 1191 - Γενικά αποφεύγουµε να έχουµε πολύ µεγάλες γραµµές κώδικα γιατί είναι δυσανάγνωστες. Συνήθως, το µέγιστο µήκος είναι 70 χαρακτήρες. Θα µπορούσες να έχεις "σπάσει" µια µεγάλη γραµµή ως εξής: if ( outofbounds(grammi-1) && pinakas[grammi-1][stili].visited == 0 && pinakas[grammi-1][stili].gramma == *(lexi+1) && sximatismos_lexis(pinakas, (lexi + 1), (grammi-1), stili) == 1) Παρατήρησε ότι τα && µπήκαν στην αρχή της κάθε γραµµής (αντί για το τέλος της προηγούµενης) για να είναι φανερό πως πρόκειται για εντολή που συνεχίζεται σε πολλές γραµµές - Κάνεις µεν reset το.visited σε 0, αλλά το κάνεις σε λάθος σηµείο. Έπρεπε να γίνεται αµέσως µετά την κλήση στην sximatismos_lexis (στη main) - Δεν υπάρχουν σχόλια συναρτήσεων - Κάθε φορά που βρίσκεσαι στην αναδροµική συνάρτηση, πρέπει να ελέγχεις αν το τρέχον γράµµα της λέξης είναι ίδιο µε το τρέχον γράµµα του πίνακα. Εσύ κοιτάς πάντα το επόµενο, και ως αποτέλεσµα οι έλεγχοι δε λειτουργούν σωστά για το προτελευταιο γράµµα κάθε λέξης και το αποτέλεσµα βγαίνει πάντα ΝΟ. Page 13