Začněte nyníZačněte zdarma

Předčasné ukončení smyčky for

Někdy se může stát, že budeš chtít smyčku ukončit dřív, než proběhnou všechny iterace. Například tvůj kód může splnit svůj úkol ještě předtím, než se vyzkouší všechny možnosti. Klíčové slovo break ti umožní smyčku předčasně opustit.

Vzor kódu vypadá takto:

for(int i = 0; i < n; i++) {
  // Do something

  // Test for exiting early
  if(breakout_condition) break;

  // Otherwise carry on as usual
}

V tomto cvičení upravíš předchozí příklad tak, aby se smyčka zastavila, jakmile se hodnota přestane výrazně měnit (na základě zadané prahové hodnoty). Funkce byla upravena tak, aby vracela List (o Listech se dozvíš víc v další kapitole) – díky tomu uvidíš přibližnou hodnotu v každé iteraci.

Tato upravená funkce sqrt_approx() vrací jak odmocninu, tak počet iterací potřebných k dosažení výsledku na základě prahové hodnoty.

Toto cvičení je součástí kurzu

Optimizing R Code with Rcpp

Zobrazit kurz

Pokyny k cvičení

Přidej podmínku pro break, která se spustí, pokud je výsledek dostatečně přesný (na základě proměnné is_good_enough).

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

#include 
using namespace Rcpp;

// [[Rcpp::export]]
List sqrt_approx(double value, int n, double threshold) {
    double x = 1.0;
    double previous = x;
    bool is_good_enough = false;
    int i;
    for(i = 0; i < n; i++) {
        previous = x;
        x = (x + value / x) / 2.0;
        is_good_enough = fabs(previous - x) < threshold;
        
        // If the solution is good enough, then "break"
        ___(___) ___;
    }
    return List::create(_["i"] = i , _["x"] = x);
}

/*** R
sqrt_approx(2, 1000, 0.1)
*/
Upravit a spustit kód