Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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; 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; 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
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ chatbot ή agent το [`llms-full.txt`](llms-full.txt) (όλος ο οδηγός

Ο οδηγός γράφτηκε από τις διαφάνειες των διαλέξεων του 2025-26
([progintro.github.io](https://progintro.github.io/)) και ενημερώνεται με τις διαφάνειες
του 2026-27 καθώς δημοσιεύονται (ως τώρα: Διαλέξεις 0–6), τις
του 2026-27 καθώς δημοσιεύονται (ως τώρα: Διαλέξεις 0–7), τις
[σημειώσεις](https://progintro.github.io/notes/) του μαθήματος, τα
[εργαστήρια](https://progintro.github.io/lab-material/) και τα θέματα εξετάσεων και τις
εργασίες προηγούμενων ετών. Οι ασκήσεις έχουν υποδείξεις αλλά όχι λύσεις.
Expand Down
43 changes: 25 additions & 18 deletions chapters/07-problem-solving/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ layout: chapter
chapter: 7
lecture: 7
title: "Επίλυση Προβλημάτων"
date: 2025-10-24
date: 2026-10-23
part: B
slides: https://github.com/progintro/progintro.github.io/releases/download/2025/lec07.pdf
slides: https://progintro.github.io/assets/pdf/lec07.pdf
prev: 06-control-flow
next: 08-control-flow-2
topics: [problem-solving, loops, good-practice, editors, git]
Expand Down Expand Up @@ -50,9 +50,15 @@ labs: [lab03, lab01, lab02]

### §7.1 Γιατί μας ενδιαφέρει η ποιότητα του λογισμικού

Η διάλεξη άνοιξε με ένα επίκαιρο γεγονός: τη διακοπή λειτουργίας της υπηρεσίας
cloud AWS της Amazon τον Οκτώβριο του 2025, που επηρέασε επιχειρήσεις σε όλο τον
κόσμο. Η βασική αιτία (root cause) ήταν ένα υποσύστημα που παρακολουθεί την υγεία
Η διάλεξη του 2026-27 άνοιξε με ένα επίκαιρο γεγονός: ένα κενό ασφαλείας στην PHP,
τη γλώσσα στην οποία τρέχει περίπου το 70% των ιστοσελίδων, που οδήγησε ιστοσελίδες
σε όλο τον κόσμο να κλείσουν. Η ερώτηση της διαφάνειας: σε ποια γλώσσα είναι γραμμένος
ο διερμηνέας της PHP; Η απάντηση είναι σε C. Ένα λάθος στον κώδικα C του διερμηνέα
αγγίζει κάθε ιστοσελίδα που τρέχει πάνω του.

Στις διαφάνειες του 2025-26 το αντίστοιχο γεγονός ήταν η διακοπή λειτουργίας της
υπηρεσίας cloud AWS της Amazon τον Οκτώβριο του 2025, που επηρέασε επιχειρήσεις σε
όλο τον κόσμο. Η βασική αιτία (root cause) ήταν ένα υποσύστημα που παρακολουθεί την υγεία
των load balancers του δικτύου τους. Ο καθηγητής Ken Birman (Cornell) σχολίασε
ότι οι προγραμματιστές πρέπει να χτίζουν λογισμικό με καλύτερη **ανοχή σε
σφάλματα** (fault tolerance), δηλαδή λογισμικό που συνεχίζει να λειτουργεί σωστά
Expand All @@ -69,8 +75,9 @@ cloud AWS της Amazon τον Οκτώβριο του 2025, που επηρέα

### §7.2 Ανακοινώσεις: ο διαγωνισμός GRCPC

Οι διαφάνειες έδειξαν τους πίνακες αποτελεσμάτων του GRCPC για το 2023, το 2024
και το 2025. Είναι ο ελληνικός περιφερειακός διαγωνισμός προγραμματισμού του ICPC
Οι διαφάνειες του 2025-26 έδειξαν τους πίνακες αποτελεσμάτων του GRCPC για το 2023,
το 2024 και το 2025 (στις διαφάνειες του 2026-27 η σελίδα των ανακοινώσεων είναι
κενή). Είναι ο ελληνικός περιφερειακός διαγωνισμός προγραμματισμού του ICPC
(ICPC Greece Regional Competition), όπου ομάδες φοιτητών λύνουν αλγοριθμικά
προβλήματα υπό πίεση χρόνου. Η κατάταξη γίνεται με βάση πόσα προβλήματα έλυσε κάθε
ομάδα και, σε ισοβαθμία, με βάση την ποινή χρόνου (penalty)· οι πίνακες δείχνουν
Expand Down Expand Up @@ -178,7 +185,7 @@ flowchart TD
τελευταία τιμή που βγάζει ο βρόχος είναι αυτές που περιμένετε.

Προσέξτε ακόμη ότι η `for` επιτρέπει πολλές αρχικοποιήσεις χωρισμένες με κόμμα:
`for (product = 1, i = 100; ...)` δίνει αρχική τιμή και στον **συσσωρευτή**
`for (product = 1, i = 101; ...)` δίνει αρχική τιμή και στον **συσσωρευτή**
(accumulator) `product` και στη μεταβλητή του βρόχου. Ένας συσσωρευτής γινομένου
ξεκινά από το 1 (το ουδέτερο στοιχείο του πολλαπλασιασμού), όπως ένας
συσσωρευτής αθροίσματος ξεκινά από το 0.
Expand Down Expand Up @@ -374,16 +381,17 @@ $ ./even | wc -l
για `mod 7 = 0`:

```c
for (product = 1, i = 100 ; i <= 999 ; i += 2) {
for (product = 1, i = 101 ; i <= 999 ; i += 2) {
if ( i % 7 == 0 )
product *= i;
}
```

Προσέξτε την αρχική τιμή: το 100 είναι *άρτιος*, και με βήμα 2 το `i` περνάει
μόνο από άρτιους (100, 102, …, 998). Όπως είναι γραμμένος, ο βρόχος υπολογίζει το
γινόμενο των άρτιων πολλαπλασίων του 7 (112, 126, …). Για τους περιττούς, η
αρχική τιμή πρέπει να είναι ο πρώτος τριψήφιος περιττός, `i = 101`.
Προσέξτε την αρχική τιμή: πρέπει να είναι ο πρώτος τριψήφιος *περιττός*, το 101,
ώστε με βήμα 2 το `i` να περνάει μόνο από περιττούς (101, 103, …, 999). Οι
διαφάνειες του 2025-26 ξεκινούσαν από `i = 100`: το 100 είναι άρτιος, οπότε εκείνος
ο βρόχος περνάει μόνο από άρτιους (100, 102, …, 998) και υπολογίζει το γινόμενο των
*άρτιων* πολλαπλασίων του 7 (112, 126, …).

**Λύση με βήμα.** Ο πρώτος τριψήφιος περιττός που διαιρείται με το 7 είναι το
$105 = 15 \cdot 7$. Τα επόμενα πολλαπλάσια του 7 εναλλάσσονται άρτιο, περιττό,
Expand All @@ -400,8 +408,7 @@ for (prod = 1, i = 105 ; i <= 999 ; i += 14) {
450. Οι διαφάνειες δεν δείχνουν τον τύπο των `product` και `prod`. Το γινόμενο
αυτών των 64 αριθμών έχει 172 δεκαδικά ψηφία, οπότε δεν χωράει σε κανέναν ακέραιο
τύπο της C (ακόμη και ένας `unsigned long long` φτάνει μέχρι περίπου
$1{,}8 \cdot 10^{19}$). Το παρακάτω πρόγραμμα τρέχει και τις δύο λύσεις (με
διορθωμένη αρχική τιμή στην πρώτη) με `double`, που κρατά ένα προσεγγιστικό
$1{,}8 \cdot 10^{19}$). Το παρακάτω πρόγραμμα τρέχει και τις δύο λύσεις με `double`, που κρατά ένα προσεγγιστικό
αποτέλεσμα:

```c
Expand Down Expand Up @@ -507,7 +514,7 @@ prod = 1.211521e+171 (64 terms)

## Διάβασμα

- **Διαφάνειες:** [Διάλεξη 7](https://github.com/progintro/progintro.github.io/releases/download/2025/lec07.pdf), σελ. 1–23. AWS και ανοχή σε σφάλματα: σελ. 2· GRCPC: σελ. 3–5· flow: σελ. 8· βρόχοι: σελ. 9–12· προθέρμανση: σελ. 13–18· θέματα ζωντανής επίλυσης: σελ. 19–20· επόμενη φορά: σελ. 22.
- **Διαφάνειες:** [Διάλεξη 7](https://progintro.github.io/assets/pdf/lec07.pdf) (2026-27), σελ. 1–21. PHP και C: σελ. 2· flow: σελ. 6· βρόχοι: σελ. 7–10· προθέρμανση: σελ. 11–16· θέματα ζωντανής επίλυσης: σελ. 17–18· επόμενη φορά: σελ. 20. Οι διαφάνειες του 2025-26 ([Διάλεξη 7 (2025)](https://github.com/progintro/progintro.github.io/releases/download/2025/lec07.pdf)) έχουν δύο σελίδες παραπάνω: στη θέση της σελ. 2 το AWS και η ανοχή σε σφάλματα, και στις σελ. 3–5 τα αποτελέσματα του GRCPC· από εκεί και πέρα οι σελίδες τους είναι κατά 2 μεγαλύτερες.
- **Σημειώσεις:** [Κεφάλαιο 12: Καλές πρακτικές, συχνά λάθη και βιβλιογραφία](https://progintro.github.io/notes/chapters/12-good-practice/), ενότητες «Ένα πρόγραμμα C πρέπει να είναι …» και «Συχνά προγραμματιστικά λάθη στην C» (K04, σελ. 178–182)· [Κεφάλαιο 1: Πρώτα προγράμματα σε C](https://progintro.github.io/notes/chapters/01-first-programs/), ενότητες «Καλημέρα κόσμε της C» (σύνταξη σχολίων) και «Πόσο είναι το $\pi$;» (πρόγραμμα με σχόλια ανά γραμμή) (K04, σελ. 19–23)· [Κεφάλαιο 3: Η ροή του ελέγχου](https://progintro.github.io/notes/chapters/03-control-flow/), ενότητες «Εντολές βρόχου `while`» και «Εντολή βρόχου `for`» (K04, σελ. 52–55).
- **Εργαστήριο:** [Εργαστήριο 3](https://progintro.github.io/lab-material/labs/lab03/): εισαγωγή για τους τρεις βρόχους, άσκηση `seq.c` (`while`, `for`, `do...while`) και το παράρτημα για τα λογικά λάθη (`limit.c`)· [Εργαστήριο 2](https://progintro.github.io/lab-material/labs/lab02/): «Βήμα 1: Το περιβάλλον προγραμματισμού Visual Studio Code»· [Εργαστήριο 1](https://progintro.github.io/lab-material/labs/lab01/): «Βήμα 6: Git και GitHub» και «Άσκηση 1: Το πρώτο σας repository (info.txt)».
- **Άλλα:**
Expand Down Expand Up @@ -591,8 +598,8 @@ prod = 1.211521e+171 (64 terms)

### Ζέσταμα: από τις διαφάνειες (Α7.1–Α7.2)

- <a id="a7-1"></a>**[Α7.1](../../questions/slides/slides-lec07-even-descending.md)** Τριψήφιοι άρτιοι σε φθίνουσα σειρά: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 14 · ★☆☆ · programming · `slides-lec07-even-descending`
- <a id="a7-2"></a>**[Α7.2](../../questions/slides/slides-lec07-odd-multiples-of-7.md)** Γινόμενο τριψήφιων περιττών πολλαπλασίων του 7: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 16 · ★★☆ · programming · `slides-lec07-odd-multiples-of-7`
- <a id="a7-1"></a>**[Α7.1](../../questions/slides/slides-lec07-even-descending.md)** Τριψήφιοι άρτιοι σε φθίνουσα σειρά: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 12 · ★☆☆ · programming · `slides-lec07-even-descending`
- <a id="a7-2"></a>**[Α7.2](../../questions/slides/slides-lec07-odd-multiples-of-7.md)** Γινόμενο τριψήφιων περιττών πολλαπλασίων του 7: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 14 · ★★☆ · programming · `slides-lec07-odd-multiples-of-7`

### Σχετικές ασκήσεις από άλλα κεφάλαια

Expand Down
4 changes: 2 additions & 2 deletions questions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -275,8 +275,8 @@

### Ζέσταμα: από τις διαφάνειες (Α7.1–Α7.2)

- **[Α7.1](../questions/slides/slides-lec07-even-descending.md)** Τριψήφιοι άρτιοι σε φθίνουσα σειρά: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 14 · ★☆☆ · programming · `slides-lec07-even-descending`
- **[Α7.2](../questions/slides/slides-lec07-odd-multiples-of-7.md)** Γινόμενο τριψήφιων περιττών πολλαπλασίων του 7: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 16 · ★★☆ · programming · `slides-lec07-odd-multiples-of-7`
- **[Α7.1](../questions/slides/slides-lec07-even-descending.md)** Τριψήφιοι άρτιοι σε φθίνουσα σειρά: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 12 · ★☆☆ · programming · `slides-lec07-even-descending`
- **[Α7.2](../questions/slides/slides-lec07-odd-multiples-of-7.md)** Γινόμενο τριψήφιων περιττών πολλαπλασίων του 7: Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 14 · ★★☆ · programming · `slides-lec07-odd-multiples-of-7`

## [Κεφάλαιο 8: Ροή Ελέγχου #2](../chapters/08-control-flow-2/)

Expand Down
6 changes: 3 additions & 3 deletions questions/slides/slides-lec07-even-descending.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ id: slides-lec07-even-descending
kind: slides
title: "Τριψήφιοι άρτιοι σε φθίνουσα σειρά"
source:
title: "Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 14"
url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec07.pdf
years: [2025]
title: "Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 12"
url: https://progintro.github.io/assets/pdf/lec07.pdf
years: [2025, 2026]
chapters: [7]
topics: [loops, problem-solving]
difficulty: 1
Expand Down
6 changes: 3 additions & 3 deletions questions/slides/slides-lec07-odd-multiples-of-7.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ id: slides-lec07-odd-multiples-of-7
kind: slides
title: "Γινόμενο τριψήφιων περιττών πολλαπλασίων του 7"
source:
title: "Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 16"
url: https://github.com/progintro/progintro.github.io/releases/download/2025/lec07.pdf
years: [2025]
title: "Διάλεξη 7: Επίλυση Προβλημάτων, διαφάνεια 14"
url: https://progintro.github.io/assets/pdf/lec07.pdf
years: [2025, 2026]
chapters: [7]
topics: [loops, problem-solving, operators]
difficulty: 2
Expand Down
Loading
Loading