FAIL PASS PASS οριακά

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

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

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

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

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

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

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

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

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

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

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

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

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

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

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

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

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

to post PASS PASS FAIL

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

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

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

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

Sheet PASS 1426 PASS 1428 PASS. Page 1

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

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

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

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

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

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

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

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

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

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

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

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

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

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

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

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

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

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

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

Οργάνωση Υπολογιστών ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ασκήσεις 7: Πρόγραμμα Συνδεδεμένης Λίστας και Διαδικασιών. Μανόλης Γ.Η.

ΗΥ101: Εισαγωγή στην Πληροφορική

for for for for( . */

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

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

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

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

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

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

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

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

Εντολές της LOGO (MicroWorlds Pro)

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

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

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

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

ΑΕΜ ή username. Sheet2

Εισαγωγή στην πληροφορική

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα ως ορίσματα Εισαγωγή στις αναφορές

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

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

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

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

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

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

Γ ΤΑΞΗ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΚΑΙ ΕΠΑΛ (ΟΜΑΔΑ Β

2ο ΓΕΛ ΑΓ.ΔΗΜΗΤΡΙΟΥ ΑΕΠΠ ΘΕΟΔΟΣΙΟΥ ΔΙΟΝ ΠΡΟΣΟΧΗ ΣΤΑ ΠΑΡΑΚΑΤΩ

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

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

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

Α4. Όσο επανάλαβε Τέλος_επανάληψης Εμφάνισε Για από μέχρι με_βήμα. Όσο επανάλαβε (Μονάδες 5) Α5. Α[10, 5] Π, Για από μέχρι (1) Για από μέχρι (2) Αν

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

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

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Εντολές επανάληψης Εντολές επανάληψης while for do-while ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Παράδειγμα #1 Εντολή while

ΣΧΟΛΙΑ ΓΙΑ ΤΟ LAB 1. Sheet3_2

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

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

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

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Στην εντολή while η επανάληψη συνεχίζεται όσο η λογική έκφραση έχει τιμή false.

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

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

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

Προγραμματισμός ΙI (Θ)

Εντολές ελέγχου ροής if, for, while, do-while

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Transcript:

AEM 0001 0002 COMMENTS οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 7 -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. -Το πρόγραµµά σου παράγει segmentation fault σε κάθε είσοδο! -Όταν δηλώνεις nodet *after; δεν µπορείς να πεις αµέσως after- >next=runner->next γιατί ο δείκτης after δεν έχει αρχικοποιηθεί να δείχνει πουθενά. Άρα προσπελαύνεις και αλλάζεις το περιεχόµενο µιας διεύθυνσης που δεν σου ανήκει. -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head)! -Ο κώδικας που έγραψες είναι αρκετά πολύπλοκος. Η λύση είναι πολύ πιο απλή. -Δεν έχεις µεριµνήσει για την περίπτωση step=0 και step=1. -Πολύ καλός σχολιασµός. 0003 0004 (διορθωτική) - Το πρόγραµµα δε διαχειρίζεται τις περιπτώσεις step = 0, step = 1 καλέσεις την συνάρτηση RemoveAtStep µε step=1. 0005 0006 0008 0009 Page 1

0010 0011 0012 - Αρχικοποιείς previous=null και µετά προσπελαύνεις το previous->next µε αποτέλεσµα να γίνεται πάντα segmentation fault. - Δε διαχειρίζεσαι τις περιπτώσεις που το step είναι 0 ή 1. - Δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας(µε το free(head) απελευρώνεις µόνο την κεφαλή όχι όλη τη λίστα) οριακά - Η συνάρτηση RemoveAtStep δεν λειτουργεί σωστά για την περίπτωση που η τιµή της µεταβλητής step ισούται µε 1. Επίσης, η εντολή '' runner = runner->next '' στην αντίστοιχη εντολή while οδηγεί σε προσπέλαση µνήµης που έχει αποδεσµευθεί κατά την προηγούµενη επανάληψη. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. Page 2

0013 0014 0015 - Οι δηλώσεις των µεταβλητών που χρησιµοποιούνται θα πρέπει να προηγούνται των εντολών του προγράµµατος. Εποµένως, η δήλωση της µεταβλητής k στην συνάρτηση RemoveAtStep θα έπρεπε να βρίσκεται µετά την δήλωση της µεταβλητής torr, δηλαδή να προηγείται και των διαφόρων εντολών αρχικοποίησης. Γι' αυτό σε ενηµερώνουν κάποια από τα compilation warnings. - Θα ήταν καλό να µην έχεις σχόλια C++ ( // ) στο πρόγραµµά σου. - Τα σχόλια συναρτήσεων δεν συµµορφώνονται µε αυτά του αντίστοιχου φυλλαδίου. - το µόνο λάθος που έχεις είναι ότι στη scanf στο dowhile να γίνεται η επανάληψη όσο ο χρήστης δίνει βήµα αρνητικό δηλ. step<0 - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - Προσοχή στην στοίχιση. 0016 0018 Page 3

0019 0020 -Το πρόγραµµά σου παράγει segmentation fault σε κάθε είσοδο! -Η συνάρτηση RemoveAtStep είναι λάθος. -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Δεν έχεις µεριµνήσει για την περίπτωση step=1. -Δεν έχεις βάλει καθόλου σχόλια! Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό! - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - Προσοχή στην στοίχιση. 0021 0022 0023 - Για step = 1 θα έπρεπε πρώτα free(runner); και µετά runner=runner->next; γιατί έτσι όπως το έχεις δεν ελευθερώνεις των πρώτο κόµβο. - δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας πρίν το τέλος των διαδικασιών οριακά - Θα έπρεπε τις ενολές prev = runner; runner = runner->next; να τις έχεις µέσα σε else για να σου δουλέψει σωστά - για step =1 η εντολή prev = runner;που είναι µετά το free είναι περιττή.(γιατί την έχεις και ώς πρώτη). Επίσης θα έπρεπε να κάνεις κι έναν έλεγχο στο τέλος και αν το βήµα είναι 1 να µην επιστρέφεις την κεφαλή αλλά NULL (γιατί έτσι όπως το έχεις υλοποιήσει η κεφαλή χάνεται) - δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας πρίν το τέλος των διαδικασιών Page 4

0025 0026 0027 0028 0030 0033 οριακά -O compiler σου εµφανίζει warning: "/*" within comment και δεν το διορθώνεις! -Στην είσοδο 7 πέφτεις σε ατέρµονο βρόγχο. Το πρόγραµµα σου δεν δουλεύει σωστά για step=1. -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Να βάζεις σχόλια και µέσα στον κώδικα, όχι µόνο πριν από κάθε συνάρτηση. -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Έχεις βάλει πολύ λίγα σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. οριακά -Το πρόγραµµά σου δεν δουλέυει σωστά για step=0. Επιπλέον αφήνεις αρκετή δεσµευµένη µνήµη χωρίς να έχεις κανέναν τρόπο για να την ξαναπροσπελάσεις. -Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό! - Καλή προσπάθεια - ελευθερώνεις τη µνήµη της λίστας µετά το τέλος των διαδικασιών - Αλλά µε τον τρόπο που το εχεις υλοποιήσει σβήνεις µόνο την πρώτη φορά. Η µεταβλητή l δε χρειάζεται όπως επίσης δε χρειάζεται να αυξάνεις και το step. Αν µετά το do while απλά έθετες το k=0 και τιποτα άλλο ο κώδικάς σου θα δούλευε κανονικά - θα έπρεπε στην συνθήκη να έχεις step<=0 γιατί έτσι όπως το έχεις δε καλύπτεις την περίπτωση step=0 -Πολύ καλή δουλειά, συνέχισε έτσι! -Να βάζεις σχόλια και µέσα στον κώδικα, όχι µόνο πριν από κάθε συνάρτηση. 0034 Page 5

1072 -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head)! -Το πρόγραµµά σου παράγει segmentation fault για τις εισόδους 6,7. -Το πρόγραµµά σου δουλεύει σωστά για τις εισόδους: 1-5. Πολύ καλή δουλειά. -Έχεις βάλει πολύ λίγα σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. 1073 1074 1075 οριακά -Το πρόγραµµά σου πέφτει σε ατέρµονο βρόγχο για την είσοδο 7! -Το πρόγραµµά σου δεν δουλέυει σωστά για step=1. Κοίταξε καλά τον κώδικά σου και προσπάθησε να καταλάβεις ποιον κόµβο σβήνεις κάθε φορά. -Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό! - δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας πρίν το τέλος των διαδικασιών(µε το free(head) απελευρώνεις µόνο την κεφαλή όχι όλη τη λίστα) Page 6

