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

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

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

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

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

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

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

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

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

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

Εισαγωγή στους Αλγορίθμους

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

Διοικητική Λογιστική

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 4: Συναρτήσεις

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Κβαντική Επεξεργασία Πληροφορίας

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 7: Υπερφόρτωση τελεστών. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εισαγωγή στους Υπολογιστές

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Ευφυής Προγραμματισμός

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

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

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

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

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

Βέλτιστος Έλεγχος Συστημάτων

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

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Κβαντική Επεξεργασία Πληροφορίας

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

Ηλεκτρονικοί Υπολογιστές

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

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

Διοικητική Λογιστική

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Προγραμματισμός Η/Υ. 6 η ενότητα: Συναρτήσεις. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

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

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Πληροφορική ΙΙ Θεματική Ενότητα 12

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

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Βάσεις Περιβαλλοντικών Δεδομένων

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

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Διδακτική των εικαστικών τεχνών Ενότητα 1

Μηχανολογικό Σχέδιο Ι

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Τεχνικό Σχέδιο - CAD

Πρακτική Άσκηση σε σχολεία της δευτεροβάθμιας εκπαίδευσης

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

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

Ευφυής Προγραμματισμός

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

Γενική Φυσική Ενότητα: Εισαγωγή στην Ειδική Θεωρία της Σχετικότητας

Ευφυής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 9: Ειδικά θέματα γλώσσας C/C++. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

Κβαντική Επεξεργασία Πληροφορίας

Διδακτική των εικαστικών τεχνών Ενότητα 3

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Αερισμός. Ενότητα 1: Αερισμός και αιμάτωση. Κωνσταντίνος Σπυρόπουλος, Καθηγητής Σχολή Επιστημών Υγείας Τμήμα Ιατρικής

Βέλτιστος Έλεγχος Συστημάτων

Εισαγωγή στους Υπολογιστές

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

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

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διδακτική των εικαστικών τεχνών Ενότητα 2

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εφαρμογές των Τεχνολογιών της Πληροφορίας και των Επικοινωνιών στη διδασκαλία και τη μάθηση

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Διδακτική Πληροφορικής

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

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 1: Εισαγωγή. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Γενική Φυσική Ενότητα: Ταλαντώσεις

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Τύποι δεδομένων, μεταβλητές, πράξεις. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Transcript:

Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Συναρτήσεις - Μεταβλητές ΔΙΔΑΣΚΟΝΤΕΣ: Iωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής

Συναρτήσεις / Μεταβλητές

Μαθηματικές Συναρτήσεις Υλοποίηση απλών μαθηματικών λειτουργιών o Απαιτείται η συμπερίληψη του header file <cmath> Παράδειγμα cout << sqrt( 900.0 ); o Το αποτέλεσμα είναι η εκτύπωση της τιμής 30.0 o Όλες οι συναρτήσεις της math library επιστρέφουν double 3/28

Μαθηματικές Συναρτήσεις ceil( x ) cos( x ) exp( x ) fabs( x ) Μέθοδος Περιγραφή Στρογγυλοποίηση προς το πάνω (πλησιέστερο ακέραιο) Συνημίτονο (x σε radians) Exponential e x Απόλυτη τιμή floor( x ) fmod( x, y ) Στρογγυλοποίηση προς τα κάτω (πλησιέστερος ακέραιος) Υπόλοιπο του x/y ως κινητής υποδιαστολής αριθμός log( x ) Φυσικός Λογάριθμος του x (βάση το e) log10( x ) Λογάριθμος του x (βάση το 10) pow( x, y ) Ύψωση του x στην y (x y ) sin( x ) sqrt( x ) tan( x ) Ημίτονο (x σε radians) Τετραγωνική ρίζα Εφαπτομένη (x σε radians) 4/28

Ορισμοί Συναρτήσεων Πρωτότυπο συνάρτησης o Ενημερώνει το μεταγλωττιστή για τον τύπο των παραμέτρων και τον επιστρεφόμενο τύπο της συνάρτησης o int square( int ); Συνάρτηση που λαμβάνει int και επιστρέφει int Κλήση συνάρτησης o square(x); o Παρενθέσεις, τελεστής κλήσης συνάρτησης Πέρασμα παραμέτρου x Η συνάρτηση δέχεται το δικό της αντίγραφο των παραμέτρων o Αφού τερματίσει περνάει πίσω το αποτέλεσμα 5/28

Πρωτότυπα συναρτήσεων Αρχικές δηλώσεις των συναρτήσεων ώστε να μπορούν χρησιμοποιηθούν από πρόγραμμα Το πρωτότυπο πρέπει να ταιριάζει με τον ορισμό της συνάρτησης o Function prototype double maximum( double, double, double ); o Definition double maximum( double x, double y, double z ){ } Υπογραφή συνάρτησης o Το μέρος του πρωτοτύπου με όνομα και παραμέτρους double maximum( double, double, double ); 6/28

