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

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

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

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

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

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

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

FAIL PASS PASS οριακά

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

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

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

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

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

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

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Προθεσµία: 9/1/2015, 22:00

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

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

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

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

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

ΠΛΗ111. Ανοιξη Μάθηµα 3 ο. Συνδεδεµένες Λίστες. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

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

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

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

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

to post PASS PASS FAIL

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

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

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

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

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

ΑΕΜ ή username. Sheet2

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

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

Sheet PASS 1426 PASS 1428 PASS. Page 1

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

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

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

Κατανεμημένα Συστήματα

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

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

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

Εργαστήριο 2. Εαρινό Εξάμηνο Εντολές για είσοδο ακεραίων αριθμών από την κονσόλα:

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

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

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

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

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

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

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

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

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

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

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

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

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

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

Φροντιστήριο 4 Σκελετοί Λύσεων

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

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

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

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

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

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

lab3grades - Δεν παραδόθηκε. - Προσπαθήστε να κάνετε την άσκηση στο σπίτι.

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

Transcript:

ΑΕΜ ΒΑΘΜΟΣ 357 FAIL Λάθος στο πακετάρισµα του αρχείου. ΣΧΟΛΙΑ 400 FAIL 402 Έπρεπε να στείλετε ΜΟΝΟ το lab11.c Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το curr->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. - Αν το newnode είναι NULL πρέπει να γίνεται clear η νέα λίστα πριν τον τερµατισµό - Στην εισαγωγή νέου κόµβου δε λαµβάνετε υπόψη ότι η λίστα είναι κυκλική και τελικά τη χαλάτε. Η λίστα είναι κυκλική, εποµένως δεν τερµατίζει σε NULL. Το όριο του loop είναι λάθος. Δείτε τις διαφάνειες. Δεν ελέγχετε αν η τοµή είναι NULL, και δεν ελευθερώνετε τη δυναµικά δεσµευµένη µνήµη του προγράµµατος πριν τον τερµατισµό Σωστή αλλά δεν έπρεπε να κάνετε εδώ clear της head1, head2. Έπρεπε να κάνετε clear τα set1, set2 ακόµη κι αν το set3 είναι NULL 403 FAIL Λάθος στο πακετάρισµα του αρχείου. 1560 - Αν το newnode είναι NULL έπρεπε να κάνετε clear και το set1. Σωστή κατά τα άλλα.

1614 1717 - Το curr χρησιµοποιείται για να διατρέξει λίστες και θα δείχνει σε ήδη δεσµευµένη µνήµη, εποµένως είναι λάθος να δεσµευθεί µνήµη για αυτό. - Έπρεπε να ελέγχετε αν το ptr_set3 είναι NULL και σε αυτή την περίπτωση να εκτυπώνετε συγκεκριµένο µήνυµα. - Αν η malloc για το newnode αποτύχει, πρέπει να αποδεσµεύετε όλη η µνήµη για τη λίστα-τοµή, όχι µόνο η κεφαλή. 1718 FAIL Λάθος στο πακετάρισµα του αρχείου. 1719 - Το loop που βρίσκει τον τελευταίο κόµβο της δεύτερης λίστας είναι επικίνδυνο. Αν αυτή είναι άδεια, το curr2 θα είναι αρχικά NULL και αµέσως µετά το curr2->next θα πετάξει segfault. Εφόσον δε ζητήθηκε στην εκφώνηση να γίνει εισαγωγή στο τέλος, θα ήταν πολύ πιο απλό να την είχατε κάνει στην αρχή. - Πριν το return έπρεπε να αδειάζει η δεύτερη λίστα. Σωστή, αλλά η set2 έπρεπε να γίνεται clear µέσα στην createunion.

1720 1721 1722 Έπρεπε να είχατε στείλει µόνο το lab11.c Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το c1->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. Το c1 είναι άσχηµο όνοµα µεταβλητής. Σωστή, αλλά έπρεπε να κάνει clear τη δεύτερη λίστα πριν επιστρέψει. - Σας είχαµε δώσει έτοιµη συνάρτηση για την εκτύπωση των στοιχείων της λίστας, δε χρειαζόταν να γράψετε εσείς το loop. - Έπρεπε να ελέγχετε αν το set3 είναι NULL και σε αυτή την περίπτωση να εκτυπώνετε το µήνυµα που ζητά η εκφώνηση. - Μετά από κάθε malloc πρέπει να ελέγχετε αν επέστρεψε NULL ( και σε αυτη την περίπτωση η εκφώνηση ζητούσε να κάνετε clear όλη τη µνήµη της τοµής) - Στην κλήση στη findinlist έπρεπε να περνάτε το curr2->number κι όχι το curr2->next->number. - Δε γίνεται σωστά η εισαγωγή του νέου κόµβου στη λίστα. Δε φαίνεται να λαµβάνετε υπόψη ότι είναι κυκλική. - Έπρεπε να ελέγχετε αν το head είναι NULL και να εκτυπώνετε συγκεκριµένο µήνυµα - Δεν κάνετε clear τη λίστα-τοµή. Έχετε υπόψη ότι "founded" σηµαίνει "ιδρύθηκε" όχι "βρέθηκε". Το "βρέθηκε" είναι "found". Σωστή, εκτός από την ξεκάρφωτη κλήση στην findinlist στο τέλος της συνάρτησης (η οποία ούτε καν εκτελείται εφόσον είναι µετά το return) Σωστή, αλλά το set2 έπρεπε να γίνεται clear στην createunion.

