Διακοπή βρόγχου while με if

Η πλήρης προβολή του βίντεο απαιτεί σύνδεση

Το βίντεο έχει διάρκεια 12:21, πιθανά να χρειάζεται λίγος χρόνος για την προβολή του.

cpp βρόγχος επανάληψη τερματισμός IF while break

Κάθε βρόγχος μπορεί να διακοπεί με την υπό συνθήκη εκτέλεση μιας εντολής break.

Η εντολή break διακόπτει την εκτέλεση του βρόγχου και μεταφέρει τον έλεγχο μετά το τέλος του βρόγχου στην αμέσως επόμενη εντολή.

Εδώ βλέπουμε το βρόγχο while, χωρίς κάποια συνθήκη. η παράσταση while (1) είναι πάντα αληθής, και ο βρόγχος μπορεί να τερματιστεί μόνο με την εκτέλεση της εντολής break.

Το πρόβλημα ζητάει τον υπολογισμό αθροίσματος και μέσου όρου άγνωστου πλήθους αριθμών, μέχρι το άθροισμα να γίνει μεγαλύτερο του 10. Δείτε μια λύση:

 
#include <iostream>

using namespace std;

int main()
{
    int k = 0;
    float x;
    float ave, sum = 0;
      
    while (1) 
    {
        cout << "Give me a number x : ";
        cin >> x;
        sum += x;
        k++;
        if (sum > 10) 
        {
            break;
        }
    }
    ave = sum/k;

    cout << "sum = " << sum << endl; 
    cout << "ave = " << ave << endl; 
    
    return 0;
}

Δοκιμαστική εκτέλεση:

astavrak@zeus:~$ g++ program.cpp
astavrak@zeus:~$ ./a.out 
Give me a number x : 3
Give me a number x : 4
Give me a number x : 5
sum = 12
ave = 4

Προσοχή! το k πρέπει να αυξάνεται πριν τον έλεγχο τερματισμού. Γιατί;

Δείτε επίσης μια άλλη εκδοχή. Ας υποθέσουμε πως ο τερματισμός πρέπει να γίνεται πριν το άθροισμα ξεπεράσει το 10 (ή όποιο άλλο όριο) και όχι πριν από αυτό. Δηλαδή να μην υπολογίζεται ο τελευταίος όρος στον υπολογισμό του αθροίσματος και του μέσου όρου, εφόσον το άθροισμα ξεπερνάει το 10.

Δείτε πως μπορεί να γίνει αυτό:

#include <iostream>

using namespace std;

int main()
{
    int k = 0;
    float x;
    float ave, sum = 0;
      
    while (1) 
    {
        cout << "Give me a number x : ";
        cin >> x;
        if (sum+x > 10) 
        {
            break;
        }
        sum += x;
        k++;
    }
    ave = sum/k;

    cout << "sum = " << sum << endl; 
    cout << "ave = " << ave << endl; 
    
    return 0;
}

Δοκιμαστική εκτέλεση:

astavrak@zeus:~$ g++ program.cpp
astavrak@zeus:~$ ./a.out 
Give me a number x : 2
Give me a number x : 5
Give me a number x : 1
Give me a number x : 2
Give me a number x : 6
sum = 10
ave = 2.5

Το όλο θέμα αντιμετωπίζεται με κατάλληλη τοποθέτηση της εντολής break, και επίσης με την τροποποίηση της συνθήκης κάτω από την οποία καλείται η εντολή break.

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

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