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

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

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

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

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

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

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

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

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

FAIL PASS PASS οριακά

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

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

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

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

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

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

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

to post PASS PASS FAIL

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

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

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

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

Sheet PASS 1426 PASS 1428 PASS. Page 1

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

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

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

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

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

ΑΕΜ ή username. Sheet2

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

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

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

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

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

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

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

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

char name[5]; /* define a string of characters */

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

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

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

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

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 10/11/2015, 22:00

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

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

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

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

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

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

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

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

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

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

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

Επεξεργασία Αρχείων Κειµένου

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

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

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

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

Προγραµµατισµός Ι Αλφαριθµητικά Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι 1 Νικόλαος Δ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

lab5grades Διαδικαστικά: όλα οκ, αλλά καθυστερήσατε στην αποστολή. Να προσέχετε να στέλνετε τις ασκήσεις σας εντός της προθεσµίας.

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

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

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

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

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

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

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

Transcript:

Α.Μ. 1375 FAIL 1413 1417 1420 1421 FAIL 1422 FAIL 1424 1425 FAIL 1426 FAIL - Πρώτα να ελέγχετε αν η malloc επέστρεψε NULL και µετά να προσπαθείτε να προσπελάσετε τη δεσµευµένη µνήµη - Όταν διαβάζετε string να προσδιορίζετε µέγεθος στο %s - Λάθος στον υπολογισµό του µήκους. Έπρεπε να αφαιρείτε διευθύνσεις, όχι χαρακτήρες - Τι είναι η le3h και γιατί τι διαβάζετε από το πληκτρολόγιο? - Το πρόγραµµα δεν κάνει τίποτα. - Τι σκοπό εξυπηρετεί η µεταβλητή flag? Θα βοηθούσε πολύ να της είχατε δώσει ένα όνοµα που περιγράφει τη λειτουργία της, ή τουλάχιστον να βάζατε ένα σχόλιο σε εκείνο το σηµείο. Γενικά δε µπορώ να καταλάβω γιατί ελέγχετε κεφαλαία και µικρά γράµµατα. Τι σχέση έχουν µε την άσκηση? - Το πρόγραµµα φαίνεται να µπαίνει σε endless loop. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h. - Το τέλος του string δεν είναι στο LINESIZE αλλά εκεί που βρίσκεται το \0. - Έπρεπε να ελέγχετε για NULL και µετά το realloc. - Στείλατε το backup αρχείο του Kate αντί για το lab9.c - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών/συναρτήσεων/τύπων. Τι είναι τα t, p? - Δεν πρέπει να ελέγχετε για isalpha. Δεν υπάρχει καµία εγγύηση ότι η πρόταση δεν περιέχει κι άλλου είδους χαρακτήρες (ψηφία, τελείες, κόµµατα, κτλ) - Το τέλος ενός string είναι εκεί που βρίσκεται το \0 κι όχι το LINESIZE. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h - Σωστή διαχείριση δεικτών κατά τα άλλα. - Να κάνετε έλεγχο για NULL µετά από κάθε malloc. - Δεν αποδεσµεύσατε όλη τη δυναµικά δεσµευµένη µνήµη. - Πολύ καλή προσπάθεια - Πόσο µεγάλη θα ήταν η συνθήκη του if σου αν είχαµε 100 διαχωριστικούς χαρακτήρες? Η άσκηση απαιτούσε τη χρήση συναρτήσεων από τη string.h πράγµα που δεν έκανες. - το j έπρεπε να ξεκινάει από 1, γιατί η θέση 0 του πίνακα περιέχει ήδη δεδοµένα. - Δε δικαιολογείται να κάνετε λάθη στη σύνταξη της for! Έπρεπε να είχατε γράψει for ( ; j<=i; j++) και όχι for (j<=i ; j++; ). Γενικά ότι κάνετε σε αυτό το for είναι λάθος. Το *addr είναι πάντα η ίδια τιµή και δεν είναι καν αυτό που πρέπει να εκτυπώνεται. - Το while loop είναι ατέρµονο γιατί στην περίπτωση ι==0 δεν αλλάζετε το addr. - Ακόµη κι αν διορθώσετε αυτό, θα κάνει segfault γιατί όταν το addr γίνει NULL δε βγαίνετε άµεσα από το loop. - Στο sep δεν έπρεπε να περιλαµβάνονται κόµµα/τελεία - Μετά από malloc/realloc, να κάνετε πάντα έλεγχο για NULL - Η strtok καταστρέφει το αρχικό string αλλά και τη χρησιµοποιείτε λάθος.. Γενικά δε χρησιµοποιείτε σωστά τις συναρτήσεις string. Για ποιο λόγο κάνατε strcspn(sentence, "") αντί να χρησιµοποιήσετε απλά την strlen? - Να δίνετε περιγραφικά ονόµατα σε µεταβλητές/τύπους. Τι είναι το v? Δείγµα παπαγαλίας από τις διαφάνειες? Η εκφώνηση σας πρότεινε το όνοµα words για τον πίνακα, δεν υπήρχε λόγος να το αγνοήσετε. - Δεν έχετε κάνει κάτι άλλο πέρα από δέσµευση µνήµης. - Καλή δουλειά όσον αφορά ζητήµατα µνήµης, αλλά δε χρησιµοποιείτε συναρτήσεις από τη string.h όπως απαιτούσε η εκφώνηση. Page 1