1723 1724 1725 - Στο τέλος του πρώτου loop έχετε free(curr2) αλλά αµέσως µετά εκτελείται το curr2 = curr2->next, δηλαδή κάνετε προσπέλαση µνήµης που έχει ελευθερωθεί. Το σωστό θα ήταν να είχατε κάτι παρόµοιο µε το τρυκ στην clearlist (αποθηκεύετε πρώτα κάπου προσωρινά το curr2->next, κάνετε το free, και µετά χρησιµοποιείτε την τιµή που αποθηκεύσατε για να ανανεώσετε το curr2.) - Όλα σωστά κατά τα άλλα. Ο λόγος που "χάνει" κάποια στοιχεία είναι επειδή θέτετε curr_head2 = next_head2->next; ενώ δε χρειαζόταν το ->next γιατί το next_head2 ήδη δείχνει στον επόµενο κόµβο που πρέπει να αφαιρεθεί. Επίσης, όταν αφαιρείτε το curr_head2 από τη δεύτερη λίστα δε φροντίζετε να έχετε το head2 να δείχνει στη νέα κεφαλή (αν αυτό που αφαιρέθηκε ήταν το πρώτο στοιχείο), οπότε δε θα λειτουργήσει σωστά και η clear στο τέλος της συνάρτησης. Αν η λίστα είναι αρχικά άδεια, τότε το head είναι NULL και το πρόγραµµά σας θα πετάξει segfault κατά την προσπέλαση του head->next. Φαινεται να γράψατε τη συνάρτηση σα να είχε sentinel η λίστα, ενώ δεν έχει. Το clear γίνεται πάντα ίσο µε head->next, και το head δεν αλλάζει ποτέ. Μετά το free, το clear δείχνει στη µνήµη που µόλις ελευθερώθηκε. Δείτε τις διαφάνειες, γιατί φαίνεται να έχετε µπερδευτεί. Μετά την επιστροφή από την createunion, η κεφαλή της πρώτης λίστας είναι εκεί που δείχνει ο controller_ptr, εποµένως έπρεπε να κάνετε µόνο αυτόν clear και όχι το set1. Γι αυτό σας πετάει error (προσπαθεί να κάνει free κόµβους που τους έχει ήδη κάνει free) Αν το newnode είναι NULL πρέπει να αποδεσµευεται όλη η λίστα-τοµή. Σωστή - Έπρεπε να χρησιµοποιήσετε την έτοιµη συνάρτηση για την εκτύπωση λιστών

1726 Λάθος. Τρέχετε το loop ακριβώς 5 φορές, αλλά δεν υπάρχει καµία εγγύηση ότι το µέγεθος της λίστας θα είναι πάντα 5. - Και πάλι λάθος στο loop. Το τρέχετε 8 φορές, ενώ θα έπρεπε να το τρέχετε µέχρι το τέλος της λίστας. - Αν η malloc επιστρέψει NULL, πρέπει να καλείτε την clearlist για να αποδεσµευθεί η δυναµικά δεσµευµένη µνήµη του προγράµµατος. Λάθος. Αποδεσµεύετε µόνο την κεφαλή, όχι ολόκληρη τη λίστα. Δείτε τις διαφάνειες. - Σωστή η κλήση. Στην περίπτωση που το rslt (το οποίο είναι και απαράδεκτο όνοµα µεταβλητής) είναι NULL έπρεπε να εκτυπώνετε διαφορετικό µήνυµα. Στο τέλος, έπρεπε να απελευθερώνετε όλη τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. 1727 - Αν η malloc αποτύχει, πρέπει να αποδεσµεύεται η µνήµη για τη λίστα-τοµή. - Κώδικας µετά από return δεν εκτελείται. Σας δώσαµε έτοιµη συνάρτηση για την εκτύπωση λιστών, κι έπρεπε να χρησιµοποιήσετε εκείνη.

1728 FAIL Λάθος: το όριο του loop έπρεπε να είναι curr!= head, κι όχι curr==head. - Το όριο του loop έπρεπε να είναι curr!= head, κι όχι curr==head. - Δεν ελέγχετε αν η malloc επέστρεψε NULL. - Η εισαγωγή νέου κόµβου θα γίνει σωστά µόνο αν η λίστα είναι άδεια. Σε κάθε άλλη περίπτωση "χάνετε" κοµµάτι της λίστας µε τον τρόπο που θέτετε τους δείκτες. - Έχετε τη µεταλβητή new_elements αλλά δεν ανανεώνετε ποτέ την τιµή της, εποµένως η συνάρτηση επιστρέφει πάντα NULL. - Δεν αντιγράφετε το σωστό number στο νέο κόµβο που εισάγετε στην τοµή. Λάθος. Κάνετε free(curr) κι αµέσως µετά προσπελαύνετε την απελευθερωµένη µνήµη µε το curr->next. Δείτε τις διαφάνειες. Επίσης, το όριο του loop έπρεπε να είναι curr!= head, κι όχι curr==head. - Στο τέλος πρέπει να απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. - Το µήνυµα που εκτυπώνετε δεν είναι το ζητούµενο. 1731 FAIL Το πρόγραµµα δεν κάνει compile και τα λάθη είναι πολλά και σηµαντικά. 1734 FAIL - Το curr1 έπρεπε να ξεκινά από την κεφαλή της λίστας, δηλαδή από το head. Εσείς το ξεκινάτε από µια τοπική µεταβλητή που είναι NULL.Πιθανώς δεν έχετε καταλάβει καλά την έννοια της παραµέτρου. - Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το current->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. - Κάνετε NULL τα head1, head2 εποµένως χάνετε την πρόσβαση στις λίστες. - Σωστη χρήση findinlist, αλλά η υπόλοιπη συνάρτηση είναι τελείως λάθως. - Δεν είναι σωστά υλοποιηµένη. Κάνετε free(curr) και στην επόµενη επανάληψη προσπελαύνετε το curr->next. Δείτε τις διαφάνειες για σωστή λύση. - Στην κλήση της createunion οι παράµετροι πρέπει να είναι οι set1, set2, δηλαδή οι λίστες που έχουµε ήδη δηµιουργήσει και των οποίων την ένωση θέλουµε να υπολογίσουµε. Εσείς περνάτε δύο µεταβλητές που ορίσατε και είναι απλά NULL. -

1735 1736 1737 1738 Σωστή, µπράβο, - Το for που κάνει τη µετακίνηση στο τέλος της λίστας είναι επικίνδυνο. Αν η πρώτη λίστα είναι κενή, το head1b θα γίνει αρχικά NULL και όταν γίνει ο έλεγχος headb1->next!= NULL θα πεταχτεί segfault. Θα ήταν πιο απλό να είχατε προσθέσει τον κόµβο στην αρχή της λίστας εφόσον δε ζητούσε κάτι διαφορετικό η εκφώνηση. Εφόσον το set1 δεν έχει περαστεί µε αναφορά, ακόµη κι αν γίνει NULL εντός της createunion, δε θα είναι NULL στη main. Το σωστό θα ήταν να αναθέτατε το αποτέλεσµα της createunion σε µεταβλητή και να ελέγχετε αυτή. - Στην περίπτωση που το new είναι NULL δεν έχει νόηµα να το κάνετε free, αφού δε δεσµεύτηκε µνήµη γι αυτό. -

