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

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

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

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

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

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

FAIL PASS PASS οριακά

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

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

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

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

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

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

to post PASS PASS FAIL

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

403 FAIL Λάθος στο πακετάρισµα του αρχείου.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

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

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

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

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

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

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

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

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

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

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

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

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

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

Εισαγωγή στον δομημένο προγραμματισμό

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

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

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

Επανάληψη για τις Τελικές εξετάσεις

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΑΕΜ ή username. Sheet2

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

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

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

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

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δεν έστειλες την άσκηση 1, και αυτό που έστειλες ήταν σκέτο αρχείο, όχι το tgz που ζητούσε η εκφώνηση.

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

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

ΕΡΓΑΣΤΗΡΙΟ 8: Πολυδιάστατοι Πίνακες και Δυναμική Δέσμευση Μνήμης

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

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

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

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

Γλώσσα Προγραμματισμού C

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

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

abistarakis PASS - Σωστή κατασκευή tgz και ονοµασία αρχείων

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

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

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

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

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

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

Ενδεικτική περιγραφή μαθήματος

Transcript:

Α. Μ. Βαθμός Σχόλια 1183 1194 1195 FAIL 1238 1239 - Άσχηµα ονόµατα µεταβλητών (s, t) - Δε δεσµεύεις αρκετή µνήµη για τις λέξεις που αποθηκεύονται στον πίνακα (και γι αυτό τελικά το πρόγραµµά σου κάνει crash) - Το τελευταίο for στο πρόγραµµά σου είναι περιττό γιατί κάνει µόνο µια επανάληψη, και λάθος γιατί έχεις ένα ερωτηµατικό µετά τη δεξιά παρένθεση. - Δεν υπολογίζεις σωστά το sum. - Το strlen(s) δε µπορεί να υπολογιστεί σωστά όσο το s "χτίζεται" γιατί δεν υπάρχει '\0 που να µαρκάρει το τέλος του. - Το free(array) είναι λάθος, γιατί το array είναι στατικός πίνακας. Πρέπει να αποδεσµεύεις τη µνήµη που είχες δεσµεύσει µε malloc, δηλαδή το κάθε στοιχείο array[i] - Όταν θες να βγεις από ένα loop να χρησιµοποιείς break και όχι τρυκ που αλλάζουν την τιµή του i. - Τα printf στο πρώτο loop έπρεπε να έχουν αφαιρεθεί πριν την παράδοση της άσκησης. - Για να µπορείς να χρησιµοποιήσεις realloc πρέπει πρώτα να έχεις δεσµεύσει µνήµη µε malloc. Ξαναδιάβασε τη σχετική θεωρία. Στη συγκεκριµένη άσκηση δεν υπάρχει λόγος να χρησιµοποιηθεί realloc πουθενά. - Στη γραµµή 23 έπρεπε να δεσµεύεις µνήµη για κάθε deiktis[i], όχι για το deiktiw το οποίο είναι στατικός πίνακας. - Αν το x είναι <0 δεν έπρεπε να διαβάζεις το y - Όταν θες να βγεις από ένα loop να χρησιµοποιείς break και όχι τρυκ που αλλάζουν την τιµή του i. - Στη γραµµή 36 πριν κάνεις την ανάθεση σε NULL έπρεπε να κάνεις free το στοιχείο. - Στο loop µε το k έπρεπε να ελέγχεις για κάθε στοιχείο αν είναι NULL πριν προσπαθήσεις να το εκτυπώσεις (αλλιώς γίνεται segmentation fault). - H χρήση των k, j (το οποία δεν είναι και καθόλου περιγραφικά ονόµατα) µπερδεύει το πρόγραµµά σου και τελικά είναι περιττή. Προσπάθησε να το ξαναγράψεις χωρίς να τα χρησιµοποιείς. Δες και τη λύση. - Το deiktis είναι στατικός πίνακας, οπότε το τελευταίο free δεν είναι σωστό. - Μετά από κλήση στη malloc να ελέγχεις πάντα αν επέστρεψε NULL - Πολύ άσχηµα ονόµατα µεταβλητών - Να κάνεις πάντα typecast τη διεύθυνση που επιστρέφει η malloc και να ελέγχεις για NULL. - Στο τέλος του προγράµµατος έπρεπε να αποδεσµεύεις όλη τη δυναµικά δεσµευµένη µνήµη. Page 1