1428 FAIL 1429 FAIL 1430 1431 FAIL 1433 1435 1436 - Η strtok δεν είναι καλή επιλογή γιατί καταστρέφει την αρχική πρόταση. - Ποιος ο λόγος για τον έλεγχο isalpha? Δεν είναι απαραίτητο να αποτελείται µόνο από γράµµατα ή διαχωριστικά η πρόταση. - Τι είναι το temp? Να δίνετε περιγραφικά ονόµατα σε µεταβλητές - Στη γραµµή 49, αντί για &sentence[0] µπορούσατε να είχατε γράψει απλά sentence. Είναι ακριβώς το ίδιο πράγµα. - Δεν αλλάζετε το µέγεθος του words (µε realloc) - Δεν εκτυπώνετε τίποτα - Δεν απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη - Το όνοµα του αρχείου έπρεπε να είναι lab9.c - Έπρεπε και η απόσταση και οι διευθύνσεις να υπολογιστούν µε χρήση συναρτήσεων strings και όχι διατρέχοντας το string ένα-ένα χαρακτήρα - Το µέγεθος στο %s στο scanf έπρεπε να είναι 99 κι όχι 100! - Να ελέγχετε για NULL µετά από κάθε malloc. - Είστε σε καλό δρόµο αλγοριθµικά, αλλά θέλει δουλειά ακόµη. - Το όνοµα του αρχείου έπρεπε να είναι lab9.c - Δε χρησιµοποιείτε συναρτήσεις από τη string.h όπως απαιτούσε η άσκηση - Όταν ένα string έχει µέγεθος LINESIZE, ο τελευταίος χαρακτήρας είναι στη θέση LINESIZE-1. Έπρεπε να το ξέρετε αυτό! Επιπλέον, ο τελευταίος χρήσιµος χαρακτήρας του string είναι ο αµέσως προηγούµενος του \0, οπότε σε κάθε περίπτωση ΔΕΝ πρέπει να διατρέχετε µέχρι το LINESIZE. - Δεν υπολογίζετε την απόσταση. - Να διαβάζετε προσεκτικά την εκφώνηση. Σας έλεγε ότι το βήµα 6 έπρεπε να γίνει ξεχωριστά από τα προηγούµενα βήµατα. - Στο sep δεν έπρεπε να περιλαµβάνονται κόµµα/τελεία - Μετά από malloc/realloc, να κάνετε πάντα έλεγχο για NULL - Η strtok καταστρέφει το αρχικό string αλλά και τη χρησιµοποιείτε λάθος.. Γενικά δε χρησιµοποιείτε σωστά τις συναρτήσεις string. Για ποιο λόγο κάνατε strcspn(sentence, "") αντί να χρησιµοποιήσετε απλά την strlen? - Να δίνετε περιγραφικά ονόµατα σε µεταβλητές/τύπους. Τι είναι το v? Δείγµα παπαγαλίας από τις διαφάνειες? Η εκφώνηση σας πρότεινε το όνοµα words για τον πίνακα, δεν υπήρχε λόγος να το αγνοήσετε. - Για το sentence προσδιορίσατε µέγεθος 20, οπότε έπρεπε να το διαβάζετε µε %19s κι όχι µε %20s. - Να διαβάζετε ΟΛΟΚΛΗΡΗ την εκφώνηση. Το LINESIZE έπρεπε να είναι 100. - Να κάνετε έλεγχο για NULL µετά από κάθε malloc. - Στη συνθήκη του while συγκρίνετε το sentence που είναι δείκτης µε το '\0' που είναι χαρακτήρας! - Το printf είναι λάθος. Έπρεπε να διατρέχετε ολόκληρο πίνακα! Page 2

