Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

C++ reikia pagalbos


Tomas Astrauskas

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1629 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki, taigi ilgą laiką bandžiau ir galvojau kaip išspręsti šį uždavini. Bandžiau daryti vieną didelį, pagrindinį while ciklą, bet nesugalvojau ką jame galėčiau prisilyginti. Uždavinys skamba taip: 

Vasarą po Kuršių marias rengiamos ekskursijos kateriais. Du kateriai turistus plukdyti pradeda lygiai pr valandą, o baigia lygiai pb valandą. Užkietėję keliautojai Nidą pasiekė vėlai vakare, todėl į pirmąjį reisą tikrai nespės. Parašykite programą, skaičiuojančią, kurią valandą ir minutę turi ateiti keliautojai į prieplauką, kad abu kateriai būtų pirmą kartą kartu sugrįžę į prieplauką ir pasiruošę išplaukti tuo pačiu metu. Pirmasis kateris išplaukia kas m1 minučių, antrasis – kas m2 minučių.

Pradiniai duomenys skaitomi iš failo kateriai_data.txt tokia tvarka: pr, pb, m1, m2.

Rezultatai įrašomi į rezultatų failą kateriai_res.txt vienoje eilutėje valandas nuo minučių atskiriant tarpu. Jei kateriai iki darbo pabaigos vienu metu nesugrįš į prieplauką, rezultatų faile turi būti spausdinamas žodis NE.

kateriai_data.txt kateriai_res.txt
8 20 40 60 10 0
Nuoroda į komentarą
Dalintis per kitą puslapį

Sakykim, kad tuviską jau nusiskaitęs
int a, b;
a=m1;
b=m2;
while(a!=b)
{
  a+=m1;
  b+=m2;
}
pr=pr*60;
pb=pb*60;
pr+=a; // arba b, nesvarbu
if(pr>pb)cout<<"NE";
else cout<<pr/60<<" val "<<pr-(pr/60)*60<<" min"; //Žinau, kad pr/60*60 atrodo kaip taspats, tačiau int suapvalins skaičių dalyboje, todėl gausis viskas teisingai

Tūrėtų veikt, tiksliai nežinau, gal kur klaidų privėliau

Nuoroda į komentarą
Dalintis per kitą puslapį

na lengviausias būdas tikriausiai būtų pradines valandas pasiversti į minutes ir susirasti mažiausią intervalą kas kiek reiks tikrinti ar jie yra prieplaukoje min(m1, m2), tada ciklas būtų kol (pradinės minutės) <= (paskutinės minutės) tada tikrini ar pradinės minutės dalinasi iš m1 ir m2 be liekanos, jei taip - pasiverti viską į valandas ir minutes ir spausdini, jei ne, pridedi prie pradinių minčių intervalą

 

paskaičius @Michael_Scott kodą ten niekas neaišku (beto neveiks), mano variantas toks (kurį paminėjau prieš tai, pavyzdį praeina):

int main() {

	int pr, pb, m1, m2;
	cin >> pr >> pb >> m1 >> m2;
	pr *= 60; pb *= 60;
	int delay = min(m1, m2);
	pr += delay;
	while (pr <= pb) {
		if (pr % m1 == 0 && pr % m2 == 0) {
			cout << (pr / 60) << " " << ((pr - (pr/60)*60));
			return 0;
		}
		pr += delay;
	}
	cout << "NE";
}

 

Redaguota , nario Zero Two
Nuoroda į komentarą
Dalintis per kitą puslapį

8 minutes prieš, Michael_Scott parašė:

Sakykim, kad tuviską jau nusiskaitęs
int a, b;
a=m1;
b=m2;
while(a!=b)
{
  a+=m1;
  b+=m2;
}
pr=pr*60;
pb=pb*60;
pr+=a; // arba b, nesvarbu
if(pr>pb)cout<<"NE";
else cout<<pr/60<<" val "<<pr-(pr/60)*60<<" min"; //Žinau, kad pr/60*60 atrodo kaip taspats, tačiau int suapvalins skaičių dalyboje, todėl gausis viskas teisingai