1741 - Το loop που βρίσκει τον τελευταίο κόµβο της δεύτερης λίστας είναι επικίνδυνο. Αν αυτή είναι άδεια, το curr2 θα είναι αρχικά NULL και αµέσως µετά το curr2->next θα πετάξει segfault. Εφόσον δε ζητήθηκε στην εκφώνηση να γίνει εισαγωγή στο τέλος, θα ήταν πολύ πιο απλό να την είχατε κάνει στην αρχή. - Πριν το return έπρεπε να αδειάζει η δεύτερη λίστα. Σωστή, αλλά η set2 έπρεπε να γίνεται clear µέσα στην createunion. 1742 1743 Δε συκρίνετε πουθενά το number µε το curr->number! - Δεν υπάρχει λόγος για τη δεύτερη κλήση στη findinlist. Τα στοιχεία των συνόλων είναι µοναδικά. - Λάθος εισαγωγή του νέου κόµβου και η χρήση του prev στη γραµµή 85 µπορεί να οδηγήσει σε segfault εφόσον δεν έχει αρχικοποιηθεί. Σωστή αλλά δεν κάνετε clear τα set1, set2 όταν το set3 είναι NULL Δε συκρίνετε πουθενά το number µε το curr->number! - Δεν υπάρχει λόγος για τη δεύτερη κλήση στη findinlist. Τα στοιχεία των συνόλων είναι µοναδικά. - Λάθος εισαγωγή του νέου κόµβου και η χρήση του prev στη γραµµή 85 µπορεί να οδηγήσει σε segfault εφόσον δεν έχει αρχικοποιηθεί. Σωστή αλλά δεν κάνετε clear τα set1, set2 όταν το set3 είναι NULL

1745 - Στην περίπτωση που η malloc επιστρέφει NULL, η εκφώνηση ζητούσε να αποδεσµεύεται η µνήµη για τα set1, set2 πριν επιστρέψει η συνάρτηση. - Σωστή κατά τα άλλα, και µπράβο για το πέρασµα της κεφαλής µε αναφορά. 1747 FAIL Δεν εστάλη άσκηση 1748 1749 1750 Στην add_node, αν το newnode είναι NULL δεν πρέπει να επιστρέφετε head γιατί το έχετε αποδεσµεύσει. Θα ήταν πιο κατάλληλο να επιστρέφετε NULL. Σωστή, αν και δεν πρέπει να κληθεί η clearlist(head) αν το head είναι NULL. Σωστή, αλλά σε περίπτωση αποτυχίας της malloc έπρεπε να αποδεσµεύεται όλη η λίστα-τοµή πριν τον τερµατισµό της συνάρτησης. Σωστή αλλά δεν έπρεπε να κάνετε εδώ clear της head1, head2. Έπρεπε να κάνετε clear τα set1, set2 ακόµη κι αν το set3 είναι NULL

1751 1752 Σωστή, µόνο που η εκφώνηση ζητούσε να αδειάσει και το set2. - Το union_result δείχνει στη νέα κεφαλή του πρώτου συνόλου (το οποίο τώρα περιέχει επιπλέον στοιχεία). Εποµένως, πρέπει να κάνετε µόνο αυτό clear και όχι το set1. Γι αυτό σας βγαίνει error για διπλό free. - Το set2 έπρεπε να γίνεται clear µέσα στην createunion. - Λάθος στα όρια του loop. Παρακάµπτετε τον τελευταίο κόµβο πριν το sentinel. Έπρεπε η συνθήκη να είναι curr1!=head1. - Θα ήταν πιο απλό να εισάγετε κάθε νέο κόµβο στην αρχή της λίστας, εφόσον η εκφώνηση δεν προσδιόριζε κάτι συγκεκριµένο. - Στο τέλος, αν head->next==head θα έπρεπε να κάνετε free(head) πριν επιστρέψετε NULL, ή να µην κάνατε τίποτα απολύτως και να επιστρέφατε την άδεια λίστα. Λάθος στα όρια του loop. Παρακάµπτετε τον τελευταίο κόµβο πριν το sentinel. Έπρεπε η συνθήκη να είναι curr!=head. 1753 FAIL Δεν εστάλη άσκηση 1761 Σωστή, αλλά το παρακάνατε µε τα σχόλια. Συνήθως το i χρησιµοποιείται ως ακέραιος µετρητής σε loop. Για δείκτες χρησιµοποιούµε ονόµατα όπως current, runner κτλ. Σωστή, αλλά η set2 έπρεπε να γίνεται clear µέσα στην createunion.

1763 1764 1765 1767 - Στην περίπτωση που η malloc επιστρέφει NULL, η εκφώνηση ζητούσε να αποδεσµεύεται η µνήµη για τα set1, set2 πριν επιστρέψει η συνάρτηση. - Σωστή κατά τα άλλα, και µπράβο για το πέρασµα της κεφαλής µε αναφορά. Σωστή - Μετά από malloc πρέπει να κάνετε πάντα έλεγχο για το αν επέστρεψε NULL. - Αν ο neos_komvos είναι NULL, έπρεπε να καλείτε την έτοιµη συνάρτηση clearlist για να κάνετε την αποδέσµευση µνήµης. - Δεν αποδεσµεύετε τη µνήµη για την τοµή πριν το τέλος της συνάρτησης. - Λάθος όρια loop: παρακάµπτετε τον τελευταίο κόµβο πριν το head1. Το loop έπρεπε να ελέγχει αν curr!=head1 κι όχι αν curr->next!=head1 - Αν το new_node είναι NULL πρέπει να απελευθερωθεί όλη η µνήµη για τη λίστα τοµή πριν τερµατίσει η συνάρτηση. Αν η createintersection επιστρέψει NULL, το πρόγραµµα θα πετάξει segfault όταν θα ελεγθεί το head->next. Έπρεπε να κάνετε έλεγχο για NULL! Δεν αποδεσµεύετε όλη τη δυναµικά δεσµευµένη µνήµη του προγράµµατος.

1769 - Το for που κάνει τη µετακίνηση στο τέλος της λίστας είναι επικίνδυνο. Αν η πρώτη λίστα είναι κενή, το head1b θα γίνει αρχικά NULL και όταν γίνει ο έλεγχος headb1->next!= NULL θα πεταχτεί segfault. Θα ήταν πιο απλό να είχατε προσθέσει τον κόµβο στην αρχή της λίστας εφόσον δε ζητούσε κάτι διαφορετικό η εκφώνηση. Εφόσον το set1 δεν έχει περαστεί µε αναφορά, ακόµη κι αν γίνει NULL εντός της createunion, δε θα είναι NULL στη main. Το σωστό θα ήταν να αναθέτατε το αποτέλεσµα της createunion σε µεταβλητή και να ελέγχετε αυτή. 1770 - Δεν ελέγχετε ολόκληρη τη λίστα, γιατί το loop τερµατίζει όταν είναι NULL το curr->next. - Σωστή κατά τα άλλα. Λάθος. Αν η λίστα είναι αρχικά άδεια, το head θα είναι NULL, οπότε η προσπέλαση head->next θα πετάξει segfault. Επίσης, ο τελευταιος κόµβος δε γίνεται free γιατί το loop τερµατίζει όταν είναι NULL το curr->next κι όχι όταν είναι το curr. - Τι είναι αυτό που προσπαθείτε να κάνετε στο else? - Δεν αποδεσµεύεται όλη η δυναµικά δεσµευµένη µνήµη του προγράµµατος. 1772

