Send a PR on GitHub

progintro @ dit Μάθημα · Εργαστήρια · Κώδικας · Παραδείγματα

Συχνές Ερωτήσεις

Ερωτήσεις που μας έρχονται ξανά και ξανά - αν η δική σας δεν είναι εδώ, ρωτήστε στο Piazza ή περάστε από τις ώρες γραφείου.

Μετεγγραφές

Καλωσήρθατε στο τμήμα! Αν περιμένετε να ολοκληρωθεί η εγγραφή σας, δεν υπάρχει κανένα θέμα - μπορείτε να παρακολουθήσετε κανονικά. Οι απαντήσεις παρακάτω είναι για όσους/ες δεν έχουν ακόμα αριθμό μητρώου.

Είμαι από μετεγγραφή - μπορώ να παρακολουθήσω τις διαλέξεις;

Ασφαλώς! Και μάλιστα σας ενθαρρύνουμε να παρακολουθείτε ενεργά από την πρώτη βδομάδα: αν χάσετε τις πρώτες διαλέξεις και το υλικό, μετά είναι δύσκολο να προφτάσετε την ύλη.

Μπορείτε να πάτε σε όποιο τμήμα θέλετε (άρτιοι ή περιττοί) - τρέχουμε το ίδιο υλικό, θέματα και ασκήσεις με τον Τάκη. Επιπλέον οι διαλέξεις καταγράφονται στο uniflix, οπότε αν χάσετε κάποια μπορείτε να τη δείτε εκεί - ανεβαίνουν λίγες μέρες μετά το μάθημα (σε λιγότερο από μία βδομάδα).

Είμαι από μετεγγραφή - μπορώ να παρακολουθήσω τα εργαστήρια;

Ναι, εφόσον συνεννοηθείτε με τον/την υπεύθυνο/η του εργαστηρίου. Ο μόνος περιορισμός είναι να υπάρχουν θέσεις.

Πώς θα γίνει αυτό; Πηγαίνετε στο εργαστήριο την πρώτη του μέρα, την ώρα που τρέχει, και μιλήστε ζωντανά με τον/την υπεύθυνο/η για να δείτε αν μπορεί να σας βρει θέση (ζητήστε το πολύ ευγενικά και δεν θα απογοητευτείτε). Βοηθάει ιδιαιτέρως αν πάτε στα απογευματινά τμήματα (15:00-17:00 ή 17:00-19:00) που έχουν λίγο λιγότερη κίνηση - δείτε το πρόγραμμα των εργαστηρίων.

Σε κάθε περίπτωση, λύστε το μέσα στην πρώτη σας βδομάδα - εφόσον βρείτε θέση, δεν θα έχετε κανένα θέμα.

Αν έχετε laptop, φέρτε το στο εργαστήριο για να κάνετε τις ασκήσεις μόνοι/ες σας. Διαφορετικά, επειδή δεν έχετε ακόμα λογαριασμό, το πιθανότερο είναι ο/η υπεύθυνος/η να σας βάλει να καθίσετε με κάποιον/α συμφοιτητή/τρια.

Δεν έχω ακόμα αριθμό μητρώου - τι κάνω με Piazza, eclass κλπ;

Χωρίς αριθμό μητρώου δεν έχετε ακόμα πρόσβαση σε κάποιες από τις υπηρεσίες του πανεπιστημίου (di.uoa.gr email, Piazza, eclass). Έχουμε όμως φτιάξει το μάθημα έτσι ώστε να μπορείτε να το παρακολουθήσετε, αρκεί να κάνετε δύο παραπάνω βήματα:

  1. Γραφτείτε στη φόρμα του μαθήματος - έτσι θα σας στείλουμε πρόσκληση για το Piazza και θα προσπαθήσουμε να σας βάλουμε στις λίστες των εργαστηρίων.
  2. Μιλήστε με τον/την υπεύθυνο/η του εργαστηρίου σας (δείτε την προηγούμενη ερώτηση).

Είμαι από μετεγγραφή - μετράνε και για μένα οι εργασίες;

Ναι, οι εργασίες μετράνε για όλους - δεν υπάρχει ξεχωριστό καθεστώς για μετεγγραφές. Οπότε ξεκινήστε από την πρώτη βδομάδα και έχετε το νου σας στις προθεσμίες στις εργασίες: παράταση δεν δίνεται - σε κανέναν, για κανέναν λόγο.

Και μην περιμένετε να ολοκληρωθεί η εγγραφή σας - γραφτείτε από τώρα στη φόρμα του μαθήματος. Χωρίς αυτήν δεν μπορούμε να σας βαθμολογήσουμε.

Διαλέξεις

Βιντεοσκοπούνται οι διαλέξεις; Αν χάσω μία, πού τη βρίσκω;

Ναι! Οι διαλέξεις καταγράφονται και ανεβαίνουν στο uniflix - λίγες μέρες μετά το μάθημα (σε λιγότερο από μία βδομάδα). Οπότε αν χάσετε κάποια, δεν χάθηκε τίποτα: τη βλέπετε εκεί. Παρόλα αυτά, συνιστούμε να προσέρχεστε για να πάρετε τα μέγιστα από την εμπειρία του μαθήματος.

