diff --git a/Makefile b/Makefile
index 4359b1b..6e0835f 100644
--- a/Makefile
+++ b/Makefile
@@ -73,7 +73,7 @@ $(BUILD)/llms.txt: $(CHAPTERS) glossary.md $(BUILD)/questions.md tools/llms.py t
.PHONY: all fetch lint check-code exercises check clean
fetch:
mkdir -p sources/slides/2026 sources/hw/2023 sources/hw/2024 sources/hw/2025
- for f in lec00 lec01 lec02 lec03 lec04 lec05 lec06 lec07 lec08; do curl -fsSL -o sources/slides/2026/$$f.pdf https://progintro.github.io/assets/pdf/$$f.pdf; done
+ for f in lec00 lec01 lec02 lec03 lec04 lec05 lec06 lec07 lec08 lec09; do curl -fsSL -o sources/slides/2026/$$f.pdf https://progintro.github.io/assets/pdf/$$f.pdf; done
gh release download 2025 -R $(REPO) -D sources/slides -p 'lec*.pdf' -p make.pdf --skip-existing
gh release download 2025 -R $(REPO) -D sources/hw/2025 -p 'hw*.pdf' -p stergios.pdf --skip-existing
gh release download 2024 -R $(REPO) -D sources/hw/2024 -p 'hw*.pdf' --skip-existing
diff --git a/README.md b/README.md
index 06f7bef..c4d2d6d 100644
--- a/README.md
+++ b/README.md
@@ -325,7 +325,7 @@ chatbot ή agent το [`llms-full.txt`](llms-full.txt) (όλος ο οδηγός
Ο οδηγός γράφτηκε από τις διαφάνειες των διαλέξεων του 2025-26
([progintro.github.io](https://progintro.github.io/)) και ενημερώνεται με τις διαφάνειες
-του 2026-27 καθώς δημοσιεύονται (ως τώρα: Διαλέξεις 0–8), τις
+του 2026-27 καθώς δημοσιεύονται (ως τώρα: Διαλέξεις 0–9), τις
[σημειώσεις](https://progintro.github.io/notes/) του μαθήματος, τα
[εργαστήρια](https://progintro.github.io/lab-material/) και τα θέματα εξετάσεων και τις
εργασίες προηγούμενων ετών. Οι ασκήσεις έχουν υποδείξεις αλλά όχι λύσεις.
diff --git a/chapters/09-input/README.md b/chapters/09-input/README.md
index 39cc768..8fd2a11 100644
--- a/chapters/09-input/README.md
+++ b/chapters/09-input/README.md
@@ -3,9 +3,9 @@ layout: chapter
chapter: 9
lecture: 9
title: "Δεδομένα Εισόδου"
-date: 2025-10-31
+date: 2026-10-30
part: B
-slides: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
+slides: https://progintro.github.io/assets/pdf/lec09.pdf
prev: 08-control-flow-2
next: 10-arrays
topics: [input-output, input-validation, floating-point, good-practice]
@@ -38,7 +38,13 @@ labs: [lab04]
`printf` για διάβασμα. Στην πορεία βλέπουμε τρεις κλασικές παγίδες: `char` αντί για
`int` για την τιμή της `getchar`, `scanf` χωρίς `&`, και `scanf` χωρίς έλεγχο της
τιμής επιστροφής. Σχεδόν κάθε εργασία του μαθήματος διαβάζει είσοδο, οπότε αυτά τα
-εργαλεία θα τα χρησιμοποιείτε συνέχεια.
+εργαλεία θα τα χρησιμοποιείτε συνέχεια. Οι διαφάνειες του 2026-27 κλείνουν με την
+`fprintf`, που γράφει μηνύματα λάθους στην έξοδο σφάλματος (`stderr`).
+
+Οι ανακοινώσεις του 2026-27 είχαν και ένα καλό νέο: ομάδα του ΕΚΠΑ πήρε την 1η θέση
+στον GRCPC 2026, μαζί με ένα αργυρό μετάλλιο και τρεις θέσεις στην πρώτη 11άδα
+([αποτελέσματα](https://grcpc.gr/public?countries%5B%5D=GRC&filter=filter)). Για τον
+διαγωνισμό δείτε το [Κεφάλαιο 7](../07-problem-solving/#s7-2).
## Θεωρία
@@ -87,6 +93,26 @@ flowchart LR
στο πρόγραμμα. Όταν πληκτρολογείτε τον «αριθμό» `42`, το πρόγραμμα λαμβάνει δύο
χαρακτήρες, `'4'` και `'2'`· η μετατροπή τους σε ακέραιο είναι δική του δουλειά.
+Για την έξοδο ένα πρόγραμμα έχει δύο κανάλια: την **πρότυπη έξοδο** (`stdout`), όπου
+γράφει η `printf`, και την **έξοδο σφάλματος** (standard error, `stderr`), για
+μηνύματα λάθους. Και τα δύο εμφανίζονται κανονικά στο τερματικό, αλλά μια ανακατεύθυνση
+`>` ή μια σωλήνωση `|` παίρνει μόνο το `stdout`, οπότε τα μηνύματα λάθους δεν
+ανακατεύονται με τα αποτελέσματα. Σε όποιο κανάλι θέλουμε γράφουμε με την `fprintf`, που
+είναι όμοια με την `printf` αλλά παίρνει πρώτο όρισμα το πού θα γράψει:
+
+```c
+int fprintf(FILE *stream, const char *format, ...);
+```
+
+Η `printf(x, y, z)` είναι ουσιαστικά ισοδύναμη με την `fprintf(stdout, x, y, z)`, και ένα
+μήνυμα λάθους γράφεται έτσι:
+
+```c
+fprintf(stderr, "Not a prime number: %d\n", num);
+```
+
+Η `fprintf` μπορεί να γράψει και σε οποιοδήποτε αρχείο (επόμενες διαλέξεις).
+
### §9.4 Οι τέσσερις πηγές εισόδου
@@ -532,7 +558,10 @@ while ((ch = getchar()) != EOF) {
δοκιμάζετε με σωληνώσεις, π.χ. `echo hello world | ./encode | ./decode`.
- Όταν μια εκφώνηση ορίζει τι γίνεται στο τέλος της εισόδου ή σε λάθος είσοδο,
ξεχωρίστε τις τρεις περιπτώσεις της `scanf`: `1`, `0` και `EOF`. Το πρόγραμμα
- `trolley` της διάλεξης, π.χ., τερματίζει όταν δεν μπορεί να διαβάσει άλλο κόστος.
+ `goldbach` της διάλεξης (άσκηση της hw0 του 2026), π.χ., τυπώνει «EOF detected,
+ exiting» και τερματίζει όταν δεν υπάρχει άλλη είσοδος· στις διαφάνειες του 2025-26
+ το αντίστοιχο παράδειγμα ήταν το `trolley`, που τερματίζει όταν δεν μπορεί να
+ διαβάσει άλλο κόστος.
## Κύρια σημεία
@@ -565,6 +594,7 @@ while ((ch = getchar()) != EOF) {
| δεδομένα εισόδου / εξόδου | input / output data | Ό,τι δίνεται στο πρόγραμμα / ό,τι παράγει. |
| πρότυπη είσοδος | standard input (`stdin`) | Η προεπιλεγμένη είσοδος, συνήθως το πληκτρολόγιο. |
| πρότυπη έξοδος | standard output (`stdout`) | Η προεπιλεγμένη έξοδος, συνήθως η οθόνη. |
+| έξοδος σφάλματος | standard error (`stderr`) | Η έξοδος για μηνύματα λάθους, χωριστά από την πρότυπη έξοδο. |
| τέλος αρχείου | End-Of-File (`EOF`) | Τιμή (`-1`) που δηλώνει ότι δεν υπάρχει άλλη είσοδος. |
| ενδιάμεση μνήμη | buffer | Όπου περιμένουν οι χαρακτήρες πριν φτάσουν στο πρόγραμμα. |
| κανονική λειτουργία | canonical mode | Το τερματικό στέλνει την είσοδο ανά γραμμή. |
@@ -576,7 +606,7 @@ while ((ch = getchar()) != EOF) {
## Διάβασμα
-- **Διαφάνειες:** [Διάλεξη 9](https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf), σελ. 1–41. Σύγκριση `float` και ονόματα: σελ. 2–5· πηγές εισόδου: σελ. 8–13· `getchar`: σελ. 14–21· `putchar` και `cat`: σελ. 22–24· `getinteger`: σελ. 25–26, 38· `scanf`: σελ. 27–37· συχνότητες γραμμάτων: σελ. 39.
+- **Διαφάνειες:** [Διάλεξη 9](https://progintro.github.io/assets/pdf/lec09.pdf) (2026-27), σελ. 1–45. Σύγκριση `float` και ονόματα: σελ. 2, 4–6· GRCPC 2026: σελ. 3· πηγές εισόδου: σελ. 9–14· `getchar`: σελ. 15–22· `putchar` και `cat`: σελ. 23–25· `getinteger`: σελ. 26–27, 40· το όπλο του Τσέχοφ: σελ. 28· `scanf`: σελ. 29–39· συχνότητες γραμμάτων: σελ. 41· `fprintf` και `stderr`: σελ. 42–43. Οι διαφάνειες του 2025-26 ([Διάλεξη 9 (2025)](https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf), σελ. 1–41) δεν έχουν τις σελ. 3, 28 και 42–43, οπότε οι σελίδες τους είναι κατά 1 μικρότερες στις σελ. 3–26, κατά 2 στις σελ. 27–39 και κατά 4 στις σελ. 40–41.
- **Σημειώσεις:** οι διαφάνειες παραπέμπουν στις σελίδες 28–29, 70–71, 78–79 και 86–87 των σημειώσεων του κ. Σταματόπουλου, δηλαδή στις ενότητες:
- [Κεφάλαιο 1: Πρώτα προγράμματα σε C](https://progintro.github.io/notes/chapters/01-first-programs/), «Μετατροπή πεζών γραμμάτων σε κεφαλαία» (K04, σελ. 28–29)
- [Κεφάλαιο 4: Συναρτήσεις, εμβέλεια και αναδρομή](https://progintro.github.io/notes/chapters/04-functions/), «Μετατροπές μεταξύ δεκαδικών και δυαδικών αριθμών» (K04, σελ. 70–71)
@@ -584,8 +614,8 @@ while ((ch = getchar()) != EOF) {
- Για αναφορά: [Κεφάλαιο 9: Είσοδος και έξοδος](https://progintro.github.io/notes/chapters/09-io/), «Είσοδος και έξοδος» (K04, σελ. 136–149), με τις `getchar`, `putchar`, `printf`, `scanf` και την ανακατεύθυνση.
- **Εργαστήριο:** [Εργαστήριο 4](https://progintro.github.io/lab-material/labs/lab04/): ασκήσεις `pyramid.c` (`putchar` και `scanf`), `lowercase.c` (βρόχος `getchar`/`putchar`), `encode.c` και `decode.c` (φίλτρα με ανακατεύθυνση και σωληνώσεις)
- **Άλλα:**
- - Αναφορά συναρτήσεων: [getchar](https://en.cppreference.com/w/c/io/getchar), [putchar](https://en.cppreference.com/w/c/io/putchar), [scanf](https://cplusplus.com/reference/cstdio/scanf/), [printf](https://cplusplus.com/reference/cstdio/printf/), και οι σελίδες `man getchar`, `man scanf`
- - Wikipedia: [Data buffer](https://en.wikipedia.org/wiki/Data_buffer), [End-of-Transmission character](https://en.wikipedia.org/wiki/End-of-Transmission_character), [Camel case](https://en.wikipedia.org/wiki/Camel_case), [Snake case](https://en.wikipedia.org/wiki/Snake_case)
+ - Αναφορά συναρτήσεων: [getchar](https://en.cppreference.com/w/c/io/getchar), [putchar](https://en.cppreference.com/w/c/io/putchar), [scanf](https://cplusplus.com/reference/cstdio/scanf/), [printf](https://cplusplus.com/reference/cstdio/printf/), και οι σελίδες `man getchar`, `man scanf`, `man fprintf`
+ - Wikipedia: [Data buffer](https://en.wikipedia.org/wiki/Data_buffer), [End-of-Transmission character](https://en.wikipedia.org/wiki/End-of-Transmission_character), [Camel case](https://en.wikipedia.org/wiki/Camel_case), [Snake case](https://en.wikipedia.org/wiki/Snake_case), [Chekhov's gun](https://en.wikipedia.org/wiki/Chekhov%27s_gun)
- POSIX: [Canonical mode input processing](https://pubs.opengroup.org/onlinepubs/7908799/xbd/termios.html#tag_008_001_006)
## Συχνά λάθη
@@ -653,16 +683,16 @@ while ((ch = getchar()) != EOF) {
### Ζέσταμα: από τις διαφάνειες (Α9.1–Α9.10)
-- **[Α9.1](../../questions/slides/slides-lec09-charcount.md)** Μετρητής χαρακτήρων με getchar: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 20 · ★☆☆ · trace · `slides-lec09-charcount`
-- **[Α9.2](../../questions/slides/slides-lec09-scanf-square.md)** Τι κάνει το πρόγραμμα με τη scanf;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 30 · ★☆☆ · trace · `slides-lec09-scanf-square`
-- **[Α9.3](../../questions/slides/slides-lec09-scanf-two.md)** scanf με πολλά ορίσματα: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 36–37 · ★☆☆ · trace · `slides-lec09-scanf-two`
-- **[Α9.4](../../questions/slides/slides-lec09-addnums.md)** Άθροισμα δύο αριθμών από την πρότυπη είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 25–26 · ★★☆ · programming · `slides-lec09-addnums`
-- **[Α9.5](../../questions/slides/slides-lec09-cat-char.md)** Μια cat με char: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 23 · ★★☆ · debug · `slides-lec09-cat-char`
-- **[Α9.6](../../questions/slides/slides-lec09-float-equality.md)** OK ή Not OK;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 3 · ★★☆ · trace · `slides-lec09-float-equality`
-- **[Α9.7](../../questions/slides/slides-lec09-getinteger.md)** Η συνάρτηση getinteger: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 26, 38 · ★★☆ · trace · `slides-lec09-getinteger`
-- **[Α9.8](../../questions/slides/slides-lec09-letter-frequencies.md)** Μέτρηση γραμμάτων στην είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 39 · ★★☆ · trace · `slides-lec09-letter-frequencies`
-- **[Α9.9](../../questions/slides/slides-lec09-scanf-no-ampersand.md)** scanf χωρίς &: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 32 · ★★☆ · short-answer · `slides-lec09-scanf-no-ampersand`
-- **[Α9.10](../../questions/slides/slides-lec09-scanf-return.md)** Είναι σωστό αυτό το πρόγραμμα;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 33–35 · ★★☆ · debug · `slides-lec09-scanf-return`
+- **[Α9.1](../../questions/slides/slides-lec09-charcount.md)** Μετρητής χαρακτήρων με getchar: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 21 · ★☆☆ · trace · `slides-lec09-charcount`
+- **[Α9.2](../../questions/slides/slides-lec09-scanf-square.md)** Τι κάνει το πρόγραμμα με τη scanf;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 32 · ★☆☆ · trace · `slides-lec09-scanf-square`
+- **[Α9.3](../../questions/slides/slides-lec09-scanf-two.md)** scanf με πολλά ορίσματα: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 38–39 · ★☆☆ · trace · `slides-lec09-scanf-two`
+- **[Α9.4](../../questions/slides/slides-lec09-addnums.md)** Άθροισμα δύο αριθμών από την πρότυπη είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 26–27 · ★★☆ · programming · `slides-lec09-addnums`
+- **[Α9.5](../../questions/slides/slides-lec09-cat-char.md)** Μια cat με char: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 24 · ★★☆ · debug · `slides-lec09-cat-char`
+- **[Α9.6](../../questions/slides/slides-lec09-float-equality.md)** OK ή Not OK;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 4 · ★★☆ · trace · `slides-lec09-float-equality`
+- **[Α9.7](../../questions/slides/slides-lec09-getinteger.md)** Η συνάρτηση getinteger: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 27, 40 · ★★☆ · trace · `slides-lec09-getinteger`
+- **[Α9.8](../../questions/slides/slides-lec09-letter-frequencies.md)** Μέτρηση γραμμάτων στην είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 41 · ★★☆ · trace · `slides-lec09-letter-frequencies`
+- **[Α9.9](../../questions/slides/slides-lec09-scanf-no-ampersand.md)** scanf χωρίς &: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 34 · ★★☆ · short-answer · `slides-lec09-scanf-no-ampersand`
+- **[Α9.10](../../questions/slides/slides-lec09-scanf-return.md)** Είναι σωστό αυτό το πρόγραμμα;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 35–37 · ★★☆ · debug · `slides-lec09-scanf-return`
### Εργαστήριο (Α9.11–Α9.14)
diff --git a/glossary.md b/glossary.md
index 7eaa866..64d2903 100644
--- a/glossary.md
+++ b/glossary.md
@@ -127,7 +127,7 @@
| εντολή έκφρασης | expression statement | Μια έκφραση που τελειώνει με `;` | [6](chapters/06-control-flow/) |
| ένωση | union | Τύπος σαν τη δομή, όπου όλα τα μέλη μοιράζονται την ίδια μνήμη. | [20](chapters/20-advanced-structs/) |
| εξάρτηση | dependency | Ένα αρχείο χρειάζεται ένα άλλο για να χτιστεί. | [23](chapters/23-code-organization/), [24](chapters/24-advanced-topics/) |
-| έξοδος σφάλματος | standard error | Το ρεύμα `stderr`, για μηνύματα λάθους. | [18](chapters/18-sorting-input-2/) |
+| έξοδος σφάλματος | standard error (`stderr`) | Η έξοδος για μηνύματα λάθους, χωριστά από την πρότυπη έξοδο. | [9](chapters/09-input/), [18](chapters/18-sorting-input-2/) |
| επανάληψη | iteration | Μία εκτέλεση του σώματος του βρόχου | [6](chapters/06-control-flow/) |
| επέκταση | extension | Το τέλος του ονόματος (`.txt`, `.c`) που δείχνει τον τύπο | [1](chapters/01-command-line/), [18](chapters/18-sorting-input-2/) |
| επεξεργαστής κειμένου | editor | Πρόγραμμα για τη σύνταξη του κώδικα (π.χ. `vim`, VS Code). | [7](chapters/07-problem-solving/) |
diff --git a/questions/README.md b/questions/README.md
index e006553..738ece4 100644
--- a/questions/README.md
+++ b/questions/README.md
@@ -317,16 +317,16 @@
### Ζέσταμα: από τις διαφάνειες (Α9.1–Α9.10)
-- **[Α9.1](../questions/slides/slides-lec09-charcount.md)** Μετρητής χαρακτήρων με getchar: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 20 · ★☆☆ · trace · `slides-lec09-charcount`
-- **[Α9.2](../questions/slides/slides-lec09-scanf-square.md)** Τι κάνει το πρόγραμμα με τη scanf;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 30 · ★☆☆ · trace · `slides-lec09-scanf-square`
-- **[Α9.3](../questions/slides/slides-lec09-scanf-two.md)** scanf με πολλά ορίσματα: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 36–37 · ★☆☆ · trace · `slides-lec09-scanf-two`
-- **[Α9.4](../questions/slides/slides-lec09-addnums.md)** Άθροισμα δύο αριθμών από την πρότυπη είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 25–26 · ★★☆ · programming · `slides-lec09-addnums`
-- **[Α9.5](../questions/slides/slides-lec09-cat-char.md)** Μια cat με char: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 23 · ★★☆ · debug · `slides-lec09-cat-char`
-- **[Α9.6](../questions/slides/slides-lec09-float-equality.md)** OK ή Not OK;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 3 · ★★☆ · trace · `slides-lec09-float-equality`
-- **[Α9.7](../questions/slides/slides-lec09-getinteger.md)** Η συνάρτηση getinteger: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 26, 38 · ★★☆ · trace · `slides-lec09-getinteger`
-- **[Α9.8](../questions/slides/slides-lec09-letter-frequencies.md)** Μέτρηση γραμμάτων στην είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 39 · ★★☆ · trace · `slides-lec09-letter-frequencies`
-- **[Α9.9](../questions/slides/slides-lec09-scanf-no-ampersand.md)** scanf χωρίς &: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 32 · ★★☆ · short-answer · `slides-lec09-scanf-no-ampersand`
-- **[Α9.10](../questions/slides/slides-lec09-scanf-return.md)** Είναι σωστό αυτό το πρόγραμμα;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 33–35 · ★★☆ · debug · `slides-lec09-scanf-return`
+- **[Α9.1](../questions/slides/slides-lec09-charcount.md)** Μετρητής χαρακτήρων με getchar: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 21 · ★☆☆ · trace · `slides-lec09-charcount`
+- **[Α9.2](../questions/slides/slides-lec09-scanf-square.md)** Τι κάνει το πρόγραμμα με τη scanf;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 32 · ★☆☆ · trace · `slides-lec09-scanf-square`
+- **[Α9.3](../questions/slides/slides-lec09-scanf-two.md)** scanf με πολλά ορίσματα: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 38–39 · ★☆☆ · trace · `slides-lec09-scanf-two`
+- **[Α9.4](../questions/slides/slides-lec09-addnums.md)** Άθροισμα δύο αριθμών από την πρότυπη είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 26–27 · ★★☆ · programming · `slides-lec09-addnums`
+- **[Α9.5](../questions/slides/slides-lec09-cat-char.md)** Μια cat με char: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 24 · ★★☆ · debug · `slides-lec09-cat-char`
+- **[Α9.6](../questions/slides/slides-lec09-float-equality.md)** OK ή Not OK;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 4 · ★★☆ · trace · `slides-lec09-float-equality`
+- **[Α9.7](../questions/slides/slides-lec09-getinteger.md)** Η συνάρτηση getinteger: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 27, 40 · ★★☆ · trace · `slides-lec09-getinteger`
+- **[Α9.8](../questions/slides/slides-lec09-letter-frequencies.md)** Μέτρηση γραμμάτων στην είσοδο: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 41 · ★★☆ · trace · `slides-lec09-letter-frequencies`
+- **[Α9.9](../questions/slides/slides-lec09-scanf-no-ampersand.md)** scanf χωρίς &: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 34 · ★★☆ · short-answer · `slides-lec09-scanf-no-ampersand`
+- **[Α9.10](../questions/slides/slides-lec09-scanf-return.md)** Είναι σωστό αυτό το πρόγραμμα;: Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 35–37 · ★★☆ · debug · `slides-lec09-scanf-return`
### Εργαστήριο (Α9.11–Α9.14)
diff --git a/questions/slides/slides-lec09-addnums.md b/questions/slides/slides-lec09-addnums.md
index 87ccd80..1498d86 100644
--- a/questions/slides/slides-lec09-addnums.md
+++ b/questions/slides/slides-lec09-addnums.md
@@ -3,9 +3,9 @@ id: slides-lec09-addnums
kind: slides
title: "Άθροισμα δύο αριθμών από την πρότυπη είσοδο"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 25–26"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 26–27"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, input-validation, functions]
difficulty: 2
diff --git a/questions/slides/slides-lec09-cat-char.md b/questions/slides/slides-lec09-cat-char.md
index cfc486e..a241fd8 100644
--- a/questions/slides/slides-lec09-cat-char.md
+++ b/questions/slides/slides-lec09-cat-char.md
@@ -3,9 +3,9 @@ id: slides-lec09-cat-char
kind: slides
title: "Μια cat με char"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 23"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 24"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, types]
difficulty: 2
diff --git a/questions/slides/slides-lec09-charcount.md b/questions/slides/slides-lec09-charcount.md
index b9df594..b603688 100644
--- a/questions/slides/slides-lec09-charcount.md
+++ b/questions/slides/slides-lec09-charcount.md
@@ -3,9 +3,9 @@ id: slides-lec09-charcount
kind: slides
title: "Μετρητής χαρακτήρων με getchar"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 20"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 21"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, loops]
difficulty: 1
diff --git a/questions/slides/slides-lec09-float-equality.md b/questions/slides/slides-lec09-float-equality.md
index 7048d37..1e4858a 100644
--- a/questions/slides/slides-lec09-float-equality.md
+++ b/questions/slides/slides-lec09-float-equality.md
@@ -3,9 +3,9 @@ id: slides-lec09-float-equality
kind: slides
title: "OK ή Not OK;"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 3"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 4"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [floating-point, operators]
difficulty: 2
diff --git a/questions/slides/slides-lec09-getinteger.md b/questions/slides/slides-lec09-getinteger.md
index 051578a..24ae83b 100644
--- a/questions/slides/slides-lec09-getinteger.md
+++ b/questions/slides/slides-lec09-getinteger.md
@@ -3,9 +3,9 @@ id: slides-lec09-getinteger
kind: slides
title: "Η συνάρτηση getinteger"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 26, 38"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 27, 40"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, functions, input-validation]
difficulty: 2
diff --git a/questions/slides/slides-lec09-letter-frequencies.md b/questions/slides/slides-lec09-letter-frequencies.md
index 5908b0c..06cef7b 100644
--- a/questions/slides/slides-lec09-letter-frequencies.md
+++ b/questions/slides/slides-lec09-letter-frequencies.md
@@ -3,9 +3,9 @@ id: slides-lec09-letter-frequencies
kind: slides
title: "Μέτρηση γραμμάτων στην είσοδο"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 39"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 41"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, arrays]
difficulty: 2
diff --git a/questions/slides/slides-lec09-scanf-no-ampersand.md b/questions/slides/slides-lec09-scanf-no-ampersand.md
index debcca6..a9a0348 100644
--- a/questions/slides/slides-lec09-scanf-no-ampersand.md
+++ b/questions/slides/slides-lec09-scanf-no-ampersand.md
@@ -3,9 +3,9 @@ id: slides-lec09-scanf-no-ampersand
kind: slides
title: "scanf χωρίς &"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 32"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 34"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, pointers]
difficulty: 2
diff --git a/questions/slides/slides-lec09-scanf-return.md b/questions/slides/slides-lec09-scanf-return.md
index 4816cd3..ab3ad0b 100644
--- a/questions/slides/slides-lec09-scanf-return.md
+++ b/questions/slides/slides-lec09-scanf-return.md
@@ -3,9 +3,9 @@ id: slides-lec09-scanf-return
kind: slides
title: "Είναι σωστό αυτό το πρόγραμμα;"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 33–35"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 35–37"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output, input-validation]
difficulty: 2
diff --git a/questions/slides/slides-lec09-scanf-square.md b/questions/slides/slides-lec09-scanf-square.md
index e60b370..911ac3e 100644
--- a/questions/slides/slides-lec09-scanf-square.md
+++ b/questions/slides/slides-lec09-scanf-square.md
@@ -3,9 +3,9 @@ id: slides-lec09-scanf-square
kind: slides
title: "Τι κάνει το πρόγραμμα με τη scanf;"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 30"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 32"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output]
difficulty: 1
diff --git a/questions/slides/slides-lec09-scanf-two.md b/questions/slides/slides-lec09-scanf-two.md
index 6b7f5c8..0748343 100644
--- a/questions/slides/slides-lec09-scanf-two.md
+++ b/questions/slides/slides-lec09-scanf-two.md
@@ -3,9 +3,9 @@ id: slides-lec09-scanf-two
kind: slides
title: "scanf με πολλά ορίσματα"
source:
- title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 36–37"
- url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec09.pdf
- years: [2025]
+ title: "Διάλεξη 9: Δεδομένα Εισόδου, διαφάνεια 38–39"
+ url: https://progintro.github.io/assets/pdf/lec09.pdf
+ years: [2025, 2026]
chapters: [9]
topics: [input-output]
difficulty: 1
diff --git a/sources/extract/lec09.yaml b/sources/extract/lec09.yaml
index 780e4da..dacb9f3 100644
--- a/sources/extract/lec09.yaml
+++ b/sources/extract/lec09.yaml
@@ -1,37 +1,43 @@
lecture: 9
-pages: 41
+year: 2026-27 # updated from the 2025-26 deck (41 pages) on 2026-10-30
+slides: https://progintro.github.io/assets/pdf/lec09.pdf
+pages: 45
outline:
- - {pages: "2-4", section: "Σύγκριση αριθμών κινητής υποδιαστολής με =="}
- - {pages: "5", section: "Ονόματα: camelCase και snake_case"}
- - {pages: "1-8", section: "Δεδομένα εισόδου και εξόδου"}
- - {pages: "9-13", section: "Οι τέσσερις πηγές εισόδου"}
- - {pages: "14-17", section: "Η συνάρτηση getchar"}
- - {pages: "18-19", section: "Buffer, Enter και Ctrl+D"}
- - {pages: "20-21", section: "Η συνάρτηση getchar"}
- - {pages: "22", section: "Η συνάρτηση putchar"}
- - {pages: "23-24", section: "Η τιμή της getchar πάει σε int, όχι σε char"}
- - {pages: "25-26", section: "Διάβασμα αριθμών χαρακτήρα-χαρακτήρα"}
- - {pages: "27-32", section: "Η συνάρτηση scanf"}
- - {pages: "33-35", section: "Η τιμή επιστροφής της scanf"}
- - {pages: "36-37", section: "Κενά και πολλές τιμές"}
- - {pages: "38", section: "Διάβασμα αριθμών χαρακτήρα-χαρακτήρα"}
- - {pages: "39", section: "Η συνάρτηση getchar"}
+ - {pages: "2-5", section: "Σύγκριση αριθμών κινητής υποδιαστολής με =="}
+ - {pages: "6", section: "Ονόματα: camelCase και snake_case"}
+ - {pages: "3", section: "Σύνοψη"} # GRCPC 2026 announcement, new in 2026-27
+ - {pages: "1-9", section: "Δεδομένα εισόδου και εξόδου"}
+ - {pages: "10-14", section: "Οι τέσσερις πηγές εισόδου"}
+ - {pages: "15-18", section: "Η συνάρτηση getchar"}
+ - {pages: "19-20", section: "Buffer, Enter και Ctrl+D"}
+ - {pages: "21-22", section: "Η συνάρτηση getchar"}
+ - {pages: "23", section: "Η συνάρτηση putchar"}
+ - {pages: "24-25", section: "Η τιμή της getchar πάει σε int, όχι σε char"}
+ - {pages: "26-27", section: "Διάβασμα αριθμών χαρακτήρα-χαρακτήρα"}
+ - {pages: "29-34", section: "Η συνάρτηση scanf"}
+ - {pages: "35-37", section: "Η τιμή επιστροφής της scanf"}
+ - {pages: "38-39", section: "Κενά και πολλές τιμές"}
+ - {pages: "40", section: "Διάβασμα αριθμών χαρακτήρα-χαρακτήρα"}
+ - {pages: "41", section: "Η συνάρτηση getchar"}
+ - {pages: "42-43", section: "Δεδομένα εισόδου και εξόδου"} # fprintf and stderr, new in 2026-27
pointers:
+ - {page: 3, text: "GRCPC 2026 scoreboard (Greece): https://grcpc.gr/public?countries%5B%5D=GRC&filter=filter"}
- {page: 2, text: "Wikipedia: Camel case (https://en.wikipedia.org/wiki/Camel_case)"}
- {page: 2, text: "Wikipedia: Snake case (https://en.wikipedia.org/wiki/Snake_case)"}
- - {page: 15, text: "man getchar"}
- - {page: 18, text: "Wikipedia: Data buffer (https://en.wikipedia.org/wiki/Data_buffer)"}
- - {page: 27, text: "man scanf"}
- - {page: 40, text: "Σημειώσεις κ. Σταματόπουλου, σελ. 28-29, 70-71, 78-79, 86-87"}
- - {page: 40, text: "getchar (https://en.cppreference.com/w/c/io/getchar)"}
- - {page: 40, text: "putchar (https://en.cppreference.com/w/c/io/putchar)"}
- - {page: 40, text: "scanf (https://cplusplus.com/reference/cstdio/scanf/)"}
- - {page: 40, text: "printf (https://cplusplus.com/reference/cstdio/printf/)"}
- - {page: 40, text: "Wikipedia: Data buffer (https://en.wikipedia.org/wiki/Data_buffer)"}
- - {page: 40, text: "Wikipedia: End of transmission (https://en.wikipedia.org/wiki/End-of-Transmission_character)"}
- - {page: 40, text: "POSIX termios, Canonical mode (https://pubs.opengroup.org/onlinepubs/7908799/xbd/termios.html#tag_008_001_006)"}
+ - {page: 16, text: "man getchar"}
+ - {page: 19, text: "Wikipedia: Data buffer (https://en.wikipedia.org/wiki/Data_buffer)"}
+ - {page: 29, text: "man scanf"}
+ - {page: 44, text: "Σημειώσεις κ. Σταματόπουλου, σελ. 28-29, 70-71, 78-79, 86-87"}
+ - {page: 44, text: "getchar (https://en.cppreference.com/w/c/io/getchar)"}
+ - {page: 44, text: "putchar (https://en.cppreference.com/w/c/io/putchar)"}
+ - {page: 44, text: "scanf (https://cplusplus.com/reference/cstdio/scanf/)"}
+ - {page: 44, text: "printf (https://cplusplus.com/reference/cstdio/printf/)"}
+ - {page: 44, text: "Wikipedia: Data buffer (https://en.wikipedia.org/wiki/Data_buffer)"}
+ - {page: 44, text: "Wikipedia: End of transmission (https://en.wikipedia.org/wiki/End-of-Transmission_character)"}
+ - {page: 44, text: "POSIX termios, Canonical mode (https://pubs.opengroup.org/onlinepubs/7908799/xbd/termios.html#tag_008_001_006)"}
takeaways_slide: null
issues:
+ - "2026-27 deck (45 pages) vs 2025-26 (41 pages). New pages: p. 3 (1st place for an NKUA team at GRCPC 2026, plus a silver and three places in the top 11, with the scoreboard link), p. 28 (a Chekhov's Gun image, «every element in a story should earn its place», between the addnums question and scanf, with no text of its own; the chapter only lists it in the reading pages), pp. 42-43 (fprintf, stdout vs stderr, `fprintf(stderr, \"Not a prime number: %d\\n\", num)`; added to §9.3 and the glossary). Page mapping: 2025-26 pp. 1-2 = 2026-27 pp. 1-2; pp. 3-26 -> 4-27; pp. 27-39 -> 29-41; pp. 40-41 -> 44-45. Other changes: p. 2 fixes the spelling «Διευκρινίσεις»; pp. 7-8 add painting captions; p. 11 (old p. 10) replaces the hw0 2025 trolley stdin screenshot with the hw0 2026 goldbach one (ending in «EOF detected, exiting»), and §9.22 now uses goldbach and mentions trolley as the 2025-26 example. The outline and pointers above use 2026-27 pages; the issues below use 2025-26 page numbers."
- "No explicit key-takeaways slide; p. 40 ('Για την επόμενη φορά') lists reading pointers only. Κύρια σημεία were built from the red callouts (p. 17 one char, p. 18-19 buffer/Ctrl+D, p. 24 int not char, p. 31 address, p. 34 check return value, p. 37 whitespace skipping, p. 29 'συμμετρική της printf')."
- "p. 40 cites notes pages 28-29, 70-71, 78-79, 86-87; these are printed page numbers and match k04-map.tsv exactly (28-29, 70-71, 78-79, 86-87); the chapter cites the section names with these pages and quotes the slides' numbers."
- "p. 3-4: the slides ask 'Υπάρχει κάποια εξήγηση;' but give no answer; the explanation (float rounding vs double constant) and the fix (fabs with tolerance, or 3.1f) are standard C, verified locally (a == 3.1 false, a == 3.1f true)."
diff --git a/sources/manifest.yaml b/sources/manifest.yaml
index 6291476..5dc3fa9 100644
--- a/sources/manifest.yaml
+++ b/sources/manifest.yaml
@@ -30,7 +30,7 @@ lectures:
- {n: 6, slug: 06-control-flow, date: 2026-10-19, part: B, slides: lec06.pdf, url: "https://progintro.github.io/assets/pdf/lec06.pdf", title: "Εντολές και Ροή Ελέγχου", notes: [03-control-flow], labs: [lab03]}
- {n: 7, slug: 07-problem-solving, date: 2026-10-23, part: B, slides: lec07.pdf, url: "https://progintro.github.io/assets/pdf/lec07.pdf", title: "Επίλυση Προβλημάτων", notes: [01-first-programs], labs: [lab03]}
- {n: 8, slug: 08-control-flow-2, date: 2026-10-26, part: B, slides: lec08.pdf, url: "https://progintro.github.io/assets/pdf/lec08.pdf", title: "Ροή Ελέγχου #2", notes: [03-control-flow], labs: [lab03]}
- - {n: 9, slug: 09-input, date: 2025-10-31, part: B, slides: lec09.pdf, title: "Δεδομένα Εισόδου", notes: [01-first-programs, 09-io], labs: [lab04]}
+ - {n: 9, slug: 09-input, date: 2026-10-30, part: B, slides: lec09.pdf, url: "https://progintro.github.io/assets/pdf/lec09.pdf", title: "Δεδομένα Εισόδου", notes: [01-first-programs, 09-io], labs: [lab04]}
- {n: 10, slug: 10-arrays, date: 2025-11-03, part: C, slides: lec10.pdf, title: "Πίνακες", notes: [05-pointers-arrays], labs: [lab06]}
- {n: 11, slug: 11-pointers-recursion, date: 2025-11-07, part: C, slides: lec11.pdf, title: "Δείκτες και Αναδρομή", notes: [04-functions, 05-pointers-arrays], labs: [lab05, lab06]}
- {n: 12, slug: 12-pointers-arrays, date: 2025-11-10, part: C, slides: lec12.pdf, title: "Δείκτες και Πίνακες", notes: [05-pointers-arrays], labs: [lab06]}