Peršokti į turinį
matematika8520

c++ ciklas ir rekursija

Recommended Posts

Labas vakaras, reikia pagalbos issprendziant sia uzduoti

#include <iostream>
#include <cmath>
using namespace std;

void meniu()
{
cout<<"a) cikla "<<endl;
cout<<"b) rekursija"<<endl;

}


int ciklas(int y)
{
int rez;
while(y!=1)
{

}

}



int rekursija(int a)
{
    int rez;
    if(a==1)
    {
        rez=1;
    }
    else
    rez=a*rekursija(a-1);

    return rez;
}


int main()
{
	char pas;
	meniu();
	int c;
	cin>>pas;
	if(pas == 'b')
	{
	cout<<"iveskite skaiciu"<<endl;
	cin>>c;
    rekursija(c);
    cout<<rekursija(c);
	}
	else if(pas == 'a')
	{
	cout<<"iveskite skaiciu"<<endl;
	
	}
	else return 0;
    return 0;
}

 

Capture.PNG

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį


SIŪLAU PAČIAM DAR BANDYT PRIEŠ SKAITANT!!! Nes priešingu atveju taip suvokimo ir neįgausi. Tai ką tu padaręs aš kiek matau yra "kažkokie fragmentai" niekaip nesusiję su uždavinio sąlyga todėl net nematau tikslo jų taisyti.

Sugalvojau sprendimą, bet jis pateiks tik suapvalintą reikšmę. Tačiau sąlygoj nieko apie tai nepaminėta tai gal viskas ok turėtų būt.

a) Principas toks, kad einama iš antro galo įsimenant praeitą skaitiklio reikšmę ir taip vis dalinant suapvalintas reikšmes (it's not so good, nes gaunama netiksli reikšmė, bet kaip ir minėjau pats nesu užtikrintas dėl sąlygos).

b) Nurodomas base case (a>256) kada reikia nutraukt recursive funkcija ir pateikt ats. Kitas case manau aiškus turėtų būt.

#include <iostream>
#include <cmath>

using namespace std;

double SolveUsingLoop(double x) {
    double y = pow(x,2) + 256/pow(x,2);

    if (x == 0)
        throw invalid_argument("Esant tokiam argumentui funkcija neturi reikšmės!");

    int prev = 256;
    for (int i = 0; i < 8-1; i++) {
        prev /= 2;
        y = pow(x,2)+prev/y;
    }
    return 1/y;
}

double SolveUsingRecursion(double x, int a = 1) {
    if (x == 0)
        throw invalid_argument("Esant tokiam argumentui funkcija neturi reikšmės!");
    if (a > 256)
        return 0;
    else
        return a/(pow(x,2)+SolveUsingRecursion(x, 2*a));
}

int main()
{
    double x;

    cout << "Įveskite x: ";
    cin >> x;

    cout << "a) y = " << SolveUsingLoop(x) << endl;
    cout << "b) y = " << SolveUsingRecursion(x) << endl;

    return 0;
}

 

Redaguota , nario Magax
Silly mistake
  • Teigiamai 1

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį

Komentuoti gali tik prisijungę nariai

Jeigu turite paskyrą, prisijunkite

Sukurti paskyrą

Sukurkite paskyrą mūsų forume

Registruotis

Prisijungti

Turite paskyrą? Prisijunkite

Prisijungti dabar

  • Narių peržiūri šį forumą:   0 nariai

    Nėra registruotų narių peržiūrinčių šį forumą.

  • eneba
  • eneba
  • eneba


  • SuperGames programele
  • SuperGames programele


×