Προγραμματιςμόσ Συςτημάτων

Σχετικά έγγραφα
Προγραμματισμός Συστημάτων

Προγραμματισμός Συστημάτων

Προγραμματισμός Συστημάτων

Δείκτεσ Διαχείριςθ Μνιμθσ. Βαγγζλθσ Οικονόμου Διάλεξθ 8

17. Πολυδιάςτατοι πίνακεσ

Ειςαγωγι ςτο Δομθμζνο Προγραμματιςμό. Βαγγζλθσ Οικονόμου

5 ΜΕΘΟΔΟΙ - ΠΑΡΑΜΕΤΡΟΙ

Δομζσ Αφαιρετικότθτα ςτα Δεδομζνα

Εργαςτιριο Πικανοτιτων Σθμειϊςεισ προγραμματιςμοφ: βαςικζσ γνϊςεισ ανάπτυξθσ εφαρμογϊν. Κϊςτασ Αρβανιτάκθσ

Δομθμζνοσ Προγραμματιςμόσ. Βαγγζλθσ Οικονόμου Εργαςτιριο 9

ΠΡΟΓΡΑΜΜΑΣΙΜΌ ΤΠΟΛΟΓΙΣΏΝ. Κεφάλαιο 8 Η γλϊςςα Pascal

16. Πίνακεσ και Συναρτήςεισ

ΕΡΓΑΣΗΡΙΑΚΗ ΑΚΗΗ 4.1

Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων. 18. Αλφαριθμητικά. Ιωάννθσ Κατάκθσ. ΕΡΛ 032: Ρρογραμματιςμόσ Μεκόδων Επίλυςθσ Ρροβλθμάτων

Προγραμματιςμόσ Συςτημάτων

Η γλώςςα προγραμματιςμού C

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 19. Αλφαριθμητικά II. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

ΛΕΙΤΟΥΓΙΚΆ ΣΥΣΤΉΜΑΤΑ. 5 ο Εργαςτιριο Ειςαγωγι ςτθ Γραμμι Εντολϊν

Αντικειµενοστρεφής Προγραµµατισµός

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 3 ο Εργαςτιριο υγχρονιςμόσ Διεργαςιϊν

Ανάπτυξη Εφαρμογών Σε Προγραμματιςτικό Περιβάλλον

ΕΝΟΤΗΤΑ 2: ΤΟ ΛΟΓΙΣΜΙΚΟ ΤΟΥ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Γνωριμία με το λογιςμικό του υπολογιςτι

Λειτουργικά Συστήματα

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 15. Πίνακεσ ΙI. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Αντικειμενοστρεφής Προγραμματισμός

ΘΥ101: Ειςαγωγι ςτθν Πλθροφορικι

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Στα προθγοφμενα δφο εργαςτιρια είδαμε τθ δομι απόφαςθσ (ι επιλογισ ι ελζγχου ροισ). Ασ κυμθκοφμε:

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Δομζσ Δεδομζνων Πίνακεσ

Προγραμματισμό για ΗΜΥ

Ειςαγωγι ςτθν Επιςτιμθ Υπολογιςτϊν. Ειςαγωγι ςτθν Python

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 7 θ Διάλεξθ Διαχείριςθ Μνιμθσ Μζροσ Γ

9 ΕΞΑΙΡΕΕΙ - EXCEPTIONS

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

3 ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ ( while, do while )

Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων. 20. Αρχεία. Ιωάννθσ Κατάκθσ. ΕΠΛ 032: Προγραμματιςμόσ Μεκόδων Επίλυςθσ Προβλθμάτων

Παράςταςη ακεραίων ςτο ςυςτημα ςυμπλήρωμα ωσ προσ 2

ΕΦΑΡΜΟΓΖσ ΒΆΕΩΝ ΔΕΔΟΜΖΝΩΝ ΚΑΙ ΔΙΑΔΙΚΣΥΟΤ. Ειρινθ Φιλιοποφλου

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

ΡΟΓΑΜΜΑΤΙΣΤΙΚΟ ΡΕΙΒΑΛΛΟΝ MICRO WORLDS PRO

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΕΝΟΤΗΤΑ 2: ΕΠΙΚΟΙΝΩΝΩ ΜΕ ΤΟΝ ΥΠΟΛΟΓΙΣΤΗ. ΚΕΦΑΛΑΙΟ 5: Αρχεία - Φάκελοι

Βαγγζλθσ Οικονόμου Διάλεξθ 7. Συναρτιςεισ Μζροσ 2ο

Οντοκεντρικόσ Προγραμματιςμόσ

Οδηγός χρήσης Blackboard Learning System για φοιτητές

ΛΕΙΣΟΤΡΓΙΚΆ ΤΣΉΜΑΣΑ. 2 ο Εργαςτιριο Διαχείριςθ Διεργαςιϊν

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Συστημάτων

Α) Ενδεικτικϋσ απαντόςεισ των θεμϊτων

1 ΕΙΣΑΓΩΓΗ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

3. Εκφράσεις και έλεγχος ροής

Κεφάλαιο : Εισαγωγή στην C: (Διαλέξεις 3-4)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Πολυπλέκτες. 0 x 0 F = S x 0 + Sx 1 1 x 1

