w jaki sposób sterować pętlą?

0

Jak zatrzymać petlę jeżeli wynik przekroczył zakres typu?

#include <iostream>
#include <climits>      //std::numeric_limits
#include <algorithm>    //

using namespace std;

auto main() -> int
{
    unsigned short limit = std::numeric_limits<unsigned short>::max();
    cout << "unsigned short max\t= " << limit << "\n";
    cout << "SHORT MAX\t\t= " << USHRT_MAX << "\n\n";
    unsigned short a{65531}, suma{0};
    for(unsigned short i = 1; i < 10; ++i)
    {
        suma = a + i;
        cout << a << " + " << i << " = " << suma << "\n";
        if(suma > limit) break;
    }
    (suma > limit) ? (cout << "\nSuma przekroczyla zakres " << suma) : (cout << "\nSuma sekwencji wynosi = : " << suma);

    return 0;
}

2
for(unsigned short i=1;(i<10)&&(a<a+i);++i)
{
    suma = a + i;
    cout << a << " + " << i << " = " << suma << "\n";
}
0

zmieniłem to na

for(unsigned short i=1;(i<10)&&(suma<limit);++i)

i zadziałało Dzięki serdeczne _13th_Dragon

Mam jeszcze jedno pytanie. Jak zatrzymać taką pętlę jeżeli nie rośnie sekwencyjnie tylko skokowo?


    unsigned short limit = std::numeric_limits<unsigned short>::max();
    unsigned short a{65531}, suma{0};
    for(unsigned short i=1;(i<21)&&(suma<limit);i+=7) //jump
    {
        suma = a + i;
        cout << a << " + " << i << " = " << suma << "\n";
    }
    (suma > limit) ? (cout << "\noverflow " << suma) : (cout << "\nO.K. = : " << suma);

0

Czym to się rózni od poprzedniego?
Czy rozumiesz że suma<limit jest tożsame z suma!=limit w przypadku gdy limit=numeric_limits<unsigned short>::max();

0

Czym to się rózni od poprzedniego?

różni się, gdy rosła suma w kolejności uporządkowanej, pętla przerwała się gdy suma przekroczyła zakres typu
w przypadku skoku zmienna unsigned short a{65531} resetuje się i pętla liczy dalej jakby nic się nie stało

1

for(unsigned short i=1;(i<21)&&(a<=limit-i);i+=7) //jump

0

Dzięki serdeczne _13th_Dragon
wpadłem na podobny pomysł, ale byłeś pierwszy i tak zresztą naprowadziłeś mnie tym pierwszy postem
więc serdeczne dzięki. temat do zamknięcia

for(unsigned short i=1; (i<21)&&(a+i<=limit); i+=7)

1 użytkowników online, w tym zalogowanych: 0, gości: 1