View on GitHub

oop

Αντικειμενοστραφής Προγραμματισμός (C++)

ΕΡΓΑΣΤΗΡΙΟ ΧΕΙΜΕΡΙΝΟΥ ΕΞΑΜΗΝΟΥ 2020-2021

Λίστα εργαστηρίων

C++

Δια ζώσης

Εξ’ αποστάσεως


Εργαστηριακές ασκήσεις 2020-2021

Άσκηση 1: Rock paper scissors (Πέτρα Χαρτί Ψαλίδι)

Παράδοση στο ecourse μέχρι τις 23/10/2020.

Χρησιμοποιήστε αντικειμενοστραφή προγραμματισμό με τη γλώσσα C++ για να υλοποιήσετε μια έκδοση του παιχνιδιού “rock paper scissors” που να εκτελείται από τη γραμμή εντολών και στην οποία οι αντίπαλοι να είναι ο χρήστης του προγράμματος και ο υπολογιστής. Ένας αγώνας θα έχει 7 γύρους και σε κάθε γύρο θα ζητείται από το χρήστη να εισάγει την επιλογή του που θα μπορεί να είναι R ή P ή S για rock, paper ή scissors αντίστοιχα. O υπολογιστής θα πραγματοποιεί τυχαία επιλογή και ο γύρος θα τελειώνει όταν θα υπάρχει νικητής, ο οποίος και θα εμφανίζεται στην οθόνη (USER ή MACHINE). Στο τέλος των 7 γύρων θα εμφανίζεται ο νικητής και το σκορ.

Λύση άσκησης 1

Άσκηση 2: Complex numbers (μιγαδικοί αριθμοί)

Παράδοση στο ecourse μέχρι τις 20/11/2020.

Α) Γράψτε ένα πρόγραμμα που να υλοποιεί την κλάση μιγαδικός αριθμός (Complex) και να παρέχει την ακόλουθη λειτουργικότητα.

Πληροφορίες για τους μιγαδικούς και τις πράξεις με αυτούς μπορείτε να βρείτε στο διαδίκτυο.

Β) Ελέγξτε όλες τις λειτουργίες της κλάσης με unit tests της βιβλιοθήκης catch2 και με τη χρήση της κλάσης std::complex που ορίζεται στο αρχείο επικεφαλίδας complex. Δείτε το https://en.cppreference.com/w/cpp/numeric/complex και το https://github.com/catchorg/Catch2. Μπορείτε να κατεβάσετε τη single file header από εδώ.

Γ) Δημιουργήστε ένα GUI (Graphical User Interface) χρησιμοποιώντας το framework wxWidgets https://www.wxwidgets.org/. To GUI να δίνει τη δυνατότητα στο χρήστη να συμπληρώσει τα στοιχεία 2 μιγαδικών αριθμών και να επιτρέπει τη διενέργεια των πράξεων πρόσθεση, αφαίρεση, πολλαπλασιασμός και διαίρεση, πατώντας πλήκτρα σε μια γραφική διεπαφή.

Δίνεται κώδικας που παρέχει μια αρχική υλοποίηση της κλάσης Complex που περιέχει την υπερφόρτωση του τελεστή + και την υπερφόρτωση του τελεστή «. Επιπλέον δίνεται ένα παράδειγμα unit test για τον έλεγχο λειτουργίας του τελεστή +. Ο κώδικας αυτός μπορεί να χρησιμοποιηθεί ως βάση έναρξης της εργαστηριακής άσκησης.

Λύση άσκησης 2

Άσκηση 3: Λεξικό

Παράδοση στο ecourse μέχρι τις 19/12/2020.

Γράψτε ένα πρόγραμμα που να εμπεριέχει μια κλάση Lexicon που να διαβάζει τα περιεχόμενα ενός αρχείου με λέξεις της αγγλικής γλώσσας (το αρχείο θα περιέχει μια λέξη ανά σειρά). Το πρόγραμμα να προσφέρει μέσω ενός μενού επιλογών τις ακόλουθες λειτουργίες:

  1. Nα εμφανίζει το πλήθος και εφόσον ο χρήστης επιθυμεί όλες τις λέξεις που έχουν το πλήθος γραμμάτων που θα δίνει ο χρήστης.
  2. Nα εμφανίζει το πλήθος και εφόσον ο χρήστης επιθυμεί όλες τις λέξεις που ξεκινούν με μια ακολουθία γραμμάτων που θα δίνει ο χρήστης.
  3. Nα εμφανίζει το πλήθος και εφόσον ο χρήστης επιθυμεί όλες τις λέξεις που τελειώνουν με μια ακολουθία γραμμάτων που θα δίνει ο χρήστης.
  4. Nα εμφανίζει το πλήθος και εφόσον ο χρήστης επιθυμεί όλες τις λέξεις που περιέχουν μια ακολουθία γραμμάτων που θα δίνει ο χρήστης τόσες συνεχόμενες φορές όσες επίσης θα δίνει ο χρήστης.
  5. Nα εμφανίζει το πλήθος και εφόσον ο χρήστης επιθυμεί όλες τις λέξεις που περιέχουν σε θέσεις που θα επιλέγει ο χρήστης συγκεκριμένα γράμματα (για παράδειγμα ba-a-a σημαίνει ότι αναζητείται οποιαδήποτε λέξη που περιέχει σε οποιοδήποτε θέση τη σειρά γραμμάτων ba-a-a με το - να σημαίνει οποιοδήποτε γράμμα, οπότε τέτοιες λέξεις είναι οι bahamas και banana).