Header Files (Αρχεία επικεφαλίδων) Περιέχουν o Πρωτότυπα συναρτήσεων o Ορισμούς τύπων και σταθερών Τα αρχεία επικεφαλίδων έχουν κατάληξη.h o Programmer-defined header files #include "myheader.h" Library header files #include <cmath> 7/28

Γεννήτρια τυχαίων αριθμών rand function (<cstdlib>) o i = rand(); o Παράγει έναν unsigned integer μεταξύ 0 και RAND_MAX (συνήθως 32767) Scaling and shifting o Παράδειγμα i = rand() % 6 + 1; Rand() % 6 παράγει έναν αριθμό μεταξύ 0 και 5 (scaling) + 1 δίνει το διάστημα 1 έως 6 (shift) 8/28

Παράδειγμα for ( int counter = 1; counter <= 20; counter++ ) cout << setw( 10 ) << ( 1 + rand() % 6 ); Παραγωγή και εκτύπωση 20 τυχαίων αριθμών από 1 έως 6. 9/28

Γεννήτρια τυχαίων αριθμών Η χρήση της rand() σε επαναλαμβανόμενες εκτελέσεις του προγράμματος o Αποδίδει την ίδια ακολουθία αριθμών Για να πάρουμε διαφορετικές ακολουθίες αριθμών o Χρησιμοποιούμε μια τιμή φύτρο (seed value) Αντιστοιχεί σε τυχαίο σημείο εκκίνησης της ακολουθίας Το ίδιο seed θα αποδώσει την ίδια ακολουθία o srand(seed); Βιβλιοθήκη: <cstdlib> Χρησιμοποιείται πριν από τη rand() για να προσδιορίσει το τυχαίο σημείο εκκίνησης 10/28

Γεννήτρια τυχαίων αριθμών Μπορούμε να χρησιμοποιήσουμε την τρέχουσα ώρα ως φύτρο (seed) o srand( time( 0 ) ); o time( 0 ); <ctime> Επιστρέφει την τρέχουσα ώρα σε δευτερόλεπτα 11/28

Χαρακτηριστικά Μεταβλητών Οι μεταβλητές χαρακτηρίζονται από διάφορες ιδιότητες o όνομα, τύπο δεδομένων, μέγεθος, τιμή o Τάξη αποθήκευσης Για ποιο διάστημα η μεταβλητή υπάρχει στη μνήμη o Εμβέλεια (Scope) Το τμήμα του προγράμματος που μια αναφορά στη μεταβλητή είναι έγκυρη o Συνδεσιμότητα (Linkage) Όταν ένα πρόγραμμα υλοποιείται σε πολλά αρχεία, ποιά αρχεία μπορούν να τη χρησιμοποιήσουν 12/28

Τάξη αποθήκευσης Automatic Η μεταβλητή δημιουργείται όταν ο έλεγχος εισέρχεται σ ένα block εντολών και καταστρέφεται όταν ο έλεγχος εξέρχεται από το block εντολών Static Οι μεταβλητές εξακολουθούν να υπάρχουν καθ όλη τη διάρκεια ζωής του προγράμματος Extern Η κατάσταση της μεταβλητής είναι γνωστή σε κάθε συνάρτηση που ακολουθεί 13/28

Κανόνες Εμβέλειας Εμβέλεια (Scope) o Η περιοχή του προγράμματος που ένα όνομα (π.χ. μεταβλητής) μπορεί να χρησιμοποιηθεί Εμβέλεια αρχείου (File scope) o Ορίζεται εκτός μιας συνάρτησης, διαθεσιμότητα για όλες τις συναρτήσεις o Σφαιρικές μεταβλητές, οι ορισμοί και τα πρωτότυπα συναρτήσεων Εμβέλεια συνάρτησης (Function scope) o Η περιοχή πρόσβασης περιορίζεται μόνο στη συνάρτηση που ορίζεται το όνομα 14/28

Κανόνες Εμβέλειας Εμβέλεια μπλοκ (Block scope) o Ξεκινά από το σημείο δήλωσης του ονόματος και τερματίζει στο κλείσιμο του μπλοκ που υποδηλώνεται με το σύμβολο } o Τοπικές μεταβλητές, παράμετροι συναρτήσεων o οι static μεταβλητές επίσης έχουν εμβέλεια μπλοκ Άλλο το Storage class και άλλο η εμβέλεια Εμβέλεια πρωτότυπου συνάρτησης o Λίστα παραμέτρων o Τα ονόματα στο πρωτότυπο είναι προαιρετικά Ο μεταγλωττιστής τα αγνοεί 15/28

Κανόνες Εμβέλειας #include <iostream> using std::cout; using std::endl; int x = 1; int main(){ cout << "global x is " << x << endl; int x = 3; cout << "local x in main is " << x << endl; cout << "global x is " << ::x << endl; { int x = 5; cout << "this block's x is" << x << endl; } return 0; } global x is 1 local x in main is 3 this block's x is 5 Καθολική εμβέλεια Τοπική εμβέλεια μέσα στη συνάρτηση Εμβέλεια κατά το χρόνο ζωής του μπλόκ. Ο τελεστής :: μας επιτρέπει να πάρουμε την global μεταβλητή x αντί την τοπική με το ίδιο όνομα 16/28

Κανόνες Εμβέλειας int usestaticlocal( ){ static int x = 5; // x+=5; } int main (){ for (int i=1; i<=5; i++) cout << usestaticlocal() <<" "; } Στατική τοπική μεταβλητή. Αρχικοποιείται μόνο μια φορά και διατηρεί την τιμή της μεταξύ των κλήσεων της συνάρτησης 10 15 20 25 30 17/28

Αναδρομή Αναδρομικές συναρτήσεις o Συναρτήσεις που καλούν τον εαυτό τους o Λύνουν μόνον μια βασική περίπτωση Παράδειγμα - παραγοντικό int factorial( int number ){ if ( number <= 1 ) return 1; else return number * factorial( number - 1 ); } int main (){ cout << factorial(5) <<" "; } 18/28

Inline Συναρτήσεις Inline functions o Χρειάζεται το Keyword inline πριν από τον ορισμό της συνάρτησης o Ζητά από τον μεταγλωττιστή να αντικαταστήσει κάθε κλήση της συνάρτησης στο πρόγραμμα μ ένα αντίγραφο του κώδικα της συνάρτησης Μειώνει την επιβάρυνση από την κλήση μιας συνάρτησης Ο μεταγλωττιστής μπορεί να αγνοήσει την οδηγία inline o Καλή περίπτωση για μικρές και συχνά καλούμενες συναρτήσεις 19/28

Αναφορές Μεταβλητών Οι αναφορές μεταβλητών είναι συνώνυμα άλλων μεταβλητών o Ουσιαστικά πρόκειται για την ίδια μεταβλητή o Μπορεί να χρησιμοποιηθεί και εντός μιας συνάρτησης int count = 1; // declare integer variable count int &cref = count; // create cref as an alias for count ++cref; // increment count (using its alias) Οι αναφορές πρέπει να αρχικοποιούνται όταν δηλώνονται o Διαφορετικά, ο μεταγλωττιστής παράγει error o Dangling reference Αναφορά σε μη ορισμένη μεταβλητή 20/28

Υπερφόρτωση Συναρτήσεων (Function Overloading) Υπερφόρτωση Συναρτήσεων o Συναρτήσεις με το ίδιο όνομα και διαφορετικές παραμέτρους o Υλοποιούν παρόμοια δουλειά Π.χ. συνάρτηση square για ints και συνάρτηση square για floats int square( int x) {return x * x;} float square(float x) { return x * x; } Οι συναρτήσεις που είναι υπερφορτωμένες διαχωρίζονται από την υπογραφή τους o Με βάση το όνομα και τους τύπους των παραμέτρων (η σειρά παίζει ρόλο) o Η αλλαγή απλά στον τύπο του επιστρεφόμενου αποτελέσματος δεν είναι υπερφόρτωση!!! (αλλά λάθος μεταγλώττισης) 21/28

Πρόσθετο Υλικό Μελετήστε και τα παραδείγματα από το Κεφάλαιο 6 του βιβλίου: «C++ How to Program, 9/e Paul & Harvey Deitel» http://media.pearsoncmg.com/ph/esm/deitel/cpp_htp_9/code_examples/code_examples.zip 22/28

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στo πλαίσιo του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Αθηνών» έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 23/28

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0.1 24/28

Σημείωμα Αναφοράς Copyright: Πανεπιστήμιον Πατρών, Ιωάννης Χατζηλυγερούδης, 2015. «Οντοκεντρικός Προγραμματισμός». Έκδοση: 1.0.1 Πάτρα 2015. Διαθέσιμο από τη δικτυακή διεύθυνση: https://eclass.upatras.gr/courses/ceid1105/ 25/28

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση Παρόμοια Διανομή 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-sa/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.

Διατήρηση Σημειωμάτων Οποιαδήποτε αναπαραγωγή ή διασκευή του υλικού θα πρέπει να συμπεριλαμβάνει: το Σημείωμα Αναφοράς το Σημείωμα Αδειοδότησης τη δήλωση Διατήρησης Σημειωμάτων το Σημείωμα Χρήσης Έργων Τρίτων (εφόσον υπάρχει) μαζί με τους συνοδευόμενους υπερσυνδέσμους. 27/28

Σημείωμα Χρήσης Έργων Τρίτων Οι διαφάνειες βασίζονται στο βιβλίο «C++ How to Program, 8th Edition, Harvey M. Deitel, Paul J. Deitel, Prentice Hall.» 28/28