1438 FAIL 1440 FAIL 1442 FAIL 1444 FAIL 1445 FAIL 1447 1448 FAIL 1453 FAIL 1454 - Δε δικαιολογείται να κάνετε λάθη στη σύνταξη της for! Έπρεπε να είχατε γράψει for ( ; j<=i; j++) και όχι for (j<=i ; j++; ). Γενικά ότι κάνετε σε αυτό το for είναι λάθος. Το *addr είναι πάντα η ίδια τιµή και δεν είναι καν αυτό που πρέπει να εκτυπώνεται. - Το while loop είναι ατέρµονο γιατί στην περίπτωση ι==0 δεν αλλάζετε το addr. - Ακόµη κι αν διορθώσετε αυτό, θα κάνει segfault γιατί όταν το addr γίνει NULL δε βγαίνετε άµεσα από το loop. - Καλή δουλειά όσον αφορά ζητήµατα µνήµης, αλλά δε χρησιµοποιείτε συναρτήσεις από τη string.h όπως απαιτούσε η εκφώνηση. - Η strtok δεν είναι καλή επιλογή γιατί καταστρέφει την αρχική πρόταση. - Ποιος ο λόγος για τον έλεγχο isalpha? Δεν είναι απαραίτητο να αποτελείται µόνο από γράµµατα ή διαχωριστικά η πρόταση. - Τι είναι το temp? Να δίνετε περιγραφικά ονόµατα σε µεταβλητές - Στη γραµµή 49, αντί για &sentence[0] µπορούσατε να είχατε γράψει απλά sentence. Είναι ακριβώς το ίδιο πράγµα. - Δεν αλλάζετε το µέγεθος του words (µε realloc) - Δεν εκτυπώνετε τίποτα - Δεν απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη - Όταν διαβάζετε string να προσδιορίζετε µέγεθος στο %s - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνει v? - Δεν έπρεπε καν να υπάρχει το v. Τα δεδοµένα αποθηκεύονται στον πίνακα arxi. - Το πρόγραµµα δεν κάνει πολλά πέρα των malloc/free - Να κάνετε έλεγχο για NULL µετά από χρήση malloc - Το πρόγραµµα δεν κάνει πολλά πράγµατα πέρα του malloc και free - Δεν υπάρχει καµία εγγύηση ότι θα χρησιµοποιηθούν όλα τα κελιά του words. Το loop δεν έπρεπε να πηγαίνει µέχρι LINESIZE/2. - Την ανάθεση στα πεδία του words έπρεπε να την κάνετε µέσα σε loop όχι απέξω. Θα βοηθούσε αν είχατε καλή στοίχιση - Το πρόγραµµα δεν εκτυπώνει αποτελέσµατα και τα printf που έχετε σε σχόλια δε δείχνουν να έχετε καταλάβει τι έπρεπε να εκτυπωθεί και πώς. - Να κάνετε έλεγχο για NULL µετά από χρήση malloc - Το πρόγραµµα δεν κάνει πολλά πράγµατα πέρα του malloc και free - Το όνοµα του αρχείου έπρεπε να είναι lab9.c - Δε χρησιµοποιείτε συναρτήσεις από τη string.h όπως απαιτούσε η άσκηση - Όταν ένα string έχει µέγεθος LINESIZE, ο τελευταίος χαρακτήρας είναι στη θέση LINESIZE-1. Έπρεπε να το ξέρετε αυτό! Επιπλέον, ο τελευταίος χρήσιµος χαρακτήρας του string είναι ο αµέσως προηγούµενος του \0, οπότε σε κάθε περίπτωση ΔΕΝ πρέπει να διατρέχετε µέχρι το LINESIZE. - Άσχηµη στοίχιση - Μετά από χρήση strncpy πρέπει να θέτετε πάντα το '\0' - Πολύ καλή προσπάθεια Page 3

1456 1457 FAIL 1458 FAIL 1459 1460 FAIL 1461 FAIL 1462 1463 1464 - Δεν υπάρχει καµία εγγύηση ότι θα χρησιµοποιηθούν όλα τα κελιά του words. Το loop δεν έπρεπε να πηγαίνει µέχρι LINESIZE/2. - Την ανάθεση στα πεδία του words έπρεπε να την κάνετε µέσα σε loop όχι απέξω. Θα βοηθούσε αν είχατε καλή στοίχιση - Το πρόγραµµα δεν εκτυπώνει αποτελέσµατα και τα printf που έχετε σε σχόλια δε δείχνουν να έχετε καταλάβει τι έπρεπε να εκτυπωθεί και πώς. - Δεν έχετε κάνει κάτι άλλο πέρα από δέσµευση µνήµης. - Να προσδιορίζεις πάντα µέγεθος στο %s όταν διαβάζεις string. - Η άσκηση δεν κάνει πολλά πράγµατα πέρα της δέσµευσης µνήµης - Τι είναι το adr2 και γιατί δεσµεύετε µνήµη γι'αυτό? Για το words έπρεπε να είχατε δεσµεύσει µνήµη δυναµικά. - Η συνθήκη στο while είναι λάθος. Δεν υπάρχει εγγύηση ότι θα γεµίσουν όλες οι θέσεις του πίνακα words. Ακόµη χειρότερα, πάτε µέχρι και LINESIZE/2 το οποίο σηµαίνει ότι βγαίνετε εκτός ορίων του words. - Το πρόγραµµα δεν εκτυπώνει τίποτα όσον αφορά τον αλγόριθµο εύρεσης των θέσεων - Να αποδεσµεύετε πάντα τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. - Καλή δουλειά όσον αφορά ζητήµατα µνήµης, αλλά δε χρησιµοποιείτε συναρτήσεις από τη string.h όπως απαιτούσε η εκφώνηση. - Όταν διαβάζετε string να προσδιορίζετε µέγεθος στο %s - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνει v? - Δεν έπρεπε καν να υπάρχει το v. Τα δεδοµένα αποθηκεύονται στον πίνακα arxi. - Το πρόγραµµα δεν κάνει πολλά πέρα των malloc/free - Αν η malloc επιστρέψει NULL, το πρόγραµµα δεν πρέπει να συνεχίζει την εκτέλεση! - Μετά από χρήση strncpy πρέπει να θέτετε το '\0'. - Καλά σκεφτήκατε να ελέγχετε για NULL κατά την εκτύπωση, αλλά ελέγχετε τη λάθος ποσότητα. - Να προσδιορίζεις πάντα µέγεθος στο %s όταν διαβάζεις string - Να ελέγχεις για NULL µετά από κάθε malloc - Τρέξε το πρόγραµµα µέσω gdb για να βρεις το λάθος - Να αποδεσµεύεις όλη τη δυναµικά δεσµευµένη µνήµη - Έπρεπε να διαβάζετε το διαχωριστικό από το πληκτρολόγιο, κι όχι να χρησιµοποιείτε το "HIC" - Βρίσκετε µόνο την πρώτη λέξη και µετά το loop δεν ανανεώνει τις τιµές των µεταβλητών για να µπορέσετε να βρείτε και τις υπόλοιπες. - Μετά τη χρήση strncpy πρέπει πάντα να θέτετε το '\0' - Δεν υπάρχει καµία εγγύηση ότι ο πίνακας words θα έχει γεµισµένα όλα τα κελιά του. Τα loops δεν έπρεπε να πηγαίνουν µέχρι LINESIZE. - Δεν απελευθερώνετε όλη τη δυναµικά δεσµευµένη µνήµη. Page 4

1465 FAIL 1466 FAIL 1467 1468 FAIL 1469 FAIL 1470 - Το πρόγραµµα δεν κάνει compile. Προσθέτετε pointer σε pointer, πράγµα που απαγορεύεται. - Τι είναι αυτό? : while (words->word < (words->word + LINESIZE)) Δε συγκρίνουµε ποτέ string µε <, αλλά µε strcmp. Στη συγκεκριµένη άσκηση δεν έπρεπε καν να συγκρίνετε strings. - Το words είναι πίνακας. Το words->word αναφέρεται πάντα στο πρώτο στοιχείο του, οπότε οι αναθέσεις που κάνετε στο loop γίνονται πάντα στο ίδιο στοιχείο. - Μετά από χρήση strncpy να θέτετε πάντα το '\0' - Μη γράφετε ποτέ τόσο πολύ κώδικα χωρίς να τον τεστάρετε κάθε τόσο για να βεβαιώνεστε ότι δουλεύει σωστά. - Δεν αποδεσµεύετε σωστά τη δυναµικά δεσµευµένη µνήµη -Μετά από malloc να κάνετε πάντα έλεγχο για NULL - Το µέγεθος στο %s έπρεπε να είναι 99 κι όχι 100. - Γιατί έχετε βάλει ολόκληρη πρόταση στο scanf? Άλλο ζητούσε η εκφώνηση. - Τι σκοπό εξυπηρετούν τα δύο for? - Δεν έχετε κάνει κάτι ιδιαίτερο πέρα των malloc/free - Αν η malloc επιστρέψει NULL, το πρόγραµµα δεν πρέπει να συνεχίζει την εκτέλεση! - Μετά από χρήση strncpy πρέπει να θέτετε το '\0'. - Καλά σκεφτήκατε να ελέγχετε για NULL κατά την εκτύπωση, αλλά ελέγχετε τη λάθος ποσότητα. - Τι είναι το g? Να χρησιµοποιείς περιγραφικά ονόµατα µεταβλητών - Λάθος format specifier στο τελευταίο printf. Έπρεπε να εκτυπώνεις το *words[j].point το οποίο είναι χαρακτήρας. Να διαβάζεις προσεκτικά τα warnings του compiler - Δε χρησιµοποιείς σωστά το malloc. Πρέπει να πολλαπλασιάζεις το πλήθος των θέσεων που θες να δεσµεύσεις µε το µέγεθός τους. - Μετά από malloc/realloc, να ελέγχεις πάντα για NULL - Να προσδιορίζεις πάντα µέγεθος στο %s όταν διαβάζεις strings - Πρόσεχε τη στοίχιση! - Γιατί κάνεις παντού typecast? στον αλγόριθµο - Σωστό το struct αλλά φαίνεται να παπαγαλίσατε τις διαφάνειες. Αλλάζετε το όνοµα του struct µε typedef αλλά µετά δεν το χρησιµοποιείτε παντού. Τι όνοµα είναι το b??? Να δίνετε περιγραφικά ονόµατα! - Λάθος µέγεθος στο %s. Έπρεπε να είναι %99s, όχι %100s - Μετά από malloc να ελέγχετε πάντα για NULL - Λάθος λογική. Το i σας λέει πού είναι ο διαχωριστικός χαρακτήρας, όχι πού είναι η λέξη. Έπρεπε να το αυξάνετε κατά 1 µετά την strcspn. Επίσης, αφού το υπολογίζετε (έστω και µε λάθος) γιατί δε θέτετε και το πεδίο len? - Το j πηγαίνει µέχρι LINESIZE και το χρησιµοποιείτε για να διατρέξετε το words το οποίο όµως έχει µέγεθος LINESIZE/2! - Μην κολλάτε στη διάτρεξη των strings κατά ένα χαρακτήρα τη φορά! Επίσης, το τέλος του string είναι εκεί που βρίσκεται το \0 κι όχι στο LINESIZE. - Το πρόγραµµα δεν εκτυπώνει αποτελέσµατα και δε δείχνετε αν ξέρετε να προσπελάσετε τα πεδία που struct για εκτύπωση. - Δεν έχετε διατυπώσει καλά τον έλεγχο για NULL µετά τη malloc. Έτσι όπως το κάνατε (µε εµφωλευµένα if), αν είχατε καµια 10αριά malloc, πόσα tab πιο µέσα θα κατέληγε ο κώδικάς σας? Καλύτερα να ελέγχετε αν είναι NULL, κι αν ναι, να τερµατίζετε το πρόγραµµα ή τη συνάρτηση. - Μπράβο που αποδεσµεύετε τη µνήµη και για τα.word, αλλά προσέξτε: δεν έχουν γεµίσει όλα τα κελιά του pinakas_words, οπότε δεν έπρεπε να πηγαίνετε µέχρι LINESIZE. Page 5

