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

w jaki sposób sterować pętlą?
W2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

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

Kopiuj
#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;
}

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
for(unsigned short i=1;(i<10)&&(a<a+i);++i)
{
    suma = a + i;
    cout << a << " + " << i << " = " << suma << "\n";
}
W2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

zmieniłem to na

Kopiuj
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?

Kopiuj

    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);

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
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();

W2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
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

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

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

W2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.