1774 1775 1776 Λάθος στον τερµατισµό του loop. Η λίστα είναι κυκλική, εποµένως δεν τερµατίζει σε NULL. Φαίνεται να πήρατε κοµµάτια από τα παραδείγµατα των διαλέξεων (το οποίο είναι οκ) χωρίς να καταλάβατε τι πήρατε και τι χρειαζόσασταν (το οποίο δεν είναι οκ). - Μετά από malloc πρέπει να ελέγχετε πάντα αν επεστράφη NULL. Ειδικά σε αυτή την άσκηση, η εκφώνηση ζητούσε να αποδεσµεύετε όλη τη δυναµικά δεσµευµένη µνήµη σε αυτή την περίπτωση. - Εδώ έχετε σωστά τον τερµατισµό του loop. Λάθος στον τερµατισµό του loop. Η λίστα είναι κυκλική, εποµένως δεν τερµατίζει σε NULL. Το loop έπρεπε να πηγαίνει µέχρι head. Λάθος. Δεν αποθηκεύετε πουθενά το αποτέλεσµα της συνάρτησης και δεν απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. - Λάθος στα όρια του loop. Παρακάµπτετε τον τελευταίο κόµβο πριν το sentinel. Έπρεπε η συνθήκη να είναι curr1!=head1. - Θα ήταν πιο απλό να εισάγετε κάθε νέο κόµβο στην αρχή της λίστας, εφόσον η εκφώνηση δεν προσδιόριζε κάτι συγκεκριµένο. - Στο τέλος, αν head->next==head θα έπρεπε να κάνετε free(head) πριν επιστρέψετε NULL, ή να µην κάνατε τίποτα απολύτως και να επιστρέφατε την άδεια λίστα. Λάθος στα όρια του loop. Παρακάµπτετε τον τελευταίο κόµβο πριν το sentinel. Έπρεπε η συνθήκη να είναι curr!=head. Σωστή, αλλά το παρακάνατε µε τα σχόλια. Συνήθως το i χρησιµοποιείται ως ακέραιος µετρητής σε loop. Για δείκτες χρησιµοποιούµε ονόµατα όπως current, runner κτλ. Σωστή, αλλά η set2 έπρεπε να γίνεται clear µέσα στην createunion.

1781 1782 FAIL Έχετε υπόψη ότι "founded" σηµαίνει "ιδρύθηκε" όχι "βρέθηκε". Το "βρέθηκε" είναι "found". Σωστή, εκτός από την ξεκάρφωτη κλήση στην findinlist στο τέλος της συνάρτησης (η οποία ούτε καν εκτελείται εφόσον είναι µετά το return) Σωστή, αλλά το set2 έπρεπε να γίνεται clear στην createunion. Χρησιµοποιείτε τις λίστες σα να είναι πίνακες. Χρησιµοποιείτε τις λίστες σα να είναι πίνακες. Ελευθερώνετε µόνο την κεφαλή. Χρησιµοποιείτε τις λίστες σα να είναι πίνακες. 1784 - Λάθος όρια loop: Δεν υπάρχει καµία εγγύηση ότι η λίστα θα έχει πάντα µέγεθος 8. - Αν επιστραφεί FAILURE πρέπει να απελευθερωθεί όλη η µνήµη για τη λίστα τοµή πριν τερµατίσει η συνάρτηση. Σωστή, αλλά το clearlist(set3) πρέπει να καλείται µόνο όταν το set3 δεν είναι NULL. 1785 - Αν η createunion επιστρέψει NULL έπρεπε εκτυπώνετε το µήνυµα Union failed. - Η δεύτερη λίστα καταστρέφεται µέσα στην createunion, οπότε δεν πρέπει να την ξανακάνετε clear στη main. - Κατά τα άλλα σωστά.

1790 1791 - Στο τέλος του πρώτου loop έχετε free(curr2) αλλά αµέσως µετά εκτελείται το curr2 = curr2->next, δηλαδή κάνετε προσπέλαση µνήµης που έχει ελευθερωθεί. Το σωστό θα ήταν να είχατε κάτι παρόµοιο µε το τρυκ στην clearlist (αποθηκεύετε πρώτα κάπου προσωρινά το curr2->next, κάνετε το free, και µετά χρησιµοποιείτε την τιµή που αποθηκεύσατε για να ανανεώσετε το curr2.) - Όλα σωστά κατά τα άλλα. - Αν η createunion επιστρέψει NULL έπρεπε εκτυπώνετε το µήνυµα Union failed. - Η δεύτερη λίστα καταστρέφεται µέσα στην createunion, οπότε δεν πρέπει να την ξανακάνετε clear στη main. - Κατά τα άλλα σωστά.

1793 FAIL 1797 FAIL Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το current->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. - Στην createunion έπρεπε να χρησιµοποιείτε τη findinlist για να βρίσκετε αν το current2->number βρίσκεται στην πρώτη λίστα και να δηµιουργείτε το νέο κόµβο µόνο αν δε βρίσκεται. Εσείς δηµιουργείτε νέο κόµβο αµέσως µόλις βρείτε δύο διαφορετικά στοιχεία. - Στην περίπτωση που η malloc επιστρέφει NULL πρέπει να εκτυπώνετε κι ένα σχετικό µήνυµα λάθους. Επίσης, σύµφωνα µε την εκφώνηση έπρεπε να απελευθερώνετε όλη τη δυναµικά δεσµευµένη µνήµη πριν τον τερµατισµό - Ο νέος κόµβος δεν εισάγεται στην πρώτη λίστα. Απλά θέτετε το next του. - Η συνάρτηση έπρεπε να επιστρέφει τη νέα κεφαλή της πρώτης λίστας, και όχι 0. Σωστή Εφόσον η δεύτερη λίστα έχει γίνει clear µέσα στην createunion, δεν πρέπει να την ξανακάνετε free στη main. Επίσης, η ένωση είναι στην πραγµατικότητα η πρώτη λίστα όπως αυτή διαµορφώθηκε από την createunion, εποµένως δεν έπρεπε να κάνετε free το set1 αλλά µόνο το Union Λάθος. Ελέγχετε µόνο το πρώτο στοιχείο, αντί για όλα τα στοιχεία της λίστας. - Λάθος στα όρια των loops. Δεν υπάρχει καµία εγγύηση ότι οι λίστες θα έχουν πάντα µεγέθη 8 και 5 αντίστοιχα. - Αν ο νέος κόµβος είναι NULL πρέπει να αποδεσµεύετε τις δύο λίστες πριν τερµατίσει η συνάρτηση. Λάθος. Αποδεσµεύετε µόνο την κεφαλή, όχι όλη τη λίστα.