1472 FAIL 1474 1478 FAIL 1479 FAIL 1483 1484 FAIL 1485 1486 - Πρώτα να ελέγχετε αν η malloc επέστρεψε NULL και µετά να προσπαθείτε να προσπελάσετε τη δεσµευµένη µνήµη - Όταν διαβάζετε string να προσδιορίζετε µέγεθος στο %s - Λάθος στον υπολογισµό του µήκους. Έπρεπε να αφαιρείτε διευθύνσεις, όχι χαρακτήρες - Τι είναι η le3h και γιατί τι διαβάζετε από το πληκτρολόγιο? - Το πρόγραµµα δεν κάνει τίποτα. - Δεν υπολογίζετε την απόσταση. - Να διαβάζετε προσεκτικά την εκφώνηση. Σας έλεγε ότι το βήµα 6 έπρεπε να γίνει ξεχωριστά από τα προηγούµενα βήµατα. - Μην αγνοείτε τα warnings. Δεν έχετε κάνει #include το string.h - Απαράδεκτη στοίχιση! - Συγκρίνετε θέση πίνακα (i) µε περιεχόµενα ('\0'). Δε δικαιολογούνται τέτοια λάθη! - Πολλά προβλήµατα στην άσκηση. - Μην αγνοείτε τα warnings. Δεν έχετε κάνει #include το string.h - Απαράδεκτη στοίχιση! - Συγκρίνετε θέση πίνακα (i) µε περιεχόµενα ('\0'). Δε δικαιολογούνται τέτοια λάθη! - Πολλά προβλήµατα στην άσκηση. - Δεν έχετε διατυπώσει καλά τον έλεγχο για NULL µετά τη malloc. Έτσι όπως το κάνατε (µε εµφωλευµένα if), αν είχατε καµια 10αριά malloc, πόσα tab πιο µέσα θα κατέληγε ο κώδικάς σας? Καλύτερα να ελέγχετε αν είναι NULL, κι αν ναι, να τερµατίζετε το πρόγραµµα ή τη συνάρτηση. - Μπράβο που αποδεσµεύετε τη µνήµη και για τα.word, αλλά προσέξτε: δεν έχουν γεµίσει όλα τα κελιά του pinakas_words, οπότε δεν έπρεπε να πηγαίνετε µέχρι LINESIZE. - Το πρόγραµµα δεν κάνει compile - Το µέγεθος στο %s έπρεπε να είναι 99, κι όχι 100 - Να ελέγχετε για NULL µετά από κάθε malloc - Δεν κάνετε πολλά πράγµατα στο αλγοριθµικό κοµµάτι - Η αρχικοποίηση του characters θα µπορούσε να είχε γίνει πιο απλά: char characters[]="!@#$%^&*" - Μετά από malloc να ελέγχετε πάντα για NULL - Στην κλήση της strpbrk έχετε βάλει ανάποδα τις παραµέτρους - Λάθος λογική. Μην κολλάτε στη διάτρεξη των string κατά ένα χαρακτήρα τη φορά! Το i έπρεπε να αυξάνεται µε βάση το µήκος της λέξης που εντοπίστηκε κι όχι µε ++. Επίσης, αν δε βρεθούν οι διαχωριστικοί χαρακτήρες στο string, πρέπει να τερµατίζει το loop. Τέλος, µην ξεχνάτε ότι το string ουσιαστικά τελειώνει εκεί που είναι το \0 κι ΟΧΙ στο LINESIZE. - Στο realloc, γιατί κάνατε typecast το words σε (void*)? Είναι λάθος. - Ο αλγόριθµος έχει κάποια σωστά στοιχεία αλλά θέλει δουλειά ακόµη. Page 6