1077 1079 1080 - Η εντολή return(null) εντός της δοµής while για την περίπτωση που η τιµή της µεταβλητής step είναι ίση µε 1 είναι λανθασµένη καθώς έχει ως αποτέλεσµα την διαγραφή µόνο του πρώτου κόµβου της λίστας. - Η εντολή '' runner = runner->next '' στην συνάρτηση RemoveAtStep για την περίπτωση που η τιµή της παραµέτρου step ισούται µε 1 είναι περιττή. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - Προσοχή στην στοίχιση. - Το ότι χρησιµοποιείς επανάληψη για να µάθεις το πλήθος των κόµβων δε το χρησιµοποιείς πουθενά αργότερα στον κώδικά σου. - αφού έχεις ειδική περίιιπτωση το step=1 θα έπρεπε να αρχικοποιείς metrhths=2 αντί για metrhths=0 γιατί 0%κατι ειναι πάντα 0 οπότε θα σβήνει πάντα το δεύτερο στοιχείο της λίστας ότι κι αν είναι το βήµα - θα έπρεπε να έχεις head = RemoveAtStep(head,step); έτσι ώστε αν το βήµα=1, που εσύ στην υλοποίησή σου αλλάζεις τη θέση του head, µε την ανάθεση αυτή το head να πάρει τη νέα τιµή που είναι NULL. - δεν ελευθερώνεις τη µνήµη της λιστας µέτα το τέλος των διαδικασιών οριακά -Η συνάρτηση main έπρεπε να εµφανίζεται πρώτη. -Η υλοποίηση για την περίπτωση step=1 είναι λάθος. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head)! -Έχεις βάλει πολύ λίγα σχόλια. Page 7