Ζωντανή μετάδοση δεν κάνουμε - μόνο την καταγραφή. Αν μια διάλεξη δεν έχει ανέβει ακόμα, δεν χρειάζεται να ρωτήσετε - δώστε της λίγες μέρες. Το ίδιο ισχύει και για τις αναπληρώσεις.

Το υλικό και ο κώδικας κάθε διάλεξης είναι στις διαλέξεις.

Εργαστήρια

Πώς γράφομαι σε τμήμα εργαστηρίου; Αρκεί που το δήλωσα στη φόρμα του μαθήματος;

Όχι, δεν αρκεί. Θέση στο εργαστήριο κλείνετε μόνο αν γραφτείτε στην ομάδα του τμήματος στο eclass - ο σύνδεσμος είναι στη σελίδα του μαθήματος.

Αν μπήκατε στην ομάδα, το eclass θα σας το δείχνει - δεν “χάνεται” μια εγγραφή στον δρόμο. Είστε σε μεγαλύτερο έτος; Γραφτείτε μόνο αν σκοπεύετε να έρθετε στο τμήμα Β+ που απευθύνεται σε εσάς. Πότε ξεκινάνε τα εργαστήρια και ποια τμήματα τρέχουν φέτος θα τα βρείτε στο πρόγραμμα των εργαστηρίων - ρίχνετε μια ματιά συχνά.

Τα τμήματα που με βολεύουν είναι γεμάτα - θα ανοίξουν θέσεις; Μπορώ να έρθω με το laptop μου;

Θέσεις ανοίγουν σταδιακά, όταν γράφονται νέοι/ες φοιτητές/τριες (π.χ. όσοι/ες παίρνουν αριθμό μητρώου αργότερα), ώστε όλα τα τμήματα να έχουν πάνω κάτω τον ίδιο αριθμό ατόμων. Οι πιο γρήγοροι/ες προλαβαίνουν τα πιο βολικά - οπότε κάποιοι/ες θα πρέπει να πάτε και σε λιγότερο βολικό τμήμα.

Το “έρχομαι σε γεμάτο τμήμα με δικό μου laptop” δυστυχώς δεν γίνεται. Σκεφτείτε τι θα γινόταν αν λέγαμε ναι - σίγουρα δεν είστε οι μόνοι/ες που θα βόλευε! Τα νωρίς τμήματα θα ξεχείλιζαν, τα αργά θα άδειαζαν, και θα καταλήγαμε με τμήματα που δεν δουλεύουν. Αν έχετε σοβαρό λόγο, δοκιμάστε μια ανταλλαγή θέσης με συμφοιτητή/τρια. Αν ούτε αυτό βγει ούτε προλάβετε όταν ανοίξουν θέσεις, μιλήστε με τον/την υπεύθυνο/η του τμήματος για να βρείτε μια λύση.

Γράφτηκα σε τμήμα που δεν με βολεύει - μπορώ να αλλάξω;

Μετά την πρώτη βδομάδα εργαστηρίων, αλλαγή γίνεται μόνο για σοβαρό λόγο και μόνο αφού συνεννοηθείτε με τους υπευθύνους και των δύο τμημάτων (του παλιού και του νέου) - έτσι μεταφέρονται οι παρουσίες και η επίδοσή σας και δεν μετράνε ως απουσίες. Οι θέσεις που ανοίγουν στην πορεία δεν είναι για να μετακινείστε - είναι για συμφοιτητές/τριες σας που γράφονται αργότερα.

Οι ώρες που έχουμε στα εργαστήρια είναι λίγες - ο χώρος μοιράζεται με αρκετά άλλα μαθήματα - οπότε δεν γίνεται να βολεύουν όλους. Κάτι που συχνά δουλεύει: βρείτε συμφοιτητή/τρια που έχει το ίδιο πρόβλημα ανάποδα και ανταλλάξτε θέσεις.

Και προσοχή: μην πηγαίνετε απλά σε άλλο τμήμα από αυτό που δηλώσατε. Παρουσίες και βαθμό εργαστηρίου τα κρατάει μόνο ο/η υπεύθυνος/η του τμήματός σας - αλλιώς στο τέλος θα πει “δεν τον/την είδα ποτέ μου, 0”.

Μπορώ να παρακολουθώ το εργαστήριο εξ αποστάσεως;

Όχι, δεν υποστηρίζεται. Το νόημα του εργαστηρίου είναι να εξασκηθείτε στην πράξη με ανθρώπους δίπλα σας που μπορούν να σας ξεκολλήσουν επί τόπου - αυτό δεν γίνεται από το σπίτι.

Τα εργαλεία πάντως καλό είναι να τα έχετε και στο σπίτι και να κάνετε τη δική σας εξάσκηση παράλληλα με το εργαστήριο - αυτό και το υποστηρίζουμε και σας το προτείνουμε!

Δεν μπορώ να έρθω μία βδομάδα στο εργαστήριο ή έχω θέμα με τις ασκήσεις του - σε ποιον απευθύνομαι;

Για οτιδήποτε αφορά το τμήμα σας - μια απουσία, αν μπορείτε να πάτε μία φορά σε άλλη ώρα, την υποβολή ή τη βαθμολογία των ασκήσεων του εργαστηρίου - μιλήστε απευθείας με τον/την υπεύθυνο/η του τμήματός σας. Κάθε τμήμα μπορεί να τα κάνει λίγο διαφορετικά, οπότε εκείνος/η ξέρει την απάντηση.