1798 FAIL 1800 1801 FAIL - Ο έλεγχος curr->number!=123 δεν είναι σωστός. Πώς ξέρετε ότι δε θα έχει ένα στοιχείο µε αυτή την τιµή η λίστα? Έπρεπε να ελέγχετε αν το curr έχει φτάσει στο head. - Επιστρέφετε 0 αν βρεθεί ο αριθµός, ενώ θέλουµε το αντίθετο. - Πιο κάτω επιστρέφετε 1 αν το curr στο τέλος του loop είναι διάφορο του head, το οποίο υποννοεί ότι βρέθηκε ο αριθµός. - Ο έλεγχος curr->number!=123 δεν είναι σωστός. Πώς ξέρετε ότι δε θα έχει ένα στοιχείο µε αυτή την τιµή η λίστα? Έπρεπε να ελέγχετε αν το curr έχει φτάσει στο head. - Άσχηµη στοίχιση και άσχηµα ονόµατα µεταβλητών (τι σηµαίνει kef?) - Αν η malloc αποτύχει πρέπει να καλείτε την clearlist για να αποδεσµεύεσετε τη µνήµη. Δεν υπάρχει λόγος να γράψετε νέο κώδικα γι αυτό. - Ο έλεγχος curr->number!=0 δεν είναι σωστός. Πώς ξέρετε ότι δε θα έχει ένα στοιχείο µε αυτή την τιµή η λίστα? Έπρεπε να ελέγχετε αν το curr έχει φτάσει στο head. Λάθος: Κάνετε free(curr) κι αµέσως µετά προσπελαύνετε την ελευθερωµένη µνήµη στο curr->next. Αν το head είναι NULL έπρεπε να εκτυπώνεται συγκεκριµένο µήνυµα - Το curr χρησιµοποιείται για να διατρέξει λίστες και θα δείχνει σε ήδη δεσµευµένη µνήµη, εποµένως είναι λάθος να δεσµευθεί µνήµη για αυτό. - Έπρεπε να ελέγχετε αν το ptr_set3 είναι NULL και σε αυτή την περίπτωση να εκτυπώνετε συγκεκριµένο µήνυµα. - Αν η malloc για το newnode αποτύχει, πρέπει να αποδεσµεύετε όλη η µνήµη για τη λίστα-τοµή, όχι µόνο η κεφαλή. Το πρόγραµµα δεν κάνει compile και τα λάθη είναι πολλά και σηµαντικά. Επιπλέον, φαίνεται να χειρίζεστε τη λίστα σα να είναι πίνακας.

1802 - Μετά από κάθε malloc πρέπει να ελέγχετε αν επέστρεψε NULL ( και σε αυτη την περίπτωση η εκφώνηση ζητούσε να κάνετε clear όλη τη µνήµη της τοµής) - Στην κλήση στη findinlist έπρεπε να περνάτε το curr2->number κι όχι το curr2->next->number. - Δε γίνεται σωστά η εισαγωγή του νέου κόµβου στη λίστα. Δε φαίνεται να λαµβάνετε υπόψη ότι είναι κυκλική. - Έπρεπε να ελέγχετε αν το head είναι NULL και να εκτυπώνετε συγκεκριµένο µήνυµα - Δεν κάνετε clear τη λίστα-τοµή. 1803 1805 FAIL 1806 Αν το newnode είναι NULL πρέπει να αποδεσµευεται όλη η λίστα-τοµή. Σωστή - Έπρεπε να χρησιµοποιήσετε την έτοιµη συνάρτηση για την εκτύπωση λιστών Χρησιµοποιείτε τις λίστες σα να είναι πίνακες. Χρησιµοποιείτε τις λίστες σα να είναι πίνακες. Ελευθερώνετε µόνο την κεφαλή. Χρησιµοποιείτε τις λίστες σα να είναι πίνακες. Αν το finalsethead είναι NULL πρέπει και πάλι να γίνονται clear οι set1, set2. 1808 FAIL Στείλατε το lab10

1812 FAIL 1813 Λάθος. Ελέγχετε µόνο το πρώτο στοιχείο, αντί για όλα τα στοιχεία της λίστας. - Λάθος στα όρια των loops. Δεν υπάρχει καµία εγγύηση ότι οι λίστες θα έχουν πάντα µεγέθη 8 και 5 αντίστοιχα. - Αν ο νέος κόµβος είναι NULL πρέπει να αποδεσµεύετε τις δύο λίστες πριν τερµατίσει η συνάρτηση. Λάθος. Αποδεσµεύετε µόνο την κεφαλή, όχι όλη τη λίστα. Αν το finalsethead είναι NULL πρέπει και πάλι να γίνονται clear οι set1, set2. 1815 FAIL Το πρόγραµµα δεν κάνει compile και τα λάθη είναι πολλά και σηµαντικά. 1816 Ο λόγος που "χάνει" κάποια στοιχεία είναι επειδή θέτετε curr_head2 = next_head2->next; ενώ δε χρειαζόταν το ->next γιατί το next_head2 ήδη δείχνει στον επόµενο κόµβο που πρέπει να αφαιρεθεί. Επίσης, όταν αφαιρείτε το curr_head2 από τη δεύτερη λίστα δε φροντίζετε να έχετε το head2 να δείχνει στη νέα κεφαλή (αν αυτό που αφαιρέθηκε ήταν το πρώτο στοιχείο), οπότε δε θα λειτουργήσει σωστά και η clear στο τέλος της συνάρτησης. Αν η λίστα είναι αρχικά άδεια, τότε το head είναι NULL και το πρόγραµµά σας θα πετάξει segfault κατά την προσπέλαση του head->next. Φαινεται να γράψατε τη συνάρτηση σα να είχε sentinel η λίστα, ενώ δεν έχει. Το clear γίνεται πάντα ίσο µε head->next, και το head δεν αλλάζει ποτέ. Μετά το free, το clear δείχνει στη µνήµη που µόλις ελευθερώθηκε. Δείτε τις διαφάνειες, γιατί φαίνεται να έχετε µπερδευτεί. Μετά την επιστροφή από την createunion, η κεφαλή της πρώτης λίστας είναι εκεί που δείχνει ο controller_ptr, εποµένως έπρεπε να κάνετε µόνο αυτόν clear και όχι το set1. Γι αυτό σας πετάει error (προσπαθεί να κάνει free κόµβους που τους έχει ήδη κάνει free)