1081 -Το πρόγραµµά σου δεν κάνει compile. Απαράδεκτο το ότι δεν διόρθωσες ένα τόσο εύκολο λάθος. -Το πρόγραµµά σου πέφτει σε ατέρµονο βρόγχο σε κάθε είσοδο! -Δεν διαβάζεις πουθενά την µεταβλητή step. -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. -Πρόσεξε την στοίχισή σου! 1082 1084 1085 1086 - Προσοχή στην στοίχιση. - Η συνάρτηση RemoveAtStep δεν λειτουργεί πλήρως ορθά στην περίπτωση που η τιµή της παραµέτρου step ισούται µε 1. Σε αυτή την περίπτωση, η αρχικοποίηση '' prev = head '' έχει ως αποτέλεσµα η εντολή '' runner = prev->next '' να οδηγεί σε προσπέλαση µνήµης που έχει αποδεσµευτεί από την αµέσως προηγούµενη εντολή free. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Θα ήταν καλό στην συνάρτηση main να υπάρχει µία δοµή if-else if και όχι τρεις εντολές if, αφού οι αντίστοιχες συνθήκες είναι αµοιβαίως αποκλειόµενες. - ok Page 8

1087 1088 1089 1091 οριακά - Η συνάρτηση RemoveAtStep δεν λειτουργεί σωστά για την περίπτωση που η τιµή της µεταβλητής step ισούται µε 1. - Θα ήταν καλό τα άγκιστρα '' { '' να µην διαχωρίζονται µε πολλά κενά από την εντολή στην οποία αντιστοιχούν. - Προσοχή στα σχόλια των συναρτήσεων. Ως preconditions και postconditions περιγράφονται οι συνθήκες που πρέπει να ισχύουν για την ορθή λειτουργία και οι αλλαγές που επιφέρει η κλήση της συνάρτησης αντίστοιχα. -Το πρόγραµµά σου δεν δουλέυει σωστά για step=0. Επιπλέον αφήνεις αρκετή δεσµευµένη µνήµη χωρίς να έχεις κανέναν τρόπο για να την ξαναπροσπελάσεις. -Ο υπόλοιπος κώδικας είναι σωστός, έκανες καλή δουλειά. οριακά - Δε διαχειρίζεσαι τις περιπτώσεις που το step είναι 0 ή 1. - Δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας οριακά -Το πρόγραµµά σου πέφτει σε ατέρµονο βρόγχο στο in7. -Η υλοποίηση για την περίπτωση step=1 είναι λάθος. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. καλέσεις την συνάρτηση RemoveAtStep µε step=1. -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. Page 9

1093 1095 1097 -Το πρόγραµµά σου δεν κάνει compile. Πολλά συντακτικά λάθη. -Διάβασε την θεωρία για το πως καλούµε µια συνάρτηση. -Δεν υλοποιείς καθόλου την συνάρτηση που ζητείται. -Το πρόγραµµά σου δουλεύει σωστά για τις εισόδους: 1, 5 -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 2, 3, 4, 6, 7 -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head)! -Όταν κάνεις free(run), δεν µπορείς µετά να πεις prev- >next=run->next γιατί το run->next δεν είναι πλέον έγκυρη διεύθυνση! -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. οριακά -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head). Τι γίνεται µε τους άλλους κόµβους που παραµένουν στην µνήµη;; -Το πρόγραµµά σου δεν δουλεύει σωστά για step=1. Ο βρόγχος while (runner!=null) τελειώνει στην πρώτη επανάληψη γιατί κάνεις free(runner). -Δεν έχεις βάλει σχεδόν καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. -Πρόσεξε την στοίχισή σου! 1098 Page 10