Ποιος/α είναι υπεύθυνος/η σε κάθε τμήμα θα το βρείτε στο πρόγραμμα των εργαστηρίων και στις ομάδες του eclass. Για να στείλετε email, πάρτε το username στην παρένθεση δίπλα στο όνομα στην ομάδα του μαθήματος και κολλήστε του το @di.uoa.gr.

Γίνεται σήμερα το εργαστήριό μου; Πού μαθαίνω για αναβολές και αναπληρώσεις;

Αναβολές και αναπληρώσεις τις ανακοινώνει ο/η υπεύθυνος/η του κάθε τμήματος, με ανακοίνωση στο eclass που σας έρχεται στο πανεπιστημιακό σας email. Μην περιμένετε μία συνολική ανακοίνωση για όλα τα τμήματα - κοιτάξτε το email σας. Αν δεν ήρθε τίποτα σχετικό, το πιθανότερο είναι ότι δεν έχετε αναπλήρωση.

Υπάρχει εξέταση στο εργαστήριο; Τι θα γράψουμε;

Ναι - και είναι υποχρεωτική για να πάρετε την πλήρη βαθμολογία του εργαστηρίου (δείτε τη βαθμολογία). Γίνεται στους υπολογιστές του εργαστηρίου, στο τμήμα σας, και συνήθως έχει μερικά ερωτήματα να λύσετε στον διαθέσιμο χρόνο:

Το στυλ (λίγα μεγάλα ή πολλά μικρά θέματα κλπ) διαφέρει από τμήμα σε τμήμα, ανάλογα με τον/την υπεύθυνο/η, και την ημερομηνία θα τη μάθετε με ανακοίνωση στο email σας. Internet δεν επιτρέπεται, εκτός αν σας πει ρητά το αντίθετο ο/η υπεύθυνος/η. Αν δεν μπορείτε να έρθετε τη μέρα της εξέτασης, αυτό είναι ερώτηση για τον/την υπεύθυνο/η του τμήματός σας.

Εργασίες

Μπορώ να χρησιμοποιήσω τεχνητή νοημοσύνη (ChatGPT, Copilot, Claude κλπ) για να λύσω τις εργασίες;

Όχι. Αλλά επίσης: ΌΧΙ! Δες τι μπορεί να συμβεί αν το κάνεις:

Adapted from xkcd.com/292 - CC BY-NC 2.5

Προσαρμογή του 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 κλπ) μπορείτε να το χρησιμοποιείτε ελεύθερα.

Μπορώ να χρησιμοποιήσω συναρτήσεις ή τεχνικές που δεν έχουμε δει ακόμα στο μάθημα;

Ασφαλώς! Δεν υπάρχουν περιορισμοί στα εργαλεία που θα χρησιμοποιήσετε - αυτό που μας ενδιαφέρει είναι να δούμε ότι καταλάβατε και λύσατε το πρόβλημα. Ο μόνος περιορισμός είναι η εντολή μεταγλώττισης της εκφώνησης (δείτε την προηγούμενη ερώτηση).

Ποια αρχεία ανεβάζω στο repository; Και τα input/test files ή τα εκτελέσιμα;

Ανεβάζετε ακριβώς ό,τι ζητάει η εκφώνηση - τίποτα λιγότερο, τίποτα περισσότερο. Εκτελέσιμα, άσχετα αρχεία ή τα input files που σας δίνει η εκφώνηση δεν χρειάζεται να τα ανεβάσετε εκτός αν θεωρείτε πως προσφέρουν κάτι παραπάνω στην υποβολή σας. Αν η εκφώνηση ζητάει ένα δικό σας παράδειγμα εκτέλεσης, βάζετε αυτό - και μόνο αυτό.

Προσοχή και στο πού τα βάζετε: κάθε αρχείο πρέπει να βρίσκεται ακριβώς στο filepath που γράφει η εκφώνηση, μετρώντας από τη ρίζα του repository. Αν λέει folder/README.md, τότε το README.md πρέπει να είναι μέσα σε φάκελο folder - μη φτιάχνετε επιπλέον φακέλους γύρω τους (π.χ. έναν φάκελο με το όνομα του repository), γιατί το autograder απλά δεν θα τα βρει.

Τι γράφω στο README και σε τι διαφέρει από τα σχόλια στον κώδικα;

Τα σχόλια είναι σύντομες εξηγήσεις για το τι κάνει ένα μικρό κομμάτι κώδικα που είναι δίπλα τους. Το README είναι αυτό που θα διαβάσει κάποιος πριν ανοίξει τον κώδικα για να κατατοπιστεί: τη γενική ιδέα της λύσης σας, τις παραδοχές που κάνατε, εξηγήσεις για κάποια ιδιαίτερη τεχνική και - αν έχετε πολλά αρχεία - πώς είναι οργανωμένα. Δεν περιγράφει τον κώδικα γραμμή προς γραμμή.

Για να πάρετε μια ιδέα, ρίξτε μια ματιά στα ενδεικτικά README/σχόλια.

Τα μηνύματα του προγράμματος, τα σχόλια και το README γράφονται στα Ελληνικά ή στα Αγγλικά;

Τα μηνύματα που τυπώνει το πρόγραμμα (printf) γράφονται ακριβώς όπως στην εκφώνηση - και εκεί είναι στα Αγγλικά. Αν τα μεταφράσετε, είναι λάθος. Τα σχόλια και το README μπορείτε να τα γράψετε όπως προτιμάτε, Ελληνικά ή Αγγλικά.

