ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Το αλφαριθμητικό (string)
Advertisements

Ένα απλό πρόγραμμα σε C /* ********************************************* * This program prints out the sentence “This is a test.” * *********************************************
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Γλώσσα Προγραμματισμού
Διαφάνειες παρουσίασης #5
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ-150 Προγραμματισμός Εντολές Ελέγχου Ροής.
Αρχές Προγραμματισμού (C). ...γράφοντας σωστά προγράμματα! (IIΙ)
Τελεστές ανάθεσης (assignment)
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
Η ΓΛΩΣΣΑ C ΜΑΘΗΜΑ 2.
Ολυμπιάδα Πληροφορικής
Ολυμπιάδα Πληροφορικής
ΣΥΝΑΡΤΗΣΕΙΣ.
Διαφάνειες παρουσίασης #3
Είσοδος & Έξοδος στη C++ Ι
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 30/03/2009.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΘΠ06 - Μεταγλωττιστές Εισαγωγή στον Bison Φροντιστήριο - 23/03/2010.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
Διαφάνειες παρουσίασης #2
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
7-1 ΜΑΘΗΜΑ 7 ο Περισσότερα για Κυκλικές και Διπλά Διασυνδεόμενες Λίστες, Συναρτήσεις Βιβλιοθήκης, Διαχείριση Αρχείων.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Βασικά στοιχεία της Java
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
ΚΕΦΑΛΑΙΟ Το αλφάβητο της ΓΛΩΣΣΑΣ
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ
ΔΟΜΕΣ ΕΛΕΓΧΟΥ(if-else, switch) και Λογικοί τελεστές / παραστάσεις
Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος
Εισαγωγή στον Προγ/μό Υπολογιστών
Μεταγράφημα παρουσίασης:

ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Διαφάνειες παρουσίασης #7 4 Συναρτήσεις βιβλιοθήκης 4 Αναδρομικές συναρτήσεις 4 Αναγνωσιμότητα προγραμμάτων

2Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Συναρτήσεις βιβλιοθήκης(i) u Είσοδος και έξοδος l Περιέχει όλες τις συναρτήσεις εισόδου-εξόδου l Προκαθορισμένα αρχεία FILE * stdin; τυπική είσοδος FILE * stdout; τυπική έξοδος FILE * stderr; τυπική έξοδος σφαλμάτων l Ισοδυναμίες printf(...)  fprintf(stdout,...) scanf(...)  fscanf(stdin,...) κ.λπ. l Συναρτήσεις διαχείρισης αρχείων με τυχαία πρόσβαση (random access)

3Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Συναρτήσεις βιβλιοθήκης(ii) u Διαχείριση συμβολοσειρών l size_t strlen (const char * s); Μέτρηση αριθμού χαρακτήρων της συμβολοσειράς s. l char * strcpy (char * s1, const char * s2); Αντιγραφή της συμβολοσειράς s2 στην s1. l char * strcat (char * s1, const char * s2); Προσθήκη της συμβολοσειράς s2 στο τέλος της s1. l int strcmp (const char * s1, const char * s2); Σύγκριση των συμβολοσειρών s1 και s2.

4Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Συναρτήσεις βιβλιοθήκης(iii) u Μετατροπή συμβολοσειρών l int atoi (const char * s); Μετατροπή της συμβολοσειράς s σε int. l long int atol (const char * s); Μετατροπή της συμβολοσειράς s σε long int. l double atof (const char * s); Μετατροπή της συμβολοσειράς s σε double. u Δυναμική παραχώρηση μνήμης l void * malloc (size_t n); Δυναμική παραχώρηση μνήμης μήκους n bytes. l void free (void * p); Αποδέσμευση της μνήμης στην οποία δείχνει το p.

5Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Δυναμική παραχώρηση μνήμης  Παράδειγμα int * p; int i; p = (int *) malloc(sizeof(int)); *p = 42; free(p); p = (int *) malloc(10 * sizeof(int)); for (i=0; i<10; i++) p[i] = 42; free(p);

6Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Συναρτήσεις βιβλιοθήκης(iv) u Μαθηματικές συναρτήσεις double sqrt (double x); double exp (double x); double log (double x); double pow (double x, double y); double sin (double x); double cos (double x); l double tan (double x); double asin (double x); double acos (double x); l double atan (double x);

7Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Συναρτήσεις βιβλιοθήκης(v) u Άλλες συναρτήσεις βιβλιοθήκης l Διαχείριση χρόνου l Καθορισμός τύπου χαρακτήρων l Εναλλακτική διαχείριση αρχείων (όπως στο Unix) l Άλματα μεταξύ συναρτήσεων

8Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Αναδρομικές συναρτήσεις(i) u Προγραμματισμός επαναλαμβανόμενων διαδικασιών l επανάληψη (iteration) l αναδρομή (recursion) u Μια συνάρτηση είναι αναδρομική όταν στο σώμα της καλεί τον εαυτό της Έμμεση αναδρομή int f (int x) {... g(y)... } int g (int z) {... f(w)... } Άμεση αναδρομή int f (int x) {... f(y)... }

9Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Αναδρομικές συναρτήσεις(ii) u Κεντρική ιδέα l Η λύση ενός προβλήματος ανάγεται στη λύση ενός όμοιου προβλήματος αλλά απλούστερου l Η αναδρομή πρέπει να τερματίζεται u Παράδειγμα: συνάρτηση παραγοντικού l n! = 1 * 2 *... * n και 0! = 1 int fact (int n) { if (n == 0) return 1; else return n * fact(n-1); }

10Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Πύργοι του Hanoi(i) u Περιγραφή l Να μεταφερθούν οι n δακτύλιοι από τον πρώτο στον τρίτο στύλο, χρησιμοποιώντας το δεύτερο ως βοηθητικό χώρο u Κανόνες l Ένας δακτύλιος τη φορά l Δεν μπορεί να τοποθετηθεί μεγαλύτερος δακτύλιος πάνω από μικρότερο

11Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Πύργοι του Hanoi(ii) leftmiddleright u Αναδρομική επίλυση l Απλούστερο πρόβλημα = λιγότεροι δακτύλιοι

12Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Πύργοι του Hanoi(iii) void hanoi (int rings, const char * from, const char * to, const char * auxil) { if (rings >= 1) { hanoi(rings-1, from, auxil, to); printf("%s -> %s\n", from, to); hanoi(rings-1, auxil, to, from); } } void main () { hanoi(4, "left", "right", "middle"); }

13Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Αναγνωσιμότητα προγραμμάτων u Ευκολία με την οποία γίνεται κατανοητό το τί κάνει ένα πρόγραμμα από την ανάγνωσή του ως κειμένου και μόνο i=1; a=0; l1:if (feof(f)) goto l3; fscanf(f, "%d", &d); if (d==k) goto l2; i++; goto l1; l2:a=1; l3: count = 0; found = FALSE; while (!feof(inputFile)) { count++; fscanf(inputFile, "%d", &data); if (data == key) { found = TRUE; break; } }

14Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Κανόνες αναγνωσιμότητας(i) u Σαφήνεια και απλότητα l Ο πολύπλοκος κώδικας δυσκολεύει την ανάγνωση του προγράμματος l Επιπλέον, αυξάνει τις πιθανότητες ύπαρξης σφαλμάτων u Συμπέρασμα: l Να αποφεύγεται περιττή πολυπλοκότητα l Να προτιμώνται απλές και σαφείς λύσεις a ^= a; a = 0;

15Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Κανόνες αναγνωσιμότητας(ii) u Στίξη l Η χρήση παρενθέσεων και αγκίστρων διευκολύνει την αναγνωσιμότητα l Η υπερβολική χρήση όμως έχει αντίθετο αποτέλεσμα a = x - b & 0xf0f0; a = (x - b) & 0xf0f0; if (d > 0) if (positive) r = sqrt(d); else r = -sqrt(d); if (d > 0) { if (positive) r = sqrt(d); else r = -sqrt(d); }

16Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Κανόνες αναγνωσιμότητας(iii) u Επιλογή κατάλληλων ονομάτων l Περιγραφικά ονόματα c=0;count=0; l Χρήση μεγάλων αναγνωριστικών mlmaximum_length l Χρήση πεζών/κεφαλαίων ή underscore averagepriceperyear averagePricePerYear average_price_per_year l Χρήση επωνύμων σταθερών ή macros tax = 0.21 * (income ); tax = TAX_RATE * (income - NON_TAXABLE);

17Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Κανόνες αναγνωσιμότητας(iv) u Σχόλια l Αναπόσπαστο μέρος του προγράμματος l Πρέπει να γράφονται μαζί με το πρόγραμμα l Να ενημερώνονται όταν αλλάζει το πρόγραμμα l Όχι περιττά και "κρυπτογραφικά" σχόλια u Σημεία που είναι απαραίτητα l Στην αρχή του ορισμού μιας συνάρτησης l Στις δηλώσεις σταθερών ή μεταβλητών l Στην αρχή κάθε τμήματος προγράμματος που επιτελεί μια ξεχωριστή λειτουργία l Στα άγκιστρα, όταν δεν είναι προφανές σε ποια δομημένη εντολή αυτά αντιστοιχούν

18Νίκος ΠαπασπύρουΛΟΓ102: Τεχνολογία Λογισμικού Ι Κανόνες αναγνωσιμότητας(v) u Στοίχιση των εντολών l Οι εσωτερικές εντολές στοιχίζονται 3 ως 5 διαστήματα δεξιότερα l Διευκολύνει πολύ την αναγνωσιμότητα l Τρόπος στοίχισης είναι υποκειμενικός l Πρέπει όμως να είναι συνεπής if (expression) statement; if (expression) statement_1; else statement_2; while (expression) { statement_1; statement_2;... statement_n; }