Επίλυση πρωτοβάθμιας εξίσωσης στη C++ (εμφώλευση if)

Έστω η εξίσωση:

$$ ax + b = 0 $$

όπου $$a,b$$ πραγματικοί αριθμοί. Η εξίσωση έχει τη ρίζα:

$$ x = -\frac{b}{a} $$

με την προϋπόθεση $$a \ne 0$$. Με αυτά που γνωρίζουμε μπορούμε να γράψουμε ένα πρόγραμμα που να λαμβάνει τις δύο παραμέτρους και να υπολογίζει τη ρίζα ως εξής:

 
#include <iostream>

using namespace std;

int main ()
{
    float a,b,x;

    cout << "Λύνω την εξίσωση ax+b=0" << endl;
    cout << "Δώσε το a:  ";
    cin >> a;
    cout << "Δώσε το b:  ";
    cin >> b;
 
    if (a != 0)
    {
        x = -b/a;
        cout << "Η ρίζα είναι: " << x << endl;
    }
    else
    {
        cout << "Αδύνατη εξίσωση" << endl;
    }

    return 0;
}

Δοκιμή λύσης της εξίσωσης $$5x+2=0$$

 
astavrak@cyril:~$ g++ program.cpp 
astavrak@cyril:~$ ./a.out 
Λύνω την εξίσωση ax+b=0
Δώσε το a:  5
Δώσε το b:  2
Η ρίζα είναι: -0.4

Δοκιμή λύσης της εξίσωσης $$0x+2=0$$

 
astavrak@cyril:~$ ./a.out 
Λύνω την εξίσωση ax+b=0
Δώσε το a:  0
Δώσε το b:  2
Αδύνατη εξίσωση

Δοκιμή λύσης της εξίσωσης $$0x+0=0$$

 
astavrak@cyril:~$ ./a.out 
Λύνω την εξίσωση ax+b=0
Δώσε το a:  0
Δώσε το b:  0
Αδύνατη εξίσωση

Εδώ βέβαια αποφύγαμε τη διαίρεση με το 0, αλλά η απάντηση "Αδύνατη" δεν είναι ικανοποιητική. Όπως θυμάστε από το γυμνάσιο, αν και οι δύο συντελεστές είναι μηδέν τότε η εξίσωση είναι αόριστη, όχι αδύνατη.

Για να είμαστε "πιο σωστοί", θα πρέπει να προσθέσουμε έναν έλεγχο μέσα στομ έλεγχο. Δηλαδή, αν $$a=0$$, τότε να δούμε τι γίνεται με το $$b=0$$ και αναλόγως να προχωρήσουμε στη λύση. Δηλαδή:

#include <iostream>

using namespace std;

int main ()
{
    float a,b,x;

    cout << "Λύνω την εξίσωση ax+b=0" << endl;
    cout << "Δώσε το a:  ";
    cin >> a;
    cout << "Δώσε το b:  ";
    cin >> b;
 
    if (a != 0)
    {
        x = -b/a;
           cout << "Η ρίζα είναι: " << x << endl;
    }
    else
    {
        if (b != 0)
    {
            cout << "Αδύνατη εξίσωση" << endl;
        }
        else
        {
            cout << "Αόριστη εξίσωση" << endl;
        }
    }

    return 0;
}

Δοκιμή της εξίσωσης $$0x+0=0$$

astavrak@cyril:~$ g++ program.cpp 
astavrak@cyril:~$ ./a.out 
Λύνω την εξίσωση ax+b=0
Δώσε το a:  0
Δώσε το b:  0
Αόριστη εξίσωση

Ενώ -εννοείται- οι άλλες περιπτώσεις δουλεύουν εξίσου κανονικά:

astavrak@cyril:~$ ./a.out 
Λύνω την εξίσωση ax+b=0
Δώσε το a:  -2
Δώσε το b:  5
Η ρίζα είναι: 2.5

Βασικό: ένα πρόγραμμα είναι καλό πρόγραμμα όταν είναι "παντός καιρού", δουλεύει δηλαδή σε όλες τις περιπτώσεις και παίρνει υπ' όψιν του όλες τις πιθανές κακοτοπιές...

Συνδεθείτε για περισσότερες δυνατότητες αλληλεπίδρασης,
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.

Creative Commons License
Εκπαιδευτικό υλικό από τον Αθανάσιο Σταυρακούδη σας παρέχετε κάτω από την άδεια Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.