Το πρόγραμμα να διαβάζει το αρχείο εισόδου ως παράμετρο γραμμής εντολών (χρησιμοποιήστε ως αρχείο που περιέχει λέξεις της αγγλικής γλώσσας, το αρχείο “wordlist.10000.txt” που μπορείτε να μεταφορτώσετε από το https://www.mit.edu/~ecprice/wordlist.10000).

Γράψτε συναρτήσεις ελέγχου στο catch2 που να ελέγχουν και τις 5 λειτουργίες του προγράμματος.

Παράδειγμα εκτέλεσης προγράμματος

  $ lexicon.exe                                                      
  File loaded:wordlist.10000.txt                                     
  1. Find words of size                                              
  2. Find words starting with                                        
  3. Find words ending with                                          
  4. Find words including                                            
  5. Find words including pattern                                    
  6. Exit                                                            
  Input choice:1                                                     
  Input word length:16                                               
  Words found=3                                                      
  Display words (y/n):y                                              
  characterization responsibilities sublimedirectory                 
  1. Find words of size                                              
  2. Find words starting with                                        
  3. Find words ending with                                          
  4. Find words including                                            
  5. Find words including pattern                                    
  6. Exit                                                            
  Input choice:2                                                     
  Input starting letters:re                                          
  Words found=360                                                    
  Display words (y/n):n                                              
  1. Find words of size                                              
  2. Find words starting with                                        
  3. Find words ending with                                          
  4. Find words including                                            
  5. Find words including pattern                                    
  6. Exit                                                            
  Input choice:3                                                     
  Input ending letters:ing                                           
  Words found=522                                                    
  Display words (y/n):n                                              
  1. Find words of size                                              
  2. Find words starting with                                        
  3. Find words ending with                                          
  4. Find words including                                            
  5. Find words including pattern                                    
  6. Exit                                                            
  Input choice:4                                                     
  Input sequence of letters and repetitions:an 2                     
  Words found=1                                                      
  Display words (y/n):y                                              
  banana                                                             
  1. Find words of size                                              
  2. Find words starting with                                        
  3. Find words ending with                                          
  4. Find words including                                            
  5. Find words including pattern                                    
  6. Exit                                                            
  Input choice:5                                                     
  Input pattern:ba-a-a                                                                                                          
  Words found=2                                                      
  Display words (y/n):y                                              
  bahamas banana                                                     
  1. Find words of size                                              
  2. Find words starting with                                        
  3. Find words ending with                                          
  4. Find words including                                            
  5. Find words including pattern                                    
  6. Exit                                                            
  Input choice:6                                                                                                                                                                    

Λύση άσκησης 3


Λυμένες εργαστηριακές ασκήσεις προηγούμενων ετών

Άσκηση 1

Λύση άσκησης 1

Επιπλέον ερωτήματα άσκησης 1

Λύση επιπλέον ερωτημάτων άσκησης 1

Άσκηση 2

Δημιουργήστε ένα πρόγραμμα που να υπολογίζει την ημερομηνία και την ημέρα της εβδομάδας για το ημερολογιακό έτος 2020. Για το σκοπό αυτό θα κατασκευαστεί η κλάση date2020.

Αρχεία άσκησης

Η μεταγλώττιση και η εκτέλεση του προγράμματος γίνεται ως εξής:

$ g++ date2020.cpp main.cpp -o main -std=c++11
./main

$ g++ date2020.cpp tests.cpp -o tests -std=c++11
./tests

Λύση άσκησης 2

Άσκηση 3 (1η εργαστηριακή άσκηση 2019-2020)

Η εκφώνηση της άσκησης βρίσκεται στο 20200217_assignment1.pdf

A’ Λύση άσκησης 3

B’ Λύση άσκησης 3 (με διαμέριση κώδικα)


Χρήση βιβλιοθηκών στη C++

Catch2

https://github.com/catchorg/Catch2

Παραδείγματα χρήσης του catch2

wxWidgets

Tutorials για wxWidgets