1100 1101 1102 1104 - Την περίπτωση όπου το βήµα είναι 1 έχεις segmentation fault κι αυτό γιατί το if(step==1) είναι στο τέλος οπότε ακόµα κι αν το βήµα είναι 1 η επανάληψη για την αφαίρεση κόµβων εκτελείται κανονικά. Και δεύτερον θα πρέπει να απελευθερώνεις τη µνήµη για όλους τους κόµβους κι όχι απλά να κάνεις head=null - δεν ελευθερώνεις τη µνήµη της λιστας µέτα το τέλος των διαδικασιών (πρέπει να απελευθερώνεις τη µνήµη για όλους τους κόµβους) - καλά τα σχόλια σου αλλά δε χρειάζεται να εξηγείς κάθε φορά ότι γίνετα ι κλήση µια συνάρτησης -η εντολή '' previous = runner '' στο for οδηγεί σε προσπέλαση µνήµης που έχει αποδεσµευθεί κατά την τρέχουσα επανάληψη. - Δεν χειρίζεσαι τις περιπτώσεις που το step είναι 0 ή 1. -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. - Η εντολή '' runner = runner->next '' στην συνάρτηση RemoveAtStep για την περίπτωση που η τιµή της µεταβλητής step ισούται µε 1 είναι λανθασµένη καθώς οδηγεί σε προσπέλαση µνήµης που έχει απελευθερωθεί από την αµέσως προηγούµενη εντολή free. - Οι δηλώσεις των µεταβλητών που χρησιµοποιούνται θα πρέπει να προηγούνται των εντολών του προγράµµατος. Εποµένως, η δήλωση της µεταβλητής head στην συνάρτηση main θα έπρεπε να προηγείται της εντολής '' temp = 1 ''. Οµοίως και στην συνάρτηση RemoveAtStep. Γι' αυτό σε ενηµερώνουν τα compilation warnings. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - ΟΚ ελευθερώνεις και τη µνήµη όλων των κόµβων της λίστας πριν το τέλος των διαδικασιών ΑΛΛΑ δεν έχεις σχόλια Page 11