1240 1241 1242 FAIL 1243 1244 - Εξαιρετική δουλειά! 1246 1247 1248 lab8 - Όταν δεσµεύεις µνήµη να µην κάνεις ποτέ υποθέσεις για το µέγεθος του τύπου (πχ, να µην παραλείπεις το sizeof(char) επειδή υποθέτεις ότι θα είναι 1) - "Τρως" το τελευταίο γράµµα του string - Πρέπει να κάνεις free και τα περιεχόµενα του πίνακα. - Δεν έπρεπε να κάνεις sum=sum-1. Η επιπλέον θέση χρειάζεται για το '\0 - Πρέπει να αποδεσµεύεις και τη µνήµη για τις επιµέρους λέξεις. - Μη βάζεις \n στο scanf - Όταν το µέγεθος του string είναι 20, το scanf πρέπει να διαβάζει 19 χαρακτήρες (για να βάζει το '\0 στην εικοστή θέση) - Δεσµεύεις πολύ περισσότερο χώρο από όσο χρειάζεται για το τελικό string. - Το τελικό string δεν έχει '\0 για να σηµατοδοτεί το τέλος του. - Δεν αποδεσµεύεις όλη τη δυναµικά δεσµευµένη µνήµη - Απαράδεκτα ονόµατα µεταβλητών - Πριν διαβάσεις κάτι στο pinakas[i] έπρεπε να έχεις δεσµεύσει µνήµη γι αυτό. - Τι σκοπό εξυπηρετεί το k? Φαίνεται να έχεις µπερδευτεί. Στην αρχή το χρησιµοποιείς σαν προσωρινή µεταβλητή για την τιµή της τετµηµένης αλλά αργότερα το χρησιµοποιείς σα να εκφράζει το πλήθος των στοιχείων. - Αν η απόσταση είναι µικρότερη ή ίση του THRESHOLD πρέπει να αποδεσµεύεις τη µνήµη για το συγκεκριµένο σηµείο και να το κάνεις NULL, όχι απλά να κάνεις την απόσταση µηδέν. - Άσχηµη στοίχιση και άσχηµα ονόµατα µεταβλητών πριν προσπαθήσεις να προσπελάσεις το στοιχείο. Έτσι όπως το έχεις τώρα, αν το pin[i] είναι NULL το πρόγραµµά σου θα κάνει crash στη γραµµή 34. - Όταν πρόκειται να χρησιµοποιήσεις το i πέρα από τα όρια του loop, να του δίνεις περιγραφικό όνοµα. - Πρόσεχε όταν κάνεις copy+paste. Στο τελευταίο for έχεις για µετρητή το l αλλά χρησιµοποιείς i για να προσπελάσεις τον πίνακα. - Δεν υπάρχει λόγος να χρησιµοποιείς διαφορετικό µετρητή σε κάθε loop. Μπορείς να χρησιµοποιείς πάντα i. - Πιθανώς το χειρότερο δυνατό όνοµα µεταβλητής είναι το l (el) γιατί σε πολλές γραµµατοσειρές µοιάζει µε I (κεφαλαίο i). ΜΗΝ το χρησιµοποιείς. - Το τελευταίο for που προσπαθεί να εκτυπώσει τα αποτελέσµατα είναι τελείως λάθος.τι υποτίθεται ότι εκφράζει το j και γιατί δεν ανανεώνεται ποτέ η τιµή του? Δε δικαιολογείται να κάνεις ακόµη λάθη σε απλές δοµές επανάληψης. Page 2