1819 1821 FAIL 1822 FAIL 1824 FAIL 1825 Στην add_node, αν το newnode είναι NULL δεν πρέπει να επιστρέφετε head γιατί το έχετε αποδεσµεύσει. Θα ήταν πιο κατάλληλο να επιστρέφετε NULL. Σωστή, αν και δεν πρέπει να κληθεί η clearlist(head) αν το head είναι NULL. Δεν κάνει compile. Αδήλωτες µεταβλητές, χρήση = αντί για ==, λάθος χρήση δεικτών, κτλ. Δεν κάνει compile. Αδήλωτες µεταβλητές, χρήση = αντί για ==, λάθος χρήση δεικτών, κτλ. Έπρεπε να στείλετε ΜΟΝΟ το lab11.c Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το curr->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. - Αν το newnode είναι NULL πρέπει να γίνεται clear η νέα λίστα πριν τον τερµατισµό - Στην εισαγωγή νέου κόµβου δε λαµβάνετε υπόψη ότι η λίστα είναι κυκλική και τελικά τη χαλάτε. Η λίστα είναι κυκλική, εποµένως δεν τερµατίζει σε NULL. Το όριο του loop είναι λάθος. Δείτε τις διαφάνειες. Δεν ελέγχετε αν η τοµή είναι NULL, και δεν ελευθερώνετε τη δυναµικά δεσµευµένη µνήµη του προγράµµατος πριν τον τερµατισµό Σωστή, µπράβο,

1827 FAIL 1828 Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το current->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. - Στην createunion έπρεπε να χρησιµοποιείτε τη findinlist για να βρίσκετε αν το current2->number βρίσκεται στην πρώτη λίστα και να δηµιουργείτε το νέο κόµβο µόνο αν δε βρίσκεται. Εσείς δηµιουργείτε νέο κόµβο αµέσως µόλις βρείτε δύο διαφορετικά στοιχεία. - Στην περίπτωση που η malloc επιστρέφει NULL πρέπει να εκτυπώνετε κι ένα σχετικό µήνυµα λάθους. Επίσης, σύµφωνα µε την εκφώνηση έπρεπε να απελευθερώνετε όλη τη δυναµικά δεσµευµένη µνήµη πριν τον τερµατισµό - Ο νέος κόµβος δεν εισάγεται στην πρώτη λίστα. Απλά θέτετε το next του. - Η συνάρτηση έπρεπε να επιστρέφει τη νέα κεφαλή της πρώτης λίστας, και όχι 0. Σωστή Εφόσον η δεύτερη λίστα έχει γίνει clear µέσα στην createunion, δεν πρέπει να την ξανακάνετε free στη main. Επίσης, η ένωση είναι στην πραγµατικότητα η πρώτη λίστα όπως αυτή διαµορφώθηκε από την createunion, εποµένως δεν έπρεπε να κάνετε free το set1 αλλά µόνο το Union - Σωστός αλγόριθµος. - Στην περίπτωση που η malloc επιστρέφει NULL, η εκφώνηση ζητά να αποδεσµεύετε όλη τη δυναµικά δεσµευµένη µνήµη πριν τον τερµατισµό. Επίσης, σε αυτές τις περιπτώσεις πρέπει να εκτυπώνετε και κάποιο µήνυµα προς το χρήστη για να ξέρει το λόγο που δε λειτούργησε σωστά το πρόγραµµα. - Λάθος στη συνθήκη τερµατισµού του loop. Έπρεπε να είναι temp!= root και όχι temp == root. - Δεν είναι σωστά υλοποιηµένη. Κάνετε free(temp) και στην επόµενη επανάληψη προσπελαύνετε το temp->next. Δείτε τις διαφάνειες για σωστή λύση. - Έπρεπε να χρησιµοποιήσετε την έτοιµη συνάρτηση που σας δώσαµε για την εκτύπωση της λίστας. - Απελευθερώνετε µόνο τη µνήµη για την τοµή και όχι για τα δύο αρχικά σύνολα.

1829 Σωστή - Μετά από malloc πρέπει να κάνετε πάντα έλεγχο για το αν επέστρεψε NULL. - Αν ο neos_komvos είναι NULL, έπρεπε να καλείτε την έτοιµη συνάρτηση clearlist για να κάνετε την αποδέσµευση µνήµης. - Δεν αποδεσµεύετε τη µνήµη για την τοµή πριν το τέλος της συνάρτησης. 1831 FAIL Στείλατε το lab10 1834 Σωστή, αλλά προσέξτε τη στοίχιση. Είναι παραπλανητική. Προσέξτε τη στοίχιση! Τι σκοπό εξυπηρετεί το loop µε το curr1? Πριν επιστρέψει η συνάρτηση έπρεπε να αποδεσµεύεται η µνήµη για το set2. Σωστή Στην περίπτωση που το new_head είναι NULL έπρεπε να εκτυπώνετε διαφορετικό µήνυµα (δείτε την εκφώνηση). 1838 FAIL Λάθος στο πακετάρισµα του αρχείου. 1839 Έπρεπε να είχατε στείλει µόνο το lab11.c Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το c1->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. Το c1 είναι άσχηµο όνοµα µεταβλητής. Σωστή, αλλά έπρεπε να κάνει clear τη δεύτερη λίστα πριν επιστρέψει. - Σας είχαµε δώσει έτοιµη συνάρτηση για την εκτύπωση των στοιχείων της λίστας, δε χρειαζόταν να γράψετε εσείς το loop. - Έπρεπε να ελέγχετε αν το set3 είναι NULL και σε αυτή την περίπτωση να εκτυπώνετε το µήνυµα που ζητά η εκφώνηση.