Μπορώ να πάρω παράταση στην προθεσμία;

Όχι. Δεν δίνονται παρατάσεις - σε καμία περίπτωση και για καμία εργασία (εξαιρούνται περιπτώσεις ανωτέρας βίας - Force Majeure, σεισμοί, πλημμύρες κλπ). Οι προθεσμίες είναι αυτές που βλέπετε στη σελίδα του μαθήματος, και μετά την προθεσμία δεν μπορείτε να υποβάλετε.

Παράταση

Η καλύτερη συμβουλή μας: ξεκινήστε νωρίς, και ακόμα κι αν δεν τα έχετε καταφέρει όλα, υποβάλετε έστω και μερική λύση μέσα στην προθεσμία.

Πού μπορώ να βρω επιπλέον ασκήσεις για εξάσκηση;

Στις διαφάνειες της πρώτης διάλεξης θα βρείτε κάποια site με άφθονες ασκήσεις. Φοιτητές/τριες του μαθήματος μας έχουν πει ότι εξασκούνται και με άλλα, όπως το Project Euler, το Advent of Code, το Codeforces ή τα courses του Brilliant - τα περισσότερα όμως είναι πολύ απαιτητικά, οπότε μην απογοητευτείτε αν σας δυσκολέψουν στην αρχή.

Για πιο στοχευμένη εξάσκηση (π.χ. pointers, structs, λίστες), οι μηχανές αναζήτησης είναι φίλοι σας - ψάξτε «C pointer exercises» και θα βρείτε πολλά καλά παραδείγματα. Και για το διαγώνισμα, δείτε τα προηγούμενα διαγωνίσματα.

Git και GitHub

Πώς υποβάλλω μια εργασία; Ποια έκδοση μετράει τελικά;

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

Μέχρι να λήξει η προθεσμία μπορείτε να αλλάζετε ό,τι θέλετε, όσες φορές θέλετε. Για τη διόρθωση μετράει το τελευταίο commit που έχετε κάνει git push εντός της προθεσμίας - ό,τι έχετε αφήσει τη στιγμή που λήγει, αυτό βαθμολογείται. Δοκιμάσατε μια καινούρια λύση και βγήκε χειρότερη; Κανένα θέμα, ξανανεβάστε την προηγούμενη πριν λήξει η προθεσμία.

Και για να μην υπάρχει παρεξήγηση: παρατάσεις δεν δίνονται - για καμία εργασία, για κανέναν λόγο.

Μου βγάζει fatal: not a git repository ή Repository not found - τι φταίει;

Σχεδόν πάντα φταίει ο φάκελος στον οποίο βρίσκεστε. Το git κοιτάει σε ποιον φάκελο είστε τη στιγμή που το τρέχετε - αν δεν είστε μέσα στον φάκελο που έφτιαξε το git clone, δεν ξέρει σε ποιο repository αναφέρεστε (π.χ. αν είστε στο home directory σας, σίγουρα δεν είστε στο repository της εργασίας).

  1. Αν δεν έχετε κάνει ακόμα git clone, κάντε το με το SSH URL του repository σας.
  2. Κάντε cd μέσα στον φάκελο που δημιουργήθηκε και μεταφέρετε εκεί τα αρχεία σας.
  3. Τρέξτε ξανά τις εντολές σας από εκεί. Με pwd βλέπετε πού βρίσκεστε.

Αν πάλι κολλάτε, κάντε git clone το repository σε καινούριο φάκελο και δοκιμάστε από εκεί.

Το αρχείο υπάρχει στον υπολογιστή μου αλλά δεν φαίνεται στο GitHub (ούτε στο autograder) - γιατί;