1487 1489 1490 1491 FAIL 1492 FAIL 1493 FAIL 1497 1498 1501 FAIL - Έπρεπε να διαβάζετε το διαχωριστικό από το πληκτρολόγιο, κι όχι να χρησιµοποιείτε το "HIC" - Βρίσκετε µόνο την πρώτη λέξη και µετά το loop δεν ανανεώνει τις τιµές των µεταβλητών για να µπορέσετε να βρείτε και τις υπόλοιπες. - Μετά τη χρήση strncpy πρέπει πάντα να θέτετε το '\0' - Δεν υπάρχει καµία εγγύηση ότι ο πίνακας words θα έχει γεµισµένα όλα τα κελιά του. Τα loops δεν έπρεπε να πηγαίνουν µέχρι LINESIZE. - Δεν απελευθερώνετε όλη τη δυναµικά δεσµευµένη µνήµη. - Στο τέλος έπρεπε να εκτυπώνετε το χαρακτήρα στη διεύθυνση (words+i)->beg κι όχι το string. - Το µέγεθος στο %s στο scanf έπρεπε να είναι 99 κι όχι 100! - Να ελέγχετε για NULL µετά από κάθε malloc. - Είστε σε καλό δρόµο αλγοριθµικά, αλλά θέλει δουλειά ακόµη. - Δεν κατασκευάσατε φάκελο για να βάλετε µέσα το lab9.c. Να ακολουθείτε τις οδηγίες. - Λάθος στη σύνταξη της malloc. Τι σχέση έχει το (int *)? Μην παπαγαλίζετε τις διαφάνειες. - Δεν έχετε κάνει κάτι πέρα της δέσµευσης µνήµης. - Το πρόγραµµα δεν κάνει compile. Μην περιµένετε µέχρι τελευταία στιγµή για να κάνετε compile! Το λάθος που δεν προλάβατε να διορθώσετε ήταν τα άγκιστρο από if που ελέγχουν το αποτέλεσµα του malloc. - Το πρόγραµµα δεν κάνει compile. Προσθέτετε pointer σε pointer, πράγµα που απαγορεύεται. - Τι είναι αυτό? : while (words->word < (words->word + LINESIZE)) Δε συγκρίνουµε ποτέ string µε <, αλλά µε strcmp. Στη συγκεκριµένη άσκηση δεν έπρεπε καν να συγκρίνετε strings. - Το words είναι πίνακας. Το words->word αναφέρεται πάντα στο πρώτο στοιχείο του, οπότε οι αναθέσεις που κάνετε στο loop γίνονται πάντα στο ίδιο στοιχείο. - Μετά από χρήση strncpy να θέτετε πάντα το '\0' - Μη γράφετε ποτέ τόσο πολύ κώδικα χωρίς να τον τεστάρετε κάθε τόσο για να βεβαιώνεστε ότι δουλεύει σωστά. - Δεν αποδεσµεύετε σωστά τη δυναµικά δεσµευµένη µνήµη - Το αρχείο έπρεπε να λέγεται lab9.c - Η παράµετρος της strcspn δεν έπρεπε να είναι κάθε φορά η ίδια, γιατί τότε θα βρίσκει σε κάθε επανάληψη το ίδιο αποτέλεσµα. - Μην κολλάτε στη διάτρεξη των string ένα χαρακτήρα τη φορά! Χρησιµοποιείστε έξυπνα τα αποτελέσµατα των συναρτήσεων για strings για να βρείτε πότε να τερµατίσει η επανάληψη. - Τι σκοπό εξυπηρετεί η µεταβλητή flag? Θα βοηθούσε πολύ να της είχατε δώσει ένα όνοµα που περιγράφει τη λειτουργία της, ή τουλάχιστον να βάζατε ένα σχόλιο σε εκείνο το σηµείο. Γενικά δε µπορώ να καταλάβω γιατί ελέγχετε κεφαλαία και µικρά γράµµατα. Τι σχέση έχουν µε την άσκηση? - Το πρόγραµµα φαίνεται να µπαίνει σε endless loop. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h. Μην κολλάτε στη διάτρεξη strings κατά ένα χαρακτήρα τη φορά! - Το τέλος του string δεν είναι στο LINESIZE αλλά εκεί που βρίσκεται το \0. - Έπρεπε να ελέγχετε για NULL και µετά το realloc. - Το πρόγραµµα δεν κάνει compile. Μην περιµένετε µέχρι τελευταία στιγµή για να κάνετε compile! Το λάθος που δεν προλάβατε να διορθώσετε ήταν τα άγκιστρο από if που ελέγχουν το αποτέλεσµα του malloc. Page 7