1840 FAIL 1841 Λάθος: το όριο του loop έπρεπε να είναι curr!= head, κι όχι curr==head. - Το όριο του loop έπρεπε να είναι curr!= head, κι όχι curr==head. - Δεν ελέγχετε αν η malloc επέστρεψε NULL. - Η εισαγωγή νέου κόµβου θα γίνει σωστά µόνο αν η λίστα είναι άδεια. Σε κάθε άλλη περίπτωση "χάνετε" κοµµάτι της λίστας µε τον τρόπο που θέτετε τους δείκτες. - Έχετε τη µεταλβητή new_elements αλλά δεν ανανεώνετε ποτέ την τιµή της, εποµένως η συνάρτηση επιστρέφει πάντα NULL. - Δεν αντιγράφετε το σωστό number στο νέο κόµβο που εισάγετε στην τοµή. Λάθος. Κάνετε free(curr) κι αµέσως µετά προσπελαύνετε την απελευθερωµένη µνήµη µε το curr->next. Δείτε τις διαφάνειες. Επίσης, το όριο του loop έπρεπε να είναι curr!= head, κι όχι curr==head. - Στο τέλος πρέπει να απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. - Το µήνυµα που εκτυπώνετε δεν είναι το ζητούµενο. - Δεν ελέγχετε ολόκληρη τη λίστα, γιατί το loop τερµατίζει όταν είναι NULL το curr->next. - Σωστή κατά τα άλλα. Λάθος. Αν η λίστα είναι αρχικά άδεια, το head θα είναι NULL, οπότε η προσπέλαση head->next θα πετάξει segfault. Επίσης, ο τελευταιος κόµβος δε γίνεται free γιατί το loop τερµατίζει όταν είναι NULL το curr->next κι όχι όταν είναι το curr. - Τι είναι αυτό που προσπαθείτε να κάνετε στο else? - Δεν αποδεσµεύεται όλη η δυναµικά δεσµευµένη µνήµη του προγράµµατος.

1843 1844 FAIL Λάθος. Τρέχετε το loop ακριβώς 5 φορές, αλλά δεν υπάρχει καµία εγγύηση ότι το µέγεθος της λίστας θα είναι πάντα 5. - Και πάλι λάθος στο loop. Το τρέχετε 8 φορές, ενώ θα έπρεπε να το τρέχετε µέχρι το τέλος της λίστας. - Αν η malloc επιστρέψει NULL, πρέπει να καλείτε την clearlist για να αποδεσµευθεί η δυναµικά δεσµευµένη µνήµη του προγράµµατος. Λάθος. Αποδεσµεύετε µόνο την κεφαλή, όχι ολόκληρη τη λίστα. Δείτε τις διαφάνειες. - Σωστή η κλήση. Στην περίπτωση που το rslt (το οποίο είναι και απαράδεκτο όνοµα µεταβλητής) είναι NULL έπρεπε να εκτυπώνετε διαφορετικό µήνυµα. Στο τέλος, έπρεπε να απελευθερώνετε όλη τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. - Το curr1 έπρεπε να ξεκινά από την κεφαλή της λίστας, δηλαδή από το head. Εσείς το ξεκινάτε από µια τοπική µεταβλητή που είναι NULL.Πιθανώς δεν έχετε καταλάβει καλά την έννοια της παραµέτρου. - Λάθος αλγόριθµος. Αµέσως µόλις συναντήστε κόµβο όπου το current->number είναι διάφορο του number, η συνάρτησή σας θα επιστρέψει 0. Το σωστό θα ήταν να επιστρέψει 0 µόνο όταν είµαστε σίγουροι ότι δεν υπάρχει πουθενά στη λίστα το στοιχείο, και αυτό το ξέρουµε µόνο αφότου έχει τερµατίσει το loop. - Κάνετε NULL τα head1, head2 εποµένως χάνετε την πρόσβαση στις λίστες. - Σωστη χρήση findinlist, αλλά η υπόλοιπη συνάρτηση είναι τελείως λάθως. - Δεν είναι σωστά υλοποιηµένη. Κάνετε free(curr) και στην επόµενη επανάληψη προσπελαύνετε το curr->next. Δείτε τις διαφάνειες για σωστή λύση. - Στην κλήση της createunion οι παράµετροι πρέπει να είναι οι set1, set2, δηλαδή οι λίστες που έχουµε ήδη δηµιουργήσει και των οποίων την ένωση θέλουµε να υπολογίσουµε. Εσείς περνάτε δύο µεταβλητές που ορίσατε και είναι απλά NULL. -

1845 FAIL 1847 1848 - Ο έλεγχος curr->number!=123 δεν είναι σωστός. Πώς ξέρετε ότι δε θα έχει ένα στοιχείο µε αυτή την τιµή η λίστα? Έπρεπε να ελέγχετε αν το curr έχει φτάσει στο head. - Επιστρέφετε 0 αν βρεθεί ο αριθµός, ενώ θέλουµε το αντίθετο. - Πιο κάτω επιστρέφετε 1 αν το curr στο τέλος του loop είναι διάφορο του head, το οποίο υποννοεί ότι βρέθηκε ο αριθµός. - Ο έλεγχος curr->number!=123 δεν είναι σωστός. Πώς ξέρετε ότι δε θα έχει ένα στοιχείο µε αυτή την τιµή η λίστα? Έπρεπε να ελέγχετε αν το curr έχει φτάσει στο head. - Άσχηµη στοίχιση και άσχηµα ονόµατα µεταβλητών (τι σηµαίνει kef?) - Αν η malloc αποτύχει πρέπει να καλείτε την clearlist για να αποδεσµεύεσετε τη µνήµη. Δεν υπάρχει λόγος να γράψετε νέο κώδικα γι αυτό. - Ο έλεγχος curr->number!=0 δεν είναι σωστός. Πώς ξέρετε ότι δε θα έχει ένα στοιχείο µε αυτή την τιµή η λίστα? Έπρεπε να ελέγχετε αν το curr έχει φτάσει στο head. Λάθος: Κάνετε free(curr) κι αµέσως µετά προσπελαύνετε την ελευθερωµένη µνήµη στο curr->next. Έπρεπε να ελέγχετε αν το head είναι NULL και να εκτυπώνετε συγκεκριµένο µήνυµα Σωστή, αλλά σε περίπτωση αποτυχίας της malloc έπρεπε να αποδεσµεύεται όλη η λίστα-τοµή πριν τον τερµατισµό της συνάρτησης. Σωστή, µόνο που η εκφώνηση ζητούσε να αδειάσει και το set2. - Το union_result δείχνει στη νέα κεφαλή του πρώτου συνόλου (το οποίο τώρα περιέχει επιπλέον στοιχεία). Εποµένως, πρέπει να κάνετε µόνο αυτό clear και όχι το set1. Γι αυτό σας βγαίνει error για διπλό free. - Το set2 έπρεπε να γίνεται clear µέσα στην createunion.