Γιατί οι αλλαγές που κάνετε τοπικά (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” θα σας φέρει πολλά παραδείγματα.

Πώς σβήνω, μετακινώ ή μετονομάζω ένα αρχείο στο repository μου;

Με τις αντίστοιχες εντολές του git, ώστε να μπορεί να παρακολουθεί τις αλλαγές - έχουν την ίδια σύνταξη με τις rm και mv που είδατε στο εργαστήριο:

git rm αρχείο
git mv παλιό_όνομα νέο_όνομα

Και μετά, όπως πάντα, git commit και git push. Αν το μετακινήσατε με σκέτο mv και το git τώρα διαμαρτύρεται, ένας εύκολος δρόμος είναι να το φέρετε πίσω εκεί που ήταν και να το ξαναμετακινήσετε με git mv.

Μου βγάζει Permission denied (publickey) στο git clone ή στο git push - τι κάνω;

Σας λέει ότι το GitHub δεν βρίσκει το SSH κλειδί σας - δηλαδή δεν σας αναγνωρίζει ότι έχετε πρόσβαση από το μηχάνημα που είστε. Ελέγξτε τα εξής:

Αν μέχρι τώρα όλα δούλευαν και ξαφνικά σταμάτησαν, δοκιμάστε:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

(με το όνομα του δικού σας κλειδιού αν είναι διαφορετικό) και ξαναπροσπαθήστε. Περισσότερα στις οδηγίες του GitHub.

Φτιάχνω το SSH κλειδί στο εργαστήριο ή στον υπολογιστή μου; Δεν έχω ακόμα λογαριασμό sdi.

Όπου κάνετε τη διαδικασία, αυτό το μηχάνημα (ή η ομάδα μηχανημάτων, αν είναι το εργαστήριο) συνδέεται με τον λογαριασμό σας στο GitHub. Θέλετε πρόσβαση από περισσότερα σημεία; Επαναλάβετε τη διαδικασία μία φορά για το καθένα. Θα μπορούσατε να αντιγράψετε το ίδιο κλειδί από το ένα μηχάνημα στο άλλο, αλλά είναι πιο καθαρό να έχετε ξεχωριστό σε κάθε σημείο για να μη χάσετε τη μπάλα αργότερα.

Αν δεν έχετε ακόμα λογαριασμό (π.χ. είστε από μετεγγραφή), δεν υπάρχει κανένα θέμα: φτιάξτε το κλειδί στον υπολογιστή σας (WSL ή Linux), θα μπει στο ~/.ssh, και από εκεί παίρνετε το public key και το βάζετε στο GitHub. Το sdi που βλέπετε στις διαφάνειες είναι απλώς το home directory στα μηχανήματα του εργαστηρίου.

Μπορώ να κάνω τις αλλαγές μου από τη σελίδα του GitHub αντί για git από το terminal;

Επιτρέπεται - δεν έχει σημασία από πού έγινε το commit, αρκεί να είναι στο σωστό repository και ο κώδικας να μεταγλωττίζεται και να τρέχει. Να ξέρετε όμως ότι είναι σαφώς πιο αργό και οδηγεί εύκολα σε λάθη τύπου copy-paste / indentation.

Και κάτι πιο σημαντικό: ένας από τους στόχους του μαθήματος είναι να εξοικειωθείτε με τα εργαλεία, και το git από τη γραμμή εντολών θα το χρειαστείτε στις επόμενες εργασίες και στα επόμενα μαθήματα - αργά ή γρήγορα δεν θα το αποφύγετε. Αφιερώστε λίγο χρόνο τώρα να στήσετε το περιβάλλον σας να μιλάει σωστά με το GitHub και θα γλιτώσετε ταλαιπωρία μετά. Αν γράφετε σε VS Code, μπορείτε να το συνδέσετε με το GitHub και να κάνετε commit χωρίς να φύγετε από τον editor.

Περιβάλλον και εργαλεία

Μου βγάζει «disk quota exceeded» στον λογαριασμό μου στο εργαστήριο - τι κάνω;

Έχετε γεμίσει τον χώρο που δικαιούται ο λογαριασμός σας στο εργαστήριο. Πόσο έχετε καταναλώσει το βλέπετε ανά πάσα στιγμή με quota -v.

Ο πιο συχνός λόγος; Συνδεθήκατε με το VS Code στο lab χωρίς να έχετε τρέξει πρώτα το script εγκατάστασης από τα φυλλάδια του εργαστηρίου - και το VS Code γέμισε τον χώρο σας. Για να το διορθώσετε:

  1. Κλείστε το VS Code.
  2. Μπείτε με ssh (π.χ. PuTTY) σε ένα από τα μηχανήματα Linux και δείτε τι τρώει χώρο: cd; du -h | sort -h | tail -10 (θέλει λίγο χρόνο).
  3. Οι συνήθεις ύποπτοι είναι τα .vscode-server, .vscode και .cache/Code - σβήστε τα (π.χ. rm -rf ~/.vscode-server) χωρίς φόβο, δεν έχουν τίποτα σημαντικό.
  4. Τρέξτε το script εγκατάστασης από τα φυλλάδια του εργαστηρίου και ξανασυνδεθείτε.

Αν κολλήσετε κάπου, γράψτε στο Piazza και θα το φτιάξουμε.

Δεν μπορώ να συνδεθώ με ssh στα μηχανήματα Linux του εργαστηρίου - τι φταίει;

Πρώτα ελέγξτε τα στοιχεία σας: ως username βάζετε το sdi... με βάση τον αριθμό μητρώου σας, και ως κωδικό αυτόν του λογαριασμού Linux - όχι απαραίτητα τον ίδιο με τον ακαδημαϊκό σας λογαριασμό. Τα μηχανήματα είναι τα linuxXY.di.uoa.gr. Αν όλα είναι σωστά, δοκιμάστε ξανά σε άλλο μηχάνημα - κάποιες φορές ένα μηχάνημα απλά δεν απαντάει. Αν ακόμα κολλάτε, ελέγξτε μήπως έχει γεμίσει ο χώρος σας (δείτε την προηγούμενη ερώτηση), ή περάστε από το εργαστήριο ή το μάθημα να το τρέξουμε παρέα.

Μπορώ να κάνω sudo ή να εγκαταστήσω πράγματα στα μηχανήματα του εργαστηρίου;

Όχι - στα μηχανήματα του εργαστηρίου δεν είστε διαχειριστές, οπότε sudo και apt install δεν θα δουλέψουν. Όπου βλέπετε τέτοιες εντολές στις οδηγίες, αφορούν τον δικό σας υπολογιστή - εκεί μπορείτε να εγκαταστήσετε ό,τι θέλετε.

Στήνω WSL στα Windows και κάτι δεν δουλεύει - τι κάνω;

Αν αποτυγχάνει η ίδια η εγκατάσταση (π.χ. «Catastrophic failure»):

  1. Ελέγξτε ότι έχετε ενεργοποιήσει τα «Virtual Machine Platform» και «Windows Subsystem for Linux» στο «Turn Windows features on or off».
  2. Αν είναι ήδη ενεργά, δείτε μήπως στο BIOS δεν είναι ενεργοποιημένο το virtualization (VT-extensions).
  3. Τρέξτε το 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; Γιατί μου βγάζει «permission denied» ή «Command not found»;

Το .c είναι πηγαίος κώδικας - δεν εκτελείται απευθείας. Για να τον δείτε ή να τον αλλάξετε, τον ανοίγετε με έναν editor (π.χ. pico prog.c). Για να τρέξει, πρώτα τον μεταγλωττίζετε με τον gcc (με την εντολή της εκφώνησης), που παράγει ένα νέο αρχείο - το εκτελέσιμο. Αυτό τρέχετε, με το όνομά του και όχι με το όνομα του .c:

gcc -o prog prog.c
./prog

Αν σας βγάζει «Command not found», μάλλον η μεταγλώττιση δεν πέτυχε, ή δεν είστε στον φάκελο όπου βρίσκεται το εκτελέσιμο.

Στον υπολογιστή μου μεταγλωττίζεται μια χαρά, αλλά το autograder λέει ότι έχει warnings - γιατί;

Γιατί δεν μεταγλωττίζετε με την ίδια εντολή. Η εντολή της εκφώνησης έχει flags όπως -Wall -Wextra -Werror -pedantic, που ενεργοποιούν επιπλέον ελέγχους και κάνουν κάθε warning error - επίτηδες, για να εντοπίζετε πιο εύκολα τα λάθη σας. Ο δικός σας gcc χωρίς αυτά τα flags, ή ένας online compiler, απλά δεν σας τα δείχνει.

Οπότε: συνδεθείτε σε ένα από τα μηχανήματα του εργαστηρίου και μεταγλωττίστε με την ακριβή εντολή της εκφώνησης. Το αρχείο σας πρέπει να περνάει χωρίς κανένα μήνυμα και με exit code 0.

Η μεταγλώττιση με -m32 αποτυγχάνει στον υπολογιστή μου (π.χ. «bits/libc-header-start.h: No such file») - τι κάνω;

Σας λείπει η υποστήριξη για μεταγλώττιση 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.

Το clang-format μου σπάει τις γραμμές - μπορώ να αυξήσω το όριο;

Όχι. Το στυλ που ζητάμε βάζει όριο στο μήκος της γραμμής (80 χαρακτήρες), μαζί με τα σχόλια, και ό,τι το ξεπερνάει σπάει αναγκαστικά σε περισσότερες γραμμές. Για πιο καθαρό αποτέλεσμα, μην βάζετε σχόλια στο πλάι κάθε γραμμής - μαζέψτε τα σε block πάνω από τον κώδικα που εξηγούν. Και αν μια γραμμή βγαίνει πολύ μεγάλη, μάλλον αξίζει να τη σπάσετε εσείς σε πιο απλά κομμάτια - κανείς δεν θέλει να κάνει οριζόντιο scroll για να διαβάσει κώδικα.

Τα ελληνικά εμφανίζονται σαν σκουπίδια στο terminal του εργαστηρίου - πώς το διορθώνω;

Πριν ανοίξετε τον editor, τρέξτε:

setenv LC_CTYPE C.UTF-8

Για να ισχύει μόνιμα σε κάθε σύνδεση, προσθέστε τη ρύθμιση στο ~/.cshrc:

echo "setenv LC_ALL en_US.UTF-8" >> ~/.cshrc
source ~/.cshrc

Εξετάσεις

Τι είναι η προφορική εξέταση των εργασιών; Χρειάζεται και αυτή και η γραπτή;

Είναι δύο διαφορετικά πράγματα: η τελική εξέταση του μαθήματος και η προφορική εξέταση των εργασιών σας. Χρειάζεστε και τα δύο - το καθένα μετράει για το δικό του κομμάτι του βαθμού (δείτε τη βαθμολογία).

Για την προφορική κλείνετε ραντεβού με κάποιον/α από τους συνεργάτες του μαθήματος - θα επικοινωνήσουν μαζί σας για τις λεπτομέρειες. Οι ημερομηνίες ορίζονται κάθε χρονιά και ανακοινώνονται στο Piazza.

Τι θα με ρωτήσετε στην προφορική εξέταση των εργασιών;

Γενικές ερωτήσεις για τον κώδικά σας: γιατί υλοποιήσατε αυτή τη συνάρτηση με αυτόν τον τρόπο; Γιατί επιλέξατε αυτή τη δομή; Ποια είναι η πολυπλοκότητα αυτού του κομματιού του προγράμματος; Και ό,τι άλλη λεπτομέρεια προκύψει.

Αν τον κώδικα τον γράψατε εσείς, δεν χρειάζεται να διαβάσετε τίποτα παραπάνω. Αυτό ζητάει άλλωστε και ο κώδικας τιμής - να μπορείτε να εξηγήσετε ό,τι παραδώσατε.

Ποιες εργασίες εξετάζονται στην προφορική;

Αυτό το ανακοινώνουμε κάθε χρονιά στο Piazza - δεν είναι πάντα το ίδιο. Κάποιες χρονιές την τελευταία εργασία τη βαθμολογήσαμε χωρίς προφορική, άλλες μπήκε κανονικά στην προφορική. Οπότε μην το θεωρήσετε δεδομένο - και σε κάθε περίπτωση, πρέπει να μπορείτε να εξηγήσετε οποιαδήποτε εργασία παραδώσατε.

Δεν έλαβα email για να κλείσω ραντεβού προφορικής - τι κάνω;

Πρώτα βεβαιωθείτε ότι έχετε γραφτεί στη φόρμα του μαθήματος - από εκεί σας βρίσκουμε. Αν δεν είχατε γραφτεί, γραφτείτε τώρα και θα σας βρούμε μέσω της υποβολής σας - απλά η προφορική σας μπορεί να πάει λίγο αργότερα. Δεν τα χάνουμε πάντως.

Αν είστε ήδη γραμμένοι και πάλι δεν ήρθε τίποτα, στείλτε email στους διδάσκοντες και θα σας συνδέσουμε με τον/την εξεταστή/τριά σας.

Δεν μπορώ να έρθω στην ώρα της προφορικής μου - τι κάνω;

Στείλτε email στον/στην εξεταστή/τριά σας και συνεννοηθείτε μαζί του/της. Είναι προσωπικό θέμα, οπότε email - όχι ανάρτηση στο Piazza.

Γίνεται η προφορική εξ αποστάσεως; Τι να έχω έτοιμο;

Αν γίνει online, χρησιμοποιείται όποιο εργαλείο e-meeting έχει ο/η εξεταστής/τριά σας. Έχετε ανοιχτά από πριν ένα τερματικό, τα repositories σας και έναν editor (π.χ. VS Code) - ώστε να μη χάνετε χρόνο την ώρα της εξέτασης για οτιδήποτε σας ζητηθεί.

Δεν έχω τελειώσει την εργασία μέχρι την προφορική - μπορώ να τη συνεχίσω μετά;

Όχι. Η προθεσμία είναι η προθεσμία και παρατάσεις δεν δίνουμε - για κανένα λόγο. Στην προφορική εξετάζεται ό,τι υποβάλατε μέχρι την προθεσμία. Και οι προφορικές πρέπει να κλείσουν κανονικά, αλλιώς δεν βγαίνουν οι τελικοί βαθμοί.

Τι μορφή έχουν τα θέματα της γραπτής εξέτασης;

Γράφετε προγράμματα, διαβάζετε και καταλαβαίνετε προγράμματα, διορθώνετε προγράμματα. Όχι Σωστό/Λάθος, όχι πολλαπλής επιλογής. Ο καθαρός χρόνος είναι συνήθως 2 με 2,5 ώρες, ανάλογα με τα θέματα. Μπόνους θέματα; Είναι πιθανό :)