1502 - Μετά από malloc να κάνετε πάντα έλεγχο για NULL. - Το wordadd είναι char *. Γιατί έχετε sizeof(struct infot) στο malloc του? - Δεδοµένου ότι το sentence δεν αλλάζει µέσα στο loop, η συνθήκη του while θα είναι πάντα αληθής και η επανάληψη δε θα τερµατίσει ποτέ. πάντως... 1503 1504 1505 1506 1508 1510 FAIL 1511 FAIL - Το αρχείο έπρεπε να λέγεται lab9.c - Η παράµετρος της strcspn δεν έπρεπε να είναι κάθε φορά η ίδια, γιατί τότε θα βρίσκει σε κάθε επανάληψη το ίδιο αποτέλεσµα. - Μην κολλάτε στη διάτρεξη των string ένα χαρακτήρα τη φορά! Χρησιµοποιείστε έξυπνα τα αποτελέσµατα των συναρτήσεων για strings για να βρείτε πότε να τερµατίσει η επανάληψη. - Στείλατε το backup αρχείο του Kate αντί για το lab9.c - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών/συναρτήσεων/τύπων. Τι είναι τα t, p? - Δεν πρέπει να ελέγχετε για isalpha. Δεν υπάρχει καµία εγγύηση ότι η πρόταση δεν περιέχει κι άλλου είδους χαρακτήρες (ψηφία, τελείες, κόµµατα, κτλ) - Το τέλος ενός string είναι εκεί που βρίσκεται το \0 κι όχι το LINESIZE. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h - Σωστή διαχείριση δεικτών κατά τα άλλα. - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνει a? - Μετά από κάθε malloc να κάνετε έλεγχο για NULL - Μετά από χρήση strncpy να θέτε πάντα το '\0' - Το τελευταίο for στο πρόγραµµα είναι τραγικό... - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνει a? - Μετά από κάθε malloc να κάνετε έλεγχο για NULL - Μετά από χρήση strncpy να θέτε πάντα το '\0' - Το τελευταίο for στο πρόγραµµα είναι τραγικό... - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνει temp? - Μετά από χρήση strncpy να θέτετε πάντα το '\0'. - Μη σκέφτεστε ότι τα strings τα διατρέχουµε πάντα ένα-ένα χαρακτήρα. Στη συγκεκριµένη περίπτωση δε θέλουµε να το κάνουµε αυτό, οπότε η συνθήκη σας είναι λάθος. - Δεν αποδεσµεύετε τη δυναµικά δεσµευµένη µνήµη, - Το πρόγραµµα δεν κάνει compile - Το µέγεθος στο %s έπρεπε να είναι 99, κι όχι 100 - Να ελέγχετε για NULL µετά από κάθε malloc - Δεν κάνετε πολλά πράγµατα στο αλγοριθµικό κοµµάτι - Τι είναι τα c, s? Να δίνετε περιγραφικά ονόµατα στις µεταβλητές σας. - Το words->address είναι πάντα το πρώτο στοιχείο του πίνακα. Φαίνεται να µην έχετε καταλάβει καλά τη µορφή της δοµής. Page 8

1512 FAIL 1514 - Πολύ καλή προσπάθεια 1515 FAIL - Στείλατε το lab8 1516 1517 - Πολύ καλή προσπάθεια 1519 FAIL - Στείλατε το lab8 1524 1528 1529 FAIL - Σωστό το struct αλλά φαίνεται να παπαγαλίσατε τις διαφάνειες. Αλλάζετε το όνοµα του struct µε typedef αλλά µετά δεν το χρησιµοποιείτε παντού. Τι όνοµα είναι το b??? Να δίνετε περιγραφικά ονόµατα! - Λάθος µέγεθος στο %s. Έπρεπε να είναι %99s, όχι %100s - Μετά από malloc να ελέγχετε πάντα για NULL - Λάθος λογική. Το i σας λέει πού είναι ο διαχωριστικός χαρακτήρας, όχι πού είναι η λέξη. Έπρεπε να το αυξάνετε κατά 1 µετά την strcspn. Επίσης, αφού το υπολογίζετε (έστω και µε λάθος) γιατί δε θέτετε και το πεδίο len? - Το j πηγαίνει µέχρι LINESIZE και το χρησιµοποιείτε για να διατρέξετε το words το οποίο όµως έχει µέγεθος LINESIZE/2! - Μην κολλάτε στη διάτρεξη των strings κατά ένα χαρακτήρα τη φορά! Επίσης, το τέλος του string είναι εκεί που βρίσκεται το \0 κι όχι στο LINESIZE. - Το πρόγραµµα δεν εκτυπώνει αποτελέσµατα και δε δείχνετε αν ξέρετε να προσπελάσετε τα πεδία που struct για εκτύπωση. - Καλά σκέφτηκες να ελέγχεις για NULL κατά την εκτύπωση, αλλά ελέγχεις τη λάθος ποσότητα. - Καλό είναι να εκτυπώνεις κι ένα µήνυµα λάθους όταν η malloc επιστρέφει NULL - Μετά από malloc να κάνετε πάντα έλεγχο για NULL. - Στο strstr έπρεπε να χρησιµοποιείτε το diaxwristiko αντί για "HIC" - Μετά από χρήση strncpy πρέπει να θέτετε πάντα το '\0' - Στο τελικό for δεν πρέπει να πηγαίνετε µέχρι LINESIZE - δεν έχει απαραίτητα τόσα γεµισµένα κελιά ο πίνακας. - Να κάνετε έλεγχο για NULL µετά από κάθε malloc. - Δεν αποδεσµεύσατε όλη τη δυναµικά δεσµευµένη µνήµη. - Να χρησιµοποιείτε περιγραφικά ονόµατα µεταβλητών. Τι σηµαίνει temp? - Μετά από χρήση strncpy να θέτετε πάντα το '\0'. - Μη σκέφτεστε ότι τα strings τα διατρέχουµε πάντα ένα-ένα χαρακτήρα. Στη συγκεκριµένη περίπτωση δε θέλουµε να το κάνουµε αυτό, οπότε η συνθήκη σας είναι λάθος. - Δεν αποδεσµεύετε τη δυναµικά δεσµευµένη µνήµη, - Η αρχικοποίηση του characters θα µπορούσε να είχε γίνει πιο απλά: char characters[]="!@#$%^&*" - Μετά από malloc να ελέγχετε πάντα για NULL - Στην κλήση της strpbrk έχετε βάλει ανάποδα τις παραµέτρους - Λάθος λογική. Μην κολλάτε στη διάτρεξη των string κατά ένα χαρακτήρα τη φορά! Επίσης, αν δεν υπάρχουν πια οι χαρακτήρες στο string, πρέπει να τερµατίζει το loop. Μην ξεχνάτε ότι το string ουσιαστικά τελειώνει εκεί που είναι το \0 κι ΟΧΙ στο LINESIZE. - Στο realloc, γιατί κάνατε typecast το words σε (void*)? Είναι λάθος. - Δε θέτετε την απόσταση - Δεν απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη Page 9

