Results 1 to 3 of 3

Thread: C++

  1. #1
    john_dillinger's Avatar
    Join Date
    Mar 2011
    Location
    Desperation
    Posts
    143
    Rep Power
    78

    C++

    Είναι ένα mini tutorial ως προς τον υπολογισμό τών ριζών μίας δευτεροβάθμιας εξίσωσης το οποίο το υπέβαλα για διδασκαλία σε κάποιο Λύκειο.
    Οσοι ασχολούνται με προγραμματσμό γνωρίζουν ότι η C++ και η επερχόμενη C++0x είναι αντικειμενοστραφείς γλώσσες το οποίο σημαίνει ότι μπορούμε να υλοποιήσουμε εφαρμογές χρησσιμοποιώντας μεθόδους και αλγορίθμους που έχουν αναπτυχθεί απο άλλους προγραμματιστές και να τα ενσωματώσουμε σε κάποιο δικό μας έργο (project).
    Είναι κάτι το οποίο απλόχερα το προσφέρει το ελεύθερο λογισμικό.
    Παραθέτω ένα απλό πρόγραμμα που υλοποίησα για τους μαθητές της Β τάξης λυκείου χωρίς χρήση αρχείων .h (headers ή classes).
    Code:
    /* quadratic.cpp
    ** To πρόγραμμα επιλύει εξισώσεις Β βαθμού (quadratic equation) αx^2 + βx + γ = 0 .
    
    ** Σκοπός του κώδικα είνα να παροτρύνει τους μαθητές να ασχοληθούν με το ελεύθερο λογισμικό και την λογική του .
    ** Θα ακολουθήσει το ίδιο πρόγραμμα με αρχεία headers ( classes ) και κατασκευή αντικειμένων (objects) .
    ** επίσης το ίδιο θα γραφεί σε java με το IDE netbeans ( www.netbeans.org ) .
    **
    ** Author: 	john
    ** Date  : 06/12/2011
    ** Language : GNU C++
    ** IDE   : Eclipse Galileo ( www.eclipse.org )
    ** Πλατφόρμα : Linux
    ** Διανομή   : Ubuntu 11.04
    ** To compile : g++ -o quadratic quadratic.cpp 
    ** Εκτέλεση απο τον ίδιο φάκελο που έγινε compilation : ./quadratic αλλοιώς: /path/to/file/quadratic */
    
    
    //εντολές προεπεξεργασίας (εδώ είνα τα default headers της GNU C++)
    #include <stdio.h>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    /* Μέθοδος υπολογισμού της Διακρίνουσας ( determinant() )
       Σημ.: ολες οι μεταβλητές είναι τύπου double δηλαδή αριθμοί κινητής υποδιαστολής διπλής ακρίβειας */
    double determinant(double arg_a, double arg_b, double arg_c) {
       return (arg_b * arg_b) - (4 * arg_a * arg_c);
    } // Τέλος μεθόδου determinant()
    
    // Μέθοδος υπολογισμού και εμφάνισης πραγματικών αποτελεσμάτων - real roots ( realRoots() )
    void realRoots(double arg_a, double arg_b, double arg_sqrt) {
             double firstRoot =        (-arg_b/(2 * arg_a)) +
                                                            (arg_sqrt/(2 * arg_a));
             double secondRoot = (-arg_b/(2 * arg_a)) -
                                                            (arg_sqrt/(2 * arg_a));
             cout << "\nΧ1: \t" << firstRoot << " (Πραγματικός αριθμός) " << "\n";
             cout << "Χ2: \t" << secondRoot << " (Πραγματικός αριθμός) " << "\n";
    } // Tέλος μεθόδου realRoots()
    
    // Μέθοδοι εμφάνισης φανταστικών αποτελεσμάτων - imaginary roots ( outpout1() και outpout2() )
    void output1(double first, double second) {
             cout << "\nΧ1: \t" << first << " + " << second << "i" << " (Μιγαδικός αριθμός) " << "\n";
             cout << "\nΧ2: \t" << first << " - " << second << "i" << " (Μιγαδικός αριθμός) " << "\n";
    }
    
    void output2(double first, double second) {
             second = -(second);
             cout << "\nΧ1: \t" << first << " - " << second << "i" << " (Μιγαδικός αριθμός ) " << "\n";
             cout << "\nΧ2: \t" << first << " + " << second << "i" << " (Μιγαδικός αριθμός) " << "\n";
    }  
    // Tέλος μεθόδων εμφάνισης φανταστικών αποτελεσμάτων - imaginary roots
    
    // Μέθοδος υπολογισμού φανταστικών αποτελεσμάτων ( imaginaryRoots() )
    void imaginaryRoots(double arg_a, double arg_b, double arg_imag_sqrt) {
            double two_a = 2 * arg_a;
            double first_term = (-arg_b)/two_a;
            double second_term = (arg_imag_sqrt)/two_a;
    
            if(second_term >= 0) {
                    output1(first_term, second_term);
            } 
            else {
                    output2(first_term, second_term);
            }
    
    } // Τέλος μεθόδου imaginaryRoots()
    
    // Κύρια μέθοδος main() η οποία θα χρησιμοποιήσει τις μεθόδους παραπάνω ώστε να μας εξάγει τα αποτελέσματα
    int main()
    {
       cout << "\n********************************************************************************************************************\n";
       cout << "*                              Επίλυση εξισώσεων 2ου βαθμού (αx^2 + βx + γ = 0)                                    *";
       cout << "\n********************************************************************************************************************";
       cout << "\n*     Προτείνεται να γίνεται επαλήθευση του αποτελέσματος με τον κλασσικό τρόπο (επίλυση στο τετράδιο ασκήσεων)    *";
       cout << "\n********************************************************************************************************************\n";
       // Δήλωση μεταβλητών της main()
       double a, b, c; // Τα ορίσματα (arguments) που θα εισαγάγει ο χρήστης απο το πληκτρολόγιο
       char n;         /*   Μεταβλητή τύπου char (χαρακτήρα) η οποία ζητήται στο τέλος για συνέχιση ή όχι του προγράμματος
                          Σημ.: θα μπορούσε να είναι boolean (λογική τιμή -αληθές ή ψευδές-) αλλά θα άλλαζε την ροή του κώδικα 
                                στις τελευταίες γραμμές απαιτόντας έναν επιπλέον βρόγχο if-else (TO DO)*/
    
       // Τέλος δηλώσεων των μεταβλητών της main()
       
            // Παρότρυνση και εισαγωγή των ορισμάτων της εξίσωσης (arguments) απο το πληκτρολόγιο
            do {
            cout << "\nΠληκτρολογήστε την τιμή του 'α': "; // Παρότρυνση για εισαγωγή του αριθμού α 
            cin  >> a;                                     // Εισαγωγή του αριθμού και καταχώρηση στην μεταβλητή a
            cout << "Πληκτρολογήστε την τιμή του 'β': ";   // Παρότρυνση για εισαγωγή του αριθμού β
            cin  >> b;                                     // Εισαγωγή του αριθμού β και καταχώρηση στην μεταβλητή b 
            cout << "Πληκτρολογήστε την τιμή του 'γ': ";   // Παρότρυνση για εισαγωγή του αριθμού γ 
            cin  >> c;                                     // Εισαγωγή του αριθμού γ και καταχώρηση στην μεταβλητή c 
    
            /*Υπολογισμός Διακρίνουσας με χρήση της μεθόδου determinant()  και ορίσματα τα a,b,c 
              τα οποία έχει εισαγάγει ο χρήστης απο το πληκτρολόγιο. */
            
            double det = determinant(a, b, c); /* Η μεταβλητή det υπολογίζει την Διακρίνουσα με βάση τα ορίσματα
                                                  Σημ.: εδώ γίνεται η χρήση της μεθόδου determinant() */
            
            // Υπολογισμός και εμφάνιση αποτελεσμάτων
            /**/
            // Αν Διακρίνουσα >= 0
            if (det >= 0) {
                    realRoots(a, b, sqrt(det));  // οι ρίζες είναι πραγματικές - real ( χρήση μεθόδου realRoots() )
            }
            // Αλλοιώς αν διακρίνουσα > 0
            else {
                    imaginaryRoots(a, b, sqrt(-det)); // οι ρίζες είναι φανταστικές - imaginary ( χρήση μεθόδου imaginaryRoots() )
            }
            
            // Παρότρυνση για συνέχεια ή διακοπή του προγράμματος ( Τερματίζεται ή και με ^C σε οποιοδήποτε σημείο )
            cout << "\nΘέλετε να επιλύσετε άλλη άσκηση ?";
            cout << "\nΔώστε 'y' ή 'Y' για 'Ναί' ή 'Οτιδήποτε άλλο για Τερματισμό': ";
            cin  >> n;
            cout << "\n";
            } 
         while (n == 'y' || n == 'Y'); // Με y ή Y ξαναεκτελείται το πρόγμαμμα με οτιδήποτε άλλο τερματίζεται
         return 0;
    } // Τέλος της κύριας μεθόδου main()
    Η άσκηση ήταν να το υλοποιήσουν με αρχεία .h (headers) και δημιουργία αντικειμένων (objects) μέσα στο αρχείο που περιέχει την main().
    Τα παιδιά ενθουσιάστηκαν πάρα πολύ και μέσα σε μία εβδομάδα το είχαν φτιάξει οι πιό πολλοί.
    Θα παραθέσω τις απαντήσεις τους κάποια στιγμή μαζί με τον κώδικα που υπέβαλλαν μετά τις (λίγες) διορθώσεις.
    Σαν να είχαν τελειωμό τα βάσανα και οι καημοί αυτού του κόσμου.
    Αλέξανδρος Παπαδιαμάντης

  2. #2
    suzakias's Avatar
    Join Date
    Jan 2011
    Age
    53
    Posts
    1,089
    Rep Power
    286

    Απ: C++

    αμαν αμαν........ το χανουμε το παιδι σας λεω!!!!!!!!!
    http://www.satdreamgr.com/forum/signaturepics/sigpic123_3.gif

  3. #3

    Απ: C++

    Quote Originally Posted by john_dillinger View Post
    Είναι ένα mini tutorial ως προς τον υπολογισμό τών ριζών μίας δευτεροβάθμιας εξίσωσης το οποίο το υπέβαλα για διδασκαλία σε κάποιο Λύκειο.
    Οσοι ασχολούνται με προγραμματσμό γνωρίζουν ότι η C++ και η επερχόμενη C++0x είναι αντικειμενοστραφείς γλώσσες το οποίο σημαίνει ότι μπορούμε να υλοποιήσουμε εφαρμογές χρησσιμοποιώντας μεθόδους και αλγορίθμους που έχουν αναπτυχθεί απο άλλους προγραμματιστές και να τα ενσωματώσουμε σε κάποιο δικό μας έργο (project).
    Είναι κάτι το οποίο απλόχερα το προσφέρει το ελεύθερο λογισμικό.
    Παραθέτω ένα απλό πρόγραμμα που υλοποίησα για τους μαθητές της Β τάξης λυκείου χωρίς χρήση αρχείων .h (headers ή classes).
    Code:
    /* quadratic.cpp
    ** To πρόγραμμα επιλύει εξισώσεις Β βαθμού (quadratic equation) αx^2 + βx + γ = 0 .
    
    ** Σκοπός του κώδικα είνα να παροτρύνει τους μαθητές να ασχοληθούν με το ελεύθερο λογισμικό και την λογική του .
    ** Θα ακολουθήσει το ίδιο πρόγραμμα με αρχεία headers ( classes ) και κατασκευή αντικειμένων (objects) .
    ** επίσης το ίδιο θα γραφεί σε java με το IDE netbeans ( www.netbeans.org ) .
    **
    ** Author: 	john
    ** Date  : 06/12/2011
    ** Language : GNU C++
    ** IDE   : Eclipse Galileo ( www.eclipse.org )
    ** Πλατφόρμα : Linux
    ** Διανομή   : Ubuntu 11.04
    ** To compile : g++ -o quadratic quadratic.cpp 
    ** Εκτέλεση απο τον ίδιο φάκελο που έγινε compilation : ./quadratic αλλοιώς: /path/to/file/quadratic */
    
    
    //εντολές προεπεξεργασίας (εδώ είνα τα default headers της GNU C++)
    #include <stdio.h>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    /* Μέθοδος υπολογισμού της Διακρίνουσας ( determinant() )
       Σημ.: ολες οι μεταβλητές είναι τύπου double δηλαδή αριθμοί κινητής υποδιαστολής διπλής ακρίβειας */
    double determinant(double arg_a, double arg_b, double arg_c) {
       return (arg_b * arg_b) - (4 * arg_a * arg_c);
    } // Τέλος μεθόδου determinant()
    
    // Μέθοδος υπολογισμού και εμφάνισης πραγματικών αποτελεσμάτων - real roots ( realRoots() )
    void realRoots(double arg_a, double arg_b, double arg_sqrt) {
             double firstRoot =        (-arg_b/(2 * arg_a)) +
                                                            (arg_sqrt/(2 * arg_a));
             double secondRoot = (-arg_b/(2 * arg_a)) -
                                                            (arg_sqrt/(2 * arg_a));
             cout << "\nΧ1: \t" << firstRoot << " (Πραγματικός αριθμός) " << "\n";
             cout << "Χ2: \t" << secondRoot << " (Πραγματικός αριθμός) " << "\n";
    } // Tέλος μεθόδου realRoots()
    
    // Μέθοδοι εμφάνισης φανταστικών αποτελεσμάτων - imaginary roots ( outpout1() και outpout2() )
    void output1(double first, double second) {
             cout << "\nΧ1: \t" << first << " + " << second << "i" << " (Μιγαδικός αριθμός) " << "\n";
             cout << "\nΧ2: \t" << first << " - " << second << "i" << " (Μιγαδικός αριθμός) " << "\n";
    }
    
    void output2(double first, double second) {
             second = -(second);
             cout << "\nΧ1: \t" << first << " - " << second << "i" << " (Μιγαδικός αριθμός ) " << "\n";
             cout << "\nΧ2: \t" << first << " + " << second << "i" << " (Μιγαδικός αριθμός) " << "\n";
    }  
    // Tέλος μεθόδων εμφάνισης φανταστικών αποτελεσμάτων - imaginary roots
    
    // Μέθοδος υπολογισμού φανταστικών αποτελεσμάτων ( imaginaryRoots() )
    void imaginaryRoots(double arg_a, double arg_b, double arg_imag_sqrt) {
            double two_a = 2 * arg_a;
            double first_term = (-arg_b)/two_a;
            double second_term = (arg_imag_sqrt)/two_a;
    
            if(second_term >= 0) {
                    output1(first_term, second_term);
            } 
            else {
                    output2(first_term, second_term);
            }
    
    } // Τέλος μεθόδου imaginaryRoots()
    
    // Κύρια μέθοδος main() η οποία θα χρησιμοποιήσει τις μεθόδους παραπάνω ώστε να μας εξάγει τα αποτελέσματα
    int main()
    {
       cout << "\n********************************************************************************************************************\n";
       cout << "*                              Επίλυση εξισώσεων 2ου βαθμού (αx^2 + βx + γ = 0)                                    *";
       cout << "\n********************************************************************************************************************";
       cout << "\n*     Προτείνεται να γίνεται επαλήθευση του αποτελέσματος με τον κλασσικό τρόπο (επίλυση στο τετράδιο ασκήσεων)    *";
       cout << "\n********************************************************************************************************************\n";
       // Δήλωση μεταβλητών της main()
       double a, b, c; // Τα ορίσματα (arguments) που θα εισαγάγει ο χρήστης απο το πληκτρολόγιο
       char n;         /*   Μεταβλητή τύπου char (χαρακτήρα) η οποία ζητήται στο τέλος για συνέχιση ή όχι του προγράμματος
                          Σημ.: θα μπορούσε να είναι boolean (λογική τιμή -αληθές ή ψευδές-) αλλά θα άλλαζε την ροή του κώδικα 
                                στις τελευταίες γραμμές απαιτόντας έναν επιπλέον βρόγχο if-else (TO DO)*/
    
       // Τέλος δηλώσεων των μεταβλητών της main()
       
            // Παρότρυνση και εισαγωγή των ορισμάτων της εξίσωσης (arguments) απο το πληκτρολόγιο
            do {
            cout << "\nΠληκτρολογήστε την τιμή του 'α': "; // Παρότρυνση για εισαγωγή του αριθμού α 
            cin  >> a;                                     // Εισαγωγή του αριθμού και καταχώρηση στην μεταβλητή a
            cout << "Πληκτρολογήστε την τιμή του 'β': ";   // Παρότρυνση για εισαγωγή του αριθμού β
            cin  >> b;                                     // Εισαγωγή του αριθμού β και καταχώρηση στην μεταβλητή b 
            cout << "Πληκτρολογήστε την τιμή του 'γ': ";   // Παρότρυνση για εισαγωγή του αριθμού γ 
            cin  >> c;                                     // Εισαγωγή του αριθμού γ και καταχώρηση στην μεταβλητή c 
    
            /*Υπολογισμός Διακρίνουσας με χρήση της μεθόδου determinant()  και ορίσματα τα a,b,c 
              τα οποία έχει εισαγάγει ο χρήστης απο το πληκτρολόγιο. */
            
            double det = determinant(a, b, c); /* Η μεταβλητή det υπολογίζει την Διακρίνουσα με βάση τα ορίσματα
                                                  Σημ.: εδώ γίνεται η χρήση της μεθόδου determinant() */
            
            // Υπολογισμός και εμφάνιση αποτελεσμάτων
            /**/
            // Αν Διακρίνουσα >= 0
            if (det >= 0) {
                    realRoots(a, b, sqrt(det));  // οι ρίζες είναι πραγματικές - real ( χρήση μεθόδου realRoots() )
            }
            // Αλλοιώς αν διακρίνουσα > 0
            else {
                    imaginaryRoots(a, b, sqrt(-det)); // οι ρίζες είναι φανταστικές - imaginary ( χρήση μεθόδου imaginaryRoots() )
            }
            
            // Παρότρυνση για συνέχεια ή διακοπή του προγράμματος ( Τερματίζεται ή και με ^C σε οποιοδήποτε σημείο )
            cout << "\nΘέλετε να επιλύσετε άλλη άσκηση ?";
            cout << "\nΔώστε 'y' ή 'Y' για 'Ναί' ή 'Οτιδήποτε άλλο για Τερματισμό': ";
            cin  >> n;
            cout << "\n";
            } 
         while (n == 'y' || n == 'Y'); // Με y ή Y ξαναεκτελείται το πρόγμαμμα με οτιδήποτε άλλο τερματίζεται
         return 0;
    } // Τέλος της κύριας μεθόδου main()
    Η άσκηση ήταν να το υλοποιήσουν με αρχεία .h (headers) και δημιουργία αντικειμένων (objects) μέσα στο αρχείο που περιέχει την main().
    Τα παιδιά ενθουσιάστηκαν πάρα πολύ και μέσα σε μία εβδομάδα το είχαν φτιάξει οι πιό πολλοί.
    Θα παραθέσω τις απαντήσεις τους κάποια στιγμή μαζί με τον κώδικα που υπέβαλλαν μετά τις (λίγες) διορθώσεις.
    Plz do it a prototype by excluding the main() method .
    Anyway if you don't have time to do it plz allow me to do it.
    My respects .

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •