ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΕ
ΣΕΧΝΙΚΕ
ΚΩΣΑ ΚΟΝΣΟΓΙΑΝΝΗ
ΓΙΑΝΝΗ ΜΑΪΣΡΟ
ΑΝΓΡΔΑ ΣΑΦΤΛΟΠΑΣΗ
ΣΜΗΜΑ ΗΛΔΚΣΡΟΛΟΓΩΝ ΜΗΥΑΝΙΚΩΝ
ΚΑΙ ΜΗΥΑΝΙΚΩΝ ΤΠΟΛΟΓΙΣΩΝ
Δ.Μ.Π.
1
ΚΑΛΧ ΗΡΘΑΣΔ !
• Καιώο ήξζαηε ζην Μάζεκα «Πξνγξακκαηηζηηθέο
Σερληθέο».
• Απηό ην Μάζεκα νπζηαζηηθά εηζάγεη έλλνηεο ζρεηηθέο κε
ηελ ζρεδίαζε θαη ηελ πινπνίεζε ινγηζκηθνύ κε ηε ρξήζε
ηεο γιώζζαο πξνγξακκαηηζκνύ C θαη βαζηθώλ δνκώλ
δεδνκέλσλ.
• αο επρόκαζηε νιόςπρα θαιό θαη αθαδεκατθά
απνδνηηθό εμάκελν.
2
ΑΝΣΙΚΔΙΜΔΝΟ ΣΟΤ ΜΑΘΗΜΑΣΟ (1)
• Καιύηεξε γλώζε θαη ρξήζε ηεο γιώζζαο C
• Δηζαγσγή ζην Γνκεκέλν Πξνγξακκαηηζκό
– Έλλνηεο πνπ ρξεζηκνπνηνύληαη γηα ηε ζρεδίαζε
αιγόξηζκσλ θαη πξνγξακκάησλ
– Βαζηθέο δομές (θαηαζθεπέο) γηα ηελ πινπνίεζε
πξνγξακκάησλ
– Απόθηεζε εκπεηξίαο ζην πξνγξακκαηηζκό απιώλ
εθαξκνγώλ
3
ΑΝΣΙΚΔΙΜΔΝΟ ΣΟΤ ΜΑΘΗΜΑΣΟ (2)
Δβδνκάδα 1 Υαξαθηεξηζηηθά ηεο C, Σειεζηέο, Έιεγρνο Ρνήο
Δβδνκάδα 2 Γνκή Πξνγξάκκαηνο, ΑΣΓ, Μνλνδηάζηαηνη Πίλαθεο Παξαδείγκαηα
Δβδνκάδα 3 Δηζαγσγή ζηε Πνιππινθόηεηα Πξνγξακκάησλ
Δβδνκάδα 4 Πνιπδηάζηαηνη Πίλαθεο, Γνκέο, Δλώζεηο
Δβδνκάδα 5 Γείθηεο, Πίλαθεο θαη Γείθηεο, Γείθηεο ζε πλαξηήζεηο
Δβδνκάδα 6 ηνίβεο, πλδεδεκέλεο Λίζηεο, Οπξέο
Δβδνκάδα 7 Γηπιά πλδεδεκέλεο Λίζηεο, Κπθιηθέο Λίζηεο, Σαμηλνκεκέλεο Λίζηεο
Δβδνκάδα 8 Γέλδξα, Γπαδηθά Γέλδξα, Γηάζρηζε Γπαδηθώλ Γέλδξσλ
Δβδνκάδα 9 Γπαδηθά Γέλδξα Αλαδήηεζεο, Γέλδξα AVL
Δβδνκάδα 10 Πίλαθεο θαηαθεξκαηηζκνύ
Δβδνκάδα 11 Αιγόξηζκνη Σαμηλόκεζεο
Δβδνκάδα 12 Γξάθνη
Δβδνκάδα 13 Δπαλάιεςε
4
ΣΟΙΥΔΙΑ ΓΙΑ ΣΟ ΜΑΘΗΜΑ (1)
• Σο πρόγραμμα:
– Γηαιέμεηο (ηo Α4 – Γεληθέο Έδξεο)
• Σρίηη 15:00 – 18:00 (CVETKOVIC, I. - ΜΑΟΤΡΗ, Η)
• Παραζκεσή 12:45 – 16:00 (ΜΑΟΤΡΟ, Γ.. - ΦΤΛΛΑ, Ι. )
– Δξγαζηήξηα (ην PC Lab – Αίζνπζεο 1, 2, θαη 3)
• Σρίηη 12:45 – 14:30 (CVETKOVIC, I. - ΚΔΝΣΡΧΣΗ, Κ.)
• Πέμπηη 10:45 – 12:30 (ΚΙΝΑΛΗ, - ΠΑΠΑΠΟΣΟΛΟΤ, Α.)
• Παραζκεσή 08:45 – 10:30 (ΠΑΠΑΣΑΘΗ, Ι.Α. - ΦΤΛΛΑ, Ι.
5
ΣΟΙΥΔΙΑ ΓΙΑ ΣΟ ΜΑΘΗΜΑ (2)
• Βοηθοί
– Θα αλαθνηλσζνύλ
6
ΣΟΙΥΔΙΑ ΓΙΑ ΣΟ ΜΑΘΗΜΑ (3)
• Βιβλία
– [1] B. Kernighan and D. Ritchie, "Η Γιώζζα Πξνγξακκαηηζκνύ C", ζε
Διιεληθή Μεηάθξαζε, Δθδόζεηο Κιεηδάξηζκνο, 1990
– [2] Ν. Μηζπξιήο, "Γνκέο Γεδνκέλσλ", Ιδησηηθή Έθδνζε
– ρεηηθά κε ηε δηαλνκή ησλ ζπγγξακκάησλ ζα αθνινπζήζεη αλαθνίλσζε από
ηε δηνίθεζε ηεο ρνιήο θαη ηνπο δηδάζθνληεο.
• ημειώζεις και άλλο σλικό γιά ηο μάθημα
– εκεηώζεηο ζα παξνπζηάδνληαη ζηαδηαθά ζηελ Ιζηνζειίδα ηνπ
καζήκαηνο http://courses.softlab.ntua.gr/progtech
– Αζθήζεηο, Φξνληηζηεξηαθό πιηθό, θαη Αλαθνηλώζεηο ζα
παξνπζηάδνληαη επίζεο ζηελ παξαπάλσ ηζηνζειίδα
• Λογαριαζμοί για ηο σπολογιζηικό ζύζηημα (γηα όζνπο δελ
έρνπλ)
– Από ην Τπνινγηζηηθό Κέληξν κε ηελ ηαπηόηεηά ζαο θαη ηνλ αξηζκό
Μεηξώνπ ηνπ ΗΜΜΤ. Λεπηνκέξεηεο ζα αλαθνηλσζνύλ θαη ζηελ
ηζηνζειίδα ηνπ καζήκαηνο
7
ΣΟΙΥΔΙΑ ΓΙΑ ΣΟ ΜΑΘΗΜΑ (4)
• Η βαζκνινγία ζα ππνινγίδεηαη σο εμήο:
– Σειηθό δηαγώληζκα (80%)
– Δμέηαζε ζηηο εξγαζηεξηαθέο αζθήζεηο (30%)
• εηξά Αζθήζεσλ Α & Β: Πξνπαξαζθεπαζηηθέο ρσξίο εμέηαζε
• εηξά Αζθήζεσλ Γ (15%)
• εηξά Αζθήζεσλ Γ (15%)
– Όζνη δελ εμεηαζζνύλ ζε αζθήζεηο ζα έρνπλ ηειηθό δηαγώληζκα 80%.
– Όζνη θνηηεηέο επηιέμνπλ λα εμεηαζηνύλ ζηηο αζθήζεηο έρνπλ ζπληειεζηή
αζθήζεσλ 30% θαη ζπληειεζηή γηα ηειηθό δηαγώληζκα 80%.
8
ΔΠΙΚΟΙΝΧΝΙΑ
Κώζηαο Κνληνγηάλλεο
kkontog@softlab.ntua.gr
Γηάλλεο Μαΐζηξνο
maistros@cs.ntua.gr
Αλδξέαο-Γεώξγηνο ηαθπινπάηεο
andreas@cs.ntua.gr
Αο Αξρίζνπκε ινηπόλ......
9
Μάζεκα 10
Υαξαθηεξηζηηθά ηεο C, Σειεζηέο,
Έιεγρνο Ρνήο
10
Η ηζηνξία ηεο C
1969-1973 AT&T Bell Labs, Dennis Ritchie
1978 ―The C Programming Language‖
K&R: Kernighan & Ritchie
1983 ύζηαζε ANSI Standardization
Committee X3J11
1989-1990 Απνδνρή ANSI/ISO Standard
ANSI C
1990-1999 Αλαζεώξεζε ηνπ standard ππό
εμέιημε — C9X
C99
11
Υαξαθηεξηζηηθά ηεο C (i)
• Γιώζζα πξνζηαθηηθνύ πξνγξακκαηηζκνύ
• Γιώζζα κεηξίνπ επηπέδνπ
• Οηθνλνκία ζηελ έθθξαζε
(ιηηή θαη πεξηεθηηθή)
• ρεηηθά ραιαξό ζύζηεκα ηύπσλ
• Φηινζνθία: ν πξνγξακκαηηζηήο έρεη πιήξε
έιεγρν θαη επζύλεηαη γηα ηα ζθάικαηά ηνπ
12
Υαξαθηεξηζηηθά ηεο C (ii)
• Ιδηαίηεξα δεκνθηιήο ζηελ πξάμε
• Έρεη ρξεζηκνπνηεζεί γηα ηνλ
πξνγξακκαηηζκό επξέσο θάζκαηνο
ζπζηεκάησλ θαη εθαξκνγώλ
• Έρεη ρξεζηκνπνηεζεί σο βάζε γηα
πιεζώξα άιισλ γισζζώλ: C++, Java
13
ρεκαηηθή Παξνπζίαζε ηεο
Γηαδηθαζίαο Πξνγξακκαηηζκνύ
Γλώζε ηεο πεξηνρήο Υξήζε ηερληθώλ επίιπζεο
Σνπ Πξνβιήκαηνο/ πξνβιεκάησλ π.ρ. Top-down,
Domain Knowledge Bottom-up
Πξνγξακ- Αιγόξηζκνο
Πξνγξακ- Πεγαίν
καηηζηήο/ Αλάιπζε Δπίιπζεο
καηηζκόο Πξόγξακκα
Αλαιπηήο Πξνβιήκαηνο
Οξηζκόο ηνπ
Αλγόριθμος/ Πεγαίν πξόγξακκα (Source
Πξνβιήκαηνο/
Algorithm Code) ζε θάπνηα Γιώζζα
Problem Definition 14
Πξνγξακκαηηζκνύ π.ρ. C
ΚΤΚΛΟ ΜΔΣΑΦΡΑΔΧΝ
Μεηάθξαζε/
Compilation
Πξόγξακκα ζε
Πεγαίν Πξόγξακκα
πκβνιηθή Γιώζζα
Βειηηζηνπνίεζε/
Optimization
Δλνπνίεζε/
Δλνπνηεκέλε Linking Βειηηζηνπνηεκέλε
πκβνιηθή Γιώζζα πκβνιηθή Γιώζζα
πκβνινκεηάθξαζε/
Assembler
Γιώζζα Μεραλήο Η/Τ
Φόξησζε/
Loading
15
ΣΙ ΔΙΝΑΙ ΟΜΧ ΔΝΑ ΑΛΓΟΡΙΘΜΟ;
• Αιγόξηζκνο (Algorithm) είλαη κία αθνινπζία νδεγηώλ (εληνιώλ) νη
νπνίεο επηιύνπλ έλα ζπγθεθξηκέλν πξόβιεκα
• Μπνξνύκε λα έρνπκε πνιινύο δηαθνξεηηθνύο αιγόξηζκνπο γηα ηελ
επίιπζε ελόο πξνβιήκαηνο
• Η επηινγή ηνπ πην θαηάιιεινπ αιγόξηζκνπ κπνξεί λα γίλεη κε βάζε
ηελ πνιππινθόηεηα ηνπ (time complexity), ηελ ρξήζε ηεο κλήκεο
πνπ απαηηεί (space complexity), ηήλ δπλαηόηεηα παξακεηξνπνίεζήο
ηνπ (parameterization), ηελ αμηνπηζηία ηνπ (reliability), ηελ
δπλαηόηεηα ζπλέρηζεο ηεο ιεηηνπξγίαο ηνπ ζε αθξαίεο ζπλζήθεο
(robustness) θιπ.
• Έλαο αιγόξηζκνο έρεη έλα ή πεξηζζόηεξα ζεκεία εηζόδνπ (πξώηε
εληνιή λα εθηειεζζεί ζηελ αθνινπζία – ζπλήζσο όκσο έρεη έλα
ζεκείν εηζόδνπ), θαη εκπεξηέρεη θάπνηεο ζπλζήθεο πνπ εγγπνύληαη
ηελ ιήμε ηεο ιεηηνπξγίαο ηνπ (ηειεπηαία εληνιή)
16
ΑΛΓΟΡΙΘΜΟΙ ΚΑΙ ΤΛΟΠΟΙΗΗ
ΠΡΟΓΡΑΜΜΑΣΟ
• Έρνπκε κηιήζεη γηα ηηο δύν βαζηθέο κεζόδνπο αλάιπζεο
ελόο πξνβιήκαηνο (top-down θαη bottom-up). Όκσο πώο
απηέο ζπζρεηίδνληαη κε ηελ ζρεδίαζε πξνγξακκάησλ;
• Η αλαιπηηθή κέζνδνο (top down) ζρεηίδεηαη κε ηελ κέζνδν
ζρεδίαζεο «δηαίξεη θαη βαζίιεπε» (divide and conquer),
όπνπ γηα λα ζρεδηάζνπκε έλα πξόγξακκα ην δηαηξνύκε ζε
απινύζηεξα πξνγξάκκαηα
• Η ζπλζεηηθή κέζνδνο (bottom up) ζρεηίδεηαη κε ηελ κέζνδν
ζρεδίαζεο «ζηαδηαθή εμέιημε» (successive refinement),
όπνπ αξρίδνπκε κε έλα απιό πξόγξακκα θαη ζηαδηαθά ηνπ
πξνζζέηνπκε πεξηζζόηεξεο ιεπηνκέξεηεο κέρξη πνπ όιεο
νη πεξηπηώζεηο πνπ πξέπεη λα ιπζνύλ έρνπλ ιπζεί
17
ΦΔΤΓΟ-ΚΧΓΙΚΑ
(pseudocode)
• Όηαλ είκαζηε έηνηκνη λα παξνπζηάζνπκε έλα αιγόξηζκν
(πξόγξακκα) κπνξνύκε λα ρξεζηκνπνηήζνπκε ςεπδνθώδηθα αληί
κηα γιώζζα πξνγξακκαηηζκνύ
• Απηό καο δίλεη ην πιενλέθηεκα όηη ε ζρεδίαζε ηνπ αιγόξηζκνπ δελ
επεξεάδεηαη από ηελ γιώζζα πνπ ζα ρξεζηκνπνηεζεί νπόηε
δηαρσξίδνληαη νη θάζεηο ζρεδίαζεο πξνγξάκκαηνο (design) από ηελ
πινπνίεζε ηνπ πξνγξάκκαηνο (implementation)
• Ο ςεπδνθώδηθαο είλαη έλα καζεκαηηθό κνληέιν ηνπ αιγόξηζκνπ,
εθθξαδόκελν ζε κηα κνξθή πνπ ζπκίδεη (αιιά δελ είλαη) γιώζζα
πξνγξακκαηηζκνύ
• Η ηδέα είλαη όηη από ηνλ ςεπδνθώδηθα είλαη απιή ε δηαδηθαζία ηεο
πινπνίεζεο (αλαινγία κεηαμύ Αξρηηέθηνλα πνπ ζρεδηάδεη θαη
Δξγνιάβνπ πνπ αθνινπζεί πηζηά ην ζρέδην γηα ηελ αλέγεξζε κηαο
νηθνδνκήο)
18
ΠΑΡΑΓΔΙΓΜΑ ΦΔΤΓΟΚΧΓΙΚΑ
• Μία πηζαλή κνξθή ςεπδνθώδηθα είλαη:
let name1, name2 (νξηζκόο κεηαβιεηώλ)
get name1, name2 (δηάβαζε ηηο κεηαβιεηέο name1, name2
από θάπνηα κνλάδα εηζόδνπ)
record name1, name2 (απνζήθεπζε ηηο ηξέρνπζεο ηηκέο ησλ κεηαβιεηώλ name1,
name2 ζε θάπνηα εμσηεξηθή κνλάδα – π.ρ. Γίζθν)
name1 έκθραζη (απνζήθεπζε ηελ ηηκή ηεο έκυρασης
ζηε κεηαβιεηή name1
if expression then
A
else
B
endif
19
ΠΡΟΓΡΑΜΜΑΣΙΜΟ
• Πξνγξακκαηηζκόο δελ είλαη κόλν ε πινπνίεζε ελόο αιγόξηζκνπ ζε
κία θαηάιιειε γηα ην πξόβιεκα γιώζζα (C, C++, Java, Pascal,
Fortran, Cobol θιπ.)
• Ο Πξνγξακκαηηζκόο εκπεξηέρεη:
1. Σελ αλάιπζε ησλ απαηηήζεσλ ηνπ πξνβιήκαηνο
α. Λεηηνπξγηθέο απαηηήζεηο (functional requirements analysis)
β. Με-ιεηηνπξγηθέο απαηηήζεηο (non-functional requirements
analysis)
..................Επιλσση Προβλήματος .............
2. Ση ζτεδίαζη ηού προγράμμαηος (ζεσξνύκε όηη ήδε έρνπκε
θάλεη ηελ επηινγή – ζρεδίαζε ηνπ θαηάιιεινπ αιγόξηζκνπ
όπσο είπακε ζηε δηαθάλεηα ζρεηηθά κε ηελ επίιπζε ελόο
πξνβιήκαηνο (design specifications)
3. Σην σλοποίηζη ηοσ προγράμμαηος ζε κία θαηάιιειε
γιώζζα γηα ην πξόβιεκα (implementation)
4. Σον έλεγτο ηοσ προγράμμαηος ώζηε λα πηζηνπνηεζεί ε νξζή
ιεηηνπξγία ηνπ ζε ζρέζε κε ηηο ιεηηνπξγηθέο θαη κε-
ιεηηνπξγηθέο απαηηήζεηο (testing)
5. Ση ζσνηήρηζη ηοσ γηα ηελ δηόξζσζε ιαζώλ, πξνζζήθε λέσλ
ιεηηνπξγηώλ, θαη ηελ πξνζαξκνγή ηνπ ζε άιια ζπζηήκαηα 20
(maintenance)
ΠΡΟΓΡΑΜΜΑΣΑ ΚΑΙ ΒΙΒΛΙΟΘΗΚΔ
• Μία ηππηθή εθαξκνγή απνηειείηαη:
– Από ην πεγαίν θώδηθα πνπ θαηά ην πιείζηνλ (ή θαζ’ νινθιεξία)
πινπνηεί έλα αιγόξηζκό ηεο ιύζεο ηνπ πξνβιήκαηνο
– Από θώδηθα πνπ ππνζηεξίδεη γεληθέο ιεηηνπξγίεο πνπ ίζσο
ρξεηάδεηαη ν πεγαίνο θώδηθαο (π.ρ. Δθηύπσζε, ηξηγσλνκεηξηθέο
ζπλαξηήζεηο θιπ.)
– Απηόο ν θώδηθαο ππνζηήξημεο νλνκάδεηαη βηβιηνζήθε (library)
– Οη βηβιηνζήθεο πνπ ρξεηάδνληαη θαη ν πεγαίνο θώδηθαο
κεηαθξάδνληαη (compiled) θαη ελνπνηνύληαη (linked) ζε έλα
ζπκβνιηθό πξόγξακκα, ην νπνίν κε ηε ζεηξά ηνπ
ζπκβνινκεηαθξάδεηαη ζε γιώζζα κεραλήο
– Τπάξρνπλ επηπρώο πνιιέο βηβιηνζήθεο γηα δηάθνξεο
ιεηηνπξγίεο, νπόηε δελ ρξεηάδεηαη λα πινπνηήζνπκε θώδηθα γη’
απηέο ηηο ιεηηνπξγίεο. Όπνηε ηηο ρξεηαδόκαζηε, απιά ηηο
εηζάγνπκε (include) ζην πεγαίν θώδηθά καο. 21
ΥΗΜΑΣΙΚΗ ΠΑΡΟΤΙΑΗ
LIB 1 LIB 2 LIB 3
Include
Μεηάθξαζε &
ΠΗΓΑΙΟ ΚΧΓΙΚΑ πκβνινκεηαθξαζε ΓΛΧΑ ΜΗΥΑΝΗ
ΔΦΑΡΜΟΓΗ
22
Γνκή ηνπ πξνγξάκκαηνο
• Σν πξόγξακκα απνηειείηαη από:
– Σε ζπλάξηεζε main
– Πηζαλόλ από κηα ή πεξηζζόηεξεο άιιεο ζπλαξηήζεηο
– Μηα ή πεξηζζόηεξεο θαζνιηθέο (γεληθέο) κεηαβιεηέο
• Γηαθνξέο από ηελ Pascal:
– θύξην πξόγξακκα, δηαδηθαζίεο θαη ζπλαξηήζεηο δε
δηαθνξνπνηνύληαη
– ην θύξην πξόγξακκα νλνκάδεηαη main
– νη δηαδηθαζίεο έρνπλ απνηέιεζκα void
– όιεο νη ζπλαξηήζεηο ζην ίδην επίπεδν
– δελ επηηξέπνληαη θσιηαζκέλεο ζπλαξηήζεηο
– κόλν πέξαζκα παξακέηξσλ αηά ηηκή (call by value)
– Σν πέξαζκα θαηά αλαθνξά επηηπγράλεηαη κε ηε ρξήζε δεηθηώλ
23
ΠΑΡΑΓΔΙΓΜΑ
• Έλα απιό πξόγξακκα ηεο C:
Δληνιή εηζαγσγήο βηβιηνζήθεο γηα
Δληνιή ρξήζε ζπλαξηήζεσλ είζνδνπ/έμνδνπ
Πξν-επεμεξγαζίαο
Βηβιηνζήθε
#include
void main() Η αξρηθή ζπλάξηεζε main
{
Σύπνο
Δπηζηξνθήο
printf(―Hello World.\n‖);
ηεο main }
Η ζπλάξηεζε βηβιηνζήθεο printf πνπ
έρεη νξηζζεί ζηε βηβιηνζήθε stdio θαη
επηηξέπεη ηελ εθηύπσζε ζηελ νζόλε
24
(standard output)
AKOMH ENA ΠΑΡΑΓΔΙΓΜΑ
• Κη’άιιν έλα απιό πξόγξακκα ηεο C κε
επηζηξνθή ηηκήο από ηε ζπλάξηεζε main:
#include
int main()
{
printf(―Hello World.\n‖);
return(1);
}
25
ΜΔΣΑΦΡΑΗ ΚΑΙ ΔΝΟΠΟΙΗΗ
ΜΔ ΣΗ ΠΑΡΟΤΙΑ ΒΙΒΛΙΟΘΗΚΗ
• Γηα λα κεηαθξάζνπκε πεγαίν θώδηθα ηεο C ζε Γιώζζα Μεραλήο
ππό ηε παξνπζία βηβιηνζεθώλ ν compiler εθηειεί ηα παξαθάησ
βήκαηα.
1. Πξν-επεμεξγαζία: Σν πεγαίν πξόγξακκα πξώηα πεγαίλεη ζε κία
εθαξκνγή (πνπ έξρεηαη κε ηνλ compiler) θαη νλνκάδεηαη πξν-
επεμεξγαζηήο (pre-processor). Ο πξν-επεμεξγαζηήο είλαη θάηη ζαλ
επεμεξγαζηήο θεηκέλνπ (πξνζζέηεη,αθαηξεί, θαη κεηαβάιεη ην
«θείκελν» ηνπ πεγαίνπ πξνγξάκκαηνο (source code). Όιεο νη εληνιέο
πνπ είλαη λα εθηειεζζνύλ απν ηνλ πξν-επεμεξγαζηή μεθηλνύλ κε ην
ζύκβνιν #. πγθεθξηκέλα ε #include παίξλεη ην πεγάην
θώδηθα ηεο stdio.h θαη ηνλ εηζάγεη ζηε ζέζε ηεο εληνιήο
#include . Οπζηαζηηθά κεηά ηελ πξνεπεμεξγαζία δέλ
ππάξρνπλ πιένλ εληνιέο πνπ μεθηλνύλ κε #.
2. Μεηάθξαζε θαη πκβνινκεηάθξαζε. Tα βήκαηα απηά παξάγνπλ
αληηθεηκεληθό θώδηθα – object code (ζρεδόλ γιώζζα κεραλήο)
3. Δλλνπνίεζε (linking). Σν βήκα απηό ελλνπνηεί αληηθεηκεληθό θώδηθα
(πηζαλόλ απν δηαθνξεηηθά αξρεία πεγαίνπ θώδηθα) ζε έλα εθηειέζηκν 26
αξρείν (π.ρ. .exe) ζε θαζαξή γιώζζα κεραλήο.
ΓΔΝΙΚΗ ΜΟΡΦΗ ΑΠΛΟΤ
ΠΡΟΓΡΑΜΜΑΣΟ C
directives #include
main() void main()
{ {
printf(―Hello World.\n‖);
statements }
}
27
DIRECTIVES
• Δίλαη εληνιέο γηα ηνλ πξν-επεμεξγαζηή
• Υξεζηκνπνηνύληαη ζπλήζσο γηα ηηο παξαθάησ πεξηπηώζεηο:
– Να εηζάγνπλ βηβιηνζήθεο π.ρ.
• #include
• #include ―myBestLibrary.h‖
– Να νξίζνπλ ζηαζεξέο π.ρ.
• #define FREEZING_POINT_CELCIUS 0.0
• #define FREEZING_POINT_FARHENEIT 32.0
• #
– Να εηζάγνπλ πεγαίν θώδηθα αλάινγα κε ζπγθεθξηκέλεο ζπλζήθεο πνπ
ππνινγίδνληαη από ηνλ πξν-επεμεξγαζηή π.ρ.
• #define DEBUG1
…………………….
…………………….
#if DEBUG
printf(―To print the values of %d\n‖, i)
#endif
28
ΤΝΑΡΣΗΔΙ
• Οη ζπλαξηήζεηο είλαη ζαλ ηηο ξνπηίλεο/ππν-ξνπηίλεο (routines, subroutines, procedures)
ζε άιιεο γιώζζεο πξνγξακκαηηζκνύ.
• Οπζηαζηηθά είλαη ηα δνκηθά πιηθά ελόο πξνγξάκκαηνο. Οη ζπλαξηήζεηο πξέπεη ην θαηά
ην δπλαηόλ λα παξάγνπλ όζν ην δπλαηόλ πην ζπγθεθξηκέλε ιεηηνπξγηα (high cohesion)
θαί λα εμαξηώληαη όζν ην δπλαηόλ ιηγόηεξν ε κία από ηελ άιιε (low coupling).
• Τπάξρνπλ δύν κεγάιεο θαηεγνξίεο ζπλαξηήζεσλ:
– πλαξηήζεηο βηβιηνζήθεο – library functions (είλαη θνκκάηη ηεο βηβιηνζήθεο)
– πλαξηήζεηο εθαξκνγώλ – application functions (νξίδνληαη από ηνλ πξνγξακκαηηζηή)
• Οη ζπλαξηήζεηο ηεο C απνηεινύληαη από εληνιέο
• Μία ζπλάξηεζε κπνξεί λα ππνινγίδεη έλα απνηέιεζκα θαί λα ην επηζηξέθεη ζην ζεκείν
ηεο θιήζεο (αιιά απηό δελ είλαη πάληα απαξαίηεην) π.ρ.
void main() { int addOne(int j)
int i = 0;
Σν θύξην ………
{ Οξηζκόο ηεο
j = j+1;
πξόγξακκα ……… return (j);
ζπλάξηεζεο
i = addOne(i) }
………;
} 29
Η ΤΝΑΡΣΗΗ main
• Η ζπλάξηεζε main είλαη κία εηδηθή ζπλάξηεζε
πνπ πξέπεη λα έρεη νξηζζεί ζε θάζε C
πξόγξακκα
• Η ζπλάξηεζε main είλαη ε πξώηε ζπλάξηεζε
πνπ θαιείηαη ζε έλα C πξόγξακκα. Η θιήζε
γίλεηαη απηόκαηα από ην ιεηηνπξγηθό ζύζηεκα
όηαλ ην πξόγξακκα αξρίδεη λα «ηξέρεη».
• Η ζπλάξηεζε main κπνξεί λα επηζηξέθεη, ή λα
κελ επηζηξέθεη θάπνην απνηέιεζκα
30
ΔΝΣΟΛΔ
• Οη εληνιέο νξίδνπλ ζπγθεθξηκέλεο ιεηηνπξγίεο ηηο νπνίεο
εθηειεί έλα πξόγξακκα ζαλ κέξνο ηνπ αιγόξηζκνπ πνπ
πινπνηεί
• Τπάξρνπλ πνιιά είδε εληνιώλ όπσο νη:
– Αλάζεζε (assignment statement)
– Δληνιέο ζπλζήθεο (conditional statements)
– Δληνιέο βξόγρνπ - επαλάιεςεο (iterative statements)
– Δληνιέο έθθξαζεο (expression statements)
• Οη εληνιέο ηειεηώλνπλ πάληα κε ππνδηαζηνιή (;) –
semicolon – ελώ ηα directives έρνπλ πάληα κήθνο κία
γξακκή
31
ΥΟΛΙΑ
• Έλα θαιό πξόγξακκα δελ είλαη κόλν ζπληαθηηθά ζσζηό, γξήγνξν, θαί ζπκβαηό κε ηηο
απαηηήζεηο ηνπ ρξήζηε, αιιά θαη ηεθκεξησκέλν κε ζρόιηα
• Σα ζρόιηα δελ κεηαθξάδνληαη από ηνλ compiler ν νπνίνο ηα ζεσξεί ζαλ θελνύο
ραξαθηήξεο
• Σα ζρόιηα ζηε C νξίδνληαη αλάκεζα ζηά ζύκβνια /* θαί */ π.ρ.
/* this is a comment in C */
• Βαζηθή αξρή είλαη λα έρνπκε έλα εππαξνπζίαζην θαί εύθνιν λα δηαβαζηεί πξόγξακκα
(δηεπθνιύλεη ηε ζπληήξεζή ηνπ) π.ρ.
/**********************************************************
* Name: main.c *
* Author: John Smith *
* Purpose: Translate Celcius degrees to Farheneit *
* Date/Version: 12/12/02 v1.1 *
************************************************************/
• Σν παξαθάησ είλαη ιάζνο
32
/* Nested /* comments */ are wrong! */
ΣΤΠΟΙ ΓΔΓΟΜΔΝΧΝ (απινί)
• Αθέξαηνη αξηζκνί
int char
• Καζνξηζκόο πξνζήκαλζεο
signed unsigned
• Καζνξηζκόο κεγέζνπο
short long
• Αξηζκνί θηλεηήο ππνδηαζηνιήο
float double
33
ΠΙΝΑΚΑ ΑΠΛΧΝ ΣΤΠΧΝ
ΓΔΓΟΜΔΝΧΝ
char , signed char , unsigned char
signed short int , unsigned short int
signed int , unsigned int
signed long int , unsigned long int
float
double
long double
•Με θόθθηλν ρξώκα όζα κπνξνύλ λα παξαιεηθζνύλ.
34
ΜΔΣΑΣΡΟΠΗ ΣΤΠΧΝ ΚΑΣΑ ΣΗΝ
ΑΝΑΘΔΗ
• Οη κεηαηξνπέο ηύπσλ ζπκβαίλνπλ θαη κε ηνλ ηειεζηή αλάζεζεο π.ρ.
Α=Β
• Η έθθξαζε ζηα δεμηά ηνπ ηειεζηή (=) πξνβηβάδεηαη ζηνλ ηύπν ηεο
κεηαβιεηήο ζηα αξηζηεξά ηνπ ηειεζηή αλάζεζεο
• Απηό όκσο κπνξεί λα πξνθαιέζεη πξνβιήκαηα όπσο αλαθέξζεθε
πξνεγνπκέλσο αλ ε κεηαβιεηή είλαη «ρακειόηεξνπ» ηύπνπ.
• Παξάδεηγκα.
Δάλ d είλαη double, θαη i είλαη int ηόηε ε αλάζεζε d = i; Θα
πξνθαιέζεη ηελ κεηαηξνπή ηεο αθέξαηαο κεηαβιεηήο i ζε ηύπν
double ώζηε ε αλάζεζε λα επηηεπρζεί. Όκσο ε αλάζεζε i = d ζα
πξνθαιέζεη ηνλ ππνβηβαζκό ηεο double κεηαβιεηήο d ζε ηύπν int
νπόηε ην δεθαδηθό κέξνο ηεο d ζα ραζεί.
35
ΦΑΛΜΑΣΑ ΤΠΟΛΟΓΙΜΧΝ Δ
ΔΚΦΡΑΔΙ
• θάικαηα ζηνλ ππνινγηζκό αξηζκεηηθώλ εθθξάζεσλ κπνξνύλ λα
παξνπζηαζζνύλ ιόγσ
– Υξήζεο πεξηνξηζκέλνπ αξηζκνύ ςεθίσλ
– Υξήζεο ηερληθώλ πξνζέγγηζεο ηεο ηηκήο κίαο ζπλάξηεζεο ή έθθξαζεο
αληί ηνπ άκεζνπ ππνινγηζκνύ ηεο ηηκήο ηεο
Παξάδεηγκα
Η πξόζζεζε ησλ αξηζκώλ 563.8, 631.9, θαη 321.6 όηαλ είκαζηε
πεξηνξηζκέλνη ζε ηέζζεξα ςεθία έρεη ζαλ απνηέιεζκα 1518, θαη
απνηέιεζκα 1517! όηαλ πξνζζέζνπκε 321.6, 631.9, θαη 563.8 (ε
πξόζζεζε γίλεηαη αλά δύν αξηζκνύο)
• Από ην παξάδεηγκα βιέπνπκε όηη ε δηάηαμε ησλ όξσλ ηνπ
αζξνίζκαηνο επεξεάδεη ην ηειηθό απνηέιεζκα. Η ζσζηή απάληεζε
είλαη 1517.3. Σν απνηέιεζκα 1518 έρεη απόιπην ζθάικα 0.7, θαη
ζρεηηθό ζθάικα 0.7/1517.3 = 0.00046
36
ΑΜΔΟ ΚΑΙ ΥΔΣΙΚΟ ΦΑΛΜΑ
• Δάλ νξίζνπκε:
Α: ηελ ζσζηή ηηκή κίαο έθθξαζεο ή
ζπλάξηεζεο
Α:την προσεγγιστική τιμή
Τότε:
αΑ = Α – Α είναι το απόλυτο σφάλμα
εΑ = αΑ/Α είναι το σχετικό σφάλμα
37
ΑΜΔΗ ΜΔΣΑΣΡΟΠΗ (cast)
• Δθηόο από ηηο απηόκαηεο κεηαηξνπέο ε C επηηξέπεη ζηνλ ρξήζηε λα αιιαμεη
άκεζα ηνλ ηύπν κηάο κεηαβιεηήο ή κίαο έθθξαζεο κε ηελ ρξήζε ηνπ ηειεζηή
cast.
• Η ζύληαμε ηεο εληνιήο πνπ επηηξέπεη ηελ αιιαγή ηνπ ηύπνπ απν ηνλ
ρξήζηε είλαη:
(Σύπνο) Έθθξαζε
όπνπ Τύπος είλαη θάπνηνο από ηνπο ηύπνπο ππ έρνπλ νξηζζεί ζέ έλα
πξόγξακκα ηεο C θαη Έκυραση νπνηαδήπνηε έθθξαζε ηεο C.
• Η αιιαγή ηνπ ηύπνπ κε ηελ παξαπάλσ εληνιή έρεη ηελ ίδηα πξνηεξαηόηεηα
κε ηνπο άιινπο κνλαδηαίνπο ηειεζηέο.
• Η ζπλεζέζηεξε ρξήζε ηνπ ηειεζηή ζε αξηζκεηηθέο εθθξάζεηο είλαη γηα ηελ
απνθπγή απσιεηώλ θιαζκαηηθώλ κεξώλ (π.ρ. ζε κηα δηαίξεζε αθεξαίσλ),
θαί ηελ απνθπγή ππνβηβαζκνύ ηύπνπ ιόγσ αλάζεζεο (π.ρ. (double) i = d)
38
ΜΔΣΑΒΛΗΣΔ
• Οη κεηαβιεηέο ζ’ έλα πξόγξακκα επηηξέπνπλ ηελ απνζήθεπζε
δεδνκέλσλ θαη ηελ πξνζπέιαζε ζηε δπλακηθή (RAM) θαη ζηαηηθή
(files) κλήκε ηνπ Η/Τ
• ηε C νη κεηαβιεηέο πξέπεη:
1. Να έρνπλ νξηζζεί ζε θάπνηα εληνιή δήισζεο, ζπλήζσο ζηελ αξρή
ελόο αξρείνπ πεγαίνπ θώδηθα, ή ζηελ αξρή κηαο ζπλάξηεζεο
2. Να έρνπλ ζπγθεθξηκέλν ηύπν
3. Να έρνπλ κία αξρηθή ηηκή πξηλ ρξεζηκνπνηεζνύλ γηα πξώηε θνξά
4. Σα δεδνκέλα (ηηκέο) πνπ απνζεθεύνληαη ζηε κεηαβιεηή πξέπεη λα
είλαη ηνπ ίδηνπ ή ζπκβαηνύ ηύπνπ κε απηνύ ηεο κεηαβιεηήο
• Γη’ αξρή ζα ζεσξήζνπκε δύν ηύπνπο int θαί float
39
ΟΝΟΜΑΣΑ ΜΔΣΑΒΛΗΣΧΝ
• Σα νλόκαηα ησλ κεηαβιεηώλ ζ΄έλα πξόγξακκα C
πξέπεη λα αξρίδνπλ κε γξάκκα θαί κπνξνπλ λα
πεξηέρνπλ αιθαξηζκεηηθνύο ραξαθηήξεο.
• Δπίζεο δελ κπνξνύλ λα πεξηέρνπλ εηδηθνύο ραξαθηήξεο
όπσο #, &, * θιπ.
• Τπάξρνπλ ζπγθεθξηκέλα νλόκαηα ηα νπνία αλαθέξνληαη
ζε ιέμεηο θιεηδηά ηεο C
• Σα νλόκαηα ησλ κεηαβιεηώλ είλαη επαηζζεηα ζηελ δνκή
ηνπο (Κεθαιαίνη, κηθξνί ραξαθηήξεο) π.ρ. AVariable ≠
Avariable
40
ΛΔΞΔΙ ΚΛΔΙΓΙΑ
auto double int struct
break else long switch
case enum register typedef
char extern return union
const float short unsigned
continue for Signed void
default goto sizeof volatile
do if static while
Οη παξαπάλσ ιέμεηο θιεηδηά δελ κπνξνύλ λα ρξεζηκνπνηεζνύλ ζαλ νλόκαηα 41
κεηαβιεηώλ ηνπ πξνγξάκκαηνο
ΔΝΣΟΛΔ ΟΡΙΜΟΤ
ΜΔΣΑΒΛΗΣΧΝ
• Γηα λα νξίζνπκε κηα κεηαβιεηή πξέπεη πξώηα λα νξίζνπκε ηνλ ηύπν θαη κεηά ην
όλνκα ηεο κεηαβιεηήο π.ρ.
int i;
int j = 50; /* νξηζκόο αθέξαηαο κεηαβιεηήο *
* κε αξρηθή ηηκή */
• Η γεληθή κνξθή είλαη
τύπος
• Οπόηε ζην θύξην πξόγξακκα main ε γεληθή κνξθή είλαη:
type main() int main()
{ {
declarations int i = 0;
statements
} i = i +1;
return (i);
} 42
ΟΡΙΜΟ ΜΔΣΑΒΛΗΣΧΝ
int x;
int x, y, z;
double r;
unsigned long abc;
• Αξρηθνπνίεζε
int x = 1;
int x, y = 0, z = 2;
double r = 1.87;
unsigned long abc = 42000000;
43
ΣΑΘΔΡΔ (i)
• Αθέξαηεο
42 0 -1 δεθαδηθέο
037 νθηαδηθέο
0x1f δεθαεμαδηθέο
42U 42L 42UL unsigned & long
• Κηλεηήο ππνδηαζηνιήο
42.0 -1.3 δεθαδηθέο
2.99e8 κε δύλακε ηνπ 10
42.0F 42.0L float & long double
44
ΣΑΘΔΡΔ (ii)
• Υαξαθηήξα
'a' '0' '$'
• Δηδηθνί ραξαθηήξεο
\n αιιαγή γξακκήο
\' απόζηξνθνο
\\ ραξαθηήξαο \ (backslash)
\t αιιαγή ζηήιεο (tab)
\" εηζαγσγηθό
\0 ραξαθηήξαο κε ASCII = 0 (null)
\037 » κε ASCII = 37 (νθηαδηθό)
\x1f » κε ASCII = 1f (δεθαεμαδηθό) 45
ΣΑΘΔΡΔ (iii)
• πκβνινζεηξέο
"abc" "Hello world!\n" "a\"51\""
• Γειώζεηο ζηαζεξώλ
const int size = 10, num = 5;
const double pi = 3.14159;
const char newline = '\n';
46
ΚΑΛΔ ΠΡΑΚΣΙΚΔ ΟΝΟΜΑΙΑ
ΜΔΣΑΒΛΗΣΧΝ
• Υξήζε κηθξώλ ραξαθηήξσλ (όρη θεθαιαίσλ)
• Με ρξήζε κηθξώλ θαη θεθαιαίσλ γηα δύν
δηαθνξεηηθέο κεηαβιεηέο π.ρ one θαί ONE
• Υξήζε κλεκνληθώλ νλνκάησλ π.ρ.
interestRate αληί ir
• Καηαλνεηή ζύληαμε γηα πνιύπινθα νλόκαηα
π.ρ. interestRate, ή interest_Rate αντί
interestrate
47
ΔΝΣΟΛΗ ΑΝΑΘΔΗ
• Οη κεηαβιεηέο ιακβάλνπλ ηηκέο κε ζπθγεθξηκέλε
εληνιή αλάζεζεο
• Η εληνιή είλαη ηεο κνξθήο:
Μεταβλητή = έκυραση
όπνπ ε έθθξαζε κπνξεί λα είλαη κηα ζηαζεξή ηηκή,
έλαο καζεκαηηθόο ηύπνο, ην απνηέιεζκα θιήζεο κηάο
ζπλάξηεζεο θιπ.
• Η έκυραση ζα πξέπεη λα παξάγεη έλα
απνηέιεζκα πνπ λα είλαη ζπκβαηό κε ηνλ ηύπν
ηεο κεηαβιεηήο
48
ΠΑΡΑΓΔΙΓΜΑ (1)
#include
float main()
{
float height, base, area;
height = 10.2;
base = 3.6;
printf(―The height of the triangle is: %f\n‖, height);
printf(―The base of the triangle is: %f\n‖, base);
area = (height * base)/2;
printf(―The area of the triangle is %f\n‖, area);
return (area);
}
49
ΠΑΡΑΓΔΙΓΜΑ (2)
#include
float main()
{
float height, base, area;
printf(―Enter the height of the triangle:‖);
scanf(―%f‖, &height);
printf(―\n‖);
printf(―Enter the base of the triangle‖);
scanf(%f‖, &base);
printf(―\n‖);
printf(―The height of the triangle is: %f\n‖, height);
printf(―The base of the triangle is: %f\n‖, base);
area = (height * base)/2;
printf(―The area of the triangle is %f\n‖, area);
return (area);
}
50
ΠΑΡΑΓΔΙΓΜΑ (3)
#include
#define FREEZING_POINT_IN_FARHENHEIT 32
#define SCALE_FACTOR (5.0 / 9.0)
float main()
{
float farhenheit, celcius;
printf(―Enter the temperature in Farhenheit:‖);
scanf(―%f‖, &farhenheit);
celcius = (farhenheit – FREEZING_POINT_IN_FARHENHEIT) *
SCALE_FACTOR;
printf(―The celcius equivalent temperature of %f is %.1f \n‖, farhenheit, celcius);
return (area);
}
51
ΔΚΣΤΠΧΗ ΜΔ ΣΗΝ ΤΝΑΡΣΗΗ
printf
• Απινί ηύπνη δεδνκέλσλ
– int %d
– char %c
– double %lf
– string %s
• Παξάδεηγκα
printf("%d %lf %c %s\n",
42, 1.2, 'a', "hello");
• Απνηέιεζκα
42 1.200000 a hello
52
ΔΙΑΓΧΓΗ ΓΔΓΟΜΔΝΧΝ ΜΔ ΣΗ
ΤΝΑΡΣΗΗ scanf
• Ίδηνη θσδηθνί γηα ηνπο απινύο ηύπνπο
• Παξάδεηγκα
int n;
double d;
char c;
scanf("%d", &n);
scanf("%lf", &d);
scanf("%c", &c);
53
ΠΡΟΓΡΑΜΜΑΣΙΣΙΚΕ
ΣΕΧΝΙΚΕ
ΚΩΣΑ ΚΟΝΣΟΓΙΑΝΝΗ
ΓΙΑΝΝΗ ΜΑΪΣΡΟ
ΑΝΓΡΔΑ ΣΑΦΤΛΟΠΑΣΗ
ΣΜΗΜΑ ΗΛΔΚΣΡΟΛΟΓΩΝ ΜΗΥΑΝΙΚΩΝ
ΚΑΙ ΜΗΥΑΝΙΚΩΝ ΤΠΟΛΟΓΙΣΩΝ
Δ.Μ.Π.
54
ΠΑΡΑΓΔΙΓΜΑ
#include
void main ()
{
int celcius;
double farenheit;
printf("Give the temperature (C): ");
scanf("%d", &celcius);
farenheit = 9.0 * celcius / 5.0 + 32.0;
printf(" %d degrees Celcius "
"is %lf degrees Farenheit\n",
celcius, farenheit);
55
}
ΣΔΛΔΣΔ ΚΑΙ ΔΚΦΡΑΔΙ (i)
• Αξηζκεηηθνί ηειεζηέο
+ - * / %
• ρεζηαθνί ηειεζηέο
== != =
• Λνγηθνί ηειεζηέο
&& ινγηθή ζύδεπμε (θαη)
|| ινγηθή δηάδεπμε (ή)
! ινγηθή άξλεζε (όρη)
• π.ρ. (x % 3 != 0) && !finished
56
ΣΔΛΔΣΔ ΚΑΙ ΔΚΦΡΑΔΙ (ii)
• Σειεζηέο bit πξνο bit (bitwise)
& ζύδεπμε bit (AND)
| δηάδεπμε bit (OR)
^ απνθιεηζηηθή δηάδεπμε bit (XOR)
~ άξλεζε (NOT)
> νιίζζεζε bit δεμηά
• Παξάδεηγκα
(0x0101 & 0xfff0) = b) ? a : b
• Σειεζηήο παξάζεζεο
a-1, b+5
• Σειεζηέο αλάζεζεο
a = b+1
a += x ηζνδύλακν κε a = a + x
• Σειεζηέο αύμεζεο θαη κείσζεο
a++ a-- ηηκή πξηλ ηε κεηαβνιή
++a --a ηηκή κεηά ηε κεηαβνιή 58
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (i)
• Κελή εληνιή
;
• Δληνιή αλάζεζεο ηηκήο θαη εληνιή έθθξαζεο
a = b+5;
a++;
a--;
• Δληνιή if
if (a >= b)
max = a;
else
max = b;
59
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (ii)
• ύλζεηε εληνιή
(block) • Οξηζκόο λέαο εκβέιεηαο
γηα κεηαβιεηή Δίλαη
if (a >= b) { δηαθνξεηηθέο
if (x < y) {
min = b; κεηαβιεηέο!
int temp = x;
max = a;
x = y;
}
y = temp;
else { }
max = b;
min = a;
} Γεληθά είλαη θαθή επηινγή λα νξίδνπκε
κεηαβιεηέο κε ην ίδην όλνκα αιιά κε
δηαθνξεηηθέο εκβέιεηεο ζε έλα πξόγξακκα,
δηόηη δεκηνπξγεί ζύγρπζε ζηε θαηαλόεζε 60
ηνπ θώδηθα θαη κεηώλεη ηε ζπληεξεζηκόηεηά ηνπ
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (iii)
while (συνθήκη)
εντολή
ψευδής
συνθήκη
• Δληνιή while αληθής
int i = 1, s = 0;
while (i <= 10) { εντολή
s = s + i;
i++;
}
61
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (iv)
do
εντολή εντολή
while (συνθήκη);
συνθήκη
αληθής
ψευδής
• Δληνιή do-while • Δληνιή do-while
int i = 1, s = 0; int i = 1, s = 0;
do do {
s += i++; i=i+1;
while (i <= 10); s = s+i;
} 62
while (i <= 10);
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (v)
αρχικοποίηση
for (αρχικοποίηση ;
συνθήκη ; ψευδής
βήμα) συνθήκη
εντολή
αληθής
εντολή
• Δληνιή for βήμα
int i, s;
for (i=1, s=0; i <= 10; i++)
s = s + i;
63
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (vi)
• Δληνιή break
int s;
for (i=0, s=0; i < 10; i++) {
int x;
scanf("%d", &x);
if (x < 0)
break;
s += x;
}
printf("Sum is: %d\n", s);
64
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (vii)
• Δληνιή continue
int s;
for (i=0, s=0; i < 10; i++) {
int x;
scanf("%d", &x);
if (x < 0)
continue;
s += x;
}
printf("Sum is: %d\n", s);
65
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (viii)
• Δληνιή switch
switch (ch) {
case 'a':
printf("alpha\n");
break;
case 'b':
case 'c':
printf("beta or c\n");
break;
default:
printf("other\n");
} 66
EΝΣΟΛΔ ΚΑΙ ΔΛΔΓΥΟ ΡΟΗ (ix)
• Δηηθέηεο θαη εληνιή goto
int i = 1, s = 0;
loop:
s += i++;
if (i < 10)
goto loop;
printf("The sum is %d\n", s);
Η ρξήζε ηνπ goto δελ ζπληζηάηαη δηόηη δεκηνπξγεί δπζθνιία ζηε θαηαλόεζε
ηεο ινγηθήο ξνήο ηνπ πξνγξάκκαηνο θαη ζπλεπώο κεηώλεη ηε
ζπληεξεζηκόηεηά ηνπ. Γεληθά ε ρξήζε ηνπ goto απνθεύγεηαη ζην
67
δνκεκέλν πξνγξακκαηηζκό.
ΠΑΡΑΓΔΙΓΜΑ
int a_variable; /* Ορισμός μεταβλητής γενικής εμβέλειας */
void main () /* Ορισμός κύριας σσνάρτησης */
{
a_function(6); /* Κλήση σσνάρτησης */
}
void a_function (int x)
{
a_variable = another_function(x, x+1);
}
int another_function (int x, int y)
{
return x * y;
}
Η ηηκή ηεο κεηαβιεηήο a_variable κεηά ηε θιήζε «a_function(6)» ζηε θύξηα
68
ζπλάξηεζε main θαη πξηλ ηε ιήμε ηνπ πξνγξάκκαηνο είλαη 42