Δομημένος Προγραμματισμός

Βασικά Στοιχεία της Java

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ

Ραραμετροποίθςθ ειςαγωγισ δεδομζνων περιόδων

2.1. Εντολές Σχόλια Τύποι Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Ειδικά Θζματα Βάςεων Δεδομζνων

Ανάπτυξη και Σχεδίαση Λογισμικού

8 ΥΜΒΟΛΟΕΙΡΕ - STRINGS

Δομημένος Προγραμματισμός (ΤΛ1006)

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΧΕΔΙΑΜΟ ΠΡΟΪΟΝΣΩΝ ΜΕ Η/Τ

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

Διαδικασιακός Προγραμματισμός

Παράςταςη ςυμπλήρωμα ωσ προσ 1

Υπολογισμός - Εντολές Επανάληψης

3 θ διάλεξθ Επανάλθψθ, Επιςκόπθςθ των βαςικϊν γνϊςεων τθσ Ψθφιακισ Σχεδίαςθσ

Βασικά Στοιχεία της Java

Περιεχόμενα. χολι Χοροφ Αντιγόνθ Βοφτου - Πολιτικι Διαχείριςθσ Cookie 1

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Οντοκεντρικόσ Προγραμματιςμόσ

Μονάδες 6. Μονάδες ΓΑΨΕ Δεν υπάρχει ρίηα 2. ΑΝ Α>0 ΤΟΤΕ 3. ΤΕΛΟΣ_ΑΝ 4. ΑΛΛΙΩΣ 5. ίηα Τ_(Α)

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

ΕΝΟΣΗΣΑ 1: ΓΝΩΡIΖΩ ΣΟΝ ΤΠΟΛΟΓΙΣΗ. ΚΕΦΑΛΑΙΟ 2: Σο Τλικό του Τπολογιςτι

ΕΡΓΑΣΗΡΙΟ ΕΦΑΡΜΟΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ

Δομές ελέγχου ροής προγράμματος

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Προγραμματισμός Η/Υ (ΤΛ2007 )

Ένα πρόβλθμα γραμμικοφ προγραμματιςμοφ βρίςκεται ςτθν κανονικι μορφι όταν:

Ειςαγωγή ςτην πληροφορική

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Οδηγίεσ προσ τουσ εκπαιδευτικοφσ για το μοντζλο του Άβακα

Ενδεικτική περιγραφή μαθήματος

Αυτόνομοι Πράκτορες. Αναφορά Εργασίας Εξαμήνου. Το αστέρι του Aibo και τα κόκαλα του

Βασικές Αρχές Προγραμματισμού

Γομέρ Γεδομένων (Data Structures) Χαπμανδάπηρ Δςάγγελορ, Τμήμα Δθαπμοζμένων Μαθημαηικών, Δαπινό Δξάμηνο 2010/11. Διζαγωγή: Σύνηομη Δπιζκόπηζη ηηρ C++

1. εμινάριο Προγραμματιςμού CNC Εργαλειομηχανών

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Transcript:

ΠΛΥ410 Προγραμματιςμόσ Συςτημάτων Διδάςκων: Β. Δημακόπουλοσ dimako@cs.uoi.gr

«Ρρογραμματιςτικά» μακιματα 2012-13: Σθμαντικι αναδιάρκρωςθ του προγράμματοσ ςπουδϊν Επαναςχεδιαςμόσ προγραμματιςτικϊν μακθμάτων Αρχικά: Ειςαγωγι ςτον Ρρογραμματιςμό ( C1, Εξάμθνο 1 ο ), Ρρογραμματιςμόσ ςε C ( C2, Εξάμθνο 2 ο ) Τϊρα: Ειςαγωγι ςτον Ρρογραμματιςμό (1 ο εξάμθνο, γλϊςςα: Python) Τεχνικζσ Αντικειμενοςτραφοφσ Ρρογραμματιςμοφ (2 ο εξάμθνο, γλϊςςα: Java) Ανάπτυξθ Λογιςμικοφ (3 ο εξάμθνο, γλϊςςα Java) Ρρογραμματιςμόσ Συςτθμάτων (4 ο εξάμθνο, γλϊςςα: C) ΡΛΥ410 πζρυςι: Μεταβατικό: μόνο όςοι δεν είχαν περάςει το C2 (Ρρογραμματιςμόσ ςε C) ΡΛΥ410 φζτοσ: Ρρϊτθ φορά διδάςκεται ςε πλιρθ μορφι 2