1105 - Πολύ µπερδεµένη λογική, και τελικά δε δουλεύει σωστά για καµια περίπτωση. 1109 1110 1111 1113 1114 οριακά -Το πρόγραµµά σου πέφτει σε ατέρµονο βρόγχο για την είσοδο 7! -Η συνάρτηση RemoveAtStep είναι λάθος για step=1. -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Πολύ καλός σχολιασµός. - Δε διαχειρίζεσαι τις περιπτώσεις που το step είναι 0 ή 1. - Δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας - Κάνεις runner = help->next αµέσως αφότου απελευθερώνεις τη µνήµη όπου δείχνει το help. - Σε περίπτωση που η τιµή της µεταβλητής step ισούται µε 1 δεν θα έπρεπε να καλείς ξανά την συνάρτηση RemoveAtStep για την απελευθέρωση της υπολειπόµενης µνήµης καθώς έχει ήδη απελευθερωθεί όλη η µνήµη που έχει δεσµευθεί για την λίστα. - Προσοχή στα σχόλια των συναρτήσεων. Ως preconditions και postconditions περιγράφονται οι συνθήκες που πρέπει να ισχύουν για την ορθή λειτουργία και οι αλλαγές που επιφέρει η κλήση της συνάρτησης αντίστοιχα. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Προσοχή στην στοίχιση. Page 12

1115 1116 -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head). Τι γίνεται µε τους άλλους κόµβους που παραµένουν στην µνήµη; -Πολύ καλή δουλειά, συνέχισε έτσι! - Δεν έχει υλοποιηθεί η λογική του προγράµµατος για την περίπτωση που ο χρήστης δώσει τιµή για την παράµετρο step ίση µε 1. - Το κενό µεταξύ του χαρακτήρα '' και του % στην εντολή scanf της συνάρτησης main είναι περιττό. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - Προσοχή στην στοίχιση. 1117 1118 1119 1120 1121 - OK, πολύ καλά σχόλια και ελευθερώνεις και τη µνήµη όλων των κόµβων της λίστας στο τέλος των διαδικασιών - δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας πρίν το τέλος των διαδικασιών(µε το free(head) απελευρώνεις µόνο την κεφαλή όχι όλη τη λίστα) Page 13

1122 lab10 οριακά - Η συνάρτηση RemoveAtStep δεν λειτουργεί σωστά για την περίπτωση που η τιµή της µεταβλητής step ισούται µε 1. Επίσης, η εντολή '' runner = runner->next '' στην αντίστοιχη εντολή while οδηγεί σε προσπέλαση µνήµης που έχει αποδεσµευθεί κατά την προηγούµενη επανάληψη. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την τιµή που εισάγει ο χρήστης για την µεταβλητή step. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - Προσοχή στην στοίχιση. Επίσης, τα άγκιστρα '' } '' θα πρέπει να βρίσκονται στην ίδια στήλη µε την εντολή την οποία ''κλείνουν''. 1123 1124 1126 οριακά -Το πρόγραµµά σου παράγει segmentation fault για την είσοδο 7. -Το πρόγραµµα σου δεν δουλεύει σωστά για step=1. Όταν γράφεις free(runner) δεν µπορείς µετά να πεις runner=runner->next αφού το runner->next µόλις το έσβησες µε την free!!! -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Να βάζεις σχόλια και µέσα στον κώδικα, όχι µόνο πριν από κάθε συνάρτηση. -Πολύ καλός σχολιασµός, συνέχισε έτσι. -Το πρόγραµµά σου πέφτει σε ατέρµονο βρόγχο για όλες τις εισόδους. -Έχεις λογικά λάθη. 1127 Page 14

1128 1129 1130 1131 οριακά -Το πρόγραµµά σου παράγει segmentation fault για την είσοδο 6. -Το πρόγραµµά σου παράγει segmentation fault σε κάθε είσοδο! καλέσεις την συνάρτηση RemoveAtStep µε step=1. -Δεν έχεις µεριµνήσει για την περίπτωση step=0 και step=1. -Η στοίχισή σου είναι απαράδεκτη. -Πολύ σωστά τα σχόλια που έβαλες, διάβασε όµως το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. - segfault στην περίπτωση step = 1 οριακά -Στην είσοδο 7 πέφτεις σε ατέρµονο βρόγχο. Το πρόγραµµα σου δεν δουλεύει σωστά για step=1. -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Να βάζεις σχόλια και µέσα στον κώδικα, όχι µόνο πριν από κάθε συνάρτηση. Page 15