1249 1252 1253 1255 1256 1260 1261 1262 1267 FAIL - Στο τέλος έπρεπε να αποδεσµεύεις όση µνήµη είναι δεσµευµένη δυναµικά - Να κάνεις πάντα typecast το αποτέλεσµα της malloc - Εξαιρετική δουλειά! Μόνο στην αφαίρεση σηµείων έπρεπε να ελέγχεις <=THRESHOLD αντί για <THRESHOLD - Αν το x είναι <0 δεν έπρεπε να διαβάζεις το y και δεν έπρεπε να αποθηκεύεις κάτι στον πίνακα. - Τα ονόµατα των µεταβλητών δεν είναι αρκετά περιγραφικά (τι σηµαίνει "µετρητής2" και τι διαφορά έχει από το "µετρητής1"? - Αν το metrhths1 είναι ίσο µε NUMPOINTS τότε εκεί που κάνεις ολίσθηση στον πίνακα θα βγεις εκτός ορίων στην τελευταία επανάληψη (λόγω του pinakas[i+1] ). Γι αυτό το πρόγραµµά σου κάνει crash στο πρώτο test case. - Όπως είπαµε κατά τη διάρκεια του εργαστηρίου, έπρεπε να αφαιρεθούν τα στοιχεία χωρίς να γίνει ολίσθηση, Απλά να αποδεσµευτεί η µνήµη και να γίνουν NULL οι δείκτες. Ακόµη και µε τον τρόπο που το έκανες, έπρεπε να φροντίζεις να αποδεσµεύεις τη µνήµη του pinakas[i] πριν το αντικαταστήσεις µε το pinakas[i+1] - Δοκίµασε να ξανακάνεις την άσκηση χωρίς να χρησιµοποιήσεις καθόλου τους δύο µετρητές. Δεν είναι απαραίτητοι και τελικά κάνουν πιο πολύπλοκο τον κώδικα. - Μετά από κλήση στη malloc να ελέγχεις πάντα αν επέστρεψε NULL - Αν το x είναι <0 δεν έπρεπε να διαβάζεις το y - Το µέγεθος της µνήµης που δεσµεύεις για το τελικό string πρέπει να είναι µεγαλύτερο κατά ένα (για το '\0') - Πρέπει να αποδεσµεύεις µνήµη για τα στοιχεία του pinakas - Η συνθήκη του loop έπρεπε να είναι i < LINESIZE και όχι i <= LINESIZE. Έπρεπε να το ξέρεις αυτό! - Υπολογίζεις τις αποστάσεις αλλά δε θέτεις τους δείκτες. - Η απόσταση είναι ακέραια τιµή και προσπαθείς να την εκτυπώσεις µε %c Page 3

1269 1271 1274 - Πολύ καλή δουλειά 1276 lab8 1278 - Απουσία από το εργαστήριο 1280 FAIL 1281 1282 1283 1284 - Πρόσεχε τη στοίχιση - Η πρώτη γραµµή της main έπρεπε να είναι πιο έξω. - Πολύ καλή δουλειά - Απαράδεκτα ονόµατα µεταβλητών (αν είχες καλύτερα ονόµατα θα είχες πάρει καθαρό ) - Χρησιµοποιείς το deiktes[i] πριν ελέγξεις αν είναι NULL. Οπότε αν κάτι έχει πάει στραβά και είναι NULL, το πρόγραµµα θα τερµατίσει µε segmentation fault πολύ πριν τον έλεγχο. - Το µέγεθος της µνήµης που δεσµεύεις για το n έπρεπε να είναι µεγαλύτερο κατά ένα byte (για το '\0') - Η απελευθέρωση µνήµης είναι λάθος - δες τη λύση. - Έπρεπε να προσθέτεις κι ένα κενό µετά από κάθε λέξη στο τελικό string. - Τα όρια των loops έπρεπε να είναι i<maxwords κι όχι i<=maxwords. Έπρεπε να το ξέρεις αυτό! Ελλιπής λύση. - Η strncpy δε βάζει '\0 στο τέλος του string, οπότε πρέπει να φροντίζεις να το βάζεις µόνος σου. -Όταν ελέγχεις το THRESHOLD πρέπει ή να ελέγχεις µόνο τόσα σηµεία όσα είναι στον πίνακα (το οποίο δεν είναι απαραίτητα NUMPOINTS) ή ακόµη καλύτερα να είχες αρχικοποιήσει τις κενές θέσεις σε NULL και να έλεγχες µετά µόνο όσα σηµεία δεν είναι NULL.. - Πρόσεχε τη στοίχιση. Το εργαλείο του Kate για αυτόµατη στοίχιση δε λειτουργεί πάντα σωστά. - Καλή δουλειά στην εισαγωγή δεδοµένων, αλλά προσπάθησε να το κάνεις και χωρίς να χρησιµοποιείς το Tpoint. - Στο τέλος έπρεπε να αποδεσµεύεις όλη τη δυναµικά δεσµευµένη µνήµη. - Πρόσεχε λίγο τα ονόµατα που δίνεις στις µεταβλητές. Το Tpoint δίνει την εντύπωση ότι είναι όνοµα τύπου (λόγω του Τ). Το k δεν είναι περιγραφικό. Το sum σηµαίνει άθροισµα, αλλά το χρησιµοποιείς ως µετρητή. Γενικά, αν βλέπεις ότι χρειάζεσαι σχόλια για να εξηγήσεις το όνοµα µιας µεταβλητής, τότε µάλλον δεν έχεις επιλέξει καλό όνοµα. - Το loop έπρεπε να πηγαίνει µέχρι i<numpoints και όχι i<=numpoints. Έπρεπε να το ξέρεις αυτό! Παίρνεις πολύ. Page 4

1286 1288 FAIL 1289 1292 1294 1295 FAIL 1297 1300 1303 - Εξαιρετική δουλειά µε τις συναρτήσεις, µπράβο! - Στη delete_points πριν κάνεις το point_ptr[i] ίσο µε NULL έπρεπε να το κάνεις free. - To point_ptr[i] = NULL; στο τέλος της insert_points είναι λάθος. Στην περίπτωση που τα σηµεία είναι λιγότερα από NUMPOINTS, θα έπρεπε πριν από αυτό να έχεις κάνει free. Στην περίπτωση που τα σηµεία είναι ακριβώς NUMPOINTS, το i σε αυτή τη γραµµή είναι ίσο µε NUMPOINTS και κατά συνέπεια το point_ptr[i] είναι εκτός ορίων του πίνακα. - Ελάχιστος κώδικας και δεν κάνει compile - Αντί να αντικαθιστάς το τελευταίο γράµµα κάθε λέξης µε κενό έπρεπε να προσθέτεις (µε strcat ή µε ένα επιπλέον strcpy) ένα κενό µετά από κάθε λέξη.. Μπράβο για τη χρήση συνάρτησης. - Το πρόγραµµα κάνει compile µε warnings - Δεν προσθέτεις τα κενά ανάµεσα στις λέξεις, και ο τρόπος που αυξάνεις το cmp έχει ως αποτέλεσµα να αντιγράφεις και το \0 κάθε µιας λέξης στο τελικό string. Γι αυτό στο τέλος τυπώνει µόνο την πρώτη λέξη. Προσπάθησε να το διορθώσεις, κι αν δε µπορείς ζήτα βοήθεια από τους διδάσκοντες. - Καλή δουλειά! Μπράβο για τη χρήση των συναρτήσεων. - Έπρεπε να κάνεις free και τις λέξεις word[i] - Πολύ καλή δουλειά - Ο έλεγχος deikths_shmeiwn[i]->tetmimenh>=0 προσπελαύνει το deikths_shmeiwn[i] πριν δεσµευτεί µνήµη γι αυτό και ως αποτέλεσµα το πρόγραµµα κάνει crash. - Το loop έπρεπε να πηγαίνει µέχρι i<numpoints και όχι i<=numpoints. Έπρεπε να το ξέρεις αυτό! Οµοίως για τα επόµενα loops - Από τη στιγµή που έχεις ορίσει το NUMPOINTS ως σταθερά, πρέπει να χρησιµοποιείς αυτό όπου χρειάζεται και όχι την τιµή 5 ή 6. - Τα όρια του loop στην clearmemory είναι λάθος: επιτρέπεις στο i να πάει µέχρι και 5 το οποίο είναι εκτός του πίνακα. - Να γράφεις µόνο µια εντολή ανά γραµµή (η γραµµή 21 έχει δύο εντολές, η 39 έχει τρεις και η γραµµή 61 είναι τεράστια) - Στη γραµµή 39 πρέπει να κάνεις free το σηµείο πριν το κάνεις NULL. - Η δεύτερη δέσµευση µνήµης είναι λάθος. Το sizeof(sum) είναι όσο και το sizeof(int) επειδή το sum είναι int. Έπρεπε να είχες γράψει sum*sizeof(char) - Πρόσεχε όταν κάνεις copy+paste. Ο έλεγχος για NULL µετά το δεύτερο malloc είναι ίδιος µε προηγούµενο έλεγχο. - Δεν προσθέτεις κενούς χαρακτήρες ανάµεσα στις λέξεις του τελικού string. - Στο τέλος έπρεπε να κάνεις free και το new_string - Έπρεπε να κάνεις free και τις λέξεις του πίνακα - Πολύ καλή δουλειά Page 5

1304 1305 FAIL 1306 1307 FAIL 1309 FAIL 1310 FAIL - Μετά από κλήση στη malloc να ελέγχεις πάντα αν επέστρεψε NULL - Έχεις λάθη απροσεξίας. Ερωτηµατικά που λείπουν, το i δηλωµένο ως double αντί για int. Να κάνεις συχνά compile το πρόγραµµά σου κι όχι 5 λεπτά πριν το στείλεις. - Το str δεν έπρεπε να το κάνεις free γιατί έχει ακριβώς την ίδια διεύθυνση µε το string[maxwords-1], το οποίο κάνεις free µέσα στο loop - Άσχηµα ονόµατα µεταβλητών και χρήση ενδιάµεσων µεταβλητών µπερδεύουν το πρόγραµµά σου. Αντί για scanf("%19s", str); string[i]=str; θα ήταν πιο απλό και κατανοητό να γράψεις scanf("%19s", string[i]); - Χρησιµοποιείς sizeof(char) σε σηµεία που δεν πρέπει και δεν το χρησιµοποιείς εκεί που πρέπει. - Όταν δεσµεύεις µνήµη να µην κάνεις ποτέ υποθέσεις για το µέγεθος του τύπου (πχ, να µην παραλείπεις το sizeof(char) επειδή υποθέτεις ότι θα είναι 1) - Να κάνεις πάντα type cast το αποτέλεσµα της malloc - Η εκφώνηση απαγόρευε ρητά τη χρήση καθολικών µεταβλητών. - Στη release_memory αποδεσµεύεις µόνο το πρώτο στοιχείο του πίνακα ενώ έπρεπε να τα αποδεσµεύεις όλα. - Το table = NULL δεν έχει νόηµα γιατί το table είναι στατικός πίνακας. - Η εκφώνηση ζητούσε να αφαιρεθούν τα σηµεία από τον πίνακα, όχι απλά να αλλαχθούν οι τιµές. Έπρεπε να απελευθερώσεις τη µνήµη που είχε δεσµευθεί για αυτά και να κάνεις τους αντίστοιχους δείκτες NULL. - Παρόλο που το πρόγραµµά σου βγάζει αποτελέσµατα, δεν επιδεικνύει το βαθµό στον οποίο έχεις καταλάβει τη δυναµική δέσµευση και την αποδέσµευση µνήµης. - Το πρόγραµµα δεν κάνει compile - Το i=numpoints που έχεις στη συνθήκη του loop είναι ανάθεση και όχι σύγκριση. - Η συνθήκη του loop είναι λάθος - έπρεπε να χρησιµοποιείς && - Μην αφήνεις πολλαπλές κενές γραµµές στο τελικό πρόγραµµα. Page 6

1311 FAIL lab8 1312 - Δεν παραδόθηκε άσκηση 1314 1315 FAIL 1317 FAIL 1321 1327 FAIL 1328 1330 - Ποιος είναι ο σκοπός του j=j+1 στη γραµµή 26? - Μετά την κλήση στην strpbrk έπρεπε να ελέγχεις αν το αποτέλεσµα είναι NULL (το οποίο σηµαίνει ότι δεν υπάρχουν εµφανίσεις του $ στο sentence. Επίσης, για να δουλέψει σωστά το πρόγραµµά σου έπρεπε να αλλάζει η πρώτη παράµετρος του strpbrk σε κάθε επανάληψη. Γενικά ο αλγόριθµός σου δε βγάζει πολύ νόηµα. Προσπάθησε να ξανακάνεις την άσκηση πιο προσεκτικά και µετά δες τη λύση. - Το dir είναι δείκτης σε χαρακτήρα, ενώ το i ακέραιος, εποµένως η ανάθεση words[j].dir = i +1; είναι λάθος. - Όταν το µέγεθος ενός string είναι 100, τότε στη scanf πρέπει να προσδιορίζεις µέγεθος 99, όχι 100 (για να µείνει µια θέση για το '\0') - Πριν διαβάσεις κάτι µέσα στο str[i] πρέπει να δεσµεύσεις µνήµη γι αυτό. Το malloc που κάνεις για το str2 δεν έχει νόηµα σ εκείνο το σηµείο. -Ο τρόπος µε τον οποίο χρησιµοποιείς την strcpy, αν υποθέταµε ότι έχουν διαβαστεί σωστά οι λέξεις, θα είχε ως αποτέλεσµα να γράφεις κάθε µία λέξη στην αρχή του τελικού string, και όχι στο τέλος όπως είναι το σωστό. Επίσης, πρέπει ανάµεσα στις λέξεις να προσθέτεις κενό όχι το '\0'. - Το sizeof(sum) είναι όσο και το sizeof(int) επειδή το sum είναι int. Τελικά δεσµεύεις µόνο 4 byte. Το σωστό θα ήταν sum*sizeof(char) - Οι θέσεις ενός πίνακα είναι από 0 µέχρι και MAXWORDS-1, κι ΟΧΙ από 1 µέχρι και MAXWORDS. Έπρεπε να το ξέρεις αυτό! - Η κλήση στη free είναι τελείως λάθος. Ξαναδιάβασε τη σύνταξή της. - Εξαιρετική δουλειά µε τις συναρτήσεις, µπράβο! - Αν το x είναι <0 δεν έπρεπε να διαβάζεις το y - Το loop έπρεπε να πηγαίνει µέχρι i<numpoints και όχι i<=numpoints. Έπρεπε να το ξέρεις αυτό! - Ελέγχεις την τιµή του x πριν καν το διαβάσεις από το πληκτρολόγιο! - Έχεις κάνει λάθη τα οποία σε αυτό το στάδιο δεν έπρεπε να γίνονται. Μη γράφεις κώδικα µηχανικά! Δώσε προσοχή στη ροή του προγράµµατος. Page 7

1332 FAIL 1334 FAIL - Μετά τη malloc πρέπει να ελέγχεις για NULL πριν προσπελάσεις τη µνήµη που δέσµευσες. Όπως το έκανες τώρα, αν η malloc αποτύχει, το πρόγραµµά σου θα κάνει crash στη γραµµή 21. - Το le3eis είναι στατικός πίνακας, δεν έχει νόηµα να το συγκρίνεις µε NULL. Έπρεπε να ελέγχεις κάθε ένα le3eis[i] που δέσµευσες στο προηγούµενο loop. - Δε δεσµεύεις αρκετή µνήµη για το j. - Το j είναι άσχηµο όνοµα για µεταβλητή που είναι οτιδήποτε άλλο παρά µετρητής σε loop - Με τον τρόπο που έγραψες το strcpy, το κάθε le3eis[i] αντιγράφεται πάντα στην αρχή του string κι όχι στο τέλος του. - Δεν προσθέτεις κενά ανάµεσα στις λέξεις του τελικού string. - Η άσκηση ζητούσε να εκτυπώσεις το τελικό string µια φορά στο τέλος, όχι να εκτυπώνεις µια-µια λέξη. - Λάθος στην αποδέσµευση µνήµης. Δες τη λύση. - Το seira που προσπαθείς να εκτυπώσεις είναι ένας άδειος πίνακας. - Το σχόλιο που έχεις στη δήλωση του struct για το dis είναι πολύ καλό. - Έχεις δηλώσει τον πίνακα ως global µεταβλητή, πράγµα που η εκφώνηση απαγόρευε ρητά. - Το loop έπρεπε να πηγαίνει µέχρι i<numpoints και όχι i<=numpoints. Έπρεπε να το ξέρεις αυτό! - Ο κώδικας στις γραµµές 40-41 έπρεπε να βρίσκεται µέσα στο παραπάνω loop. Αυτό που κάνεις τώρα είναι να γράφεις στη θέση µνήµης pinakas[numwords+1]. Γι αυτό το πρ - Τα όρια του loop στο οποίο γίνεται η εκτύπωση είναι λάθος. Δεν υπάρχει καµία εγγύηση ότι υπάρχει στοιχείο NULL στον πίνακα. 1336 - Πολύ καλή δουλειά 1337 1341 1342 1345 - Αν το x είναι <0 δεν έπρεπε να διαβάζεις το y - Πολύ καλή δουλειά, µπράβο. Ειδικά το free στη γραµµή 27, το οποίο είναι εύκολο να το ξεχάσει κανείς. - Όταν σκοπεύεις να χρησιµοποιείς το i µετά το τέλος του loop, πρέπει να του δίνεις περιγραφικό όνοµα. - Εξαιρετική δουλειά! Πριν κάνεις το pin[i] NULL στη γραµµή 45 έπρεπε να το κάνεις free. - Καλή δουλειά, εκτός από το ότι το πρόγραµµα δεν εκτυπώνει τα αποτελέσµατα. 1346 - Πολύ καλή δουλειά, µπράβο! Page 8

1353 FAIL 1354 1368 1369 FAIL 1371 FAIL 1373 - Πρόσεχε τη στοίχιση - Δε δεσµεύεις ποτέ µνήµη. Δεδοµένου ότι δε δέσµευσες ποτέ µνήµη, γιατί αποφάσισες ότι πρέπει να αποδεσµεύσεις? - Ο τρόπος µε τον οποίο τερµατίζεις το loop είναι λάθος. Αν ο χρήστης δώσει λιγότερα από NUMPOINTS σηµεία, το num και κατά συνέπεια το realnum καταλήγει να είναι 0. Ξανασκέψου πώς θα έπρεπε να υλοποιηθεί αυτό το κοµµάτι, δες και τη λύση, κι αν ακόµη έχεις δυσκολία ζήτα βοήθεια. - Δε γίνεται σωστά η αποδέσµευση µνήµης για τα περιεχόµενα του πίνακα. Ο ίδιος ο πίνακας είναι στατικός. Δεν έπρεπε να κάνεις αυτόν free, αλλά κάθε ένα στοιχείο του. Ουσιαστικά, πρέπει να κάνεις free το ίδιο πράγµα που έκανες malloc. - Όταν δεσµεύεις µνήµη να µην κάνεις ποτέ υποθέσεις για το µέγεθος του τύπου (πχ, να µην παραλείπεις το sizeof(char) επειδή υποθέτεις ότι θα είναι 1) - Το µέγεθος του πίνακα έπρεπε να έχει µια ακόµη θέση για το '\0' - Δε διαβάζεις σωστά τις λέξεις : Τελικά όλες οι θέσεις του πίνακα περιέχουν τη διεύθυνση της τοπικής µεταβλητής string. Δες τη λύση, κι αν ακόµη δεν καταλαβαίνεις γιατί το πρόγραµµά σου βγάζει λάθος αποτελέσµατα ρώτα τους διδάσκοντες. - Στο τελευταίο for έπρεπε να χρησιµοποιείς το pointer στην strcat - Το µέγεθος της µνήµης που δεσµεύεις για το τελικό string δεν έχει αρκετό χώρο για τα κενά. - Στο loop που αντιγράφεις τις λέξεις στο τελικό string έχεις λάθος στη σειρά των πράξεων. Προσπάθησε να βρεις µόνη σου πώς θα έπρεπε να το είχες κάνει και µετά κοίτα τη λύση ή ζήτα βοήθεια από τους διδάσκοντες. - Το πρόγραµµα δεν κάνει compile λόγω λάθους απροσεξίας. Να κάνεις ΠΑΝΤΑ ένα τελικό compile πριν στείλεις την άσκηση - Η συνθήκη του πρώτου for είναι λάθος - έπρεπε να χρησιµοποιείς && - Στη συνθήκη του πρώτου for ελέγχεις την τιµή του points[i], αλλά αυτό γίνεται πριν καν δεσµεύσεις µνήµη για το points[i] και ως αποτέλεσµα το πρόγραµµα κάνει crash. - Δεν καλείς ποτέ τη συνάρτηση apodesmeusi - Το πρόγραµµα δεν έκανε compile. Πολλά warnings και λάθος στο όνοµα της strlen (είχες γράψει strleng) - Όταν δηλώνεις char *x, y; τότε το y είναι τύπου char και όχι char* - Λάθη στη δέσµευση µνήµη και χρήση δεικτών - Τα όρια των loops έπρεπε να είναι i<maxwords κι όχι i<=maxwords. Έπρεπε να το ξέρεις αυτό! - Δε γίνεται σωστά η αποδέσµευση µνήµης για τα περιεχόµενα του πίνακα. Ο ίδιος ο πίνακας είναι στατικός. Δεν έπρεπε να κάνεις αυτόν free, αλλά κάθε ένα στοιχείο του. - Όταν δεσµεύεις µνήµη να µην κάνεις ποτέ υποθέσεις για το µέγεθος του τύπου (πχ, να µην παραλείπεις το sizeof(char) επειδή υποθέτεις ότι θα είναι 1) - Πολύ καλή δουλειά κατά τα άλλα Page 9

1376 1379 1381 FAIL 1386 FAIL 1387 FAIL 1388 FAIL 1392 - Μετά από κάθε κλήση στη malloc να ελέγχεις αν επέστρεψε NULL - Πολύ καλή δουλειά - Μετά από κλήση στη malloc να ελέγχεις πάντα αν επέστρεψε NULL - Έπρεπε να υπολογίζεις και να τυπώνεις την απόσταση, όχι το χαρακτήρα. - Το απόσταση δεν έπρεπε να είναι πίνακας. - Όταν δηλώνεις ένα πίνακα, πρέπει πάντα να προσδιορίζεις το µέγεθός του. - Δεν αποθηκεύεις την απόσταση για κάθε σηµείο. - Το pos είναι πάντα ίσο µε NUMPOINTS. - Έπρεπε το 0.0001 να το έχεις αποθηκεύσει σε σταθερά. - Φαίνεται να έχεις µπερδευτεί και στο τεχνικό και στο αλγοριθµικό κοµµάτι της άσκησης. Προσπάθησε να την ξανακάνεις, δες και τη λύση, κι αν έχεις ακόµη δυσκολία ζήτα βοήθεια. - Από τη στιγµή που το i το χρησιµοποιείς για να αποθηκεύσεις το πλήθος των στοιχείων, θα έπρεπε να του είχες δώσει πιο περιγραφικό όνοµα. - Τι ακριβώς κάνει το malloc στη γραµµή 41? Πρέπει να δεσµεύεις µνήµη για ένα σηµείο, και µέσα σε αυτό να αποθηκεύεις τρεις πληροφορίες. ΟΧΙ να δεσµεύεις µνήµη για τρία πράγµατα κάθε φορά Δες τη λύση, κι αν δεν καταλαβαίνεις γιατί είναι λάθος αυτό που έκανες, ρώτα τους διδάσκοντες γιατί είναι σηµαντικό. - Ο έλεγχος i == NUMPOINTS είναι λάθος. Αυτή τη στιγµή το loop τρέχει µόνο µια φορά γιατί αρχικά το i θα είναι 0, το οποίο είναι διάφορο του NUMPOINTS - Το loop έπρεπε να πηγαίνει µέχρι i<numpoints και όχι i<=numpoints. Έπρεπε να το ξέρεις αυτό! - Τι ακριβώς κάνεις στη γραµµή 40? Έπρεπε να δεσµεύεις µνήµη για να αποθηκεύσεις ένα σηµείο, όχι NUMPOINTS αριθµούς. - Λάθος στην αποδέσµευση µνήµης. - Δε δεσµεύεις αρκετή µνήµη (ξέχασες να υπολογίσεις και το πλήθος των κενών χαρακτήρων) - Να ελέγχεις πάντα για NULL µετά από malloc Page 10

1393 1396 FAIL 1401 1405 FAIL lab8 - Μετά από malloc πρέπει πρώτα να ελέγχεις για NULL και µετά να χρησιµοποιείς τη µνήµη που δέσµευσες. Με τον τρόπο που έχεις κάνει τον έλεγχο, αν η malloc επιστρέψει NULL, το πρόγραµµά σου θα κάνει crash στη γραµµή 21 - Δε θέτεις την τιµή της απόστασης. Για να φανούν σωστά αποτελέσµατα έπρεπε το printf("%d\n",size); να είναι µέσα στο loop. - Το πρόγραµµα δεν κάνει compile. Ξαναδιάβασε πώς συντάσσεται η κλήση συναρτήσεων. - Τα όρια των loops έπρεπε να είναι i<maxwords κι όχι i<=maxwords. Έπρεπε να το ξέρεις αυτό! - Δεν υπολογίζεις σωστά την απόσταση: είναι i+1 όχι str[i+1] - Το πρόγραµµά σου πέφτει σε ατέρµονο loop (στο while) γιατί η τιµή του sp δεν αλλάζει ποτέ και η συνθήκη έπρεπε να ελέγχει το αποτέλεσµα της strpbrk και όχι το sp. - Μετά από κλήση σε malloc/realloc να ελέγχεις πάντα αν επέστρεψε NULL. temp6 FAIL - Υλοποιήθηκε πολύ µικρό κοµµάτι της άσκησης Page 11