Tūrėtų veikt, tiksliai nežinau, gal kur klaidų privėliau

Būtent taip ir bandžiau daryti, bet tada aš pagalvojau, kad tame pačiame while ir yra klaida. Juk 40 niekada nebus lygu 60. Kad ir kiek kartu bepridėtum , 40(+40) nebus lygu 60(+60) Arba aš tiesiog nesuprantu

 

7 minutes prieš, Zero Two parašė:

na lengviausias būdas tikriausiai būtų pradines valandas pasiversti į minutes ir susirasti mažiausią intervalą kas kiek reiks tikrinti ar jie yra prieplaukoje min(m1, m2), tada ciklas būtų kol (pradinės minutės) <= (paskutinės minutės) tada tikrini ar pradinės minutės dalinasi iš m1 ir m2 be liekanos, jei taip - pasiverti viską į valandas ir minutes ir spausdini, jei ne, pridedi prie pradinių minčių intervalą

 

paskaičius @Michael_Scott kodą ten niekas neaišku, mano variantas toks (kurį paminėjau prieš tai, pavyzdį praeina):


int main() {

	int pr, pb, m1, m2;
	cin >> pr >> pb >> m1 >> m2;
	pr *= 60; pb *= 60;
	int delay = min(m1, m2);
	pr += delay;
	while (pr <= pb) {
		if (pr % m1 == 0 && pr % m2 == 0) {
			cout << (pr / 60) << " " << ((pr - (pr/60)*60));
			return 0;
		}
		pr += delay;
	}
	cout << "NE";
}

 

Sveikas, dėkui už pagalbą. Dar nesimokinau "int delay" gal galėtum vienu sakiniu apie tai paaiškint?

Nuoroda į komentarą
Dalintis per kitą puslapį

1 minute prieš, Tomas Astrauskas parašė:

Būtent taip ir bandžiau daryti, bet tada aš pagalvojau, kad tame pačiame while ir yra klaida. Juk 40 niekada nebus lygu 60. Kad ir kiek kartu bepridėtum , 40(+40) nebus lygu 60(+60) Arba aš tiesiog nesuprantu

 

Sveikas, dėkui už pagalbą. Dar nesimokinau "int delay" gal galėtum vienu sakiniu apie tai paaiškint?

tai yra tiesiog kintamojo pavadinimas, nėra skirtimo kaip tu kintamuosius užvadinsi, reikia tik pačiam suprasti ką jie daro, gali laisvai pavadinti kintamajį

int super_kietas_super_pavadinimas = 5;

pavadinimas nedaro jokios įtakos, kaip ir šitoje situacijoje delay yra tiesiog pavadinimas, kad prisimintum, kad čia yra kintamasis kuriame bus saugoma mažiausia reikšmė tarp kintamųjų m1 ir m2

Nuoroda į komentarą
Dalintis per kitą puslapį

Dabar, Zero Two parašė:

tai yra tiesiog kintamojo pavadinimas, nėra skirtimo kaip tu kintamuosius užvadinsi, reikia tik pačiam suprasti ką jie daro, gali laisvai pavadinti kintamajį


int super_kietas_super_pavadinimas = 5;

pavadinimas nedaro jokios įtakos, kaip ir šitoje situacijoje delay yra tiesiog pavadinimas, kad prisimintum, kad čia yra kintamasis kuriame bus saugoma mažiausia reikšmė tarp kintamųjų m1 ir m2

Aaai, supratau tada. Pagalvojau, kad čia yra kažkokia funkcija, kaip string ar kažkas ?. Anyways, dėkui už pagalbą.

Nuoroda į komentarą
Dalintis per kitą puslapį

Dabar, Tomas Astrauskas parašė:

Aaai, supratau tada. Pagalvojau, kad čia yra kažkokia funkcija, kaip string ar kažkas ?. Anyways, dėkui už pagalbą.

Na, string nėra funkcija, tai yra irgi kintamasis tik jis saugo žodžius bei sakinius, char pavyzdžiui saugo vieną kokią nors raidę, int - saugo skaičių nuo -2147483647 iki 2147483647, double - naudojamas skaičiams su kableliu ir panašiai.

Betkokia funkcija turės skliaustus, kuriuose dažniausiai reikia įrašyti kokius nors duomenis, kaip pavyzdyje - min(m1,m2);

Na aišku čia gal per daug informacijos kaip pradedančiajam :D

 

Nuoroda į komentarą
Dalintis per kitą puslapį

Dabar, Zero Two parašė:

Na, string nėra funkcija, tai yra irgi kintamasis tik jis saugo žodžius bei sakinius, char pavyzdžiui saugo vieną kokią nors raidę, int - saugo skaičių nuo -2147483647 iki 2147483647, double - naudojamas skaičiams su kableliu ir panašiai.

Betkokia funkcija turės skliaustus, kuriuose dažniausiai reikia įrašyti kokius nors duomenis, kaip pavyzdyje - min(m1,m2);

Na aišku čia gal per daug informacijos kaip pradedančiajam :D

 

Dėkui?Mačiau, kad sprendžiant šitą uždavinį jūs naudojot būtent tą funkciją min(m1,m2). Na, dar daug ko išmokt man, bet kaip sakoma be darbo nieko nebus.

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 4 savaičių...
2019-10-07 19:58, Zero Two parašė:

Na, string nėra funkcija, tai yra irgi kintamasis tik jis saugo žodžius bei sakinius, char pavyzdžiui saugo vieną kokią nors raidę, int - saugo skaičių nuo -2147483647 iki 2147483647, double - naudojamas skaičiams su kableliu ir panašiai.

Betkokia funkcija turės skliaustus, kuriuose dažniausiai reikia įrašyti kokius nors duomenis, kaip pavyzdyje - min(m1,m2);

Na aišku čia gal per daug informacijos kaip pradedančiajam :D

 

C++ kalboje nėra string. Yra tik char masyvas:

char* sakinys = "Labas vakaras.";

 std::string klasė turi tą masyvą ir krūva funkcijų skirtų manipuliuoti to masyvo duomenimis.
Ko pasekoje atrodo kad string yra kintamojo duomenų tipas, nors pats kintamasis ištikrųjų yra std::string klasės objektas.
Funkcija C++ kalboje nebutinai tures sklaustus nes funkcija gali buti ir perrašyti operatoriai tokie kaip <<, >>, +, -,/,*,[] ir t.t. Naujokui išviso siūlyčiau vengti šios kalbos jei nori greičiau pasiekti kažkokių rezultatu.

Redaguota , nario Amxxl
Nuoroda į komentarą
Dalintis per kitą puslapį

2019-11-02 18:17, dees parašė:

Kada mokyklose pagaliau nustos mokyt kintamuosius vadinti "a", "b", "wqeqiwje" ir velnias žino kaip?

Niekada. Mokyklos tikslas išmokyti logikos, o ne kaip taisyklingai rašyti kodą. Bent jau C++ kalboje reikėtu prie kintamųjų pridėti prefixus tokius kaip m_ - class member, s_ - static, g_ - global ir tipus tokius kaip f - float, i - int, b - bool, d - double. Kintamieji atrodytu daug maž taip:
m_fVelocity, m_bVisible, m_iWidth ir t.t.
Mažose programose nėra skirtumo dėl to gal mokyklose ir vadina kintamuosius "a", "b" ir pan.
Bet dideliuose projektuose reikia disciplinos kad nepaversti kodo į mišraine. :D

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1629 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

Skelbimai


×
×
  • Sukurti naują...