ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1. Η Γλώσσα C++
1.1. Γενικά
1.2. Ιστορία – Εκδόσεις
1.3. Η αναγκαιότητα της C
1.4. Μεταγλωττιστές
2. Hello World!
2.1. Πηγαίος Κώδικας
2.2. Σχόλια
2.3. Βιβλιοθήκη iostream
2.4. main, block κώδικα, return
2.5 Είσοδος/Έξοδος
2.5.1. Έξοδος με την cout
2.5.2. Οδηγία using
2.5.3. Περισσότερα για την cout
2.5.4. Είσοδος με την cin
3. Στοιχεία της C
3.1. Μεταβλητές
3.2. Σταθερές
3.3. Τελεστές και η Δομή Ελέγχου
3.4. Δομές Επανάληψης
3.5. Συναρτήσεις
3.5.1. Πολυμορφισμός Συναρτήσεων
3.6. Πίνακες
3.7. Συμβολοσειρές
3.8. Δείκτες
B.Ασκήσεις
Εφαρμογή 1
Εφαρμογή 2
Εφαρμογή 3
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1.Διαχείριση Μνήμης
1.1.Στατική Δέσμευση Μνήμης
1.2.Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές
1.3.Στατική Δέσμευση Μνήμης για Αντικείμενα
2.Δυναμική Δέσμευση Μνήμης
2.1.Δείκτες (Υπενθύμιση από C)
2.2.Οι τελεστές new και delete
2.3.Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
2.4.Δυναμική Δέσμευση για Αντικείμενα
2.5.Δυναμική Δέσμευση και Κατασκευαστές
3.Κλάσεις που περιέχουν δείκτες
3.1.Παράδειγμα κλάσης που περιέχει δείκτες
3.2.…και ένα πρόβλημα (χωρίς λύση για την ώρα)
4..Δυναμική Δέσμευση Μνήμης για Πίνακες
4.1.Μονοδιάστατοι πίνακες
4.2.Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες
4.3.Διδιάστατοι πίνακες
4.4.Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες
B. Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1. Η Γλώσσα C++
1.1. Γενικά
1.2. Ιστορία – Εκδόσεις
1.3. Η αναγκαιότητα της C
1.4. Μεταγλωττιστές
2. Hello World!
2.1. Πηγαίος Κώδικας
2.2. Σχόλια
2.3. Βιβλιοθήκη iostream
2.4. main, block κώδικα, return
2.5 Είσοδος/Έξοδος
2.5.1. Έξοδος με την cout
2.5.2. Οδηγία using
2.5.3. Περισσότερα για την cout
2.5.4. Είσοδος με την cin
3. Στοιχεία της C
3.1. Μεταβλητές
3.2. Σταθερές
3.3. Τελεστές και η Δομή Ελέγχου
3.4. Δομές Επανάληψης
3.5. Συναρτήσεις
3.5.1. Πολυμορφισμός Συναρτήσεων
3.6. Πίνακες
3.7. Συμβολοσειρές
3.8. Δείκτες
B.Ασκήσεις
Εφαρμογή 1
Εφαρμογή 2
Εφαρμογή 3
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1.Διαχείριση Μνήμης
1.1.Στατική Δέσμευση Μνήμης
1.2.Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές
1.3.Στατική Δέσμευση Μνήμης για Αντικείμενα
2.Δυναμική Δέσμευση Μνήμης
2.1.Δείκτες (Υπενθύμιση από C)
2.2.Οι τελεστές new και delete
2.3.Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
2.4.Δυναμική Δέσμευση για Αντικείμενα
2.5.Δυναμική Δέσμευση και Κατασκευαστές
3.Κλάσεις που περιέχουν δείκτες
3.1.Παράδειγμα κλάσης που περιέχει δείκτες
3.2.…και ένα πρόβλημα (χωρίς λύση για την ώρα)
4..Δυναμική Δέσμευση Μνήμης για Πίνακες
4.1.Μονοδιάστατοι πίνακες
4.2.Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες
4.3.Διδιάστατοι πίνακες
4.4.Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες
B. Ασκήσεις
Α. Θεωρία
1. Κλάσεις
1.1 Γενικά
1.2 Ορισμός Κλάσης
1.3 Δημόσια (public) στοιχεία της κλάσης
1.4 Ιδιωτικά (private) στοιχεία της κλάσης
1.5 Παράδειγμα (προδιαγραφές)
2 Περισσότερα για τις κλάσεις
2.1 Ορισμός Συναρτήσεων έξω από την Κλάση
2.2 Παρουσίαση Ιδιωτικών – Δημόσιων Μέλων μιας κλάσης
2.3 Χωρισμός σε Αρχεία
3. Ειδικές Μεθόδοι Κλάσεων
3.1 Γενικά
3.2 Κατασκευαστής (constructor)
3.3 Καταστροφέας (destructor)
3.4 Ελεγκτές Πρόσβασης (accessors)
B. Ασκήσεις
Α. Έλεγχος Προγράμματος
1) Η εντολή άμεσης επανάληψης continue
2) Η εντολή διακοπής επανάληψης break
3) Η εντολή μεταφοράς ελέγχου προγράμματος goto
4) Η εντολή ελέγχου πολλαπλής συνθήκης switch
Β. Προγραμματιστικές Τεχνικές
1) Ατέρμονες Βρόχοι για την κατασκευή menu
2) Άμεση Έξοδος από το πρόγραμμα
3) Εκτέλεση Εντολών Συστήματος
Γ.Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Ροές
1) Γενικά
2) Η ροή προκαθορισμένης εισόδου stdin
3) Η ροή προκαθορισμένης εξόδου stdout
4) Η ροή προκαθορισμένης εξόδου λαθών stderr
Β. Συναρτήσεις ροής εισόδου stdin
1) Γενικά
2) Η συνάρτηση getchar()
3) Η συνάρτηση getch()
4) Η συνάρτηση getche()
5) H συνάρτηση ungetc()
6) Η συνάρτηση gets()
7) Η συνάρτηση fgets()
8) Η συνάρτηση scanf()
9) Η συνάρτηση fflush()
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑDimitris Psounis
A. Επικοινωνία με το Λειτουργικό Σύστημα
1) Γενικά
2) Λειτουργικό Σύστημα
3) Ορίσματα Γραμμής Εντολής
3.1) Ορισμός της main με ορίσματα
3.2) Παράδειγμα με διαφορετικό πλήθος ορισμάτων
3.3) Μετατροπή συμβολοσειράς σε άλλο τύπο δεδομένων
4) Ανακατεύθυνση Εισόδου / Εξόδου
4.1) Ανακατεύθυνση εξόδου
4.2) Ανακατεύθυνση εισόδου
B. Ασκήσεις
Α. Δείκτες
1) Η μνήμη του υπολογιστή
2) Η έννοια του δείκτη
3) Ορισμός Δείκτη
4) Απόδοση τιμής σε δείκτη (Ο τελεστής &)
5) Απόδοση τιμής μέσω δείκτη (ο τελεστής *)
6) Παράδειγμα χρήσης δείκτη
Β. Δείκτες και Πίνακες
1) Το όνομα ενός πίνακα είναι δείκτης
2) Αποθήκευση ενός πίνακα στη μνήμη
3) Αριθμητική Δεικτών
4) Ισοδύναμος Συμβολισμός για πρόσβασή σε πίνακα
Γ. Δείκτες και Συναρτήσεις
1) Διοχέτευση Δείκτη σε Συνάρτηση
2) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Τιμής
3) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Αναφοράς
Δ. Παρατηρήσεις
1) Διοχέτευση πίνακα ως όρισμα σε συνάρτηση
2) Η Σταθερά NULL
Ασκήσεις
Θεωρία
1) Στοιχεία ενός προγράμματος C
2) Η συνάρτηση main()
3) H οδηγία #include
4) Μεταβλητές
5) Εντολές
5.1) Η εντολή printf
5.2) Η εντολή scanf
6) Συναρτήσεις Χρήστη
6.1) Το πρωτότυπο μιας συνάρτησης
6.2) Το σώμα μιας συνάρτησης
6.3) Κλήση μιας συνάρτησης
7) Σχόλια Προγράμματος
Ασκήσεις
1) Θεωρία
1.1) Κύκλος Ανάπτυξης Προγράμματος
1.1.1) Βήματα Δημιουργία ενός Προγράμματος
1.1.2) Κατέβασμα και εγκατάσταση του Dev-C++
1.2) Το πρώτο πρόγραμμα σε C
1.2.1) Περιγραφή του προγράμματος
1.2.2) Συγγραφή του προγράμματος
1.2.3) Μεταγλώττιση του προγράμματος
1.2.4) Σύνδεση των αρχείων
1.2.5) Εκτέλεση του προγράμματος
1.2.6) Λίγα λόγια για το πρόγραμμα
2) Ασκήσεις
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...Panagiotis Kanavos
Pattern matching expressions may seem like a small change. And yet, they allow far safer and easier code right now, while setting the stage for further functional enhancements in C# 9. Let's talk about how pattern matching exceptions can simplify your current code today and enable patterns you couldn't really use before
Α. Θεωρία
1. Κλάσεις
1.1 Γενικά
1.2 Ορισμός Κλάσης
1.3 Δημόσια (public) στοιχεία της κλάσης
1.4 Ιδιωτικά (private) στοιχεία της κλάσης
1.5 Παράδειγμα (προδιαγραφές)
2 Περισσότερα για τις κλάσεις
2.1 Ορισμός Συναρτήσεων έξω από την Κλάση
2.2 Παρουσίαση Ιδιωτικών – Δημόσιων Μέλων μιας κλάσης
2.3 Χωρισμός σε Αρχεία
3. Ειδικές Μεθόδοι Κλάσεων
3.1 Γενικά
3.2 Κατασκευαστής (constructor)
3.3 Καταστροφέας (destructor)
3.4 Ελεγκτές Πρόσβασης (accessors)
B. Ασκήσεις
Α. Έλεγχος Προγράμματος
1) Η εντολή άμεσης επανάληψης continue
2) Η εντολή διακοπής επανάληψης break
3) Η εντολή μεταφοράς ελέγχου προγράμματος goto
4) Η εντολή ελέγχου πολλαπλής συνθήκης switch
Β. Προγραμματιστικές Τεχνικές
1) Ατέρμονες Βρόχοι για την κατασκευή menu
2) Άμεση Έξοδος από το πρόγραμμα
3) Εκτέλεση Εντολών Συστήματος
Γ.Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Ροές
1) Γενικά
2) Η ροή προκαθορισμένης εισόδου stdin
3) Η ροή προκαθορισμένης εξόδου stdout
4) Η ροή προκαθορισμένης εξόδου λαθών stderr
Β. Συναρτήσεις ροής εισόδου stdin
1) Γενικά
2) Η συνάρτηση getchar()
3) Η συνάρτηση getch()
4) Η συνάρτηση getche()
5) H συνάρτηση ungetc()
6) Η συνάρτηση gets()
7) Η συνάρτηση fgets()
8) Η συνάρτηση scanf()
9) Η συνάρτηση fflush()
ΓΛΩΣΣΑ C - ΜΑΘΗΜΑ 17 - ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΥΣΤΗΜΑDimitris Psounis
A. Επικοινωνία με το Λειτουργικό Σύστημα
1) Γενικά
2) Λειτουργικό Σύστημα
3) Ορίσματα Γραμμής Εντολής
3.1) Ορισμός της main με ορίσματα
3.2) Παράδειγμα με διαφορετικό πλήθος ορισμάτων
3.3) Μετατροπή συμβολοσειράς σε άλλο τύπο δεδομένων
4) Ανακατεύθυνση Εισόδου / Εξόδου
4.1) Ανακατεύθυνση εξόδου
4.2) Ανακατεύθυνση εισόδου
B. Ασκήσεις
Α. Δείκτες
1) Η μνήμη του υπολογιστή
2) Η έννοια του δείκτη
3) Ορισμός Δείκτη
4) Απόδοση τιμής σε δείκτη (Ο τελεστής &)
5) Απόδοση τιμής μέσω δείκτη (ο τελεστής *)
6) Παράδειγμα χρήσης δείκτη
Β. Δείκτες και Πίνακες
1) Το όνομα ενός πίνακα είναι δείκτης
2) Αποθήκευση ενός πίνακα στη μνήμη
3) Αριθμητική Δεικτών
4) Ισοδύναμος Συμβολισμός για πρόσβασή σε πίνακα
Γ. Δείκτες και Συναρτήσεις
1) Διοχέτευση Δείκτη σε Συνάρτηση
2) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Τιμής
3) Διοχέτευση Ορίσματος σε Συνάρτηση μέσω Αναφοράς
Δ. Παρατηρήσεις
1) Διοχέτευση πίνακα ως όρισμα σε συνάρτηση
2) Η Σταθερά NULL
Ασκήσεις
Θεωρία
1) Στοιχεία ενός προγράμματος C
2) Η συνάρτηση main()
3) H οδηγία #include
4) Μεταβλητές
5) Εντολές
5.1) Η εντολή printf
5.2) Η εντολή scanf
6) Συναρτήσεις Χρήστη
6.1) Το πρωτότυπο μιας συνάρτησης
6.2) Το σώμα μιας συνάρτησης
6.3) Κλήση μιας συνάρτησης
7) Σχόλια Προγράμματος
Ασκήσεις
1) Θεωρία
1.1) Κύκλος Ανάπτυξης Προγράμματος
1.1.1) Βήματα Δημιουργία ενός Προγράμματος
1.1.2) Κατέβασμα και εγκατάσταση του Dev-C++
1.2) Το πρώτο πρόγραμμα σε C
1.2.1) Περιγραφή του προγράμματος
1.2.2) Συγγραφή του προγράμματος
1.2.3) Μεταγλώττιση του προγράμματος
1.2.4) Σύνδεση των αρχείων
1.2.5) Εκτέλεση του προγράμματος
1.2.6) Λίγα λόγια για το πρόγραμμα
2) Ασκήσεις
77o dotNETZone Meetup: Pattern matching expressions. One small step for one l...Panagiotis Kanavos
Pattern matching expressions may seem like a small change. And yet, they allow far safer and easier code right now, while setting the stage for further functional enhancements in C# 9. Let's talk about how pattern matching exceptions can simplify your current code today and enable patterns you couldn't really use before
2. 2
Περιεχόμενα
●
Δείκτες σε συναρτήσεις
●
Ψευδώνυμα τύπων με typedef
●
Διαβάζοντας δηλώσεις της C και το πρόγραμμα cdecl
●
Παραδείγματα
– Χειρισμών σημάτων του UNIX
– Ταξινόμηση πίνακα σε δομή με πολλαπλά κριτήρια
– Ένα σύστημα μενού επιλογών
●
Πίνακας σε δομή που περιέχει δείκτη σε συνάρτηση
3. 3
Δείκτες σε συναρτήσεις
●
Ένας δείκτης σε μια συνάρτηση (function pointer) function pointer) )
είναι ένας δείκτης που δείχνει στην διεύθυνση της
μνήμης που είναι ο κώδικας της συνάρτησης.
●
Ένας τέτοιος δείκτης μπορεί να αποθηκευτεί, να γίνει
όρισμα συνάρτησης, καθώς και να χρησιμοποιηθεί
σαν να ήταν η ίδια η συνάρτηση.
4. 4
Ένα παράδειγμα
#include <stdio.h>
double squareFunc(double in) {
return in * in;
}
int main() {
double (*pFunc)(double);
pFunc = squareFunc;
double res = (*pFunc)(4.0);
printf("res = %lfn", res); // prints 16.00
return 0;
}
Συνάρτηση
double -> double
Δείκτης σε συνάρτηση που
double-> double
Κλήση συνάρτησης
με χρήση δείκτη
9. 9
Η σπείρα των δηλώσεων
● str is
● str is an array 10 of
● ... pointers to
● ... pointers to char
10. 10
Η σπείρα των δηλώσεων :2
● fp is ...
● fp is a pointer to ...
● ... to a function ...
● ... passing an int and a
pointer to float ..
● ... returning a pointer to char
12. 12
Είναι εντάξει
αν δεν το
καταλαβαίνεις
Η σπείρα των δηλώσεων :3
signal is a function, passing an int and a
pointer to a function passing and int and return nothing
returning
a pointer to a function passing and int returning nothing
14. 14
Ασκήσεις
●
Με διαφορά το ποιο δύσκολο κομμάτι
της σύνταξης της γλωσσάς C
– αλλά δεν είναι τόσο δύσκολο όσο μοιάζει
●
Διαβάστε
https://cskill.wor) dpr) ess.com/2010/06/09/the-clockwisespir) al-r) ule-by-david-ander) son/
int * const * p;
int * const * (* p)();
char ( * ( * x ( ) ) [ ] ) ( );
char ( * ( * x [3] ) ( ) ) [5];
15. 15
The C++ ‘using’ keywor) d
Ποια διαβάζετε ευκολότερα;
(function pointer) σημείωση: η δεσμευμένη λέξη ‘using’ έχει πολλές άλλες χρήσεις)
// Old C
#define counter long
// C Syntax
typedef long counter;
typedef void (*fPtrA)();
typedef void (*fPtrB)(int);
// New C++11 Syntax
using counter = long;
using fPtrA = void (*)();
using fPtrB = void(*)(int);
// New C++14 syntax
using FunctionPtr = auto (*)(int*) -> void;
17. 17
Ομαλός τερματισμός με Ctr) l+C
●
Τα fuction pointers τα λέμε και signal
handlers ή callbacks
●
Όταν η ροή του προγράμματος δεν είναι
χρονικά καθορισμένη (function pointer) ασύγχρονος
προγραμματισμός)
●
Η ιδέα πίσω από τον προγραμματισμό
με γραφικά περιβάλλοντα GUI.
●
Παράδειγμα: Ασύγχρονος χειρισμός
σημάτων στο UNIX
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
void trapHandler(int dummy) {
puts("Bye bye cruel word!");
exit(1);
}
int main(void) {
signal(SIGINT, trapHandler);
puts("I take your computer forever!");
// run forever
for(;;) {
// Do nothing
}
puts("You will never see this text");
}
18. 18
Παράδειγμα: Ταξινόμηση
●
Να ταξινομηθεί ένας πίνακας που περιέχει μια δομή, με
αύξουσα η φθίνουσα σειρά με βάση κάποιο στοιχείο του ή
κάποιο συνδυασμό των στοιχείων της δομής
●
Να ταξινομηθούν τα στοιχεία των βιβλίων
– Κατά κόστος (function pointer) αύξουσα σειρά ταξινόμησης)
– Κατά όνομα συγγραφέα
– Κατά έτος έκδοσής (function pointer) τα ποιο καινούργια πρώτα)
25. 25
Τυπώνοντας το μενού
void printMenu(const menuLine_t *menuLines) {
int idx = 1;
const menuLine_t *menuLine = menuLines;
while (menuLine->text != NULL) {
string_t const text = menuLine->text;
printf("%i : %sn", idx, text);
idx++;
menuLine++;
}
}
26. 26
Επιλογή μενού
int getSelection(const menuLine_t *menuLines) {
int items = 0;
const menuLine_t *menuLine = menuLines;
while (menuLine->text != NULL) {
items++;
menuLine++;
}
int selectedNo = -1;
while (1) {
printf("Select menu action between %i and %i:", 1, items);
scanf("%d", &selectedNo);
if (selectedNo < 1 || selectedNo > items) {
printf("Not a valid no !!n");
printMenu(menuLines);
} else {
// printf("Entered number is valid.n");
return selectedNo - 1;
}
}
}
27. 27
Γιατί τόσο πολύπλοκο;
●
Για να δούμε μια ποιο πολύπλοκη δομή
– Δείκτης σε συνάρτηση, μέσα σε δομή, μέσα σε πίνακα
●
Επαναχρησιμοποιήσιμος κώδικας
●
Ευκολία επέκτασης και δημιουργίας υπομενού
●
Ευκολία μετατροπής σε άλλες αλληλεπιδράσεις χρήστη
– Σε ένα γραφικό περιβάλλον GUI
– Σε μια σελίδα HTML
28. 28
Ανακεφαλαίωση
●
Φτιάξαμε μια δομή δεδομένων και μεθόδους που
δρουν πάνω στην δομή.
●
Δηλαδή φτιάξαμε ένα αντικείμενο και κάναμε
προγραμματισμό με αντικείμενα
●
Ο αντικειμενοστραφής προγραμματισμός είναι κάτι
περισσότερο (function pointer) πχ πολυμορφισμός και κληρονομικότητα )
●
Ότι μπορείς να κάνεις με αντικειμενοστραφή
προγραμματισμό, μπορείς να τον κάνεις με απλή C,
με την βοήθεια πινάκων με δείκτες σε συναρτήσεις.