progintro @ dit Μάθημα · Εργαστήρια · Κώδικας · Παραδείγματα
Ερωτήσεις που μας έρχονται ξανά και ξανά - αν η δική σας δεν είναι εδώ, ρωτήστε στο Piazza ή περάστε από τις ώρες γραφείου.
Καλωσήρθατε στο τμήμα! Αν περιμένετε να ολοκληρωθεί η εγγραφή σας, δεν υπάρχει κανένα θέμα - μπορείτε να παρακολουθήσετε κανονικά. Οι απαντήσεις παρακάτω είναι για όσους/ες δεν έχουν ακόμα αριθμό μητρώου.
Ασφαλώς! Και μάλιστα σας ενθαρρύνουμε να παρακολουθείτε ενεργά από την πρώτη βδομάδα: αν χάσετε τις πρώτες διαλέξεις και το υλικό, μετά είναι δύσκολο να προφτάσετε την ύλη.
Μπορείτε να πάτε σε όποιο τμήμα θέλετε (άρτιοι ή περιττοί) - τρέχουμε το ίδιο υλικό, θέματα και ασκήσεις με τον Τάκη. Επιπλέον οι διαλέξεις καταγράφονται στο uniflix, οπότε αν χάσετε κάποια μπορείτε να τη δείτε εκεί - ανεβαίνουν λίγες μέρες μετά το μάθημα (σε λιγότερο από μία βδομάδα).
Ναι, εφόσον συνεννοηθείτε με τον/την υπεύθυνο/η του εργαστηρίου. Ο μόνος περιορισμός είναι να υπάρχουν θέσεις.
Πώς θα γίνει αυτό; Πηγαίνετε στο εργαστήριο την πρώτη του μέρα, την ώρα που τρέχει, και μιλήστε ζωντανά με τον/την υπεύθυνο/η για να δείτε αν μπορεί να σας βρει θέση (ζητήστε το πολύ ευγενικά και δεν θα απογοητευτείτε). Βοηθάει ιδιαιτέρως αν πάτε στα απογευματινά τμήματα (15:00-17:00 ή 17:00-19:00) που έχουν λίγο λιγότερη κίνηση - δείτε το πρόγραμμα των εργαστηρίων.
Σε κάθε περίπτωση, λύστε το μέσα στην πρώτη σας βδομάδα - εφόσον βρείτε θέση, δεν θα έχετε κανένα θέμα.
Αν έχετε laptop, φέρτε το στο εργαστήριο για να κάνετε τις ασκήσεις μόνοι/ες σας. Διαφορετικά, επειδή δεν έχετε ακόμα λογαριασμό, το πιθανότερο είναι ο/η υπεύθυνος/η να σας βάλει να καθίσετε με κάποιον/α συμφοιτητή/τρια.
Χωρίς αριθμό μητρώου δεν έχετε ακόμα πρόσβαση σε κάποιες από τις υπηρεσίες του πανεπιστημίου (di.uoa.gr email, Piazza, eclass). Έχουμε όμως φτιάξει το μάθημα έτσι ώστε να μπορείτε να το παρακολουθήσετε, αρκεί να κάνετε δύο παραπάνω βήματα:
Ναι, οι εργασίες μετράνε για όλους - δεν υπάρχει ξεχωριστό καθεστώς για μετεγγραφές. Οπότε ξεκινήστε από την πρώτη βδομάδα και έχετε το νου σας στις προθεσμίες στις εργασίες: παράταση δεν δίνεται - σε κανέναν, για κανέναν λόγο.
Και μην περιμένετε να ολοκληρωθεί η εγγραφή σας - γραφτείτε από τώρα στη φόρμα του μαθήματος. Χωρίς αυτήν δεν μπορούμε να σας βαθμολογήσουμε.
Ναι! Οι διαλέξεις καταγράφονται και ανεβαίνουν στο uniflix - λίγες μέρες μετά το μάθημα (σε λιγότερο από μία βδομάδα). Οπότε αν χάσετε κάποια, δεν χάθηκε τίποτα: τη βλέπετε εκεί. Παρόλα αυτά, συνιστούμε να προσέρχεστε για να πάρετε τα μέγιστα από την εμπειρία του μαθήματος.
Ζωντανή μετάδοση δεν κάνουμε - μόνο την καταγραφή. Αν μια διάλεξη δεν έχει ανέβει ακόμα, δεν χρειάζεται να ρωτήσετε - δώστε της λίγες μέρες. Το ίδιο ισχύει και για τις αναπληρώσεις.
Το υλικό και ο κώδικας κάθε διάλεξης είναι στις διαλέξεις.
Όχι, δεν αρκεί. Θέση στο εργαστήριο κλείνετε μόνο αν γραφτείτε στην ομάδα του τμήματος στο eclass - ο σύνδεσμος είναι στη σελίδα του μαθήματος.
Αν μπήκατε στην ομάδα, το eclass θα σας το δείχνει - δεν “χάνεται” μια εγγραφή στον δρόμο. Είστε σε μεγαλύτερο έτος; Γραφτείτε μόνο αν σκοπεύετε να έρθετε στο τμήμα Β+ που απευθύνεται σε εσάς. Πότε ξεκινάνε τα εργαστήρια και ποια τμήματα τρέχουν φέτος θα τα βρείτε στο πρόγραμμα των εργαστηρίων - ρίχνετε μια ματιά συχνά.
Θέσεις ανοίγουν σταδιακά, όταν γράφονται νέοι/ες φοιτητές/τριες (π.χ. όσοι/ες παίρνουν αριθμό μητρώου αργότερα), ώστε όλα τα τμήματα να έχουν πάνω κάτω τον ίδιο αριθμό ατόμων. Οι πιο γρήγοροι/ες προλαβαίνουν τα πιο βολικά - οπότε κάποιοι/ες θα πρέπει να πάτε και σε λιγότερο βολικό τμήμα.
Το “έρχομαι σε γεμάτο τμήμα με δικό μου laptop” δυστυχώς δεν γίνεται. Σκεφτείτε τι θα γινόταν αν λέγαμε ναι - σίγουρα δεν είστε οι μόνοι/ες που θα βόλευε! Τα νωρίς τμήματα θα ξεχείλιζαν, τα αργά θα άδειαζαν, και θα καταλήγαμε με τμήματα που δεν δουλεύουν. Αν έχετε σοβαρό λόγο, δοκιμάστε μια ανταλλαγή θέσης με συμφοιτητή/τρια. Αν ούτε αυτό βγει ούτε προλάβετε όταν ανοίξουν θέσεις, μιλήστε με τον/την υπεύθυνο/η του τμήματος για να βρείτε μια λύση.
Μετά την πρώτη βδομάδα εργαστηρίων, αλλαγή γίνεται μόνο για σοβαρό λόγο και μόνο αφού συνεννοηθείτε με τους υπευθύνους και των δύο τμημάτων (του παλιού και του νέου) - έτσι μεταφέρονται οι παρουσίες και η επίδοσή σας και δεν μετράνε ως απουσίες. Οι θέσεις που ανοίγουν στην πορεία δεν είναι για να μετακινείστε - είναι για συμφοιτητές/τριες σας που γράφονται αργότερα.
Οι ώρες που έχουμε στα εργαστήρια είναι λίγες - ο χώρος μοιράζεται με αρκετά άλλα μαθήματα - οπότε δεν γίνεται να βολεύουν όλους. Κάτι που συχνά δουλεύει: βρείτε συμφοιτητή/τρια που έχει το ίδιο πρόβλημα ανάποδα και ανταλλάξτε θέσεις.
Και προσοχή: μην πηγαίνετε απλά σε άλλο τμήμα από αυτό που δηλώσατε. Παρουσίες και βαθμό εργαστηρίου τα κρατάει μόνο ο/η υπεύθυνος/η του τμήματός σας - αλλιώς στο τέλος θα πει “δεν τον/την είδα ποτέ μου, 0”.
Όχι, δεν υποστηρίζεται. Το νόημα του εργαστηρίου είναι να εξασκηθείτε στην πράξη με ανθρώπους δίπλα σας που μπορούν να σας ξεκολλήσουν επί τόπου - αυτό δεν γίνεται από το σπίτι.
Τα εργαλεία πάντως καλό είναι να τα έχετε και στο σπίτι και να κάνετε τη δική σας εξάσκηση παράλληλα με το εργαστήριο - αυτό και το υποστηρίζουμε και σας το προτείνουμε!
Για οτιδήποτε αφορά το τμήμα σας - μια απουσία, αν μπορείτε να πάτε μία φορά σε άλλη ώρα, την υποβολή ή τη βαθμολογία των ασκήσεων του εργαστηρίου - μιλήστε απευθείας με τον/την υπεύθυνο/η του τμήματός σας. Κάθε τμήμα μπορεί να τα κάνει λίγο διαφορετικά, οπότε εκείνος/η ξέρει την απάντηση.
Ποιος/α είναι υπεύθυνος/η σε κάθε τμήμα θα το βρείτε στο
πρόγραμμα των εργαστηρίων και στις ομάδες του eclass. Για να
στείλετε email, πάρτε το username στην παρένθεση δίπλα στο όνομα στην
ομάδα του μαθήματος και κολλήστε του το @di.uoa.gr.
Αναβολές και αναπληρώσεις τις ανακοινώνει ο/η υπεύθυνος/η του κάθε τμήματος, με ανακοίνωση στο eclass που σας έρχεται στο πανεπιστημιακό σας email. Μην περιμένετε μία συνολική ανακοίνωση για όλα τα τμήματα - κοιτάξτε το email σας. Αν δεν ήρθε τίποτα σχετικό, το πιθανότερο είναι ότι δεν έχετε αναπλήρωση.
Ναι - και είναι υποχρεωτική για να πάρετε την πλήρη βαθμολογία του εργαστηρίου (δείτε τη βαθμολογία). Γίνεται στους υπολογιστές του εργαστηρίου, στο τμήμα σας, και συνήθως έχει μερικά ερωτήματα να λύσετε στον διαθέσιμο χρόνο:
Το στυλ (λίγα μεγάλα ή πολλά μικρά θέματα κλπ) διαφέρει από τμήμα σε τμήμα, ανάλογα με τον/την υπεύθυνο/η, και την ημερομηνία θα τη μάθετε με ανακοίνωση στο email σας. Internet δεν επιτρέπεται, εκτός αν σας πει ρητά το αντίθετο ο/η υπεύθυνος/η. Αν δεν μπορείτε να έρθετε τη μέρα της εξέτασης, αυτό είναι ερώτηση για τον/την υπεύθυνο/η του τμήματός σας.
Όχι. Αλλά επίσης: ΌΧΙ! Δες τι μπορεί να συμβεί αν το κάνεις:

Προσαρμογή του xkcd #292, άδεια CC BY-NC 2.5.
Κώδικας που έχει γραφτεί από εργαλείο τεχνητής νοημοσύνης δεν είναι δικός σας, και τον θεωρούμε λογοκλοπή - ακριβώς όπως αν τον είχατε αντιγράψει από συνάδελφο ή από το διαδίκτυο. Δείτε τον κώδικα τιμής του μαθήματος: ό,τι παραδίδετε πρέπει να το έχετε γράψει μόνοι/ες σας, και η παραβίασή του οδηγεί σε μηδενισμό στο μάθημα.
math.h με -lm, gmp) που δεν υπάρχει στην εντολή μεταγλώττισης της εκφώνησης;Όχι. Η εντολή μεταγλώττισης της εκφώνησης είναι συγκεκριμένη και δεν αλλάζει - η λύση
σας πρέπει να δουλεύει ακριβώς με αυτή. Μπορείτε να χρησιμοποιήσετε μόνο τις βιβλιοθήκες
που περιλαμβάνει: αν έχει -lm, η μαθηματική βιβλιοθήκη είναι οκ, αν δεν έχει, βρείτε
άλλο τρόπο. Το ίδιο ισχύει για οτιδήποτε άλλο (gmp, βιβλιοθήκες για JSON κλπ) - αν
δεν είναι στην εντολή, δεν το εγκαθιστάτε και δεν το χρησιμοποιείτε.
Η standard βιβλιοθήκη της C (libc) περιλαμβάνεται πάντα, χωρίς να τη ζητήσετε - οπότε
ό,τι δηλώνεται στα headers της (stdio.h, stdlib.h, string.h, errno.h κλπ)
μπορείτε να το χρησιμοποιείτε ελεύθερα.
Ασφαλώς! Δεν υπάρχουν περιορισμοί στα εργαλεία που θα χρησιμοποιήσετε - αυτό που μας ενδιαφέρει είναι να δούμε ότι καταλάβατε και λύσατε το πρόβλημα. Ο μόνος περιορισμός είναι η εντολή μεταγλώττισης της εκφώνησης (δείτε την προηγούμενη ερώτηση).
Ανεβάζετε ακριβώς ό,τι ζητάει η εκφώνηση - τίποτα λιγότερο, τίποτα περισσότερο. Εκτελέσιμα, άσχετα αρχεία ή τα input files που σας δίνει η εκφώνηση δεν χρειάζεται να τα ανεβάσετε εκτός αν θεωρείτε πως προσφέρουν κάτι παραπάνω στην υποβολή σας. Αν η εκφώνηση ζητάει ένα δικό σας παράδειγμα εκτέλεσης, βάζετε αυτό - και μόνο αυτό.
Προσοχή και στο πού τα βάζετε: κάθε αρχείο πρέπει να βρίσκεται ακριβώς στο filepath που
γράφει η εκφώνηση, μετρώντας από τη ρίζα του repository. Αν λέει folder/README.md, τότε
το README.md πρέπει να είναι μέσα σε φάκελο folder - μη φτιάχνετε επιπλέον φακέλους
γύρω τους (π.χ. έναν φάκελο με το όνομα του repository), γιατί το autograder απλά δεν θα
τα βρει.
Τα σχόλια είναι σύντομες εξηγήσεις για το τι κάνει ένα μικρό κομμάτι κώδικα που είναι δίπλα τους. Το README είναι αυτό που θα διαβάσει κάποιος πριν ανοίξει τον κώδικα για να κατατοπιστεί: τη γενική ιδέα της λύσης σας, τις παραδοχές που κάνατε, εξηγήσεις για κάποια ιδιαίτερη τεχνική και - αν έχετε πολλά αρχεία - πώς είναι οργανωμένα. Δεν περιγράφει τον κώδικα γραμμή προς γραμμή.
Για να πάρετε μια ιδέα, ρίξτε μια ματιά στα ενδεικτικά README/σχόλια.
Τα μηνύματα που τυπώνει το πρόγραμμα (printf) γράφονται ακριβώς όπως στην εκφώνηση -
και εκεί είναι στα Αγγλικά. Αν τα μεταφράσετε, είναι λάθος. Τα σχόλια και το README
μπορείτε να τα γράψετε όπως προτιμάτε, Ελληνικά ή Αγγλικά.
Όχι. Δεν δίνονται παρατάσεις - σε καμία περίπτωση και για καμία εργασία (εξαιρούνται περιπτώσεις ανωτέρας βίας - Force Majeure, σεισμοί, πλημμύρες κλπ). Οι προθεσμίες είναι αυτές που βλέπετε στη σελίδα του μαθήματος, και μετά την προθεσμία δεν μπορείτε να υποβάλετε.