Ρρογραμματιςμόσ Συςτθμάτων - Αντικείμενο Αντικείμενο μακιματοσ: Εκμάκθςθ βαςικϊν εργαλείων, τεχνικϊν και μεκόδων για προχωρθμζνο προγραμματιςμό που ςτοχεφει περιςςότερο ςτο «ςφςτθμα» παρά ςτθν «εφαρμογι» Η γλϊςςα C είναι μονόδρομοσ ςτον προγραμματιςμό ςυςτθμάτων Με μεγάλθ προγραμματιςτικι βάςθ και ςτο χϊρο των εφαρμογϊν Ρρογραμματιςμόσ ςυςτιματοσ: «κάτω» από το επίπεδο εφαρμογϊν (υποςτθρίηει τισ εφαρμογζσ) Ανάμεςα ςτισ εφαρμογζσ και το hardware π.χ. μεταφραςτζσ, λειτουργικά ςυςτιματα, ςυςτιματα υποςτιριξθσ εκτζλεςθσ, κλπ. Το UNIX και τα «UNIX-οειδι» περιβάλλοντα είναι θ ςθμαντικότερθ και πιο ολοκλθρωμζνθ πλατφόρμα για εργαςία ςυςτιματοσ Βαςικζσ γνϊςεισ χριςιμεσ και ςε επόμενα μακιματα (π.χ. λειτουργικά ςυςτιματα, παράλλθλα ςυςτιματα, μεταφραςτζσ κλπ) 3

Ρρογραμματιςμόσ Συςτθμάτων - Φλθ Φλθ μακιματοσ (από τον οδθγό ςπουδϊν): Η γλϊςςα προγραμματιςμοφ C: ςτοιχειϊδθσ C (βαςικοί τφποι δεδομζνων, εκφράςεισ, τελεςτζσ, δομζσ ελζγχου ροισ, ςυναρτιςεισ), προχωρθμζνα ςτοιχεία (δείκτεσ, πίνακεσ, δομζσ), δυναμικι διαχείριςθ μνιμθσ, είςοδοσ/ζξοδοσ, προεπεξεργαςτισ. Βαςικζσ κλιςεισ UNIX (διεργαςίεσ, Ι/Ο, ςιματα). Διαδιεργαςιακι επικοινωνία (κοινόχρθςτθ μνιμθ, sockets). Ειςαγωγι ςτον παράλλθλο προγραμματιςμό (νιματα, mapreduce). Ρροχωρθμζνα κζματα (αςφάλεια, γλϊςςα μθχανισ, εργαλεία ανάπτυξθσ μεγάλων προγραμμάτων). 4

Ρρογραμματιςμόσ Συςτθμάτων Διάρκρωςθ κεμάτων Δφο μζρθ: Γλϊςςα προγραμματιςμοφ C Υποκζτει γνϊςθ προγραμματιςτικϊν τεχνικϊν Υποκζτει γνϊςθ γλωςςϊν προγραμματιςμοφ «ςυγγενϊν» με τθν C (π.χ. Java) Καλφπτονται από τισ «Τεχνικζσ Αντικειμενοςτραφοφσ Ρρογραμματιςμοφ» και «Ανάπτυξθ Λογιςμικοφ» Ρ1: Ρερίπου 60% τθσ φλθσ Ρρογραμματιςμόσ ςυςτθμάτων UNIX και προχωρθμζνα κζματα Εμβάκυνςθ ςε αςυνικιςτεσ δυνατότθτεσ τθσ C Γνωριμία με διαδικαςίεσ και εργαλεία ανάπτυξθσ εφαρμογϊν ςυςτιματοσ Βαςικζσ κλιςεισ UNIX (διεργαςίεσ, ςιματα, επικοινωνίεσ, νιματα κλπ) Άλλα προχωρθμζνα κζματα και τεχνικζσ Ρ2: Ρερίπου 40% τθσ φλθσ 5

Συγγράμματα Υπάρχουν πολλά βιβλία για C Και πάρα πολφ υλικό ςτο διαδίκτυο Για προγραμματιςμό ςυςτθμάτων (UNIX) όχι τόςα πολλά μεταφραςμζνα Συνικωσ κεωροφν δεδομζνθ τθ γνϊςθ τθσ C Ρολλά που είναι για χριςθ / διαχείριςθ του UNIX, όχι προγραμματιςμό Δεν μασ αφοροφν 6

Εφδοξοσ ΡΟΓΑΜΜΑΤΙΣΜΟΣ ΣΕ UNIX, M.J. Rochkind (2007) Εξαιρετικό βιβλίο για προγραμματιςμό ςυςτθμάτων UNIX Υποκζτει γνϊςθ τθσ C UNIX ΓΙΑ ΡΟΓΑΜΜΑΤΙΣΤΕΣ ΚΑΙ ΧΗΣΤΕΣ, G.Glass, K. Ables (2005) Χριςθ, διαχείριςθ, εςωτερικά του UNIX Δφο κεφάλαια αφιερϊνονται ςτα εργαλεία προγραμματιςμοφ και ςτισ κλιςεισ ςυςτιματοσ του UNIX και υποκζτει γνϊςθ τθσ C Η ΤΕΧΝΗ ΚΑΙ ΕΡΙΣΤΗΜΗ ΤΗΣ C: ΜΙΑ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΡΙΣΤΗΜΗ ΤΩΝ ΥΡΟΛΟΓΙΣΤΩΝ, E.S. Roberts (2004) Ρολφ καλό βιβλίο C Η ΓΛΩΣΣΑ ΡΟΓΑΜΜΑΤΙΣΜΟΥ C, B.W. Kernighan, D.M. Ritchie (2008) «Ευαγγζλιο» τθσ C (C90) Κςωσ όχι το καλφτερο για εκμάκθςθ. 7