1133 1135 οριακά - Η συνάρτηση RemoveAtStep δεν λειτουργεί σωστά για την περίπτωση που η τιµή της µεταβλητής step ισούται µε 1. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. - Προσοχή στην στοίχιση. - Καλή Προσπάθεια 1137 1139 οριακά - Δε διαχειρίζεσαι τις περιπτώσεις που το step είναι 0 ή 1. - Δεν ελευθερώνεις τη µνήµη για όλα τα στοιχεία της λίστας 1141 1142 οριακά -Το πρόγραµµά σου παράγει segmentation fault για την είσοδο 7. -Το πρόγραµµά σου δεν δουλέυει σωστά για step=1. Όταν γράφεις free(runner) δεν µπορείς µετά να πεις runner=runner->next αφού το runner->next µόλις το έσβησες µε την free!!! -Πολύ καλός σχολιασµός, συνέχισε έτσι. - OK, ελευθερώνεις και τη µνήµη όλων των κόµβων στο τέλος - καλά τα σχόλια σου αλλά δε χρειάζεται να εξηγείς κάθε φορά ότι γίνεται κλήση µια συνάρτησης Page 16

1144 1145 1146 1148 -Η συνάρτηση RemoveAtStep είναι λάθος για step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο, όπως πολύ σωστά κάνεις στην main. Αν το είχες κάνει αυτό, θα αρκούσε να καλέσεις την συνάρτηση RemoveAtStep µε step=1 για να απελευθερώσεις όλη την µνήµη που δέσµευσες. -Γενικά όµως, πολύ καλή εργασία µε σωστή σκέψη και πρότυπα σχόλια. -Δεν έχεις βάλει καθόλου σχόλια! Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό! -Το πρόγραµµά σου παράγει segmentation fault γιατι αρχικοποιείς prev=null και µετά προσπελαύνεις το prev->next καλέσεις την συνάρτηση RemoveAtStep µε step=1. -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. πολύ οριακά -Το µήνυµα "give step" είναι περιττό. -Το πρόγραµµά σου παράγει segmentation fault για τις εισόδους 6 και 7. -Η υλοποίηση για την περίπτωση step=1 είναι λάθος. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. Page 17

1149 1150 1152 - Μπερδεµένη λογικήπου καταλήγει σε segmentation fault σε όλες τις περιπτώσεις - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Θα ήταν καλό στην συνάρτηση RemoveAtStep να υπάρχει µία δοµή if-else if και όχι δύο εντολές if, αφού οι δύο συνθήκες είναι αµοιβαίως αποκλειόµενες. - Τα σχόλια των συναρτήσεων δεν συµµορφώνονται µε αυτά του αντίστοιχου φυλλαδίου. οριακά -Δεν απελευθερώνεις καθόλου την µνήµη που δέσµευσες. Αρκούσε να -Το πρόγραµµά σου δεν δουλεύει σωστά για step=1. -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head). Τι γίνεται µε τους άλλους κόµβους που παραµένουν στην µνήµη;; -Δεν έχεις βάλει σχεδόν καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. 1155 1157 -Το πρόγραµµά σου παράγει segmentation fault σε κάθε είσοδο εκτός από τις 6,7. Κι εκεί όµως τα αποτελέσµατα είναι λάθος. -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head)! -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. 1158 Page 18

1159 1160 1161 1171 - Οι δηλώσεις των µεταβλητών που χρησιµοποιούνται θα πρέπει να προηγούνται των εντολών του προγράµµατος. Εποµένως, η δήλωση της µεταβλητής runner στην συνάρτηση main θα έπρεπε να προηγείται της εντολής '' newrunner = head ''. Οµοίως και στην συνάρτηση RemoveAtStep. Γι' αυτό σε ενηµερώνουν τα compilation warnings. - Τα σχόλια των συναρτήσεων δεν συµµορφώνονται πλήρως µε αυτά του αντίστοιχου φυλλαδίου. - Προσοχή στην στοίχιση. - πολύ καλή υλοποίηση - δεν ελευθερώνεις τη µνήµη της λιστας µέτα το τέλος των διαδικασιών - θα έπρεπε να κάνεις ένα έλεγχο στο τέλος της RemoveAt και αν step=1 να επιστρέφεις NULL και όχι το head (το head έχει χαθεί σε αυτή την περίπτωση) -Το πρόγραµµά σου δεν κάνει compile. -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. -Δεν τυπώνεις πουθένα αποτελέσµατα! -Πολύ καλός σχολιασµός. - Μη χρησιµοποιείς \n στο format string του scanf - Δεν αποδεσµεύεις όλη τη δυναµικά δεσµευµένη µνήµη στο τέλος του προγράµµατος. Θα µπορούσες να το είχες κάνει πολύ απλά, καλώντας τη RemoveAtStep µε βήµα 1. - Στην περίπτωση που step = 1, η συνάρτησή σου θα έπρεπε να επιστρέφει NULL (ή να είχες θέσει το head σε NULL πριν το επιστρέψεις) - Άσχηµη στοίχιση - Λίγο πολύπλοκη η λογική του προγράµµατος, αλλά δουλεύει. Page 19