Και μην αγχώνεστε: ο σκοπός του μαθήματος είναι να μάθετε να γράφετε και να διαβάζετε βασικά προγράμματα. Δεν θα σας ζητήσουμε κάτι εξωγήινο - αν έχετε λύσει τις ασκήσεις χωρίς εξωτερική βοήθεια δεν θα έχετε πρόβλημα να περάσετε το μάθημα.

Πρέπει να ξέρω απ’ έξω λίστες, δέντρα και αλγορίθμους ταξινόμησης;

Λίστες και δέντρα - ναι, αλλά μην τα αποστηθίζετε. Μπορεί να σας ζητήσουμε κάποια παραλλαγή, οπότε καταλάβετε πώς δουλεύουν οι δείκτες και οι δομές και να είστε σε θέση να γράψετε ένα τέτοιο πρόγραμμα από την αρχή. Για εξάσκηση: γράψτε τον δικό σας αλγόριθμο χωρίς να κοιτάξετε την υλοποίηση των διαφανειών και δείτε αν δουλεύει.

Ταξινόμηση - δεν θα σας ζητήσουμε να γράψετε υλοποίηση απ’ έξω. Μπορεί όμως να σας δείξουμε μία και να σας ζητήσουμε να την αναγνωρίσετε, να την τρέξετε με το χέρι ή να περιγράψετε πώς λειτουργεί.

