Α. Πρώτη προαπαιτούµενη Κάθε οµάδα θα πρέπει να δηµιουργήσει ένα πρόγραµµα, που περιγράφει µία από τις παρακάτω προτάσεις έννοιες. Το πρόγραµµα θα τυπώνει µήνυµα(τα) στην οθόνη και θα το γράφει σε αρχείο. (κάποιες ιδέες οδηγίες δίνονται κατόπιν σελ.5-9) Α1. Ποιο περιβάλλον χρησιµοποιείτε για να εκτελέσετε ένα πρόγραµµα C++ και πως. Α2. Παρατηρήστε τα χρώµατα του περιβάλλοντος Dev C++ και τυπώστε τις παρατηρήσεις σας Α3. Εξηγήστε τον παραπάνω κώδικα µε προτάσεις #include <iostream> using namespace std; int main() { } cout << "PAME - no greek chars!!\n"; system("pause"); return 0; Α4. Τυπώστε τα µηνύµατα λάθους όταν θα παραλειφθεί µια γραµµή από τον κώδικα που υπάρχει παραπάνω (στο Π3) µε προτάσεις. Α5. ώστε πρακτικές οδηγίες για «όµορφο» προγραµµατισµό Α6. ώστε εξηγήσεις για το «αλφαριθµητικό» "PAME - no greek chars!!\n" Α7. Περιγράψετε τους πιο συνήθεις χαρακτήρες-ακολουθίες διαφυγής (escape sequence) Α8. Περιγράψτε τον τελεστή setw, εξηγώντας πως εµφανίζονται τα αποτελέσµατα σε πεδία µικρότερα αλλά και µεγαλύτερα από το εύρος που καθορίζει. Α9. Eξηγήστε την οδηγία #include <iostream> και γενικά τα «αρχεία κεφαλίδες» (header files) Α10. Περιγράψτε την διαδικασία ενός «εκτελέσιµου αρχείου» (*.exe). BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 1
Β. εύτερη προαπαιτούµενη Κάθε οµάδα θα πρέπει να δηµιουργήσει ένα πρόγραµµα, στο οποίο θα εισάγονται τιµές για τις µεταβλητές από το πληκτρολόγιο για να γίνει υπολογισµός της παράστασης. Κατόπιν θα διαβάζονται τιµές από αρχείο (που έχει ήδη δηµιουργηθεί). ηλώστε τις µεταβλητές σας π.χ. τύπου int ή float... Ζητήστε από τον χρήστη (prompt Dose..: ) να εισάγει τις τιµές και υπολογίστε την παράσταση και κατόπιν διαβάστε τις από αρχείο που έχετε ήδη δηµιουργήσει π.χ. µε Notepad. Β1. Υπολογίστε την παράσταση x = a * b * c Β2. Υπολογίστε την παράσταση m = a + b + c 5 Β3. Υπολογίστε την παράσταση m = a * x 2 + b * x Β4. Υπολογίστε την παράσταση m = a % x + b / x Β5. Υπολογίστε την παράσταση m = a / x + b / y Β6. Υπολογίστε την παράσταση m = a * x 3 + 7 *y Β7. Υπολογίστε την παράσταση m = 5 * x + 6 y Β8. Υπολογίστε την παράσταση m = a % x + b * y 3 Β9. Υπολογίστε την παράσταση m = x % x + a * x x / y Β10. Υπολογίστε την παράσταση m = (3 *x *(3+(7*y)))/6 x=y=0 means x=(y=0) BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 2
Βασικοί Τύποι εδοµένων Γ. Τρίτη προαπαιτούµενη Κάθε οµάδα θα πρέπει να δηµιουργήσει ένα πρόγραµµα που υπολογίζει µια από τις παρακάτω µαθηµατικές συναρτήσεις. Στη βιβλιοθήκη <cmath> υπάρχουν έτοιµες µαθηµατικές συναρτήσεις (x,y τύπου double) Γ1. Υπολογίστε την sqrt(x) = τετραγωνική ρίζα του x Γ2. Υπολογίστε την pow(x,y) = ύψωση του x στην δύναµη y Γ3. Υπολογίστε floor(x) = ο µεγαλύτερος ακέραιος <= x (αν x > 0 είναι το ακέραιο µέρος) Γ4. Υπολογίστε ceil(x) = ο µικρότερος ακέραιος >= x (αν x < 0 είναι το ακέραιο µέρος) Γ5. Υπολογίστε την abs(x) = απόλυτη τιµή του x Γ6. Υπολογίστε τo fmod(x,y) = υπόλοιπο της διαίρεσης x/y (αντίστοιχο του τελεστή % για ακεραίους) Γ7. Υπολογίστε την exp(x) = εκθετική συνάρτηση του x Γ8. Υπολογίστε την log(x) ή log10(x) = λογαριθµική συνάρτηση του x Γ9. Υπολογίστε τηv sin(x) ή cos(x) ή tan(x) = τριγωνοµετρική συνάρτηση του x Γ10. Υπολογίστε την asin(x) ή acos(x) ή atan(x) = αντίστροφη τριγωνοµετρική συνάρτηση του x Συµβουλευτείτε και τις ιστοσελίδες C++ Programming/Code/Standard C Library/Math http://en.wikibooks.org/wiki/c%2b%2b_programming/code/standard_c_library/math#standard_c_math C++ Reference/Standard C Library/Standard C Math http://www.cppreference.com/wiki/c/math/start C++ Reference/c math http://www.cplusplus.com/reference/clibrary/cmath/ Πανεπιστήμιο Κρήτης/C++/notes/Συναρτήσεις/Μαθηματικές Συναρτήσεις http://www.materials.uoc.gr/~tetycpp/node5.html#section00560000000000000000 BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 3
. Τέταρτη προαπαιτούµενη Κάθε οµάδα θα πρέπει να δηµιουργήσει τυχαίους αριθµούς και να ελέγξει αν δηµιουργήθηκαν στο επιθυµητό διάστηµα Στη βιβλιοθήκη <cstdlib> υπάρχουν οι συναρτήσεις rand και srand,που είναι χρήσιµες στην δηµιουργία ακολουθίας (ψευδο)τυχαίων αριθµών. Η συνάρτηση rand() επιστρέφει ένα ακέραιο αριθµό στο διάστηµα [0,RAND_MAX], µε ίσες πιθανότητες να βρίσκεται οπουδήποτε στο διάστηµα αυτό (οµοιόµορφη κατανοµή). Η τιµή RAND_MAX για τον Dev C++ compiler είναι 32767. Η συνάρτηση srand(time(0)) αρχικοποιεί την ακολουθία της rand µε διαφορετική τιµή, που προσδιορίζεται από την ένδειξη του ρολογιού του υπολογιστή (χρειάζεται και η βιβλιοθήκη <ctime>) Συνήθως χρειαζόµαστε τυχαίους αριθµούς, ακέραιους ή πραγµατικούς, σε κάποιο άλλο διάστηµα: x=a+rand()%w ακέραιος αριθµός στο διάστηµα [a,a+w) (πρέπει w<rand_max) x=rand()/32767.0 πραγµατικός αριθµός στο διάστηµα [0,1], RAND_MAX=32767 x=a+rand()*w/32767.0 πραγµατικός αριθµός στο διάστηµα [a,a+w], RAND_MAX=32767 1. ηµιουργήστε δυο τυχαίους ακεραίους µεγαλύτερους από 40 και ελέγξτε την εγκυρότητα τους 2. ηµιουργήστε δυο τυχαίους ακεραίους µικρότερους από 100 και ελέγξτε την εγκυρότητα τους 3. ηµιουργήστε δυο τυχαίους ακεραίους µεγαλύτερους ή ίσους µε 8 και ελέγξτε την εγκυρότητα τους 4. ηµιουργήστε δυο τυχαίους ακεραίους µικρότερους από 100 και ελέγξτε την εγκυρότητα τους 5. ηµιουργήστε πέντε τυχαίους ακεραίους ίσους ή µε 5 ή µε 10 και ελέγξτε την εγκυρότητά τους 6. ηµιουργήστε δυο τυχαίους ακεραίους στο διάστηµα 5..10 και ελέγξτε την εγκυρότητα τους 7. ηµιουργήστε δυο τυχαίους ακεραίους στο διάστηµα 1..6 και ελέγξτε την εγκυρότητα τους 8. ηµιουργήστε δυο πραγµατικούς διάστηµα 5..10 και ελέγξτε την εγκυρότητα τους 9. ηµιουργήστε δυο πραγµατικούς διάστηµα 1..6 και ελέγξτε την εγκυρότητα τους 10. Γράψτε δυο τυχαίους αριθµούς σε ένα αρχείο. Συµβουλευτείτε και τις ιστοσελίδες C and C++ programming.com/function Lookup/srand http://www.cprogramming.com/fod/srand.html C++ Reference/C Library/cstlib/rand http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ Μορφοποίηση πραγµατικών αριθµών cout << setiosflags(ios::fixed) << setiosflags(ios::showpoint) << setprecision(3) BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 4
(Κάποιες ιδέες για τις ασκήσεις της Α προαπαιτούµενης) Α1.Οδηγίες εκτέλεσης ενός προγράµµατος C++ Το περιβάλλον ανάπτυξης των προγραµµάτων που έχει εγκατασταθεί στις αίθουσες των εργαστηρίων είναι η έκδοση 4.9.9.2 του µεταγλωττιστή C++ της εταιρίας Bloodshed. http://www.bloodshed.net/devcpp.html http://www.uniqueness-template.com/devcpp/ http://en.wikiversity.org/wiki/installing_and_using_dev-c%2b%2b#creating_a_project http://www.docstoc.com/docs/19445404/dev-c---tutorial Μπορείτε να δηµιουργήσετε ένα νέο Project ως εξής : Από τη µπάρα µε τις εντολές θα επιλέξετε File και εν συνεχεία New Project. Στην φόρµα που εµφανίζεται θα πρέπει να επιλέξετε "Console Application" και "C++ Project" και να πατήσετε "OK". Έπειτα θα πρέπει να αποθηκεύστε το project. BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 5
Ο προεπιλεγµένος φάκελος είναι ο φάκελος της εγκατάστασης και καλό θα είναι να µην τον χρησιµοποιείται για την αποθήκευση των εργασιών σας. Το προεπιλεγµένο όνοµα αποθήκευσης του Project είναι Project1.dev. Αν δίνεται διαφορετικά ονόµατα στα Projects που δηµιουργείται τότε µπορείτε να τα αποθηκεύεται στον ίδιο φάκελο διαφορετικά θα πρέπει να δηµιουργείτε ένα νέο φάκελο κάθε φορά για να µην διαγράψετε τις προηγούµενες εργασίες σας. Μετά την αποθήκευση του Project εµφανίζεται αυτόµατα ο "σκελετός" ενός νέου προγράµµατος όπως παρακάτω : #include <iostream> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { system("pause"); return 0; } H εντολή system("pause") εξυπηρετεί την λειτουργία της συνάρτησης getch() οπότε δεν χρειάζεται η βιβλιοθήκη <conio.h>. H main είναι πάντα int γιατί το εκτελέσιµο πρόγραµµα θα χρησιµοποιηθεί στα Windows, οπότε θα πρέπει να επιστρέφει µια τιµή. Για να εκτελέσετε την εφαρµογή, µετά την πληκτρολόγηση των εντολών του προγράµµατος σας, θα πρέπει να µεταβείτε στη οριζόντια µπάρα µε τις εντολές Execute και στην επιλογή Compile & Run (F9). BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 6
Αν δεν έχετε αποθηκεύσετε το πηγαίο κώδικα θα γίνει σε αυτό το σηµείο (σαν προεπιλεγµένος φάκελος αποθήκευσης θα είναι ο φάκελος του project). Αν δεν θέλετε να αλλάξετε το προεπιλεγµένο όνοµα του αρχείου σας (main.cpp) τότε θα πρέπει να πατήσετε πλήκτρο Save και εν συνεχεία θα γίνει η εκτέλεση του προγράµµατος σας. Finding the Executable Your.exe should be wherever you saved your project, and it will be named after your project. main.cpp Α2. Μαύρο Απλό Γαλάζιο Για τα σχόλια Πράσιν Directives - οδηγίες προς τον preprocessor Κόκκινο Αλφαριθµητικά Bold Keywords Α3. Ένα πρόγραµµα αρχίζει µε την #include <iostream> (directives για τον preprocessor σε µια γραµµή χωρίς ; στο τέλος για πιο πολλές γραµµές χρήση \) Εντολές που αρχίζουν µε # εκτελούνται από τον preprocessor πριν γίνει compiler το πρόγραµµα Το αρχείο <iostream> είναι ένα header file Η εντολή using namespace std υποδεικνύει από ποιο χώρο διαλέγονται τα ονόµατα Η πρώτη συνάρτηση που εκτελείται είναι η main() BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 7
Η main επιστρέφει ένα ακέραιο int Το σώµα µιας συνάρτησης (main) µέσα σε {} Το cout << "PAME.."; είναι µια εντολή που τυπώνει στην οθόνη ότι είναι µέσα στα " " Κάθε εντολή τελειώνει µε ; Α4. Όταν δεν υπάρχει η 1 η γραµµή «cout undeclared (first use this function)» Όταν δεν υπάρχει η 2 η γραµµή «cout undeclared (first use this function)» Όταν δεν υπάρχει η 3 η, 6 η, 11 η γραµµή «δεν υπάρχει πρόβληµα» Α5. ώστε χαρακτηριστικό όνοµα στο αρχείο σας που θα σας υπενθυµίζει τι κάνει Η 1η γραµµή πρέπει να είναι σχόλιο που εξηγεί τον σκοπό του προγράµµατος, τυπώνει τον συγγραφέα & την ηµ/νία Ολο το σώµα της συνάρτησης να είναι σε εσοχή (χρησιµοποιείστε το tab ή 3 κενά) Αφήνετε ένα κενό πριν και µετά τον τελεστή << Ο τελευταίος χαρακτήρας µιας συνάρτησης να είναι το \n ώστε ο cursor να µείνει στην επόµενη γραµµή. Αφήνετε µια κενή γραµµή ανάµεσα στις δηλώσεις και τις εντολές. Μην αφήνετε πολλές συνεχόµενες κενές γραµµές Α6. Μέσα στα «..» είναι µια αλφαριθµητική σταθερά (string constant) Mπορεί να γραφτεί και σε δυο γραµµές..και νάχω ίδιο αποτέλεσµα Τα κενά µέσα στα «..» αντιµετωπίζονται σαν χαρακτήρες Το αλφαριθµητικό µπορεί να αναπαρασταθεί είτε ως πίνακας χαρακτήρων είτε ως αντικείµενο µιας κλάσης. Ο χαρακτήρας \n στο τέλος είναι χαρακτήρας διαφυγής, που αναγκάζει την επόµενη έξοδο να εµφανιστεί σε να γραµµή Α7. BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 8
Α8. Ο χειριστής setw είναι ένας τελεστής που χρησιµοποιείτε µαζί µε τον τελεστή εισαγωγής << και αλλάζει το πλάτος ενός πεδίου κατά την έξοδο (π.χ. cout<<setw(8)<< okto\n ). Προϋποθέτει την ενσωµάτωση του αρχείου iomanip ( #include <iomanip>) Α9. Το #include <iostream> δεν είναι εντολή δεν τελειώνει µε ; Στα αρχεία-κεφαλίδες γράφουµε δηλώσεις οδηγίες Το αρχείο iostream πρέπει να περιλαµβάνεται σε κάθε πρόγραµµα, που έχει λειτουργίες ροής εισόδου -εξόδου #include <iostream> µε την χρήση < > αναφερόµαστε στον standard include κατάλογο #include my_header.h αναζήτηση του αρχείου κεφαλίδα στον τρέχοντα κατάλογο #include /users/george/c++/includes/01head.h δίνουµε όλο το µονοπάτι Α10. To αρχείο µε τον πηγαίο κώδικα λέγεται mine.cpp Στο αρχείο mine.cpp ενσωµατώνονται τα αρχεία κεφαλίδες theirs.h κα mine.h.. Συµβουλευτείτε και τις ιστοσελίδες Object-Oriented Programming in C++ Robert Lafore http://aetos.it.teithe.gr/~vassik/downloads/methodologies/lafore_oop.pdf Thinking In C Bruce Eckel http://www.mindviewinc.com/cds/thinkinginc/ http://aetos.it.teithe.gr/~dkatzi/books/thinking_in_c++_2nd_edition.pdf C++ Weekend Crash Course Stephen R. Davis http://www.vo2ov.com/c-weekend-crash-course-repost-_115011.html http://aetos.it.teithe.gr/~dkatzi/books/c++_weekend_crash_course.pdf An Introduction to C++ by Saveen Reddy and G. Bowden Wise http://www.acm.org/crossroads/xrds1-1/ovp.html cplusplus.com http://www.cplusplus.com/ Cprogramming.com http://www.cprogramming.com/tutorial.html#c++tutorial cppreference.com http://www.cppreference.com/wiki/ BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 9
ΡΕΥΜΑ ΕΞΟ ΟΥ Output Stream 01OutToScreen.cpp // Έξοδος στην Οθόνη //Περιγράφει τον σκοπό του προγράµµατος, Συγγραφέα & Ηµ/νία //KΛΑΣΗ ostream µε αντικείµενο το cout - ΡΕΥΜΑ ΕΞΟ ΟΥ //ΤΕΛΕΣΤΗΣ ΕΙΣΑΓΩΓΗΣ << εισάγει την πληροφορία στο cout #include <iostream>//υποδεικνύει στο preprocessor να συµπεριλάβει το αρχείο //<iostream>. Εκεί ορίζεται ότι το αντικείµενο cout αντιστοιχεί στην οθόνη using namespace std; //θα χρησιµοποιηθεί o std χώρος ονοµάτων (std::cout<<endl;) //συνάρτηση που αρχίζει την εκτέλεση του προγράµµατος int main(int argc,char *argv[] ) { cout << "PAME - no greek chars!!\n"; cout << "To cout EINAI ANTIKEIMENO THS KLASHS ostream!!!\n" << "output stream: REYMA EXODOU\n\n"; cout << "O TELESTHS EISODOU << YPERFORTOTHIKE STHN KLASH ostream\n" << "GIA NA EISAGEI PLHROFORIES STO REYMA EXODOU\n"; cout << endl; system("pause"); //περιµένει µέχρι να πατηθεί πλήκτρο return 0; //δείχνει ότι το πρόγραµµα τελειώνει επιτυχώς } //τέλος της main BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 10
02OutToFile.cpp // Έξοδος σε Αρχείο //Eγγραφή στο αρχείο "OutΤο.txt", VK 31/01/2010 //KΛΑΣΗ ofstream - ΡΕΥΜΑ ΕΞΟ ΟΥ ΣΕ ΑΡΧΕΙΟ #include <iostream> #include <fstream> //υποδεικνύει στο preprocessor να συµπεριλάβει το αρχείο <fstream> using namespace std; //θα χρησιµοποιηθεί o std χώρος ονοµάτων (std::cout<<endl;) //συνάρτηση που αρχίζει την εκτέλεση του προγράµµατος int main(int argc,char *argv[] ) { ofstream fo("outto.txt"); //δηµιουργία αντικειµένου fo της κλάσης ofstream //& σύνδεση του µε το πραγµατικό αρχείο } fo << "WRITE FILE OutTo.txt!!\n"; fo << "To cout EINAI ANTIKEIMENO THS KLASHS ostream!!!\n" << "output stream: REYMA EXODOU\n\n"; fo << "O TELESTHS EISODOU << YPERFORTOTHIKE STHN KLASH ostream\n" << "GIA NA EISAGEI PLHROFORIES STO REYMA EXODOU\n"; fo << endl; fo << "ENA ARXEIO EGGRAFHS EINAI ANTIKEIMENO THS KLASHS ofstream\n"; fo << "O TELESTHS EISODOU MPOREI NA EISAGEI PLHROFORIES SE ARXEIO\n"; fo << endl; fo.close(); cout << "FILE WRITΤEN" << endl; system("pause"); return 0; BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 11
ΡΕΥΜΑ ΕΙΣΟ ΟΥ Input Stream 03InFromScreen.cc // Είσοδος από το Πληκτρολόγιο //Aθροισµα 2 πληκτρολογούµενων ακεραίων - VK 31/01/2010 //KΛΑΣΗ istream µε αντικείµενο το cin - ΡΕΥΜΑ ΕIΣΟ ΟΥ //ΤΕΛΕΣΤΗΣ ΕΞΑΓΩΓΗΣ >> εξάγει την πληροφορία από το cin #include <iostream> using namespace std; //συνάρτηση που αρχίζει την εκτέλεση του προγράµµατος int main(int argc,char *argv[] ) { int a1; //δήλωση ακεραίου int a2; int sum; } cout << "O TELESTHS EXODOU >> YPERFORTOTHIKE STHN KLASH istream\n" << "GIA NA EXAGEI PLHROFORIES APO TO REYMA EISODOU\n\n"; cout << "DOSE PROTO AKERAIO: "; //prompt,να ξέρουµε τι περιµένει απο µάς cin >> a1; //δηλ. ότι περιµένει ένα ακέραιο cout << "DOSE DEYTERO AKERAIO: "; cin >> a2; //περιµένει και άλλον ένα ακέραιο sum = a1 + a2; cout << "\nathroisma " << a1 << " + " << a2 << " DINEI: " << sum <<endl; system("pause"); return 0; BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 12
04ReadFile.cc // Aνάγνωση από Αρχείο //Aθροισµα 2 ακεραίων - Εγγραφή τους σε αρχείο και ΑΝΑΓΝΩΣΗ - VK 31/01/2010 //KΛΑΣΗ istream µε αντικείµενο το cin - ΡΕΥΜΑ ΕIΣΟ ΟΥ //ΤΕΛΕΣΤΗΣ ΕΞΑΓΩΓΗΣ >> εξάγει την πληροφορία από το ρεύµα #include <iostream> #include <fstream> using namespace std; int main(int argc,char *argv[] ) { int a1; int a2; int sum; cout << "DOSE PROTO AKERAIO: "; //5 cin >> a1; cout << "DOSE DEYTERO AKERAIO: "; //4 cin >> a2; sum = a1 + a2; //9 cout << "\nathroisma " << a1 << " + " << a2 << " DINEI: " << sum <<endl; //εγγραφή σε αρχείο: 5 4 9 ofstream fo("sumint.txt"); fo << a1 << " " << a2 << " " << sum << endl; fo.close(); //ανάγνωση από το αρχείο ifstream fi("sumint.txt"); //ορισµός αντικειµένου fi της κλάσης ifstream } fi >> a1 >> a2 >> sum ; //εκτύπωση των αναγνωσθέντων cout << "\nathroisma " << a1 << " + " << a2 << " DINEI: " << sum <<endl; fi.close(); cout << endl; system("pause"); return 0; BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 13
// (απόσπασµα) Σύγκριση δυο ακεραίων BK -Προαπαιτούμενες Ασκήσεις 1ου Εργαστηρίου - σελίs 14