1531 1532 - Στο τέλος έπρεπε να εκτυπώνετε το χαρακτήρα στη διεύθυνση (words+i)->beg κι όχι το string. - Μετά από malloc να κάνετε πάντα έλεγχο για NULL. - Το wordadd είναι char *. Γιατί έχετε sizeof(struct infot) στο malloc του? - Δεδοµένου ότι το sentence δεν αλλάζει µέσα στο loop, η συνθήκη του while θα είναι πάντα αληθής και η επανάληψη δε θα τερµατίσει ποτέ. πάντως... 1533 1534 FAIL 1537 FAIL 1539 1540 FAIL 1541 FAIL 1542 1543 - Άσχηµη στοίχιση - Μετά από χρήση strncpy πρέπει να θέτετε πάντα το '\0' - Πολύ καλή προσπάθεια - Τι είναι τα c, s? Να δίνετε περιγραφικά ονόµατα στις µεταβλητές σας. - Το words->address είναι πάντα το πρώτο στοιχείο του πίνακα. Φαίνεται να µην έχετε καταλάβει καλά τη µορφή της δοµής. - Καλή δουλειά όσον αφορά ζητήµατα µνήµης, αλλά δε χρησιµοποιείτε συναρτήσεις από τη string.h όπως απαιτούσε η εκφώνηση. - Ο αλγόριθµος έχει κάποια σωστά στοιχεία αλλά θέλει δουλειά ακόµη. -Μετά από malloc να κάνετε πάντα έλεγχο για NULL - Το µέγεθος στο %s έπρεπε να είναι 99 κι όχι 100. - Γιατί έχετε βάλει ολόκληρη πρόταση στο scanf? Άλλο ζητούσε η εκφώνηση. - Τι σκοπό εξυπηρετούν τα δύο for? - Δεν έχετε κάνει κάτι ιδιαίτερο πέρα των malloc/free - Δε θέτετε την απόσταση - Δεν απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη - Μετά από malloc να κάνετε πάντα έλεγχο για NULL. - Στο strstr έπρεπε να χρησιµοποιείτε το diaxwristiko αντί για "HIC" - Μετά από χρήση strncpy πρέπει να θέτετε πάντα το '\0' - Στο τελικό for δεν πρέπει να πηγαίνετε µέχρι LINESIZE - δεν έχει απαραίτητα τόσα γεµισµένα κελιά ο πίνακας. - Για το sentence προσδιορίσατε µέγεθος 20, οπότε έπρεπε να το διαβάζετε µε %19s κι όχι µε %20s. - Να διαβάζετε ΟΛΟΚΛΗΡΗ την εκφώνηση. Το LINESIZE έπρεπε να είναι 100. - Να κάνετε έλεγχο για NULL µετά από κάθε malloc. - Στη συνθήκη του while συγκρίνετε το sentence που είναι δείκτης µε το '\0' που είναι χαρακτήρας! - Το printf είναι λάθος. Έπρεπε να διατρέχετε ολόκληρο πίνακα! Page 10

1547 1548 FAIL 1550 FAIL - Τι είναι το adr2 και γιατί δεσµεύετε µνήµη γι'αυτό? Για το words έπρεπε να είχατε δεσµεύσει µνήµη δυναµικά. - Η συνθήκη στο while είναι λάθος. Δεν υπάρχει εγγύηση ότι θα γεµίσουν όλες οι θέσεις του πίνακα words. Ακόµη χειρότερα, πάτε µέχρι και LINESIZE/2 το οποίο σηµαίνει ότι βγαίνετε εκτός ορίων του words. - Το πρόγραµµα δεν εκτυπώνει τίποτα όσον αφορά τον αλγόριθµο εύρεσης των θέσεων - Να αποδεσµεύετε πάντα τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. - Δεν κατασκευάσατε φάκελο για να βάλετε µέσα το lab9.c. Να ακολουθείτε τις οδηγίες. - Λάθος στη σύνταξη της malloc. Τι σχέση έχει το (int *)? Μην παπαγαλίζετε τις διαφάνειες. - Να προσδιορίζετε πάντα µέγεθος στο %s - Δεν έχετε κάνει κάτι πέρα της δέσµευσης µνήµης. - Το όνοµα του αρχείου έπρεπε να είναι lab9.c - Έπρεπε και η απόσταση και οι διευθύνσεις να υπολογιστούν µε χρήση συναρτήσεων strings και όχι διατρέχοντας το string ένα-ένα χαρακτήρα Page 11