Ποιες συναρτήσεις βιβλιοθήκης πρέπει να ξέρω;

Ρίξτε μια ματιά στις σημειώσεις και σε όσα κάναμε μέσα στο εξάμηνο. Δεν θα σας ζητηθεί καμία συνάρτηση βιβλιοθήκης που δεν έχει ειπωθεί στο μάθημα.

Πού βρίσκω παλιά θέματα; Υπάρχουν λύσεις;

Τα θέματα προηγούμενων ετών είναι στα προηγούμενα διαγωνίσματα. Λύσεις δεν υπάρχουν - αλλά ο καλύτερος τρόπος να μάθετε κάτι από αυτά είναι να δοκιμάσετε να τα λύσετε. Αν κολλήσετε κάπου, ρωτήστε στο Piazza.

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

Πόσο δύσκολη είναι η τελική; Μοιάζει με τα παλιά θέματα;

Ρίξτε μια ματιά στα προηγούμενα διαγωνίσματα και κρίνετε μόνοι/ες σας - οποιαδήποτε άλλη απάντηση θα ήταν μάλλον υποκειμενική. Μια εξαίρεση: η χειμερινή εξεταστική του 2023 ήταν online και είχε πολύ διαφορετικά θέματα. Οι γραπτές εξετάσεις είναι πολύ πιο αντιπροσωπευτικές - αλλά όλα κάνουν για προπόνηση.

