Διαδικασία Ανάπτυξης Λογισμικού Ανάλυση Απαιτήσεων (προϋποθέτει κατανόηση του προβλήματος και τη συλλογή πληροφοριών και των απαιτήσεων από το σύστημα) Σχεδιασμός (ορισμός διεργασιών για να ικανοποιηθούν οι καταγεγραμμένες απαιτήσεις, διαγράμματα ροής) Υλοποίηση (μετατροπή του μοντέλου σχεδιασμού σε μοντέλο υλοποίησης)
Φάσεις Υλοποίησης (1/2) Συγγραφή πηγαίου κώδικα, δημιουργία.c αρχείου Προεπεξεργαστής (preprocessor) προσθέτει τα αρχεία επικεφαλίδων (header files) στο αρχείο πηγαίου κώδικα Μεταγλώττιση (compilation) αυτοματοποιημένη διαδικασία μετατροπής γλώσσας υψηλού επιπέδου σε γλώσσα μηχανής, καλείται συντακτικός έλεγχος και δημιουργείται αντικείμενο πρόγραμμα.obj αρχείο
Φάσεις Υλοποίησης (2/2) Σύνδεση τμημάτων που αποτελούν το μοντέλο υλοποίησης (linking) αυτοματοποιημένη διαδικασία σύνδεσης του αντικείμενου προγράμματος με άλλα αντικείμενα προγράμματα (βιβλιοθήκες), για να δημιουργηθεί ένα πλήρες αντικείμενο πρόγραμμα έτοιμο για εκτέλεση (.exe) Φορτωτής (loader) φορτώνει το εκτελέσιμο στην κύρια μνήμη Έλεγχος καλής λειτουργίας (διόρθωση run time errors)
Φάσεις Υλοποίησης με χρήση του εργαλείου DEV C++ v4.9.9.2 (1/2) Download page http://sourceforge.net/projects/dev-cpp/files/binaries /Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe Συγγραφή πηγαίου κώδικα Επιλέγω File-> New-> Source File (συντόμευση πληκτρολογίου Ctrl+N) Γράφω τον κώδικα Αποθηκεύω το αρχείο επιλέγοντας File-> SaveAs (διαλέγω το path και πληκτρολογώ το όνομα του αρχείου). Το αρχείο θα έχει επέκταση.cpp
Φάσεις Υλοποίησης με χρήση του εργαλείου DEV C++ v4.9.9.2 (2/2) Compilation, linking και loading Γίνεται αυτόματα από τον compiler Επιλέγω Execute->Compile (συντόμευση πληκτρολογίου Ctrl+F9). Δημιουργείται αυτόματα εκτελέσιμο αρχείο, με όνομα ίδιο με αυτό του πηγαίου κώδικα, εφόσον δεν υπάρχουν συντακτικά λάθη. Για να το τρέξω επιλέγω Execute->Run (συντόμευση πληκτρολογίου Ctrl+F10) Τα δύο προηγούμενα βήματα μπορούν να εκτελεστούν με μία εντολή, επιλέγοντας Execute->Compile & Run (συντόμευση πληκτρολογίου F9)
Αλληλεπίδραση Χρήστη - Προγράμματος Τροφοδοσία με αρχικά Δεδομένα Μονάδα Εισόδου Πχ: Πληκτρολόγιο Υπολογιστικά Βήματα Δεδομένα Υπολογισμού Μονάδα Εξόδου Πχ: Οθόνη
Μνήμη Οργανωμένη σε κελιά με συγκεκριμένη διεύθυνση και τιμή. Τα δεδομένα αποθηκεύονται στη μνήμη 1000 1001 1002 1003 1004 10 23 6 75 92 1005 1006 1007 1008 1009 11 56 12 18 123
Δομή Προγράμματος (1/4) Οι εντολές εκτελούνται με τη σειρά 1. Οδηγίες Προεπεξεργαστή 2. Δηλώσεις Συναρτήσεων 3. Η βασική συνάρτηση main()
Δομή προγράμματος (2/4) Οδηγίες προεπεξεργαστή Βασικά αρχεία επικεφαλίδων (header files) πχ #include <stdio.h> #include <stdlib.h> Αρχεία επικεφαλίδων που ορίζονται από τον προγραμματιστή (επέκταση.h) Ορισμοί σταθερών (definitions) πχ #define pi 3.1415927 Δηλώσεις συναρτήσεων Δηλώσεις μεταβλητών (public καλύτερα να αποφεύγεται)
Δομή προγράμματος (3/4) Ησυνάρτησηint main(int argc, char *argv[]) Μπορεί να γραφτεί και main() main() { declarations /* Δηλώσεις μεταβλητών και σταθερών που θα χρησιμοποιηθούν μόνο από τη main. */ statements /* Εντολές, εκτελούνται με τη σειρά */ system( PAUSE ); /* Την χρησιμοποιούμε για «πάγωμα» του παραθύρου */ return 0; /* συνάρτηση επιστροφής */ }
Δομή προγράμματος (4/4) Ορισμοί συναρτήσεων συγγραφή του σώματος της συνάρτησης (εναλλακτικά οι ορισμοί μπορεί να γίνουν ταυτόχρονα με τις δηλώσεις) Σχόλια: ό,τι πλαισιώνεται από /*. */, αγνοείται // σχόλια γραμμής Τα σχόλια υπάρχουν σε οποιοδήποτε σημείο του προγράμματος
Παράδειγμα #include <stdio.h> #include <stdlib.h> //Write your name here int main(void){ } system( Pause ); return 0;
Μεταβλητές και σταθερές Η C επιτρέπει τη χρήση συμβολικών ονομάτων για αναφορά στα δεδομένα που επεξεργαζόμαστε (αντί η αναφορά να γίνεται με κλήση διευθύνσεων μνήμης) Η αντιστοιχία συμβολικού ονόματος διεύθυνσης μνήμης είναι μοναδική Οι μεταβλητές αφορούν τις ποσότητες που οι τιμές τους μεταβάλλονται κατά τη διάρκεια εκτέλεσης του προγράμματος, σε αντίθεση με τις σταθερές
Επιτρεπτά ονόματα μεταβλητών και σταθερών Τα ονόματα μεταβλητών ή σταθερών μπορούν να αποτελούνται από οποιοδήποτε συνδυασμό γραμμάτων a-z A-Z, του χαρακτήρα υπογράμμισης (_), και να μη συμπίπτουν με δεσμευμένες λέξεις
Βασικοί τύποι δεδομένων στη C και προσδιοριστές (1/3) Τύπος Ακεραίου int Δήλωση της μεταβλητής με όνομα a ως ακέραιο τύπο δεδομένων: int a; Προσδιοριστές για εκτύπωση και ανάγνωση είναι: %d, %x, %o για εμφάνιση σε δεκαδική, δεκαεξαδική και οκταδική μορφή αντίστοιχα. Για πολύ μικρούς ακεραίους ή πολύ μεγάλους ή χωρίς πρόσημο υπάρχουν αντίστοιχα οι τύποι short, long και unsigned. Οι προσδιοριστές l, h και u τοποθετούνται μετά το % για τους long, short και unsigned αντίστοιχα. Πχ %ld
Βασικοί τύποι δεδομένων στη C και προσδιοριστές (2/3) Πραγματικοί αριθμοί (float και double) Τύπος δεδομένων float (ακρίβεια 6 σημαντικών ψηφίων) Δήλωση της μεταβλητής a ως τύπου float: float a; προσδιοριστής %f για εμφάνιση σε fixed point μορφή (6 δεκαδικά) καθορισμός πλάτους πραγματικού (στήλες εκτύπωσης Α1) και πλάτους δεκαδικού μέρους Α2 - %<Α1>.<Α2>f. Προσδιοριστές %e, %g για εμφάνιση σε εκθετική μορφή, ή ανάθεση της εμφάνισης στο σύστημα αντίστοιχα.
Βασικοί τύποι δεδομένων στη C και προσδιοριστές (3/3) Τύπος δεδομένων double, (ακρίβεια 14 σημαντικών ψηφίων) Δήλωση της μεταβλητής a ως double: double a; Προσδιοριστές %lf, %le για διάβασμα, %lf, %le,%f για εκτύπωση Τύπος δεδομένων long double, ( μεγαλύτερος double) Προσδιοριστές %Lf, %Le για διάβασμα, %Lf, %Le, %f για εκτύπωση Τύπος δεδομένων χαρακτήρα char Δήλωση της μεταβλητής a ως χαρακτήρα: char a; προσδιοριστής %c
Δηλώσεις μεταβλητών Δηλώνονται ως εξής: <Τύπος Δεδομένων> <Όνομα Μεταβλητής> ; πχ int metrhths; char xarakthras; Περισσότερες από μία μεταβλητές του ίδιου τύπου διαχωρίζονται με κόμμα πχ int metrhths1, metrhths 2, metrhths3 ; char xarakthras1, xarakthras2; Απόδοση αρχικής τιμής κατά τη δήλωση πχ int a = 234;
Δηλώσεις σταθερών Η εντολή δήλωσης σταθερών έχει τη μορφή const <τύπος δεδομένων> <όνομα σταθεράς> = <αρχική τιμή> πχ const double pi = 3.1415927 Εναλλακτικά για τις σταθερές χρησιμοποιείται η εντολή προεπεξεργαστή define (στην αρχή του προγράμματος, μετά τα header files). Πχ #define pi 3.1415927
Συγγραφή κώδικα ώστε να είναι ευανάγνωστος Τα ονόματα μεταβλητών και συναρτήσεων να αντιπροσωπεύουν ποσότητες του φυσικού προβλήματος πχ. Athroisma, minvelocity Οι αγκύλες που πλαισιώνουν ένα σώμα εντολών να είναι στην ίδια κατακόρυφο και το σώμα εντολών κατά μία στήλη (ένα tab) δεξιότερα. Πχ { Εντολή 1; Εντολή 2; } Σύντομα σχόλια που να περιγράφουν τις λειτουργίες
Αριθμητικές Παραστάσεις Μοναδιαίοι τελεστές ++, -- Δυαδικοί αριθμητικοί τελεστές : +, -, *, /, % Οι παραστάσεις περιέχουν σταθερές, μεταβλητές και αριθμητικούς τελεστές όπως στην άλγεβρα Πχ (arithmos1 + aritmos2)*arithmos3 Προτεραιότητα δίνεται στα τμήματα εντός παρενθέσεων
Εντολή καταχώρησης (1/2) Μορφή: <μεταβλητή> = <παράσταση>; Πχ double mesos_oros, oros1, oros2; oros1 = 6.0; oros2 = 7.0; mesos_oros = (oros1 + oros2)/2;
Εντολή καταχώρησης (2/2) Επίσης για τους τελεστές +,-, /, *, % μπορείηεντολήκαταχώρησηςναείναιτης μορφής <μεταβλητή> <τελεστής>= <παράσταση> που αντιστοιχεί σε <μεταβλητή> = <μεταβλητή> <τελεστής> <παράσταση> πχ int arithmos = 4; arithmos +=5; /*η εντολή αντιστοιχεί σε arithmos = arithmos + 5; */
Παραδείγματα Αν int x=8; int y=15; y+=x, y-=x, y*=x, y/=x, y%=x, τελική τιμή της y είναι 23 τελική τιμή της y είναι 7 τελική τιμή της y είναι 120 τελική τιμή της y είναι 1 τελική τιμή της y είναι 7
Τελεστές αύξησης και μείωσης (1/2) Οι μοναδιαίοι τελεστές ++, -- ισοδυναμούνμεαύξησηήμείωσητης μεταβλητής κατά μία μονάδα Πχ η εντολή a++; αντιστοιχεί στην εντολή καταχώρησης a = a + 1; Και η εντολή a-- αντιστοιχεί στην a = a - 1;
Τελεστές αύξησης και μείωσης (2/2) Προθεματικοί ++a, αντιστοιχούν σε αύξηση της μεταβλητής πριν τον υπολογισμό της τιμής της παράστασης. Μεταθεματικοί a++, αντιστοιχούν σε αύξηση της μεταβλητής μετά τον υπολογισμό της παράστασης Πχ ++a = 3 ; a++ = 3; /* η τελικήτιμήτουa είναι 3 */ /* η τελικήτιμήτουa είναι 4*/
Ιεραρχία και κανόνας προσεταιριστικότητας Παρενθέσεις ++, -- προθεματικοί (από δεξιά προς τα αριστερά) *, /, % (από αριστερά προς τα δεξιά) +, - (από αριστερά προς τα δεξιά) η αύξηση και μείωση των μεταθεματικών τελεστών αύξησης και μείωσης γίνεται μετά τον υπολογισμό της παράστασης
Παραδείγματα (1/3) πχ η παράσταση --y*y/2*z-1/++x υπολογίζεται: Αύξηση του x, μείωση του y, πολ/σμός y*y, διαίρεση με 2, πολ/σμός με z, διαίρεση 1/χ καιηαφαίρεσηστοτέλος
Παραδείγματα (2/3) Η εντολή ++x = ++x*5; με ποια από τις παρακάτω είναι ισοδύναμη 1) ++x*=5; 2) x = (++(++x))*5;
Παραδείγματα (2/3) Στην εντολή ++x = ++x*5; Η σειρά των πράξεων είναι Αύξηση του x (από δεξιά προς τα αριστερά 2 φορές) Πολ/σμός με 5 Καταχώρηση αποτελέσματος στο x
Παράδειγμα #include <stdio.h> #include <stdlib.h> int main(void){ int oros1, oros2, athroisma; //Dhlwseis metavlhtwn } oros1 = 6; oros2 = 3; athroisma = oros1 + oros2; system( Pause ); return 0;
Κωδικοποίηση ASCII 128 διακεκριμένοι χαρακτήρες Κάθε χαρακτήρας αποθηκεύεται σε ένα byte και έχει σαν μορφή τον ακέραιο που του αντιστοιχεί σε ASCII. Ανάλογα με τον προσδιοριστή που θα επιλέξουμε στην εκτύπωση, έχουμε και διαφορετικό αποτέλεσμα. Πχ char c = 1 ; /* Αρχικοποίηση κατά τον ορισμό */ printf( Character: %c ASCII Code: %d, c,c); Θα εκτυπωθεί: Character: 1 ASCII Code:49
Μη εκτυπώσιμοι χαρακτήρες (1/2) Οι πρώτοι 32 και ο τελευταίος χαρακτήρας είναι μη εκτυπώσιμοι και χρησιμοποιούνται σε εντολές της C \0 μηδενικός, δηλώνει το τέλος συμβολοσειράς \b backspace \t κενό παραγράφου \n νέα γραμμή
Μη εκτυπώσιμοι χαρακτήρες (2/2) \ διπλή απόστροφος \ απλή απόστροφος \\ πλάγια γραμμή
Συναρτήσεις εξόδου της <stdio.h> (1/3) Εντολή εξόδου printf(συμβολοσειρά ελέγχου μορφής, λίστα εξόδου): Εκτύπωση συμβολοσειράς: printf( Εκτυπώνεται 1 συμβολοσειρά \n ); printf( Ο αριθμός που διαβάστηκε είναι %d\n,a); printf( Ο αριθμός που διαβάστηκε είναι %4d\n ), χρησιμοποιούνται 4 στήλες εκτύπωσης για τη μεταβλητή a
Συναρτήσεις εξόδου της <stdio.h> (2/3) Χρήση της printf με τον αντίστοιχο προσδιοριστή τύπου δεδομένων printf( Εκτύπωση του χαρακτήρα %c \n,c); printf( Εκτύπωση μεταβλητής τύπου float %f\n,f)
Συναρτήσεις εξόδου της <stdio.h> (3/3) Μπορούν να εκτυπωθούν περισσότερες από μία μεταβλητές με χρήση του κατάλληλου προσδιοριστή εξόδου Πχ int a = 45; char c = w ; printf( Ένα παράδειγμα εκτύπωσης του ακεραίου %d και του χαρακτήρα %c, a, c);
Συναρτήσεις εισόδου της <stdio.h> (1/3) Εντολή Εισόδου scanf(συμβολοσειρά ελέγχου μορφής, λίστα εισόδου): int a; /* μεταβλητή τύπου int */ scanf( %d,&a); /* διάβασμα ακεραίου, απόδοση τιμής στη μεταβλητή a*/ scanf( %<A1>d,&a); /* διάβασμα των Α1 πρώτων ψηφίων του ακεραίου και απόδοση τιμής στη μεταβλητή a */ Χρήση της scanf με τον αντίστοιχο προσδιοριστή char a; /* μεταβλητή τύπου char*/ scanf( %c,&a) /*διάβασμα 1 χαρακτήρα*/
Συναρτήσεις εισόδου της <stdio.h> (2/3) float a; /* μεταβλητή τύπου float*/ scanf( %f,&a) /* διάβασμα 1 αριθμού τύπου float*/ double a; /* μεταβλητή τύπου double*/ scanf( %lf,&a) /* διάβασμα 1 αριθμού τύπου double*/ long double a; /* μεταβλητή τύπου long double*/ scanf( %Lf,&a) /* διάβασμα 1 αριθμού τύπου long double*/
Συναρτήσεις εισόδου της <stdio.h> (3/3) Ηλίσταεισόδουτηςscanf μπορεί να περιέχει περισσότερες από μία μεταβλητές διαχωρισμένες με κόμμα Πχ. int a; char c; float f; scanf( %d %c %f, &a, &c, &f);