Ιςτοςελίδεσ Ρολλζσ ιςτοςελίδεσ για C Ρολλζσ ιςτοςελίδεσ για προγραμματιςμό ςτο UNIX Ρολφ καλό βοικθμα ςτο διάβαςμά ςασ: Programming in C; Unix System Calls and Subroutines using C., A. D. Marshall http://www.cs.cf.ac.uk/dave/c/ce.html Καλφπτει και εκμάκθςθ τθσ C αλλά και προγραμματιςμό ςυςτθμάτων UNIX 8

Ώρεσ μακιματοσ Διαλζξεισ: Τρίτθ: 12:00 14:00 Ρζμπτθ: 12:00 14:00 Αίκουςα: Ι5 08:00 09:00 10:00 11:00 12:00 13:00 Δε Τρ Τε Πε Πα Σα Κυ Γρ Δ Δ Εργαςτιρια: Τρίτθ: 14:00 18:00 ΡΕΡ Ι, ΡΕΡ ΙΙ (και ίςωσ ΡΕΛΣ) Ώρεσ γραφείου διδάςκοντα: Ρζμπτθ: 09:00 11:00 Β33 14:00 15:00 16:00 17:00 18:00 Εργ Ιςτοςελίδα μακιματοσ: http://www.cs.uoi.gr/~dimako/courses/ 9

Εργαςτιρια Σκοπόσ/λειτουργία εργαςτθρίων: «Φροντιςτηριακοφ» τφπου για ενίςχυςη διδαςκαλίασ Σχεδιαςμόσ προγράμματοσ και υλοποίθςθ «επί τόπου» (Ρολφ) ζμπειροι μεταπτυχιακοί / διδακτορικοί φοιτθτζσ για να ςασ βοθκιςουν Οργανωτικά: Ξεκινοφν τθν 3 θ ι 4 θ εβδομάδα, κα ανακοινωκεί εγκαίρωσ Σε ομάδεσ των 2 ατόμων 2 ςειρζσ (14:00 16:00, 16:00 18:00) Σχεδόν κάκε εβδομάδα Ραρουςίεσ Βακμόσ εργαςτθρίου: Θα βγει από τθ ςυμμετοχι ςασ και από 2 προόδουσ 20% οι παρουςίεσ + 40% πρόοδοσ1 + 40% πρόοδοσ2 Κάκε απουςία ςασ αφαιρεί 10%. Από 2 και μετά δεν ζχει διαφορά 10

Βακμολόγθςθ Επιτυχία ςτο μάκθμα προχποκζτει: 1. Επιτυχία ςτο εργαςτιριο (Βακμόσ εργαςτθρίων >= 4,5) Πςοι δεν επιτφχουν ςτο εργαςτιριο, δεν ζχουν δικαίωμα εξετάςεων 2. Τουλάχιςτον βακμό 4,5 ςτισ εξετάςεισ Πςοι ζχουν βακμό < 4 ςτισ εξετάςεισ, δεν περνοφν ακόμα και άριςτα να πιγαν ςτο εργαςτιριο. Τελικόσ βακμόσ: 40% εργαςτήριο + 60% τελικζσ εξετάςεισ 11

Το ςημερινό μάθημα Ειςαγωγικά ςτοιχεία για τη C

Η γλϊςςα C D. Ritchie, Bell Labs, 1972 Με βάςθ προθγοφμενθ γλϊςςα (B) Χρθςιμοποιικθκε για τθν υλοποίθςθ του λειτουργικοφ ςυςτιματοσ UNIX Ευρεία διάδοςθ από τότε. Από αυτιν προζκυψαν / επθρεάςτθκαν οι περιςςότερεσ από τισ πιο δθμοφιλείσ γλϊςςεσ: Ρ.χ. C++, Java, PHP κλπ. Σε κάποιουσ τομείσ (π.χ. ενςωματωμζνα ςυςτιματα) θ C είναι ουςιαςτικά θ μοναδικι επιλογι Δυνατι, μικρι, εφκολα μεταφράςιμθ γλϊςςα 13

Δθμοτικότθτα / εξάπλωςθ τθσ C Δείκτθσ ςχετικισ δθμοτικότθτασ (LangPop, 10/2013): Πλεσ με βάςθ τθ C! C Java PHP Javascript C++ Python 14

Στα ενςωματωμζνα ςυςτιματα 15

Κι άλλα Το UNIX γράφτθκε ςε C Ο πυρινασ του Linux είναι γραμμζνοσ ςε C Σχεδόν όλεσ οι εφαρμογζσ ςυςτιματοσ είναι ςε C Η πλειονότθτα εφαρμογϊν ανοιχτοφ κϊδικα είναι ςε C Προςοχή: Η C ΔΕΝ είναι πανάκεια «Επικίνδυνθ» αν κάποιοσ δεν τθν ξζρει καλά «Χαμθλότερου» επιπζδου από άλλεσ γλϊςςεσ (π.χ. Java) Δεν βολεφει πάντα για εφαρμογζσ χριςτθ, ειδικά όταν υπάρχει γραφικι αλλθλεπίδραςθ 16

Ειςαγωγή ςτη C C για προγραμματιςτέσ Java

