Pereiti prie turinio

C++ sunkenės užduotys, reik sprendimo


Rekomenduojami pranešimai

6.

 

#include <iostream>

using namespace std;

int main()
{
       int N = 6;
       int beleka[N];
       int papildomas1 = 0;

       for(int i = 1; i <= N; i++)
       {

           if(i == 1 || i == 2 || i == 3) beleka[i] = 1;
           else
           {
               beleka[i] = i;
               papildomas1 = beleka[i-1] + beleka[i-2] + beleka[i-3];
               beleka[i] = papildomas1;
           }

       }
       cout << beleka[N];
}

 

Oh tas senas bei aiškus kintamųjų žymėjimas. :D

 

4.

 

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
       const char duomenys[] = "Duomenys.txt";
       const char rezultatai[] = "Rezultatai.txt";

       int n,  // Etapai, dienos
           x,  // Kiek reikejo pataikyti etape
           b,  // Baudos minutes uz viena nepataikyma
           l = 0;  // Laikas

       ifstream fd(duomenys);

       fd >> n;
       fd >> x;
       fd >> b;

       int t[n]; // Laikas
       int k[n]; // Pataikyti kartai

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

           fd >> t[i];
           fd >> k[i];

       }

       fd.close();

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

           l = l + t[i];

       }

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

           if(k[i] < x) {
               l = l + ((x - k[i]) * b);
           }

       }

       ofstream fr(rezultatai);
       fr << l;
       fr.close();

}

 

Abu uždaviniai spręsti labai seniai nežinau ar viskas ten gerai, tikrai galima kažkaip geriau išpręsti. Trečio tingiu ieškoti, manau, sveika ir pačiam paspręsti kažką.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš ir radau savo senus:

 

4.

#include<iostream>
#include<fstream>
//-----------
void visa(double & isviso);
void isvedimas(double isviso);
//-----------
using namespace std;
int main()
{
double isviso;
visa(isviso);
isvedimas(isviso);
return 0;
}
void visa(double & isviso)
{
int n,x,b,t,a;
ifstream fd ("Duom.txt");
fd >> n; // etapu sk
fd >> x; // kiek taikiniu
fd >> b; // baudo minutes
isviso  = 0;
for(int i=1; i<=n; i++) {
	fd >> t; // laikas
	fd >> a; // kiek pataike
	if (a!=x) {
		a = x - a;
		isviso += (t + a * b);
	}
	else {
		isviso += t;
	}
}
fd.close();

}
void isvedimas(double isviso)
{
ofstream fr ("Rez.txt");
fr << "Sportininkas iveike trasa per " << isviso << " min" << endl;
fr.close();
}

 

6.


#include<iostream>
#include<fstream>
//-----------
int visa();
void isvedimas(int f);
//-----------
using namespace std;
int main()
{
int f;
 f = visa();
 isvedimas(f);
return 0;
}
int visa()
{
int n, M[20], superfibonatis;
ifstream fr ("Duom.txt");
fr >> n;
fr.close();
for(int i=0; i < n; i++) {
	if (i<3) {
		M[i] = 1;
	}
	else {
		M[i] = M[i-1] + M[i-2] + M[i-3];
	}
}
superfibonatis = M[n-1];
return superfibonatis;
}
void isvedimas(int f)
{
ofstream fd ("Rez.txt");
fd << "Superfibonatis: " << f << endl;
fd.close();
}

Redagavo MindeB
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O 5 uzdavinio bent minty galit duot?

Zinau naudot while cikla, gal masyva.

 

Na jau pats galvok, kitaip neišmoksi programuot. Kaip mano JKM dėstytoja sako: "Jei nesupratai užduoties, skaityk antrą kartą, o jei ir antrą kartą nesupratai skaityk tol, kol suprasi" . Sėkmės :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O 5 uzdavinio bent minty galit duot?

Zinau naudot while cikla, gal masyva.

 

Ciklų tikrai nereikia.

 

#include <iostream>

int main()
{
   int skaiciai[] = { 1, 1, 1, 3, 5, 9 };
   int ieskomas = 6;
   int a = skaiciai[ieskomas - 2] + skaiciai[ieskomas - 3] + skaiciai[ieskomas - 4];
   std::cout << a;
   return 0;
}

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

5. Ne, užduoties sąlygai neprieštarauja. Pats išbandyk. Nebent ten tave verčia naudot ciklus, jų naudot tikrai čia nereikėjo.

bandziau, veikia, bet temos uzdavinys yra is temos ciklas "for". tai todel mastau gal su juo reikejo kazka? :)

beje, duomenys pradiniai visai kaip 6 uzduoties, tikrai nieko nemaisai? :)

Redagavo Fajas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

bandziau, veikia, bet temos uzdavinys yra is temos ciklas "for". tai todel mastau gal su juo reikejo kazka? :)

 

Aš dariau tik kad greičiausiai apskaičiuotų - o kaip tau siūlo mokykloj daryt, jau pačio rūpestis. Ne toks vis gi sudėtingas tas uždavinys, vos kelių eilučių užtenka.

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

