eMatematikas.lt Naujienos Kategorijos Nauja tema Nariai Prisijungti Registruotis
       

Kategorijos

Naudingos temos

Nesuprantu "for" ciklo. C++, 10 klasė

Kategorija: Programavimas

peržiūros 177

Prašau pagalbos. Aš suprantu kaip reikia daryti šią užduotį, kaip reikia apskaičiuot, bet nesuprantu kaip veikia tas "for", o jį čia reikia panaudoti. Gal kas galėtumėt išspręsti arba paaiškinti?

Užduotis:

Snaigės už lango. Per atostogas Simas turėjo daugiau laisvo laiko ir nutarė suskaičiuoti,
kiek sningant po jo namo langu nukrenta snaigių. Jis pastebėjo, kad kiekvieną kitą sekundę
nukrenta dvigubai daugiau snaigių, nei prieš tai buvusią. Parašykite programą,
skaičiuojančią kiek snaigių s bus nukritę per n sekundžių, kai per pirmąją sekundę nukrito k
snaigių.https://image.ibb.co/e60UD8/wwww.png

Paskutinį kartą atnaujinta 2018-05-25

0

Į for ciklą žiūrėk kaip į galimybę sutrumpinti tavo kodą, jei programoje turi atlikti tam tikrą veiksmą nemažai kartų arba net nežinai iš anksto kiek kartų vieną ar kitą veiksmą reikės pakartoti.
Pavyzdžiui, mes norime į ekraną išvesti penkis kartus "Labas". Galėtume rašyti:
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
cout << "Labas" << endl;
cout << "Labas" << endl;
cout << "Labas" << endl;
cout << "Labas" << endl;
cout << "Labas" << endl;
return 0;
}
Bet kas jei tai reikia pakartoti 100 kartų? Kodas bus gremėzdiškas. Todėl naudokime ciklą for. Su juo tą patį atliekančios programos kodą galime užrašyti taip: #include <iostream>

using namespace std;

int main(int argc, char** argv) {
for(int i=0;i<=4;i++)
{
cout << "Labas" << endl;
}
return 0;
}
Kai šis ciklas veikia: Parašę žodelį for skliausteliuose mes susikuriame kintamąjį i, kuris skaičiuos veiksmų atlikimų (iteracijų) skaičių ir jam iškart priskiriame pradinę sveikąją reikšmę lygią 0. Toliau rašome sąlygą, kuriai galiojant ciklas turės būti kartojamas, šįkart sąlyga yra: i<=4. Po dar vieno kabletaškio tiesiog parašome, ką turime padaryti su kintamuoju i kaskart praėjus vienai iteracijai. Šiuokart užrašu i++ liepiame programai didinti kintamojo i reikšmę vienetu.
Taigi pirmiausiai kintamasis i įgyja reikšmę, lygią 0 ir atlieka veiksmus užrašytus ciklo viduje. Šiuokart užrašo žodį "Labas". Kai atliekami visi veiksmai grįžtama į ciklo pradžią ir jei tenkinama ciklo vykdymo sąlyga i<=4 padidinama i reikšmė vienetu ir vėl atliekama tai, kas užrašyta ciklo viduje. Pasiekus reikšmę 4 ciklas įvykdomas paskutinį kartą.
Kaip pradedančiajam taip siūlau ir tokią ciklo konstrukciją: #include <iostream>

using namespace std;

int main(int argc, char** argv) {
for(int i=0;i<=4;)
{
cout << "Labas" << endl;
i++;
}
return 0;
}
Rašydamas šitaip skliausteliuose tik nurodai pradinį iteracijų skaičiaus reikšmę ir nurodai kokiai sąlygai esant ciklas turi būti vykdomas. Tuo tarpu iteracijų skaičių didini pačio ciklo viduje (manau taip turėtų būti aiškesnis ciklo veikimas).
Kaip matai paprastai iteracijų skaičiui skaičiuoti imame sveikojo tipo kintamąjį.
Tiesa, jei kintamojo sukūrimas for ciklo skliaustuose atrodo keistas, tai pradžiai galima naudoti ir tokį kodą: #include <iostream>

using namespace std;

int main(int argc, char** argv) {
int i;
for(i=0;i<=4;)
{
cout << "Labas" << endl;
i++;
}
return 0;
}
Kaip matai čia mes didinome dydžio i reikšmę vienetu. Bet galime ją didinti ir tarkime kas penkis. Tada rašome: i+=5. Štai pavyzdžiui dabar galime išvesti skaičius, kurie skiriasi vienas nuo kito kas 4, o pradinė reikšmė lygi 2, ciklą vydome, kol skaičiai mažesni už 20: #include <iostream>

using namespace std;

int main(int argc, char** argv) {
int i;
for(i=2;i<20;)
{
cout << i << endl;
i+=4;
}
return 0;
}

Tikiuosi šie pavyzdžiai pagelbės.

Paskutinį kartą atnaujinta 2018-05-25

1

Maždaug supratau, bet man kažkodėl veiksmas nepasikartoja n kartų. Ką aš čia darau blogai?

 https://image.ibb.co/mM8pFo/dwdwwdwd.png

0

Neaiškus priskyrimas: x1 = s + s Pamėgink šį kodą:
#include <iostream>

using namespace std;

int main(int argc, char** argv) {
int s, n, k;
cout << "Iveskite, kiek snaigiu nukrito per pirmaja sekunde ir kiek sekundziu snigo: " << endl;
cin >> k >> n;
s=k;
for(int i=1;i<n;i++)
{
k*=2;
s+=k;
}
cout << s;
return 0;
}

0

Ačiū labai :)

0

Norėdami rašyti žinutes privalote prisijungti!