Η καλύτερη συμβουλή μας: ξεκινήστε νωρίς, και ακόμα κι αν δεν τα έχετε καταφέρει όλα, υποβάλετε έστω και μερική λύση μέσα στην προθεσμία.
Στις διαφάνειες της πρώτης διάλεξης θα βρείτε κάποια site με άφθονες ασκήσεις. Φοιτητές/τριες του μαθήματος μας έχουν πει ότι εξασκούνται και με άλλα, όπως το Project Euler, το Advent of Code, το Codeforces ή τα courses του Brilliant - τα περισσότερα όμως είναι πολύ απαιτητικά, οπότε μην απογοητευτείτε αν σας δυσκολέψουν στην αρχή.
Για πιο στοχευμένη εξάσκηση (π.χ. pointers, structs, λίστες), οι μηχανές αναζήτησης είναι φίλοι σας - ψάξτε «C pointer exercises» και θα βρείτε πολλά καλά παραδείγματα. Και για το διαγώνισμα, δείτε τα προηγούμενα διαγωνίσματα.
Ό,τι χρειάζεστε το λέει η εκφώνηση κάθε εργασίας - οι τεχνικές προδιαγραφές λένε πολύ συγκεκριμένα ποια αρχεία, σε ποιο σημείο και με ποιο όνομα. Δεν υπάρχει κάποια έξτρα διαδικασία πέρα από αυτό που λέει η εκφώνηση.
Μέχρι να λήξει η προθεσμία μπορείτε να αλλάζετε ό,τι θέλετε, όσες
φορές θέλετε. Για τη διόρθωση μετράει το τελευταίο commit που έχετε κάνει git push εντός
της προθεσμίας - ό,τι έχετε αφήσει τη στιγμή που λήγει, αυτό βαθμολογείται. Δοκιμάσατε μια
καινούρια λύση και βγήκε χειρότερη; Κανένα θέμα, ξανανεβάστε την προηγούμενη πριν λήξει η
προθεσμία.
Και για να μην υπάρχει παρεξήγηση: παρατάσεις δεν δίνονται - για καμία εργασία, για κανέναν λόγο.
fatal: not a git repository ή Repository not found - τι φταίει;Σχεδόν πάντα φταίει ο φάκελος στον οποίο βρίσκεστε. Το git κοιτάει σε ποιον φάκελο είστε
τη στιγμή που το τρέχετε - αν δεν είστε μέσα στον φάκελο που έφτιαξε το git clone, δεν
ξέρει σε ποιο repository αναφέρεστε (π.χ. αν είστε στο home directory σας, σίγουρα δεν
είστε στο repository της εργασίας).
git clone, κάντε το με το SSH URL του repository σας.cd μέσα στον φάκελο που δημιουργήθηκε και μεταφέρετε εκεί τα αρχεία σας.pwd βλέπετε πού βρίσκεστε.Αν πάλι κολλάτε, κάντε git clone το repository σε καινούριο φάκελο και δοκιμάστε από εκεί.
Γιατί οι αλλαγές που κάνετε τοπικά (mkdir, touch, αλλαγές σε ένα αρχείο) μένουν στον
υπολογιστή σας - δεν πάνε μόνες τους στο GitHub. Πρέπει να τις στείλετε εσείς:
git add README.md
git commit -m "Add README"
git push
Το git commit μόνο του δεν αρκεί - χρειάζεται και το git push. Κανόνας: αν βλέπετε το
commit σας στη σελίδα του repository στο GitHub, τότε είναι διαθέσιμο και για το
autograder. Αν δεν το βλέπετε, δεν έχει ανέβει.
Το έχετε δει στο GitHub αλλά το autograder δεν το δείχνει ακόμα; Δώστε του λίγη ώρα - δεν το τραβάει αμέσως. Αυτό που μετράει είναι ότι ανεβάσατε τον κώδικα.
main branch;Ναι. Για να τα δει το autograder πρέπει να είναι στο main branch, που είναι και το
default στο repository. Αν κατά λάθος δουλέψατε σε άλλο branch (π.χ. έγινε push στο
master), κάντε merge τις αλλαγές σας στο main - ένα γρήγορο search για “git merge
branch” θα σας φέρει πολλά παραδείγματα.
Με τις αντίστοιχες εντολές του git, ώστε να μπορεί να παρακολουθεί τις αλλαγές - έχουν
την ίδια σύνταξη με τις rm και mv που είδατε στο εργαστήριο:
git rm αρχείο
git mv παλιό_όνομα νέο_όνομα
Και μετά, όπως πάντα, git commit και git push. Αν το μετακινήσατε με σκέτο mv και
το git τώρα διαμαρτύρεται, ένας εύκολος δρόμος είναι να το φέρετε πίσω εκεί που ήταν και
να το ξαναμετακινήσετε με git mv.
Permission denied (publickey) στο git clone ή στο git push - τι κάνω;Σας λέει ότι το GitHub δεν βρίσκει το SSH κλειδί σας - δηλαδή δεν σας αναγνωρίζει ότι έχετε πρόσβαση από το μηχάνημα που είστε. Ελέγξτε τα εξής:
~/.ssh) και με συγκεκριμένα δικαιώματα. Αν έχετε αμφιβολία, φτιάξτε καινούριο κλειδί
ακολουθώντας τα βήματα στο φυλλάδιο του εργαστηρίου.sudo.Αν μέχρι τώρα όλα δούλευαν και ξαφνικά σταμάτησαν, δοκιμάστε:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
(με το όνομα του δικού σας κλειδιού αν είναι διαφορετικό) και ξαναπροσπαθήστε. Περισσότερα στις οδηγίες του GitHub.
Όπου κάνετε τη διαδικασία, αυτό το μηχάνημα (ή η ομάδα μηχανημάτων, αν είναι το εργαστήριο) συνδέεται με τον λογαριασμό σας στο GitHub. Θέλετε πρόσβαση από περισσότερα σημεία; Επαναλάβετε τη διαδικασία μία φορά για το καθένα. Θα μπορούσατε να αντιγράψετε το ίδιο κλειδί από το ένα μηχάνημα στο άλλο, αλλά είναι πιο καθαρό να έχετε ξεχωριστό σε κάθε σημείο για να μη χάσετε τη μπάλα αργότερα.
Αν δεν έχετε ακόμα λογαριασμό (π.χ. είστε από μετεγγραφή), δεν υπάρχει κανένα θέμα:
φτιάξτε το κλειδί στον υπολογιστή σας (WSL ή Linux), θα μπει στο ~/.ssh, και από εκεί
παίρνετε το public key και το βάζετε στο GitHub. Το sdi που βλέπετε στις διαφάνειες είναι
απλώς το home directory στα μηχανήματα του εργαστηρίου.
git από το terminal;Επιτρέπεται - δεν έχει σημασία από πού έγινε το commit, αρκεί να είναι στο σωστό repository και ο κώδικας να μεταγλωττίζεται και να τρέχει. Να ξέρετε όμως ότι είναι σαφώς πιο αργό και οδηγεί εύκολα σε λάθη τύπου copy-paste / indentation.
Και κάτι πιο σημαντικό: ένας από τους στόχους του μαθήματος είναι να εξοικειωθείτε με τα
εργαλεία, και το git από τη γραμμή εντολών θα το χρειαστείτε στις επόμενες εργασίες και
στα επόμενα μαθήματα - αργά ή γρήγορα δεν θα το αποφύγετε. Αφιερώστε λίγο χρόνο τώρα να
στήσετε το περιβάλλον σας να μιλάει σωστά με το GitHub και θα γλιτώσετε ταλαιπωρία μετά.
Αν γράφετε σε VS Code, μπορείτε να το συνδέσετε με το GitHub και να κάνετε commit χωρίς να
φύγετε από τον editor.
Έχετε γεμίσει τον χώρο που δικαιούται ο λογαριασμός σας στο εργαστήριο. Πόσο έχετε
καταναλώσει το βλέπετε ανά πάσα στιγμή με quota -v.
Ο πιο συχνός λόγος; Συνδεθήκατε με το VS Code στο lab χωρίς να έχετε τρέξει πρώτα το script εγκατάστασης από τα φυλλάδια του εργαστηρίου - και το VS Code γέμισε τον χώρο σας. Για να το διορθώσετε:
ssh (π.χ. PuTTY) σε ένα από τα μηχανήματα Linux και δείτε τι τρώει χώρο:
cd; du -h | sort -h | tail -10 (θέλει λίγο χρόνο)..vscode-server, .vscode και .cache/Code - σβήστε τα
(π.χ. rm -rf ~/.vscode-server) χωρίς φόβο, δεν έχουν τίποτα σημαντικό.Αν κολλήσετε κάπου, γράψτε στο Piazza και θα το φτιάξουμε.
Πρώτα ελέγξτε τα στοιχεία σας: ως username βάζετε το sdi... με βάση τον αριθμό μητρώου
σας, και ως κωδικό αυτόν του λογαριασμού Linux - όχι απαραίτητα τον ίδιο με τον ακαδημαϊκό
σας λογαριασμό. Τα μηχανήματα είναι τα linuxXY.di.uoa.gr. Αν όλα είναι σωστά,
δοκιμάστε ξανά σε άλλο μηχάνημα - κάποιες φορές ένα μηχάνημα απλά δεν απαντάει. Αν ακόμα
κολλάτε, ελέγξτε μήπως έχει γεμίσει ο χώρος σας (δείτε την προηγούμενη ερώτηση), ή
περάστε από το εργαστήριο ή το μάθημα να το τρέξουμε παρέα.
Όχι - στα μηχανήματα του εργαστηρίου δεν είστε διαχειριστές, οπότε sudo και
apt install δεν θα δουλέψουν. Όπου βλέπετε τέτοιες εντολές στις οδηγίες, αφορούν τον
δικό σας υπολογιστή - εκεί μπορείτε να εγκαταστήσετε ό,τι θέλετε.
Αν αποτυγχάνει η ίδια η εγκατάσταση (π.χ. «Catastrophic failure»):
wsl --install από command prompt που ανοίξατε με δεξί κλικ -> «Run as
administrator».Και αν δεν βγαίνει με τίποτα, ένα Ubuntu μέσα σε VirtualBox είναι υπεραρκετό για το μάθημα - άλλωστε και το WSL ένα VM σηκώνει.
Αν το WSL δουλεύει αλλά δεν βρίσκει τον gcc: είναι φυσιολογικό, έρχεται χωρίς
compiler. Ακολουθήστε τις οδηγίες εγκατάστασης WSL
(τις βρίσκετε και στο υλικό του μαθήματος),
ή βάλτε τον κατευθείαν με sudo apt install gcc - το μηχάνημα είναι δικό σας. Αν το apt
αποτυγχάνει επειδή δεν βρίσκει κάποια sites, τρέξτε πρώτα:
sudo apt update --fix-missing
Το .c είναι πηγαίος κώδικας - δεν εκτελείται απευθείας. Για να τον δείτε ή να τον
αλλάξετε, τον ανοίγετε με έναν editor (π.χ. pico prog.c). Για να τρέξει, πρώτα τον
μεταγλωττίζετε με τον gcc (με την εντολή της εκφώνησης), που παράγει ένα νέο αρχείο -
το εκτελέσιμο. Αυτό τρέχετε, με το όνομά του και όχι με το όνομα του .c:
gcc -o prog prog.c
./prog
Αν σας βγάζει «Command not found», μάλλον η μεταγλώττιση δεν πέτυχε, ή δεν είστε στον φάκελο όπου βρίσκεται το εκτελέσιμο.
Γιατί δεν μεταγλωττίζετε με την ίδια εντολή. Η εντολή της εκφώνησης έχει flags όπως
-Wall -Wextra -Werror -pedantic, που ενεργοποιούν επιπλέον ελέγχους και κάνουν κάθε
warning error - επίτηδες, για να εντοπίζετε πιο εύκολα τα λάθη σας. Ο δικός σας gcc
χωρίς αυτά τα flags, ή ένας online compiler, απλά δεν σας τα δείχνει.
Οπότε: συνδεθείτε σε ένα από τα μηχανήματα του εργαστηρίου και μεταγλωττίστε με την ακριβή εντολή της εκφώνησης. Το αρχείο σας πρέπει να περνάει χωρίς κανένα μήνυμα και με exit code 0.
Σας λείπει η υποστήριξη για μεταγλώττιση 32-bit. Σε Ubuntu/WSL εγκαταστήστε την με:
sudo apt-get update
sudo apt-get install gcc-multilib
Αν σας λέει «Unable to locate package gcc-multilib», τρέξτε πρώτα
sudo apt update --fix-missing και ξαναδοκιμάστε. Το πιο σίγουρο πάντως είναι να
δουλεύετε με remote σύνδεση στα μηχανήματα του εργαστηρίου, όπου είναι ήδη στημένα όλα.
Και προσοχή: σε 32-bit το long είναι 32 bit όπως και το int - αν χρειάζεστε
μεγαλύτερους ακεραίους, θέλετε long long.
Όχι. Το στυλ που ζητάμε βάζει όριο στο μήκος της γραμμής (80 χαρακτήρες), μαζί με τα σχόλια, και ό,τι το ξεπερνάει σπάει αναγκαστικά σε περισσότερες γραμμές. Για πιο καθαρό αποτέλεσμα, μην βάζετε σχόλια στο πλάι κάθε γραμμής - μαζέψτε τα σε block πάνω από τον κώδικα που εξηγούν. Και αν μια γραμμή βγαίνει πολύ μεγάλη, μάλλον αξίζει να τη σπάσετε εσείς σε πιο απλά κομμάτια - κανείς δεν θέλει να κάνει οριζόντιο scroll για να διαβάσει κώδικα.
Πριν ανοίξετε τον editor, τρέξτε:
setenv LC_CTYPE C.UTF-8
Για να ισχύει μόνιμα σε κάθε σύνδεση, προσθέστε τη ρύθμιση στο ~/.cshrc:
echo "setenv LC_ALL en_US.UTF-8" >> ~/.cshrc
source ~/.cshrc
Είναι δύο διαφορετικά πράγματα: η τελική εξέταση του μαθήματος και η προφορική εξέταση των εργασιών σας. Χρειάζεστε και τα δύο - το καθένα μετράει για το δικό του κομμάτι του βαθμού (δείτε τη βαθμολογία).
Για την προφορική κλείνετε ραντεβού με κάποιον/α από τους συνεργάτες του μαθήματος - θα επικοινωνήσουν μαζί σας για τις λεπτομέρειες. Οι ημερομηνίες ορίζονται κάθε χρονιά και ανακοινώνονται στο Piazza.
Γενικές ερωτήσεις για τον κώδικά σας: γιατί υλοποιήσατε αυτή τη συνάρτηση με αυτόν τον τρόπο; Γιατί επιλέξατε αυτή τη δομή; Ποια είναι η πολυπλοκότητα αυτού του κομματιού του προγράμματος; Και ό,τι άλλη λεπτομέρεια προκύψει.
Αν τον κώδικα τον γράψατε εσείς, δεν χρειάζεται να διαβάσετε τίποτα παραπάνω. Αυτό ζητάει άλλωστε και ο κώδικας τιμής - να μπορείτε να εξηγήσετε ό,τι παραδώσατε.
Αυτό το ανακοινώνουμε κάθε χρονιά στο Piazza - δεν είναι πάντα το ίδιο. Κάποιες χρονιές την τελευταία εργασία τη βαθμολογήσαμε χωρίς προφορική, άλλες μπήκε κανονικά στην προφορική. Οπότε μην το θεωρήσετε δεδομένο - και σε κάθε περίπτωση, πρέπει να μπορείτε να εξηγήσετε οποιαδήποτε εργασία παραδώσατε.
Πρώτα βεβαιωθείτε ότι έχετε γραφτεί στη φόρμα του μαθήματος - από εκεί σας βρίσκουμε. Αν δεν είχατε γραφτεί, γραφτείτε τώρα και θα σας βρούμε μέσω της υποβολής σας - απλά η προφορική σας μπορεί να πάει λίγο αργότερα. Δεν τα χάνουμε πάντως.
Αν είστε ήδη γραμμένοι και πάλι δεν ήρθε τίποτα, στείλτε email στους διδάσκοντες και θα σας συνδέσουμε με τον/την εξεταστή/τριά σας.
Στείλτε email στον/στην εξεταστή/τριά σας και συνεννοηθείτε μαζί του/της. Είναι προσωπικό θέμα, οπότε email - όχι ανάρτηση στο Piazza.
Αν γίνει online, χρησιμοποιείται όποιο εργαλείο e-meeting έχει ο/η εξεταστής/τριά σας. Έχετε ανοιχτά από πριν ένα τερματικό, τα repositories σας και έναν editor (π.χ. VS Code) - ώστε να μη χάνετε χρόνο την ώρα της εξέτασης για οτιδήποτε σας ζητηθεί.
Όχι. Η προθεσμία είναι η προθεσμία και παρατάσεις δεν δίνουμε - για κανένα λόγο. Στην προφορική εξετάζεται ό,τι υποβάλατε μέχρι την προθεσμία. Και οι προφορικές πρέπει να κλείσουν κανονικά, αλλιώς δεν βγαίνουν οι τελικοί βαθμοί.
Γράφετε προγράμματα, διαβάζετε και καταλαβαίνετε προγράμματα, διορθώνετε προγράμματα. Όχι Σωστό/Λάθος, όχι πολλαπλής επιλογής. Ο καθαρός χρόνος είναι συνήθως 2 με 2,5 ώρες, ανάλογα με τα θέματα. Μπόνους θέματα; Είναι πιθανό :)
Και μην αγχώνεστε: ο σκοπός του μαθήματος είναι να μάθετε να γράφετε και να διαβάζετε βασικά προγράμματα. Δεν θα σας ζητήσουμε κάτι εξωγήινο - αν έχετε λύσει τις ασκήσεις χωρίς εξωτερική βοήθεια δεν θα έχετε πρόβλημα να περάσετε το μάθημα.
Λίστες και δέντρα - ναι, αλλά μην τα αποστηθίζετε. Μπορεί να σας ζητήσουμε κάποια παραλλαγή, οπότε καταλάβετε πώς δουλεύουν οι δείκτες και οι δομές και να είστε σε θέση να γράψετε ένα τέτοιο πρόγραμμα από την αρχή. Για εξάσκηση: γράψτε τον δικό σας αλγόριθμο χωρίς να κοιτάξετε την υλοποίηση των διαφανειών και δείτε αν δουλεύει.
Ταξινόμηση - δεν θα σας ζητήσουμε να γράψετε υλοποίηση απ’ έξω. Μπορεί όμως να σας δείξουμε μία και να σας ζητήσουμε να την αναγνωρίσετε, να την τρέξετε με το χέρι ή να περιγράψετε πώς λειτουργεί.
Ρίξτε μια ματιά στις σημειώσεις και σε όσα κάναμε μέσα στο εξάμηνο. Δεν θα σας ζητηθεί καμία συνάρτηση βιβλιοθήκης που δεν έχει ειπωθεί στο μάθημα.
Τα θέματα προηγούμενων ετών είναι στα προηγούμενα διαγωνίσματα. Λύσεις δεν υπάρχουν - αλλά ο καλύτερος τρόπος να μάθετε κάτι από αυτά είναι να δοκιμάσετε να τα λύσετε. Αν κολλήσετε κάπου, ρωτήστε στο Piazza.
Για προετοιμασία, μην ξαναδιαβάζετε τις ασκήσεις που ήδη λύσατε - δεν θα σας προσφέρει πολλά. Γράψτε μερικά προγράμματα από την αρχή για να ζεστάνετε τη μνήμη σας.
Ρίξτε μια ματιά στα προηγούμενα διαγωνίσματα και κρίνετε μόνοι/ες σας - οποιαδήποτε άλλη απάντηση θα ήταν μάλλον υποκειμενική. Μια εξαίρεση: η χειμερινή εξεταστική του 2023 ήταν online και είχε πολύ διαφορετικά θέματα. Οι γραπτές εξετάσεις είναι πολύ πιο αντιπροσωπευτικές - αλλά όλα κάνουν για προπόνηση.
Πώς βγαίνει ο τελικός βαθμός και πόσο μετράει το κάθε σκέλος το γράφει η Βαθμολογία.
Όχι - η βαθμολογία δεν είναι on-off, υπάρχουν διαβαθμίσεις. Σίγουρα όμως ό,τι είναι εκτός των προδιαγραφών της εκφώνησης (π.χ. χρόνος εκτέλεσης) θα χάσει βαθμούς.
Αντί όμως να κάνετε υποθετικά σενάρια, προσπαθήστε για το καλύτερο που μπορείτε - και αν κολλήσετε, ρωτήστε στο Piazza για κάποιο hint. Οι ασκήσεις είναι εκεί για να εξασκηθείτε, όχι για ξερή αξιολόγηση.
Η κάθε εργασία μετράει ανάλογα με τις μονάδες που έχει. Αθροίζουμε τις μονάδες που μαζέψατε σε όλες τις εργασίες και διαιρούμε με το σύνολο. Το πόσο μετράνε συνολικά οι εργασίες στον τελικό βαθμό το γράφει η Βαθμολογία.
Ό,τι δεν έχει την ένδειξη bonus είναι “υποχρεωτικό” - με την έννοια ότι οι μονάδες του μετράνε στον κανονικό βαθμό των εργασιών. Παίρνετε τις μονάδες από όσες ασκήσεις κάνετε - αν αφήσετε κάποια, χάνετε απλά το αντίστοιχο κομμάτι του βαθμού.
Τις πλήρεις μονάδες μιας εργασίας τις πιάνει το υποχρεωτικό της κομμάτι - τα bonus κομμάτια μπορούν να σας ανεβάσουν πάνω από αυτές. Η βαθμολογία τους είναι ανεξάρτητη, οπότε δεν χρειάζεται να έχετε ολοκληρώσει πρώτα το βασικό κομμάτι για να μετρήσουν.
Οι μονάδες bonus προστίθενται στον τελικό βαθμό. Ισχύει όμως και η αναπροσαρμογή που περιγράφει η Βαθμολογία - ρίξτε της μια ματιά.
Στο τέλος του εξαμήνου. Οι βαθμοί των εργασιών αποφασίζονται μετά τις εξετάσεις και τότε βγαίνει και ο τελικός βαθμός στο μάθημα.
Ανακοινώνεται ένας τελικός βαθμός στο μάθημα, και βγαίνει όταν ολοκληρωθεί και η βαθμολόγηση του εργαστηρίου - ο βαθμός της εξέτασης του εργαστηρίου απλά μετράει μέσα σε αυτόν. Αν θέλετε να μάθετε ξεχωριστά τον βαθμό των εργασιών σας, στείλτε προσωπικό email στον διδάσκοντα που αντιστοιχεί στον αριθμό μητρώου σας (δείτε την ομάδα του μαθήματος).
Ναι - γράψτε μια ρήτρα στο γραπτό σας, π.χ. “μην με περάσετε αν δεν έχω βαθμό πάνω από 6”. Αν δεν περάσετε το μάθημα, το ξαναδίνετε τον Σεπτέμβρη ή σε επόμενη εξεταστική.
Για το πού κάνουμε τις ερωτήσεις (Piazza) δείτε την Επικοινωνία.
Όχι - μπορείτε να περάσετε οποιαδήποτε στιγμή μέσα στις ώρες γραφείου που γράφει το πρόγραμμα.
Το να ρωτάει ο καθένας ξεχωριστά αν αυτό που έκανε είναι σωστό δεν κάνει πολύ καλά scale στο πλήθος σας! Ελέγξτε τη λύση σας μόνοι/ες σας - τρέξτε τις εντολές και τα παραδείγματα που δίνει η εκφώνηση, και δείτε τι σας λέει ο autograder.
Αν θέλετε να διαβάζετε τα email του πανεπιστημίου από άλλο mail client (π.χ. την εφαρμογή
Gmail στο κινητό), κάντε τις ρυθμίσεις που περιγράφει το
NOC του ΕΚΠΑ. Προσοχή στο
username - στην εφαρμογή βάζετε μόνο το sdi... σας, χωρίς το κομμάτι μετά το @.