int n, M[20], superfibonatis;

ifstream fr ("Duom.txt");

fr >> n;

fr.close();

for(int i=0; i < n+1; i++) {

if (i<4) {

M = 1;

}

else {

M = M[i-1] + M[i-2] + M[n-3];

}

}

superfibonatis = M[n];

return superfibonatis;

 

 

galit man sita vieta mazdaug paaiskint, cia parasyta n + 1 for cikle. bet man debuginant raso 6, ir vygdo cikla iki 6 o ne 7.

veliau ten kai tarkim ciklas vyksta pirma karta tai vyskta tik if salyga ar kartu ir else vyksta?

velgi, kai i masyva duomenis deda, tai irgi, kai ciklas vyksta pirma karta tai M[0] = 1, kai antra karta vyksta tai M[1] = 1, trecia - M[2] = 1 ir taip toliau? ar netaip mastau?

M = M[i-1] + M[i-2] + M[n-3];ir kaip sitoj eilutej vyksta sudetis visa, niekaip nesuprantu.

beje, esu savamokslis, mokykloj tik kitamet galesiu mokytis prgramavimo pilnai (dabar 11 klasej esu, ir mokytoja tokia kad ne bum bum man atrodo...) jei netygnit tai paaiskint isamiai :)

Redagavo Fajas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

int n, M[20], superfibonatis;

ifstream fr ("Duom.txt");

fr >> n;

fr.close();

for(int i=0; i < n+1; i++) {

if (i<4) {

M = 1;

}

else {

M = M[i-1] + M[i-2] + M[n-3];

}

}

superfibonatis = M[n];

return superfibonatis;

 

 

galit man sita vieta mazdaug paaiskint, cia parasyta n + 1 for cikle. bet man debuginant raso 6, ir vygdo cikla iki 6 o ne 7.

veliau ten kai tarkim ciklas vyksta pirma karta tai vyskta tik if salyga ar kartu ir else vyksta?

velgi, kai i masyva duomenis deda, tai irgi, kai ciklas vyksta pirma karta tai M[0] = 1, kai antra karta vyksta tai M[1] = 1, trecia - M[2] = 1 ir taip toliau? ar netaip mastau?

M = M[i-1] + M[i-2] + M[n-3];ir kaip sitoj eilutej vyksta sudetis visa, niekaip nesuprantu.

beje, esu savamokslis, mokykloj tik kitamet galesiu mokytis prgramavimo pilnai (dabar 11 klasej esu, ir mokytoja tokia kad ne bum bum man atrodo...) jei netygnit tai paaiskint isamiai :)

 

Masyvai prasideda nuo 0 elemento, o ne nuo 1. Kam tu tą +1 pridedi nežinau (EDIT: Actually, pabandyk tiesiog su i <= n). su i < 4 irgi nelabai supratau, turėtų būt greičiau i < 3

 

M = M[i-1] + M[i-2] + M[n-3]; <- kodėl šitoj vietoj pačiam gale n-3 o ne i-3?

else sąlyga vyksta tik tada, jeigu nevyksta if sąlyga, ir atvirkščiai. O beje, kodas vistiek tą patį daro ką ir mano, tiktais kad tavasis dar nereikalingai ir kitus fibonačius suskaičiuoja :)

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ciklų tikrai nereikia.

 

#include <iostream>

int main()
{
   int skaiciai[] = { 1, 1, 1, 3, 5, 9 };
   int ieskomas = 6;
   int a = skaiciai[ieskomas - 2] + skaiciai[ieskomas - 3] + skaiciai[ieskomas - 4];
   std::cout << a;
   return 0;
}

cia sprendimas apie fibonacio skaicius? :D jau susimaisiau :D ar apie kabeliu jungima? :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Masyvai prasideda nuo 0 elemento, o ne nuo 1. Kam tu tą +1 pridedi nežinau (EDIT: Actually, pabandyk tiesiog su i <= n). su i < 4 irgi nelabai supratau, turėtų būt greičiau i < 3

 

M = M[i-1] + M[i-2] + M[n-3]; <- kodėl šitoj vietoj pačiam gale n-3 o ne i-3?

else sąlyga vyksta tik tada, jeigu nevyksta if sąlyga, ir atvirkščiai. O beje, kodas vistiek tą patį daro ką ir mano, tiktais kad tavasis dar nereikalingai ir kitus fibonačius suskaičiuoja :)

pagal tavo nurodytus pakeitimus man isvis atsakyma 17 meta :) tai arba klaida arba logikos nera cia.. :)

beje, kodas ne mano o vieno forumiecio :)

 

cia ant smugio savo koda parasiau.

#include <iostream>

using namespace std;

 

int main()

{

setlocale(LC_ALL, "Lithuanian");

int n = 6;

int fskaicius;

int fmas[10];

for (int i = 1; i <= n; i++)

{

if (i <= 3)

{

fmas = 1;

}

else

{

fmas = fmas[i - 1] + fmas[i - 2] + fmas[i - 3];

}

fskaicius = fmas[n];//////////////////////tik nezinau kodel masyve turi but n raide o ne i.

}

cout << fskaicius;

return 0;

}