1172 1177 -Το πρόγραµµά σου πέφτει σε ατέρµονο βρόγχο για όλες τις εισόδους. -Η συνάρτηση RemoveAtStep είναι παντελώς λάθος. Δεν κάνεις καµία αφαίρεση κόµβου. -Ο compiler σου εµφανίζει το µήνυµα "warning: unused variable 'next'" αλλά δεν έκανες τίποτα για να το διορθώσεις. -Δεν έχεις βάλει σχεδόν καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. -Πρόσεξε την στοίχισή σου! οριακά - Η συνάρτηση RemoveAtStep δεν λειτουργεί σωστά για την περίπτωση που η τιµή της µεταβλητής step ισούται µε 1. Επίσης, η εντολή '' curr = curr->next '' στην αντίστοιχη εντολή while οδηγεί σε προσπέλαση µνήµης που έχει αποδεσµευθεί κατά την τρέχουσα επανάληψη. - Θα ήταν χρήσιµο να υπάρχει κώδικας στην συνάρτηση main που θα ελέγχει την εγκυρότητα της τιµής που εισάγει ο χρήστης για την µεταβλητή step. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. 1178 1180 -Πολύ καλή δουλειά, συνέχισε έτσι! -Να βάζεις σχόλια και µέσα στον κώδικα, όχι µόνο πριν από κάθε συνάρτηση. Page 20

1181 οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 6, 7 -Δεν έχεις µεριµνήσει για την περίπτωση step=1. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. -Για να απελευθερώσεις την µνήµη µιας λίστας δεν αρκεί να κάνεις free(head)! -Πολύ καλός σχολιασµός. 1184 1185 1186 1187 οριακά -Το πρόγραµµά σου δουλεύει λάθος για τις εισόδους: 6, 7 -Η υλοποίηση για την περίπτωση step=1 είναι λάθος. Μπορούσες να θεωρήσεις ειδική περίπτωση και να την υλοποιείς σε άλλον βρόγχο. -Δεν έχεις βάλει καθόλου σχόλια. Διάβασε το φυλλάδιο µε τις οδηγίες για πρότυπο σχολιασµό. - Η εκφώνηση της άσκησης αναφέρει ότι ο αριθµός που εισάγεται από τον χρήστη είναι µη αρνητικός. Εποµένως, ο έλεγχος στην συνάρτηση main θα έπρεπε να είναι '' d < 0 '' και θα έπρεπε να υπήρχε έλεγχος για τιµή της παραµέτρου step ίση µε µηδέν στην συνάρτηση RemoveAtStep. - Σε περίπτωση που η τιµή της µεταβλητής step ισούται µε 1 δεν θα έπρεπε να καλείς ξανά την συνάρτηση RemoveAtStep για την απελευθέρωση της υπολειπόµενης µνήµης καθώς έχει ήδη απελευθερωθεί όλη η µνήµη που έχει δεσµευθεί για την λίστα. Αυτό έχει ως αποτέλεσµα το segmentation fault όταν ο χρήστης δώσει την τιµή 1 ως είσοδο. Επίσης, σε αυτή την περίπτωση, η συνάρτηση RemoveAtStep θα έπρεπε να επιστρέφει NULL. - Δεν υπάρχουν σχόλια συναρτήσεων. Η ύπαρξη σχολίων αποτελούσε και ζητούµενο της άσκησης. 1191 Page 21