Στόχοι: μετά από αυτό το κεφάλαιο θα μπορείτε να
- βρίσκετε τα εργαλεία του μαθήματος (site, Piazza, eclass, GitHub) και να ξέρετε πού να απευθύνετε μια ερώτηση·
- περιγράφετε πώς βαθμολογείται το μάθημα και γιατί οι ασκήσεις και το εργαστήριο μετράνε στην πράξη·
- ορίζετε τι είναι υπολογιστής, προγραμματισμός, πρόγραμμα και γλώσσα προγραμματισμού·
- εξηγείτε γιατί η ανθρώπινη γλώσσα δεν αρκεί για να δώσουμε εντολές σε έναν υπολογιστή (αμφισημία)·
- αναφέρετε λόγους για τους οποίους μαθαίνουμε C·
- διαβάζετε, γραμμή προς γραμμή, το πρόγραμμα Hello World και να το τρέχετε.
Προαπαιτούμενα: κανένα, αυτό είναι το πρώτο κεφάλαιο.
Χρόνος μελέτης: ~1 ώρα
Η πρώτη διάλεξη του μαθήματος «Εισαγωγή στον Προγραμματισμό» (K04) είναι κυρίως εισαγωγική: γνωρίζουμε το Τμήμα, τα διαδικαστικά του μαθήματος (ώρες, βαθμολογία, εργαστήριο, εργαλεία) και τον σκοπό του, που είναι να γίνετε junior software developers με προοπτικές. Στη συνέχεια θέτουμε τα θεμέλια: τι είναι ένας υπολογιστής, τι σημαίνει προγραμματισμός και τι είναι ένα πρόγραμμα. Βλέπουμε γιατί χρειαζόμαστε ειδικές γλώσσες προγραμματισμού (η ανθρώπινη γλώσσα είναι γεμάτη αμφισημίες) και γιατί το μάθημα διδάσκεται σε C, μια γλώσσα δημοφιλή εδώ και δεκαετίες και από τις ταχύτερες και οικονομικότερες σε ενέργεια. Κλείνουμε με το πρώτο μας πρόγραμμα, το κλασικό Hello World.
Η διάλεξη ξεκινά με το ερώτημα «Γιατί να ασχοληθείς με τον προγραμματισμό το 2025;» και δίνει τέσσερις ενδεικτικούς λόγους:
Το Τμήμα Πληροφορικής και Τηλεπικοινωνιών του ΕΚΠΑ, σύμφωνα με τις διαφάνειες, βρίσκεται στα 250 καλύτερα πανεπιστήμια του κόσμου στην Επιστήμη Υπολογιστών (Computer Science), και το ΕΚΠΑ ήταν το πιο βελτιωμένο πανεπιστήμιο της Ευρώπης και 6ο παγκοσμίως το 2024-25 σε ποιοτική εκπαίδευση (κατάταξη QS). Πάνω απ’ όλα, είναι ευκαιρία να συναναστραφείτε ιδιαίτερα ταλαντούχους συμφοιτητές.
Site. Όλο το υλικό (διαφάνειες, ασκήσεις, εργαστήρια) βρίσκεται στο progintro.github.io. Το μάθημα διδάσκεται σε δύο τμήματα (άρτιοι / περιττοί αριθμοί μητρώου), με διδάσκοντες τον Θανάση Αυγερινό και τον Τάκη Σταματόπουλο· η ύλη, το εργαστήριο, οι ασκήσεις και το διαγώνισμα είναι ίδια και για τα δύο.
Ώρες. Οι διαλέξεις γίνονται Δευτέρα και Παρασκευή 9πμ–11πμ, στο Αμφιθέατρο (άρτιοι) και στην Α2 (περιττοί). Ώρες γραφείου:
| Ημέρα | Ώρα | Αυγερινός | Σταματόπουλος |
|---|---|---|---|
| Δευτέρα | 11πμ–12μμ | Α40 | Α48 |
| Παρασκευή | 11πμ–12μμ | Α3 | Α48 |
Βαθμολογία. Ο τελικός βαθμός υπολογίζεται ως εξής:
Ισχύει και μια αναπροσαρμογή: αν ο βαθμός των Ασκήσεων είναι πάνω από 3 μονάδες μεγαλύτερος από τον βαθμό της Τελικής Εξέτασης, τότε ο βαθμός των Ασκήσεων γίνεται Τελική Εξέταση + 3. Η Τελική Εξέταση είναι γραπτή με κλειστά βιβλία. Οι Ασκήσεις (εργασίες για το σπίτι) είναι προαιρετικές, αλλά η επίλυσή τους βοηθάει σημαντικά. Στο Εργαστήριο η παρουσία είναι υποχρεωτική για τους πρωτοετείς (μέχρι 2 απουσίες).
Μπορεί λοιπόν κανείς να περάσει χωρίς εργασίες και εργαστήριο; «In theory, theory and practice are the same. In practice, they are not.» Θεωρητικά ναι, στην πράξη όχι: όπως κανείς δεν μαθαίνει αναρρίχηση διαβάζοντας ένα εγχειρίδιο, έτσι και ο προγραμματισμός μαθαίνεται μόνο γράφοντας κώδικα.
Εργαστήριο. Γίνεται σε εβδομαδιαία βάση και ξεκινά την εβδομάδα της 6ης Οκτωβρίου. Γράφεστε στην εργαστηριακή ομάδα που σας ταιριάζει μέσω του eclass· αν δεν βρίσκετε θέση, θα ανοίξουν και άλλες.
Εργαλεία του μαθήματος. Χρειάζεστε:
Συνιστάται να έχετε υπολογιστή μαζί σας στο μάθημα, για να προγραμματίζετε ζωντανά.
Έχω μια ερώτηση, τι κάνω; Η διάλεξη βάζει δύο επιλογές: (Α) στέλνω email στον Αυγερινό ή στον Τάκη, ή (Β) ελέγχω αν έχει ήδη απαντηθεί στο Piazza και, μόνο αν δεν έχει απαντηθεί, ποστάρω καινούρια ερώτηση. Ο δρόμος του μαθήματος είναι το (Β), αφού γι’ αυτό υπάρχει το Piazza: η απάντηση ωφελεί όλους και δεν επαναλαμβάνεται.
Το μάθημα έχει τρεις στόχους:
Με άλλα λόγια, στο τέλος του εξαμήνου θέλουμε να είστε junior software developers με προοπτικές. Η ύλη χωρίζεται σε πέντε ενότητες, με τα εργαστήρια να τρέχουν παράλληλα και τις εργασίες (hw0, hw1, hw2 και ένα τελικό project) να κλείνουν τις ενότητες:
flowchart LR
A["Βασικά / Διαδικαστικά<br/>(γραμμή εντολών, μνήμη, git)"] --> B["Πρώτα Προγράμματα<br/>(τελεστές, ροή ελέγχου, είσοδος)"]
B --> C["Σύνθετα Προγράμματα<br/>(πίνακες, δείκτες, μνήμη)"]
C --> D["Αλγόριθμοι και Δομές<br/>(ταξινόμηση, δομές, λίστες, δέντρα)"]
D --> E["Προχωρημένα Θέματα<br/>(οργάνωση κώδικα)"]
B -.-> H0["hw0"]
C -.-> H1["hw1"]
D -.-> H2["hw2"]
E -.-> P["project"]
Σχήμα: οι ενότητες του μαθήματος και οι εργασίες που αντιστοιχούν σε καθεμία.
Στον χάρτη μαθημάτων του Τμήματος, το K04 είναι συνιστώμενο προαπαιτούμενο για τις Δομές Δεδομένων (K08) και τον Αντικειμενοστρεφή Προγραμματισμό (K10), και μέσω αυτών για μεγάλο μέρος του προγράμματος σπουδών (Λειτουργικά Συστήματα, Προγραμματισμός Συστήματος, Μεταγλωττιστές κ.ά.). Αν όλα αυτά ακούγονται πολλά: ένα βήμα τη φορά. Η καμπύλη Dunning-Kruger δείχνει ότι η αυτοπεποίθηση ενός αρχάριου συχνά ανεβαίνει απότομα («Peak of Mount Stupid»), πέφτει όταν συνειδητοποιεί πόσα δεν ξέρει («Valley of Despair») και μετά ανεβαίνει σταθερά όσο μεγαλώνει η πραγματική γνώση. Η απογοήτευση των πρώτων εβδομάδων είναι φυσιολογικό στάδιο, όχι ένδειξη ότι «δεν κάνετε».
Υπολογιστής (computer) είναι μια κατασκευή που έχει την ικανότητα να επεξεργάζεται ένα σύνολο από δεδομένα (data) που του δίνονται και να παράγει τα απαιτούμενα αποτελέσματα (results). Το είδος της επεξεργασίας το καθορίζει το πρόγραμμα με το οποίο τον έχουμε τροφοδοτήσει.
flowchart LR
D["Δεδομένα"] --> C["Υπολογιστής<br/>(εκτελεί το πρόγραμμα)"]
P["Πρόγραμμα"] --> C
C --> R["Αποτελέσματα"]
Σχήμα: ο υπολογιστής μετατρέπει δεδομένα σε αποτελέσματα, όπως ορίζει το πρόγραμμα.
Χρησιμοποιούμε υπολογιστές για δύο λόγους:
Πολλές εφαρμογές, όπως η πρόγνωση του καιρού, χρειάζονται και τα δύο ταυτόχρονα.
Οι σημειώσεις του μαθήματος συμπληρώνουν την εικόνα. Ένας υπολογιστής αποτελείται από την κεντρική μονάδα επεξεργασίας (CPU), τη μνήμη (memory) για προσωρινή αποθήκευση δεδομένων και προγραμμάτων, τη δευτερεύουσα μνήμη (δίσκοι) για μόνιμη αποθήκευση και τις μονάδες εισόδου/εξόδου (πληκτρολόγιο, οθόνη). Όλη η πληροφορία αποθηκεύεται ως δυαδικά ψηφία, bits (0 και 1), οργανωμένα σε bytes των 8 bits. Τα προγράμματα ενός υπολογιστή είναι το λογισμικό (software) του, ενώ η ίδια η συσκευή είναι το υλικό (hardware). Τη μνήμη και την αναπαράσταση των δεδομένων θα τις δούμε αναλυτικά στο Κεφάλαιο 2.
Προγραμματισμός (programming) είναι ο σαφής καθορισμός μιας διαδικασίας, σαν ένα σύνολο από εντολές (το πρόγραμμα), που περιγράφει λεπτομερώς τα βήματα που πρέπει να γίνουν για να επιλυθεί ένα πρόβλημα υπολογισμού.
Πρόγραμμα (program) είναι η καταγραφή της επίλυσης ενός προβλήματος. Κάθε εφαρμογή που χρησιμοποιείτε (ο browser, ένα παιχνίδι, το λειτουργικό σύστημα του κινητού σας) είναι πρόγραμμα. Όπως λέει ο Gusteau στο Ratatouille, «anyone can cook», και η διάλεξη το προσαρμόζει: οποιοσδήποτε μπορεί να προγραμματίσει, αλλά μόνο οι ατρόμητοι γίνονται σπουδαίοι.
Σύμφωνα με τις σημειώσεις, πίσω από κάθε πρόγραμμα βρίσκεται ένας αλγόριθμος (algorithm): μια σαφώς καθορισμένη διαδικασία από εκτελέσιμα βήματα, που είναι εγγυημένο ότι θα τερματίσει μετά από πεπερασμένο πλήθος βημάτων. Το πρόγραμμα είναι η διατύπωση ενός αλγορίθμου σε μια συγκεκριμένη γλώσσα προγραμματισμού.
Γιατί δεν δίνουμε απλώς τις οδηγίες στα ελληνικά ή στα αγγλικά; Επειδή η ανθρώπινη γλώσσα έχει αμφισημίες (ambiguities). Το quiz της διάλεξης, «Ποιο είναι το πιο ψηλό βουνό του κόσμου;», έχει τρεις σωστές απαντήσεις, ανάλογα με το τι εννοούμε «ψηλό»:
| Ερμηνεία του «ψηλό» | Βουνό |
|---|---|
| μεγαλύτερο υψόμετρο από τη μέση στάθμη της θάλασσας (8.848 m) | Έβερεστ |
| πιο μακριά από το κέντρο της Γης | Τσιμποράσο (Chimborazo) |
| μεγαλύτερο ύψος από τη βάση ως την κορυφή (10.210 m) | Μάουνα Κέα (Mauna Kea) |
Οι αμφισημίες είναι δύο ειδών. Λεξιλογική αμφισημία (lexical ambiguity) έχουμε όταν μία λέξη έχει δύο ή περισσότερες σημασίες: στο «I saw her duck.» το duck είναι είτε «πάπια» είτε «έσκυψε». Συντακτική αμφισημία (syntactic ambiguity) έχουμε όταν μια πρόταση ή ακολουθία λέξεων επιδέχεται περισσότερες από μία ερμηνείες: το «The chicken is ready to eat.» σημαίνει είτε ότι το φαγητό είναι έτοιμο είτε ότι η κότα πεινάει.
Ένας υπολογιστής δεν μπορεί να «μαντέψει» τι εννοούμε. Γι’ αυτό επινοήσαμε τις γλώσσες προγραμματισμού. Γλώσσα προγραμματισμού (programming language) είναι μια γλώσσα που μας επιτρέπει να επικοινωνούμε εντολές στον υπολογιστή. Μια καλή γλώσσα προγραμματισμού δεν επιτρέπει αμφισημία: κάθε πρόγραμμα έχει ακριβώς μία σημασία. Ως bonus, η γλώσσα προγραμματισμού μαζί με τον υπολογιστή μπορεί να λύσει και αμφισημίες ανάμεσα σε προγραμματιστές: αν διαφωνείτε για το τι κάνει ένα κομμάτι κώδικα, το τρέχετε και βλέπετε.
Οι σημειώσεις διακρίνουν τις γλώσσες χαμηλού επιπέδου (γλώσσα μηχανής, assembly), που είναι κοντά στον επεξεργαστή, από τις γλώσσες υψηλού επιπέδου (C, Python, Java κ.ά.), που είναι κοντά στον τρόπο που σκεφτόμαστε. Από μια γλώσσα υψηλού επιπέδου χρειαζόμαστε μηχανισμούς για είσοδο και έξοδο, ακολουθίες βημάτων, αποθήκευση τιμών στη μνήμη, επιλογή με βάση συνθήκη, επανάληψη και «πακετάρισμα» συχνών λειτουργιών. Όλα αυτά τα μαθαίνουμε στη C τα επόμενα κεφάλαια.
Η C δημιουργήθηκε γύρω στο 1970 από τον Dennis Ritchie, ο οποίος μαζί με τον Ken Thompson δημιούργησε και το λειτουργικό σύστημα UNIX και τη γλώσσα B, την προκάτοχο της C. Τη μαθαίνουμε επειδή είναι:
Η C είναι επίσης το «αγωνιστικό» των γλωσσών. Σε μια σύγκριση πολλών γλωσσών στα ίδια προβλήματα (βλ. «Programming Language Shootout» στο «Διάβασμα»), με τιμές κανονικοποιημένες ως προς την καλύτερη γλώσσα (1.00 = η καλύτερη):
| Μέτρο | C | Rust | C++ | Java | Python |
|---|---|---|---|---|---|
| Ενέργεια | 1.00 (1η) | 1.03 | 1.34 | 1.98 | 75.88 |
| Χρόνος | 1.00 (1η) | 1.04 | 1.56 | 1.89 | 71.90 |
| Μνήμη | 1.17 (3η) | 1.54 | 1.34 | 6.01 | 2.80 |
Στη μνήμη η C έρχεται τρίτη, μετά την Pascal (1.00) και τη Go (1.05). Η Python, αν και σήμερα η πιο δημοφιλής γλώσσα, είναι περίπου 72 φορές πιο αργή από τη C σε αυτή τη σύγκριση. Η C σας δίνει ταχύτητα και έλεγχο, με αντίτιμο ότι πρέπει να καταλαβαίνετε τι κάνει ο υπολογιστής από κάτω.
Ο υπολογιστής δεν εκτελεί απευθείας κώδικα C. Γράφουμε το πρόγραμμα σε ένα αρχείο
κειμένου, το πηγαίο αρχείο (source file), π.χ. helloworld.c. Ο μεταγλωττιστής
(compiler) το μετατρέπει σε αντικειμενικό αρχείο (object file) σε γλώσσα μηχανής,
και ο συνδέτης (linker) ενώνει τα αντικειμενικά αρχεία με τις βιβλιοθήκες
(libraries) που χρειάζονται (π.χ. αυτή που περιέχει την printf) σε ένα
εκτελέσιμο αρχείο (executable), που μπορεί να τρέξει ο επεξεργαστής. Στο μάθημα
χρησιμοποιούμε τον μεταγλωττιστή gcc, που κάνει και τα δύο βήματα με μία εντολή.
flowchart LR
S["helloworld.c<br/>(πηγαίος κώδικας)"] -->|"μεταγλωττιστής"| O["helloworld.o<br/>(αντικειμενικό αρχείο)"]
O -->|"συνδέτης"| E["helloworld<br/>(εκτελέσιμο)"]
L["βιβλιοθήκες<br/>(π.χ. printf)"] --> E
E -->|"./helloworld"| R["Hello world"]
Σχήμα: μεταγλώττιση και σύνδεση ενός προγράμματος C.
Στη διάλεξη τρέξαμε το πρώτο πρόγραμμα σε έναν online compiler, μια ιστοσελίδα
που κάνει όλα τα παραπάνω για λογαριασμό σας. Από το επόμενο κεφάλαιο
(Κεφάλαιο 1) δουλεύουμε στη γραμμή εντολών, όπου καλούμε τον
gcc μόνοι μας.
Το πρώτο πρόγραμμα που γράφει κανείς σε μια νέα γλώσσα, κατά παράδοση, τυπώνει «Hello world». Στη C μοιάζει έτσι:
/* File: helloworld.c */
#include <stdio.h>
int main() {
printf("Hello world\n");
}
Κάθε γραμμή έχει ρόλο:
/* ... */ είναι σχόλιο (comment): ό,τι βρίσκεται ανάμεσα στο /* και στο */
αγνοείται από τον μεταγλωττιστή. Γράφουμε σχόλια για τους ανθρώπους που θα
διαβάσουν τον κώδικα.#include <stdio.h> είναι οδηγία προς τον προεπεξεργαστή (preprocessor) να
συμπεριλάβει εκεί τα περιεχόμενα του αρχείου επικεφαλίδας (header file)
stdio.h (standard input/output), που δηλώνει τις συναρτήσεις εισόδου/εξόδου, μεταξύ
αυτών και την printf.int main() { ... } ορίζει τη συνάρτηση (function) main. Κάθε πρόγραμμα C έχει
ακριβώς μία main, και από εκεί ξεκινά η εκτέλεση. Οι εντολές της βρίσκονται μέσα
στις αγκύλες { }. Για το int θα μιλήσουμε σε επόμενο κεφάλαιο.printf("Hello world\n"); καλεί τη συνάρτηση εξόδου printf, που τυπώνει τη
συμβολοσειρά (string) ανάμεσα στα διπλά εισαγωγικά (χωρίς τα εισαγωγικά). Το \n
είναι ειδική ακολουθία που σημαίνει αλλαγή γραμμής (newline). Η εντολή τελειώνει
με ;.Το εργαστήριο γράφει το ίδιο πρόγραμμα με μια επιπλέον γραμμή return 0; στο τέλος
της main. Και οι δύο μορφές είναι σωστές· τι σημαίνει η τιμή που επιστρέφει η main
θα το δούμε στο Κεφάλαιο 3.
Εφαρμόζει: «Η δομή του Hello World», «Από τον πηγαίο κώδικα στο εκτελέσιμο».
Η διάλεξη προτείνει να τρέξετε το πρόγραμμα αμέσως, χωρίς να εγκαταστήσετε τίποτα, στον online compiler του Programiz (σύνδεσμος στο «Διάβασμα»). Αντιγράψτε τον κώδικα της προηγούμενης ενότητας, πατήστε «Run» και στο παράθυρο εξόδου θα δείτε:
Hello world
Δοκιμάστε μικρές αλλαγές για να δείτε τι συμβαίνει: αλλάξτε το μήνυμα, βάλτε δύο
printf τη μία μετά την άλλη, ή αφαιρέστε το \n και δείτε πού πάει η επόμενη
έξοδος.
Εφαρμόζει: «Από τον πηγαίο κώδικα στο εκτελέσιμο».
Στο εργαστήριο (και από το επόμενο κεφάλαιο) γράφετε το πρόγραμμα σε ένα αρχείο με
έναν κειμενογράφο, το μεταγλωττίζετε με τον gcc και τρέχετε το εκτελέσιμο:
$ gcc -o helloworld helloworld.c
$ ./helloworld
Hello world
$
Η επιλογή -o helloworld δίνει όνομα στο εκτελέσιμο· χωρίς αυτήν, ο gcc το ονομάζει
a.out. Το ./ λέει στο shell να βρει το πρόγραμμα στον τρέχοντα κατάλογο.
Εφαρμόζει: «Αμφισημία και γλώσσες προγραμματισμού».
Η διάλεξη εξηγεί με ένα ανέκδοτο γιατί επινοήσαμε τις γλώσσες προγραμματισμού. Ο Joe λέει στον φίλο του, τον προγραμματιστή Charlie: «Go to the store and buy a loaf of bread. If they have eggs, buy a dozen.» Ο Charlie γυρίζει με 12 φραντζόλες ψωμί. Η φράση «buy a dozen» δεν λέει δώδεκα από τι:
flowchart TD
S["Πήγαινε στο μαγαζί"] --> Q{"Έχουν αυγά;"}
Q -->|"όχι"| B1["Αγόρασε 1 ψωμί"]
Q -->|"ναι (ερμηνεία του Joe)"| B2["Αγόρασε 1 ψωμί και 12 αυγά"]
Q -->|"ναι (ερμηνεία του Charlie)"| B3["Αγόρασε 12 ψωμιά"]
Σχήμα: η ίδια οδηγία, δύο διαφορετικά «προγράμματα».
Σε μια γλώσσα προγραμματισμού, όπως στη C, ο προγραμματιστής θα έπρεπε να γράψει ρητά τι αγοράζει και πόσο, οπότε η αμφισημία δεν θα μπορούσε να υπάρξει.
Η διάλεξη προτείνει πηγές εξάσκησης πέρα από τις ασκήσεις του μαθήματος:
Πριν από την επόμενη διάλεξη:
main, από την οποία ξεκινά η
εκτέλεση· η printf τυπώνει μια συμβολοσειρά και το \n αλλάζει γραμμή.| Ελληνικά | English | Σύντομος ορισμός |
|---|---|---|
| υπολογιστής | computer | Κατασκευή που επεξεργάζεται δεδομένα και παράγει αποτελέσματα |
| προγραμματισμός | programming | Σαφής καθορισμός διαδικασίας που λύνει πρόβλημα υπολογισμού |
| πρόγραμμα | program | Η καταγραφή της επίλυσης ενός προβλήματος, ως σύνολο εντολών |
| αλγόριθμος | algorithm | Σαφής διαδικασία από εκτελέσιμα βήματα που τερματίζει |
| γλώσσα προγραμματισμού | programming language | Γλώσσα χωρίς αμφισημίες για εντολές σε υπολογιστή |
| αμφισημία | ambiguity | Όταν μια λέξη ή πρόταση έχει περισσότερες από μία σημασίες |
| λογισμικό / υλικό | software / hardware | Τα προγράμματα / η ίδια η συσκευή |
| αποσφαλμάτωση | debugging | Εντοπισμός και διόρθωση λαθών σε πρόγραμμα |
| πηγαίο αρχείο | source file | Αρχείο κειμένου με τον κώδικα, π.χ. helloworld.c |
| μεταγλωττιστής | compiler | Μετατρέπει πηγαίο κώδικα σε γλώσσα μηχανής (π.χ. gcc) |
| συνδέτης | linker | Ενώνει αντικειμενικά αρχεία και βιβλιοθήκες σε εκτελέσιμο |
| εκτελέσιμο | executable | Αρχείο που μπορεί να τρέξει ο επεξεργαστής |
| σχόλιο | comment | Κείμενο μέσα σε /* */ που αγνοεί ο μεταγλωττιστής |
| αρχείο επικεφαλίδας | header file | Αρχείο με δηλώσεις, π.χ. stdio.h |
| συμβολοσειρά | string | Κείμενο ανάμεσα σε διπλά εισαγωγικά, π.χ. "Hello world\n" |
| αλλαγή γραμμής | newline | Ο χαρακτήρας \n |
hello.c, Άσκηση 1 about.c;. printf("Hello world\n") χωρίς ; δεν μεταγλωττίζεται
(expected ';'). Διόρθωση: κάθε εντολή τελειώνει με ;.#include <stdio.h>. Ο μεταγλωττιστής δεν ξέρει την printf και
προειδοποιεί (ή σταματά) με μήνυμα για implicit declaration of function 'printf'.\n. Χωρίς αλλαγή γραμμής, η επόμενη έξοδος (ή το prompt του shell)
κολλάει στο τέλος του μηνύματος: Hello world$."..."· με μονά
'Hello' ή «έξυπνα» εισαγωγικά από κειμενογράφο εγγράφων ο κώδικας δεν
μεταγλωττίζεται.Main ή Printf δεν είναι
το ίδιο με main και printf.Από τα Kahoot των διαλέξεων: οι ερωτήσεις όπου μια λάθος απάντηση μάζεψε πολλές ψήφους, με το ποσοστό σωστών απαντήσεων.
#include <stdio.h> στο Hello World;6\n από το printf("Hello world\n");;8Ερωτήσεις που παίχτηκαν στις διαλέξεις, με το ποσοστό των φοιτητών που απάντησαν σωστά.
slides-lec00-ask-questionslides-lec00-bread-and-eggsslides-lec00-hello-worldslides-lec00-highest-mountainslides-lec00-pass-without-labsslides-lec00-programs-you-knowslides-lec00-why-programminglab-lab01-step2-compile-linklab-lab00-aboutslides-lecmake-build-pipelineΤην ταχύτητα στην επεξεργασία δεδομένων και τη μνήμη που διαθέτουν για αποθήκευση δεδομένων. ↩
Ο σαφής καθορισμός μιας διαδικασίας, σαν ένα σύνολο από εντολές (το πρόγραμμα), που περιγράφει λεπτομερώς τα βήματα που πρέπει να γίνουν για να επιλυθεί ένα πρόβλημα υπολογισμού. ↩
Λεξιλογική: μία λέξη με πολλές σημασίες («I saw her duck.»). Συντακτική: μια πρόταση που διαβάζεται με πολλούς τρόπους («The chicken is ready to eat.»). ↩
Επειδή η φυσική γλώσσα έχει αμφισημίες και ο υπολογιστής δεν μπορεί να μαντέψει ποια ερμηνεία εννοούμε· μια γλώσσα προγραμματισμού δεν επιτρέπει αμφισημία. ↩
Ο Dennis Ritchie, γύρω στο 1970 (μαζί με τον Ken Thompson δημιούργησαν και το UNIX και τη γλώσσα B). ↩
Ζητά από τον προεπεξεργαστή να συμπεριλάβει το αρχείο επικεφαλίδας stdio.h, που δηλώνει τις συναρτήσεις εισόδου/εξόδου όπως η printf. ↩
Από τη main· κάθε πρόγραμμα C έχει ακριβώς μία. ↩
Δεν θα αλλάξει γραμμή μετά το μήνυμα, οπότε ό,τι τυπωθεί μετά (π.χ. το prompt του shell) θα εμφανιστεί στην ίδια γραμμή. ↩
Ο μεταγλωττιστής μετατρέπει τον πηγαίο κώδικα σε αντικειμενικό αρχείο σε γλώσσα μηχανής· ο συνδέτης ενώνει αντικειμενικά αρχεία και βιβλιοθήκες σε εκτελέσιμο. ↩
Όχι. Η αναπροσαρμογή εφαρμόζεται μόνο όταν οι Ασκήσεις ξεπερνούν την Τελική Εξέταση κατά περισσότερες από 3 μονάδες· εδώ είναι μικρότερες. ↩