Redagavo Fajas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

pagal tavo nurodytus pakeitimus man isvis atsakyma 17 meta :) tai arba klaida arba logikos nera cia.. :)

beje, kodas ne mano o vieno forumiecio :)

 

Kodėl logikos nėra? Kaip tik yra. 17 yra sekantis ar dar sekantis superfibonačio skaičius. Reiškias kažkur per daug pridėjai ir viskas.

EDIT: Dabar tiesiog pasiimk tą seną kodą, padaryk pataisymus, kuriuos siūliau, ir dar šitoj eilutėj va taip pakeisk: (paskutinė eilutė) superfibonatis = M[n - 1];

 

EDIT:EDIT:

fskaicius = fmas[n];//////////////////////tik nezinau kodel masyve turi but n raide o ne i.

Nes tau reikia tik n'o skaičiaus fibonačio eilėje, o ne jų visų.

Redagavo Nerolat
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kodėl logikos nėra? Kaip tik yra. 17 yra sekantis ar dar sekantis superfibonačio skaičius. Reiškias kažkur per daug pridėjai ir viskas.

EDIT: Dabar tiesiog pasiimk tą seną kodą, padaryk pataisymus, kuriuos siūliau, ir dar šitoj eilutėj va taip pakeisk: (paskutinė eilutė) superfibonatis = M[n - 1];

viskas, jau mazdaug pasirases savo koda emiau viska suprast, dekoju uz pagalba ir durnus klausimus ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Masyvai prasideda nuo 0 elemento, o ne nuo 1. Kam tu tą +1 pridedi nežinau (EDIT: Actually, pabandyk tiesiog su i <= n). su i < 4 irgi nelabai supratau, turėtų būt greičiau i < 3

 

M = M[i-1] + M[i-2] + M[n-3]; <- kodėl šitoj vietoj pačiam gale n-3 o ne i-3?

else sąlyga vyksta tik tada, jeigu nevyksta if sąlyga, ir atvirkščiai. O beje, kodas vistiek tą patį daro ką ir mano, tiktais kad tavasis dar nereikalingai ir kitus fibonačius suskaičiuoja :)

 

Senai rašiau aš tą kodą, tai ten gal kokia klaida įsivėlė taisant. Bet vistiek pabandžius veikia. :)

O ten if'e i<4, todėl, nes gi pirmi 3 skaičiai = 1. Jei būtų i<3 tai tada suvestų tik iki 2 tuos 1 :)

Redagavo MindeB
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Senai rašiau aš tą kodą, tai ten gal kokia klaida įsivėlė taisant. Bet vistiek pabandžius veikia. :)

O ten if'e i<4, todėl, nes gi pirmi 3 skaičiai = 1. Jei būtų i<3 tai tada suvestų tik iki 2 tuos 1 :)

 

Nu žinok nelabai.. Tavo for loopas yra nuo 0 (nes masyvai prasideda nuo 0), tad pirmas skaičius yra 0; antras skaičius yra 1; trečias skaičius yra 2, todėl ir turėtų būt i < 3. Visi masyvai, visad nuo 0 prasideda, bet jeigu jau žiauriai nori, gali for loopa rašytis nuo 1.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu žinok nelabai.. Tavo for loopas yra nuo 0 (nes masyvai prasideda nuo 0), tad pirmas skaičius yra 0; antras skaičius yra 1; trečias skaičius yra 2, todėl ir turėtų būt i < 3. Visi masyvai, visad nuo 0 prasideda, bet jeigu jau žiauriai nori, gali for loopa rašytis nuo 1.

 

Va va, prieš dedant pataisiau į 0, o kito nepataisiau. Ačiū už pastebėtą klaidą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Logiškai galvojant, 5 uždavinio sprendimui net nereikia ciklo. Užtenka 1 eilutės, didžiausias galimas apvalkalų kabelyje skaičius: N = 2*n-1

Gali įsistatyti įvairius skaičius ir patikrinti ;)

teisingai sakai, bet manau kad galima ir su while ciklu prasisukt?

ir apskritai, klausimas is lempos, bet koki programavimo uzdavinio sprendimo kodas yra svarbus ar ne, konkreciai klausiu kaip pvz apie fibonacio skaicius, vieni su if rase, kitas iskart, yra skirtumas kaip uzrasysi koda ar ne? jei atsakymas toks pat vistiek gaunasi? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

teisingai sakai, bet manau kad galima ir su while ciklu prasisukt?

ir apskritai, klausimas is lempos, bet koki programavimo uzdavinio sprendimo kodas yra svarbus ar ne, konkreciai klausiu kaip pvz apie fibonacio skaicius, vieni su if rase, kitas iskart, yra skirtumas kaip uzrasysi koda ar ne? jei atsakymas toks pat vistiek gaunasi? :)

 

Mano nuomone čia būtų jau optimizavimo klausimas. Bet mokymosi tikslais, tai geriau rašyk kaip užduotyje nurodyta, nes tada perprasi veikimo principą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...