Hello world public class hello { public static void main (String args []) { System.out.println ( Hello world ); #include <stdio.h> int main(int argc, char *argv[]) { puts( Hello world ); return 0; 18

Η C δεν ζχει Κλάςεισ Μόνο δεδομζνα (μεταβλθτζσ) και ςυναρτιςεισ Η ςυνάρτθςθ main() είναι αυτι που εκτελείται αρχικά Boolean Με ακεραίουσ «προςομοιϊνουμε» τα boolean To 0 κεωρείται FALSE Οτιδιποτε μθ-μθδενικό κεωρείται TRUE Strings (τουλάχιςτον όπωσ τα χειρίηεται θ Java) Χειριςμόσ μζςω πινάκων και δεικτϊν try catch μπλοκ (exceptions) Δεν υπάρχει ανάλογο, μόνο μζςω ςυναρτιςεων ςυςτιματοσ 19

Η C ζχει Pointers (δείκτεσ)! Πχι μόνο απλό πζραςμα με αναφορά «Ελευκερία» ςτουσ τφπουσ των δεδομζνων (π.χ. int/short/char είναι πάνω-κάτω ίδιοι) και δεν γίνεται πλιρθσ ζλεγχοσ κατά τθ χριςθ τουσ. «Ελευκερία» ςτθ διαχείριςθ τθσ μνιμθσ Επαφίεται πλιρωσ ςτον προγραμματιςτι Η java ζχει garbage collector που αυτόματα αποδεςμεφει άχρθςτθ μνιμθ 20

Java vs C Η Java είναι (βαςικά) ερμηνευόμενη (interpreted) Συνικωσ μετατρζπεται (javac) ςε bytecode, ο οποίοσ ερμθνεφεται από μία εικονικι μθχανι (JVM), θ οποία εκτελείται (java) ςτθν πραγματικι μθχανι prog.java prog.class javac java Η C είναι (βαςικά) μεταφραζόμενη (compiled) Μετατρζπεται απευκείασ ςε εντολζσ assembly τθσ πραγματικισ μθχανισ που κα εκτελζςει το πρόγραμμα Το πρόγραμμα εκτελείται αυτόνομα prog.c a.out gcc 21

Το πρϊτο πρόγραμμα ςε C (hello.c) #include <stdio.h> HEADER (αρχείο επικεφαλίδων) Θυμίηει το import τθσ java void main() Συνάρτθςθ εκκίνθςθσ { /* Just show a simple message */ printf( Hello, World\n ); Σχόλιο Οκόνθ Τερματιςμόσ προγράμματοσ Αλλαγι γραμμισ 22

Μετάφραςθ του προγράμματοσ hello.c a.out gcc Στο τερματικό: % ls hello.c % gcc hello.c % ls a.out hello.c Ο μεταφραςτισ (gcc) ονομάηει το εκτελζςιμο a.out 23

Μετάφραςθ του προγράμματοσ με δικό μασ όνομα hello.c hello gcc Στο τερματικό: % ls hello.c % gcc o firstprog hello.c % ls firstprog hello.c Με το o ο μεταφραςτισ αντί για a.out ονομάηει το εκτελζςιμο με ότι όνομα μασ αρζςει. 24

Εκτζλεςθ του προγράμματοσ hello.c a.out gcc Στο τερματικό: % ls hello.c % gcc hello.c % ls a.out hello.c %./a.out Hello, World % To./ εννοεί το τρζχον directory ίςωσ και να μθν χρειάηεται. 25

Ειςαγωγικά Ρρόγραμμα = {δεδομζνα + {κϊδικασ (ςυναρτιςεισ) Συναρτιςεισ = {main, Δεδομζνα = {μεταβλθτζσ, ςτακερζσ Στακερζσ = ποςότθτεσ που δεν μεταβάλλονται κατά τθν εκτζλεςθ του προγράμματοσ Ρ.χ. Pi = 3.14 Μεταβλθτζσ = ποςότθτεσ που μεταβάλλονται Ι/Ο, υπολογιςμοί 26

Ειςαγωγικά Τα δεδομζνα αποκθκεφονται ςτθ μνιμθ του υπολογιςτι Δθλϊνοντασ μια μεταβλθτι δεςμεφω κζςεισ ςτθ μνιμθ και κακορίηω ζνα όνομα που χρθςιμοποιϊ για να αναφερκϊ ςε αυτι τθ κζςθ μνιμθσ π.χ. int const n = 10; int a; 27

Ειςαγωγικά Και οι εντολζσ αποκθκεφονται ςτθ μνιμθ του υπολογιςτι Ρ.χ. εντολι Ι1: πρόςκεςε τθν τιμι τθσ μεταβλθτισ a με αυτι τθσ b πρόςκεςε τα περιεχόμενα τθσ κζςθσ 100 ςτα περιεχόμενα τθσ κζςθσ 104 I1 I2 I3 Εντολές a b 100 104 Δεδομένα 28

Μεταβλθτζσ & τφποι δεδομζνων Κάκε μεταβλθτι, ςτακερά ζχει ζνα τφπο Ο τφποσ κακορίηει το μζγεκοσ του «κελιοφ» που κα δεςμευτεί ςτθ μνιμθ char: 1 byte int: 4 bytes (ςυνικωσ) float: 4 bytes double: 8 bytes Ρροςδιοριςτζσ short int: 2 bytes long int: 8 bytes long double:? bytes (>=10) 29

Μεταβλθτζσ & τφποι δεδομζνων Ρροςδιοριςτζσ: unsigned Χωρίσ πρόςθμο (μόνο κετικοί) όλα τα bits για τθν τιμι του αρικμοφ Unsigned int, unsigned short int, unsigned char 32 bits, 16 bits, 8 bits 4294967295, 0..65535 0..255 int, short int, char 31 bits, 15bits, 7 bits (ςυν 1 για το πρόςθμο) -2147483648,..., 2147483647 32768..32767, -128..127 30

Κακολικζσ / τοπικζσ μεταβλθτζσ Πςεσ μεταβλθτζσ βρίςκονται εντόσ ενόσ μπλοκ εντολϊν (π.χ. μζςα ςε μία ςυνάρτθςθ) είναι τοπικζσ (local) και μποροφν να χρθςιμοποιθκοφν μόνο εντόσ του μπλοκ. Πςεσ είναι εκτόσ των ςυναρτιςεων είναι καθολικζσ (global) και μποροφν να χρθςιμοποιθκοφν παντοφ. Ρεριςςότερα αργότερα 31

Χαρακτιρεσ Πλα τα δεδομζνα ςε ζνα υπολογιςτι κωδικοποιοφνται ςαν ακολουκίεσ 0,1 Ζνασ χαρακτιρασ κωδικοποιείται ςαν ακολουκία 0, 1 Άρα είναι ςτθν ουςία ο υπολογιςτισ τον αντιλαμβάνεται ςαν ζνα αρικμό Ο χαρακτιρασ 0 αντιςτοιχεί ςτον αρικμό 48 char ch = x ; Λζγοντασ ch = x είναι ςαν να λζμε: βάλε ςτθ μεταβλθτι ch τθν τιμι (αρικμό) που αντιςτοιχεί ςτο χαρακτιρα x ch++; ASCII 32

Ραράδειγμα με printf #include <stdio.h> int main() { char ch = x ; /* Σοπική μεταβλθτι τφπου χαρακτιρα */ printf( ch = %d, ch = %c\n, ch, ch); return 0; 33

Ακζραιοι ςε διάφορεσ μορφζσ void main() { int x = 65535; /* 16μηδενικά, 16 άςςοι: 000 0111 1 */ printf( %d, x); /* 65535 */ printf( %x, x); /* ffff */ printf( %o, x); /* 177777 */ x = 65535; x = 0xFFFF; x = 017777; 34

Τελεςτζσ Αρικμθτικοί τελεςτζσ +, -, *, /, % (το τελευταίο μόνο για ακεραίουσ) Συγκριτικοί τελεςτζσ >, <, <=, >=, ==,!= Λογικοί τελεςτζσ &&,,! Υπάρχουν και κάποιοι άλλοι τελεςτζσ που κα μασ απαςχολιςουν αργότερα Bitwise operators: ~, &,, ^, >>, << 35

Ρράξεισ και μετατροπζσ Αρικμθτικοί τελεςτζσ για δεδομζνα ίδιου τφπου κυρίωσ (π.χ. πρόςκεςθ δφο ακεραίων) Πμωσ, μποροφμε να κάνουμε και πράξεισ με μεταβλθτζσ διαφορετικοφ τφπου, π.χ. int x; float f; f = f+x; Γίνεται εςωτερικι μετατροπι των «κατϊτερων» τφπων ςε «ανϊτερουσ» Και το αποτζλεςμα ανϊτερου τφπου Τζτοιεσ μετατροπζσ γίνονται αυτόματα αλλά μποροφμε να τισ ηθτιςουμε και εμείσ ςε ζνα πρόγραμμα με το μθχανιςμό των type casts f + x f + ((float) x) (το x μετατρζπεται αυτόματα ςε float) (cast του προγραμματιςτι) 36

Τελεςτζσ Τελεςτζσ ςφντμθςθσ: ++, --, +=, -=, *=, /= Ραράδειγμα ++i και i++ (pre-increment, post-increment) i=i+1 και i+=1 Ραράδειγμα i = 3; x = ++i; /* πρώτα γίνεται η αύξηςη και μετά η αποτίμηςη τησ έκφραςησ */ x = i++; /* πρώτα γίνεται η αποτίμηςη τησ έκφραςησ και μετά η αύξηςη */ (x = i)++; /* εδώ τι ιςχύει? */ 37

Ο «τριαδικόσ» τελεςτισ μεταβλητή = ςυνθήκη? παρ1 : παρ2 Η εκτζλεςθ ιςοδυναμεί με: if (ςυνθήκη) μεταβλητή = παρ1; else μεταβλητή = παρ2; Ραράδειγμα: x = (y > 0)? 1: 0; 38

2 «ςτυλ» ςτακερϊν Στθ java το final μπορεί να χρθςιμοποιθκεί για να ορίςει «ςτακερζσ» Στθ C υπάρχουν 2 τρόποι να οριςτοφν ςτακερζσ: 1. Με προςκικθ του «const» ςτον τφπο τθσ διλωςθσ, π.χ. const int x = 5; /* Δεν μπορεί να αλλάξει τιμή */ 2. Με οριςμό ςτακεράσ προεπεξεργαςτι (#define) #define M 10 /* Το ςύνηθεσ */ #define PI 3.14 #define NEWLINE \n Διαφορά: Οι const καταλαμβάνουν μνιμθ για αποκικευςθ Οι #define ΑΝΤΙΚΑΘΙΣΤΑΝΤΑΙ ΡΙΝ ΓΙΝΕΙ Η ΜΕΤΑΦΑΣΗ του προγράμματοσ (και άρα δεν υπάρχουν ςτο εκτελζςιμο) 39

Διάβαςμα (scanf) / εκτφπωςθ (printf) #include <stdio.h> /* Απαραίτητο */ char c; /* Καθολική μεταβλητή */ int main() { /* Συνάρτηςη main */ int i; /* Τοπικέσ δηλώςεισ ΠΑΝΤΑ ςτην αρχή τησ ςυνάρτηςησ */ float f; printf( Dwse 1 xaraktira, 1 akeraio kai ena pragmatiko\n/ ); scanf( %c, &c); scanf( %d%f, &i, &f); /* Η scanf ΘΕΛΕΙ & στις μεταβλητές */ printf( c = %c, i = %d, f = %f\n, c, i, f); return 0; 40

Εργαςτιρια Ξεκινοφν τθν Σρίτη, 11/3 Τθν επόμενθ εβδομάδα κα πρζπει να γραφτείτε Καταςτάςεισ ςτον 2 ο όροφο, Γραφείο Β32 () Ομάδεσ των 2 Βοθκοί εργαςτθρίου: Σπφροσ Αγάκοσ (Υποψιφιοσ Διδάκτορασ) Βαγγζλθσ Λάππασ (Υποψιφιοσ Διδάκτορασ) Αλζξανδροσ Ραπαδογιαννάκθσ (Μεταπτυχιακόσ Φοιτθτισ) Guest star / φιλικι ςυμμετοχι: Χριςτοσ Γιαννάκοσ (Μεταπτυχιακόσ Φοιτθτισ) 41

Ειςαγωγή ςτη C Εντολέσ

Εντολζσ ελζγχου ροισ Ππωσ και ςτθν java: if if-else switch for while do-while break Επιπλζον: goto 43

if & if-else if (condition) { statements; if (condition) { statements; else { statements; Αν υπάρχει ΜΟΝΟ ΖΝΑ statement, όπωσ και ςτθν Java, δε χρειάηονται οι αγκφλεσ. Ρ.χ. ο παρακάτω κϊδικασ if (x == 3) x++; y++; είναι ιςοδφναμοσ με: if (x == 3) { x++; y++; 44

switch switch (variable) { case const1: statements; break; case const2: statements; break;... default: statements; break; 45

Εντολζσ ελζγχου switch switch (variable) { case const1: statements; break; case const2: statements; break;... default: statements; break; switch ( choice ) { case a : case A : do_thing_1(); break; Ρροςοχι: Αν δεν υπάρχει break, θ εκτζλεςθ ενόσ case ςυνεχίηεται με τον κϊδικα του επόμενου case case b : case B : do_thing_2(); break;... default: printf( Wrong choice. ); 46

while & do-while while (condition) { statements; x = 0; while (x < 10) x++; x = 0; while (x < 10); x++; do { statements; while (condition); Αν υπάρχει ΜΟΝΟ ΖΝΑ statement, όπωσ και ςτθν Java, δε χρειάηονται οι αγκφλεσ. 47

for (I) for (initialization; condition; iteration) { statement; /* Ιςοδύναμοσ κώδικασ: */ initialization; while (condition) { statement; iteration; Αν υπάρχει ΜΟΝΟ ΖΝΑ statement, όπωσ και ςτθν Java, δε χρειάηονται οι αγκφλεσ. Τα initialization / iteration μποροφν να περιζχουν πολλά statements, χωριςμζνα με κόμμα. 48

for (II) Τα initialization / iteration μποροφν να περιζχουν πολλά statements, χωριςμζνα με κόμμα. Π.χ. int i, sum; sum = 0; for (i = 1; i <= 10; i++) { sum += i; for (i = 1, sum = 0; i <= 10; sum += (i++)) ; 49

for (III) Δεν υπάρχει το for each for (δήλωςη : ςυλλογή) τθσ Java. 50

break Ζξοδοσ από switch ι από βρόχουσ for/while/do, π.χ. while (1) { if (w == 3) { break; /* Βγαίνει αμέςωσ μετά το while */... Δεν υπάρχει ονοματιςμζνο break (τφπου break <label>) 51

goto Η εκτζλεςθ μεταπθδά ςε ςυγκεκριμζνθ ετικζτα, π.χ. if (x == 1) { goto before; y = 2; goto after; before: y = 1; after:... Επικίνδυνθ / μθ-προβλζψιμθ εντολι, π.χ. while (1) { if (w == 3) { Strange: x=1;...... if (condition) goto Strange; «Ακατάλλθλθ» δια ανθλίκουσ. Κακι προγραμματιςτικι τεχνικι. Δεν πρζπει να χρθςιμοποιείται ςχεδόν ποτζ. 52

Αγκφλεσ και μπλοκ κϊδικα Γράψτε τον παρακάτω κϊδικα ΧΩΙΣ αγκφλεσ, όπου γίνεται: if (i >= 81) { x = 3; if (row >= 1 && col<= 9) { q = 5; y = x; else { for (S[row][col] = 1; S[row][col] <= 9; S[row][col]++) { if ( sudoku_solve(i) ) { return (1); 53

Αγκφλεσ και μπλοκ κϊδικα Ρρϊτθ προςπάκεια: if (i >= 81) { x = 3; if (row >= 1 && col<= 9) { q = 5; y = x; else { for (S[row][col] = 1; S[row][col] <= 9; S[row][col]++) { if ( sudoku_solve(i) ) { return (1); 54

Αγκφλεσ και μπλοκ κϊδικα Δεφτερθ προςπάκεια: if (i >= 81 x = 3; if (row >= 1 && col<= 9) { q = 5; y = x; else { for (S[row][col] = 1; S[row][col] <= 9; S[row][col]++) { if ( sudoku_solve(i) ) return (1); 55

Αγκφλεσ και μπλοκ κϊδικα Τρίτθ προςπάκεια: if (i >= 81 x = 3; if (row >= 1 && col<= 9) { q = 5; y = x; else { for (S[row][col] = 1; S[row][col] <= 9; S[row][col]++) if ( sudoku_solve(i) ) return (1); 56

Αγκφλεσ και μπλοκ κϊδικα Τελικόσ κϊδικασ: if (i >= 81 x = 3; if (row >= 1 && col<= 9) { q = 5; y = x; else for (S[row][col] = 1; S[row][col] <= 9; S[row][col]++) if ( sudoku_solve(i) ) return (1); ΠΑΝΣΑ ΝΑ ΒΑΖΕΣΕ ΑΓΚΤΛΕ, ΑΚΟΜΑ ΚΑΙ ΌΣΑΝ ΔΕΝ ΧΡΕΙΑΖΕΣΑΙ 57

Ειςαγωγή ςτη C Πίνακεσ

Ρίνακεσ Διαφορζσ με java: Πταν τουσ ορίηεισ, πρζπει να δθλϊςεισ και το μζγεκοσ Οι αγκφλεσ πάνε μετά το όνομα τθσ μεταβλθτισ Δθλ. δεν παίηει το: int [] myarray; myarray = new int[30]; Σωςτι (και μοναδικι) διλωςθ: int myarray[30]; Η αρίκμθςθ των ςτοιχείων ξεκινάει από τθ κζςθ μθδζν (0) 59

Ρίνακεσ ΔΕΝ μπορεί να αλλάξει το μζγεκοσ του πίνακα. ΔΕΝ κυμάται / ελζγχει θ C τα όρια του πίνακα. ΔΕΝ μπορεί να γίνει αρχικοποίθςθ του πίνακα παρά μόνο τθ ςτιγμι τθσ διλωςισ του. Μετά καταχϊρθςθ ςτοιχείοςτοιχείο. Ραράδειγμα: #include <stdio.h> #define N 10 int main() { int myarray[n] = {10,20,30,40,50,60,70,80,90,100; myarray[3] = 400; myarray[10] = 900; /* Εκτόσ ορίων ΔΕΝ μασ προειδοποιεί με κάποιο ςφάλμα η C */ 60

Ρίνακεσ - αρχικοποίθςθ Αν ο πίνακασ δεν αρχικοποιθκεί κατά τθ διλωςι του τα ςτοιχεία του κα ζχουν τυχαίεσ τιμζσ («ςκουπίδια»). Αν κατά τθ διλωςθ του πίνακα αρχικοποιθκοφν λιγότερα ςτοιχεία από αυτά που ζχει, τα υπόλοιπα αρχικοποιοφνται αυτόματα ςτο 0 (μθδζν) Ρ.χ. εφκολοσ τρόποσ να αρχικοποιιςω όλα τα ςτοιχεία ενόσ πίνακα ςτο 0: int myarray[100] = { 0 ; 61

Ρίνακεσ 2D Για διδιάςτατουσ (τριδιάςτατουσ κλπ), κατά τθ διλωςθ χρθςιμοποιοφνται πολλαπλζσ αγκφλεσ για να δθλϊςουν το μζγεκοσ κάκε διάςταςθσ. int array1[10][20]; /* 10 γραμμών, 20 ςτηλων */ int main() { int array2[30][20]; /* 30 γραμμών, 20 ςτηλων */ array1[0][0] = array2[10][10]; array1[5] = array2[3]; /* Δεν επιτρέπεται */ Οι πίνακεσ αυτοί είναι ΡΑΓΜΑΤΙΚΑ διδιάςτατοι και ΣΤΑΘΕΟΙ Πχι ςαν τθ java όπου βαςικά πρόκειται για διάνυςμα όπου κάκε ςτοιχείο του είναι άλλο διάνυςμα (γραμμι). Πλεσ οι γραμμζσ ίδιου (αμετάβλθτου) μεγζκουσ (ςε αντίκεςθ με τθ java που κάκε γραμμι μποροφςε να ζχει διαφορετικό μζγεκοσ). 62