1850 - Στην περίπτωση που το new είναι NULL δεν έχει νόηµα να το κάνετε free, αφού δε δεσµεύτηκε µνήµη γι αυτό. - 1855 Σωστή, αλλά προσέξτε τη στοίχιση. Είναι παραπλανητική. Προσέξτε τη στοίχιση! Τι σκοπό εξυπηρετεί το loop µε το curr1? Πριν επιστρέψει η συνάρτηση έπρεπε να αποδεσµεύεται η µνήµη για το set2. Σωστή Στην περίπτωση που το new_head είναι NULL έπρεπε να εκτυπώνετε διαφορετικό µήνυµα (δείτε την εκφώνηση). 1858 1860 - Λάθος όρια loop: παρακάµπτετε τον τελευταίο κόµβο πριν το head1. Το loop έπρεπε να ελέγχει αν curr!=head1 κι όχι αν curr->next!=head1 - Αν το new_node είναι NULL πρέπει να απελευθερωθεί όλη η µνήµη για τη λίστα τοµή πριν τερµατίσει η συνάρτηση. Αν η createintersection επιστρέψει NULL, το πρόγραµµα θα πετάξει segfault όταν θα ελεγθεί το head->next. Έπρεπε να κάνετε έλεγχο για NULL! Δεν αποδεσµεύετε όλη τη δυναµικά δεσµευµένη µνήµη του προγράµµατος. Σωστή, µπράβο. Σωστή, αλλά η set2 έπρεπε να γίνεται clear µέσα στην createunion.

1862 1870 1872 - Λάθος όρια loop: Δεν υπάρχει καµία εγγύηση ότι η λίστα θα έχει πάντα µέγεθος 8. - Αν επιστραφεί FAILURE πρέπει να απελευθερωθεί όλη η µνήµη για τη λίστα τοµή πριν τερµατίσει η συνάρτηση. Σωστή, αλλά το clearlist(set3) πρέπει να καλείται µόνο όταν το set3 δεν είναι NULL. - Σωστός αλγόριθµος. - Στην περίπτωση που η malloc επιστρέφει NULL, η εκφώνηση ζητά να αποδεσµεύετε όλη τη δυναµικά δεσµευµένη µνήµη πριν τον τερµατισµό. Επίσης, σε αυτές τις περιπτώσεις πρέπει να εκτυπώνετε και κάποιο µήνυµα προς το χρήστη για να ξέρει το λόγο που δε λειτούργησε σωστά το πρόγραµµα. - Λάθος στη συνθήκη τερµατισµού του loop. Έπρεπε να είναι temp!= root και όχι temp == root. - Δεν είναι σωστά υλοποιηµένη. Κάνετε free(temp) και στην επόµενη επανάληψη προσπελαύνετε το temp->next. Δείτε τις διαφάνειες για σωστή λύση. - Έπρεπε να χρησιµοποιήσετε την έτοιµη συνάρτηση που σας δώσαµε για την εκτύπωση της λίστας. - Απελευθερώνετε µόνο τη µνήµη για την τοµή και όχι για τα δύο αρχικά σύνολα. Λάθος: Ελέγχετε τα περιεχόµενα του sentinel και δεν ελέγχετε τα περιεχόµενα του τελευταίου κόµβου πριν το sentinel. Το curr έπρεπε να ξεκινά από head->next και να πηγαίνει µέχρι head. - Αν η malloc αποτύχει, σωστά κάνετε free, αλλά µετά πρέπει να τερµατίσετε τη συνάρτηση! Διαφορετικά το root->next αµέσως µετά θα πετάξει segfault. - Ισχύει κι εδώ το ίδιο για τα όρια του loop. Λάθος: Κάνετε free(curr) κι αµέσως µετά προσπελαύνετε την ελευθερωµένη µνήµη στο curr->next. Επίσης, δεν κάνετε free τον τελευταίο κόµβο. - Δεν υπάρχει λόγος να ξανακαλείς τη συνάρτηση για την printset. Αρκούσε να περάσεις ως παράµετρο το intersection. - Στο τέλος έπρεπε να ελευθερώνεται όλη η δυναµικά δεσµευµένη µνήµη του προγράµµατος.

1873 1875 FAIL 1882 Μόνο το lab11.c έπρεπε να είχες στείλει. - Έπρεπε να καταστρέφεις το δεύτερο set εντός της συνάρτησης. - Μετά από malloc, να κάνεις πάντα έλεγχο για NULL. Στη συγκεκριµένη άσκηση έπρεπε να αδειάζουν και οι δύο λίστες σε περίπτωση αποτυχίας της malloc. - Κατά τα άλλα, όλα οκ. Λάθος. Κάνεις free(curr) κι αµέσως µετά στην επόµενη επανάληψη γίνεται προσπέλαση του curr->next ενώ το curr δε δειχνει πια σε δεσµευµένη µνήµη. Δες τις διαφάνειες. Το set2 έπρεπε να είχε καταστραφεί µέσα στην createunion. Στο τέλος της main έπρεπε να κάνεις clear και το root (το πρώτο σετ δηλαδή). Το πρόγραµµα δεν κάνει compile και τα λάθη είναι πολλά και σηµαντικά. Επιπλέον, φαίνεται να χειρίζεστε τη λίστα σα να είναι πίνακας. - Αν το newnode είναι NULL έπρεπε να κάνετε clear και το set1. Σωστή κατά τα άλλα. 1885 Λάθος στον τερµατισµό του loop. Η λίστα είναι κυκλική, εποµένως δεν τερµατίζει σε NULL. Φαίνεται να πήρατε κοµµάτια από τα παραδείγµατα των διαλέξεων (το οποίο είναι οκ) χωρίς να καταλάβατε τι πήρατε και τι χρειαζόσασταν (το οποίο δεν είναι οκ). - Μετά από malloc πρέπει να ελέγχετε πάντα αν επεστράφη NULL. Ειδικά σε αυτή την άσκηση, η εκφώνηση ζητούσε να αποδεσµεύετε όλη τη δυναµικά δεσµευµένη µνήµη σε αυτή την περίπτωση. - Εδώ έχετε σωστά τον τερµατισµό του loop. Λάθος στον τερµατισµό του loop. Η λίστα είναι κυκλική, εποµένως δεν τερµατίζει σε NULL. Το loop έπρεπε να πηγαίνει µέχρι head. Λάθος. Δεν αποθηκεύετε πουθενά το αποτέλεσµα της συνάρτησης και δεν απελευθερώνετε τη δυναµικά δεσµευµένη µνήµη του προγράµµατος.