Βαθμολογία

Πώς βγαίνει ο τελικός βαθμός και πόσο μετράει το κάθε σκέλος το γράφει η Βαθμολογία.

Το πρόγραμμά μου βγάζει σωστό αποτέλεσμα αλλά είναι αργό - χάνω όλη την άσκηση;

Όχι - η βαθμολογία δεν είναι on-off, υπάρχουν διαβαθμίσεις. Σίγουρα όμως ό,τι είναι εκτός των προδιαγραφών της εκφώνησης (π.χ. χρόνος εκτέλεσης) θα χάσει βαθμούς.

Αντί όμως να κάνετε υποθετικά σενάρια, προσπαθήστε για το καλύτερο που μπορείτε - και αν κολλήσετε, ρωτήστε στο Piazza για κάποιο hint. Οι ασκήσεις είναι εκεί για να εξασκηθείτε, όχι για ξερή αξιολόγηση.

Έχουν όλες οι εργασίες την ίδια βαρύτητα;

Η κάθε εργασία μετράει ανάλογα με τις μονάδες που έχει. Αθροίζουμε τις μονάδες που μαζέψατε σε όλες τις εργασίες και διαιρούμε με το σύνολο. Το πόσο μετράνε συνολικά οι εργασίες στον τελικό βαθμό το γράφει η Βαθμολογία.

Πρέπει να κάνω όλες τις ασκήσεις μιας εργασίας;

Ό,τι δεν έχει την ένδειξη bonus είναι “υποχρεωτικό” - με την έννοια ότι οι μονάδες του μετράνε στον κανονικό βαθμό των εργασιών. Παίρνετε τις μονάδες από όσες ασκήσεις κάνετε - αν αφήσετε κάποια, χάνετε απλά το αντίστοιχο κομμάτι του βαθμού.

Πώς μετράνε τα bonus των εργασιών;

Τις πλήρεις μονάδες μιας εργασίας τις πιάνει το υποχρεωτικό της κομμάτι - τα bonus κομμάτια μπορούν να σας ανεβάσουν πάνω από αυτές. Η βαθμολογία τους είναι ανεξάρτητη, οπότε δεν χρειάζεται να έχετε ολοκληρώσει πρώτα το βασικό κομμάτι για να μετρήσουν.

Οι μονάδες bonus προστίθενται στον τελικό βαθμό. Ισχύει όμως και η αναπροσαρμογή που περιγράφει η Βαθμολογία - ρίξτε της μια ματιά.

Πότε βγαίνουν οι βαθμοί των εργασιών;

Στο τέλος του εξαμήνου. Οι βαθμοί των εργασιών αποφασίζονται μετά τις εξετάσεις και τότε βγαίνει και ο τελικός βαθμός στο μάθημα.

Θα μάθω ξεχωριστά τον βαθμό από εργασίες, εργαστήριο και γραπτό;

Ανακοινώνεται ένας τελικός βαθμός στο μάθημα, και βγαίνει όταν ολοκληρωθεί και η βαθμολόγηση του εργαστηρίου - ο βαθμός της εξέτασης του εργαστηρίου απλά μετράει μέσα σε αυτόν. Αν θέλετε να μάθετε ξεχωριστά τον βαθμό των εργασιών σας, στείλτε προσωπικό email στον διδάσκοντα που αντιστοιχεί στον αριθμό μητρώου σας (δείτε την ομάδα του μαθήματος).

Μπορώ να αρνηθώ έναν χαμηλό προβιβάσιμο βαθμό;

Ναι - γράψτε μια ρήτρα στο γραπτό σας, π.χ. “μην με περάσετε αν δεν έχω βαθμό πάνω από 6”. Αν δεν περάσετε το μάθημα, το ξαναδίνετε τον Σεπτέμβρη ή σε επόμενη εξεταστική.

Επικοινωνία

Για το πού κάνουμε τις ερωτήσεις (Piazza) δείτε την Επικοινωνία.

Χρειάζεται να κλείσω ραντεβού για τις ώρες γραφείου;

Όχι - μπορείτε να περάσετε οποιαδήποτε στιγμή μέσα στις ώρες γραφείου που γράφει το πρόγραμμα.

Μπορείτε να μου πείτε αν η λύση μου είναι σωστή πριν την παραδώσω;

Το να ρωτάει ο καθένας ξεχωριστά αν αυτό που έκανε είναι σωστό δεν κάνει πολύ καλά scale στο πλήθος σας! Ελέγξτε τη λύση σας μόνοι/ες σας - τρέξτε τις εντολές και τα παραδείγματα που δίνει η εκφώνηση, και δείτε τι σας λέει ο autograder.

Πώς διαβάζω το πανεπιστημιακό email από το Gmail ή άλλη εφαρμογή;

Αν θέλετε να διαβάζετε τα email του πανεπιστημίου από άλλο mail client (π.χ. την εφαρμογή Gmail στο κινητό), κάντε τις ρυθμίσεις που περιγράφει το NOC του ΕΚΠΑ. Προσοχή στο username - στην εφαρμογή βάζετε μόνο το sdi... σας, χωρίς το κομμάτι μετά το @.