Sveiki, kilo biški bėdų su šiuo uždaviniu, gal galėtum kas padėt ją išsiaiškinti ?
Pavasarį pradėjęs dirbti sode sodininkas pirmąją dieną išgenėjo m1, antrąją – m medţių daugiau negu pirmąją, trečiąją – m medţių daugiau negu antrąją ir t.t. Parašykite programą, skaičiuojančią, kiek dienų d dirbs sodininkas, kol išgenės n sode augančių medţių. Paskutinei dienai gali likti maţiau medţių. Visi duomenys yra sveikojo tipo. Pasitikrinkite: kai m1 = 3, m = 1, n = 16, tuomet kompiuterio ekrane turi būti rodoma: Sodininkas dirbs 4 dienas.
Ką aš esu parašęs :
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int m1=3,m=1,n=16,d=0;
while(m1<n)
{
n-=m1;
m1+=m;
d++;
}
cout << "D=" << d << endl;
return 0;
}
Jau nemažai eksperimentavęs esu, bet D nuolatos gaunu 3 vietoj 4. Būčiau labai dėkingas už pagalbą :)
Bebras prieš 9 metus
Bėda tavo while
ciklo sąlygoje, kai tavo ciklas jau baigsis, bus dar likę medžių..
while(n > 0)
Tau reikia vykdyti ciklą tol, kol yraa nepadarytų medžių. Patikrinau, veikia :)
Zelka prieš 9 metus
Sveiki dar kartą, toks vienas uždavinukas vėl man pakibo :
Petriukas gavo n saldainių. Kiekvieną dieną jis nori suvalgyti skirtingą skaičių saldainių x. Kelias dienas Petriukas galės mėgautis saldainiais ir kiek jam dar liks nesuvalgytų saldainių tuo atveju, jei paskutinei dienai saldainių nebeuţtektų. Pastaba: kiekvieną dieną suvalgomi saldainiai turi būti įvedinėjami atskirai, jie turi būti įvedinėjami tol, kol Petriukas nebus suvalgęs visų saldainių.
Duomenys:
Petriukas gavo saldainių: 25
Per dieną suvalgė: 7
Per dieną suvalgė: 7
Per dieną suvalgė: 8
Per dieną suvalgė: 5
Rezultatas:
Petriukui saldainių uţteks 3 dienoms ir jam liks 3 saldainiai.
Tai, aš abejoju dėl savo sukurto sprendimo, nes neleidžia man įrašyt, kiek suvalgė 4 dieną, bet atsakymai yra teisingi. Kas būtų blogai čia ? Bandžiau ir su while(n>0), bet neina atsakymo gaut teisingo :)
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
int n=25; // kiek gavo saldainiu
int d=0; // kiek dienu uzteks
int c; //kiek saldainiu liks
int s=0; // suvalgytu saldainiu skaicius
while(s<n)
{
cout << "S="; cin >> s;
n=n-s;
d++;
}
c=n;
cout << "D=" << d << " C=" << c << endl;
return 0;
}
Rin prieš 9 metus
Pats prieš pora dienų ėjau šitą temą. O realiai kodėl neleidžia tai kaip suprantu ketvirtą kartą nėra jau tenkinama sąlyga, nes sakykime atimi kiek suvalgė tai per tris dienas suvalgė 22 saldainius. 25-22=3. Tavo while salyga sako, kad saldainiu skaicius turi būti didesnis, kitaip nebus vykdomas ciklas. Užtat ketvirtą kartą nėra leidžiama įvesti. Paėmus daugiau tau leistų tai padaryti. Jei tau leistų įvesti ir ketvirtos dienos kiek suvalgė tada rezultatas būtų neigimas, o tada jau į pievas ir per laukus nuvarytum. O jeigu mokytoja sakys, kad reikia ir ketvirtos dienos įvesti tai gali suskelti, kad Petriukas pradės atryti saldainius ir rezultatas bus nesąmoningas.
Realiai būtų patogiau naudoti while (n>s) sąlygą, bet reiktų pakeisti ir ciklo vidų, bet žiūrėk pagal save kaip tau patogiau ir kaip tau aiškiau.
Long story short. Tavo programa veikia gerai ir ji išsprendžia pateiktą problemą.
Zelka prieš 9 metus
Dar dėl tokio vieno dalyko. Sakykim, while ciklas užbaigiamas įrašius 0, t.y while(x!=0). Kokiu būdu skaičiavimuose tą 0 galėčiau praleisti ? Pvz. duoti kokie 3 skaičiai : 20,15,6 ir, kad jų įvedinėjimus užbaigt, įvedamas 0. Kaip man ciklo viduje tą 0 ignoruoti ? Jis man iškart suardo kai kuriuos skaičiavimus. Žinau, kad galima ir taip daryti pvz.:
while (g!=0)
{
cout << "A="; cin >> a;
cout << "G="; cin >> g;
}
A, tai skaičiai, su kuriais man reikia daryti skaičiavimus, o G, kad įvesti ant galo 0 ir į skaičiavimus jo neįtraukti. Bet jau rašyti tenka dvigubai ilgiau. Ar būtų kažkaip įmanoma tą 0 iš A ignoruoti skaičiavimuose ?
b0ss prieš 9 metus
Tai tu nori įrašant 0 gauti tą patį kaip ir su return/enter? Kam to reikia? Na šiaip ar taip, iš kintamojo a gali tiesiog pašalint paskutinį skaitmenį ir jo nebebus tuose skaičiavimuose... Ar ne to tau reikia?
Zelka prieš 9 metus
Taip, man to 0 skaičiavimuose nereikia, reikia tik dėl ciklo baigimo. Bet nelabai žinau, ką daryt, jog šio 0 skaičiavimuose neįskaičiuotų. Pagal šį pratimą darau :
Siuntų perveţimo įmonėje dirbantis kurjeris gavo uţduotį parengti perveţimų statistiką: kiek įvykdė uţsakymų, kurių suma viršijo 100 Lt; uţ kokią vidutinę sumą per dieną išveţiojo prekių; kiek iš viso prekių išveţiojo. Kurjeris neţino, kiek uţsakymų įvykdys per dieną, todėl baigęs darbą į programą įves nulį (0), tai reikš, kad darbo diena baigta ir reikia pateikti rezultatus. Parenkite programą, kuri leistų neţinomą skaičių kartų kurjeriui įvesti uţsakymo sumą (skaičiavimai baigiami įvedus nulį, nulis skaičiuojant vidurkį ir kiekį nebus pridėtas) ir pateiktų skaičiavimų rezultatus.
b0ss prieš 9 metus
Tai kiekvieno įvedimo metu, tikrini ar neįvedė nulio ir jei taip - rodai rezultatus, jei ne - pridedi įvestą skaičių į listą iš kurio vėliau rodysi rezultatus ir toliau tęsi ciklą...
Zelka prieš 9 metus
Sveiki, dar kartą reikia pagalbos.
Trikampis vienu metu gali būti dviejų tipų: statusis ir lygiašonis, lygiašonis ir lygiakraštis. Pakeiskite programą taip, kad ji tai nustatytų. Pasitikrinkite. Kai a = 50, b = 40, c = 30, turi būti spausdinama: Trikampis statusis ir įvairiakraštis. Kai a = 50, b = 50, c = 50, turi būti spausdinama: Trikampis lygiakraštis ir lygiašonis.
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main ()
{
int a,b,c,n=2;
for(int i=1;i<=n;i++)
{
cout << "A="; cin >> a;
cout << "B="; cin >> b;
cout << "C="; cin >> c;
if(a+b>c&&b+c>a&&c+a>b)
{
if((a==b&&b==c)&&(a==b||b==c||c==a)) cout << "Lygiakrastis ir lygiasonis" << endl;
else if(a==b||a!=b&&b==c||b!=c&&c==a||c!=a) cout << "Ivairiakrastis ir statusis" << endl;
}
else cout << "Negalimas" << endl;
}
return 0;
}
Aš čia esu arba kažką daug labai pridirbęs, arba tik su stačiuoju, nežinau, kokios reikšmės turi būti, kad jis susidarytu.