C++ rekurzija

poruka: 6
|
čitano: 6.316
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
C++ rekurzija

Pozdrav

 

Imam par pitanja vezanih za c++...

 

1. Kako u varijablu spremit 13-oznamenkasti broj, odnosno koji tip podataka da koristim? Probao sam int, long int, double, ali ništa :(...uspijem do 10 znamenaka spremit

 

2. Treba mi rješenje od ovog zadatka u c++-u korištenjem rekurzivne funkcije.

 

"Učitajte svoj datum rođenja u main funkciji (npr. 24091987). U funkciji "max" pronađite najveću znamenku u učitanom datumu rođenja. U funkciji "potencija" pronađite vrijednost potencije broja x učitanog u main funkciju s eksponentom najveće znamenke dobivene iz funkcije max. Ispišite datum rođenja, najveću znamenku i vrijednost potencije."

 

Uglavnom, nakon što se odredi najveća znamenka datuma treba ju iskoristiti kao potenciju baze koju mi unesemo u main. Nadam se da ste skužili šta mi treba.

 

Ajde molim vas ako netko ima volje i vremena da mi to riješi i po mogućnosti dobro iskomentira :).

Hvala unaprijed

 
0 0 hvala 0
17 godina
offline
C++ rekurzija

1. Koristi string, ako broj mora biti u znamenku točan. Inače, koristi npr. double koji će zanemariti posljednje znamenke ali će "veličina" broja ostati ista.

 
0 0 hvala 0
16 godina
neaktivan
offline
C++ rekurzija

Da, da...skužio sam da se u string može pohranit 13 znamenki ali kako da string pozovem u rekurzivnoj funkciji.

 

int suma(unsigned long int n)
{
    if(n==0)
        return 0;
    else

        return(n%10+suma(n/10));
}

int main()
{
    string JMBG;
    cout<<"unesi svoj JMBG: ";
    cin >>JMBG;
    cout<<"\nSuma znamenaka JMBG-a je "<<suma(JMBG)<<endl;
}

 

Moram li koristiti "string suma(string n)" za funkciju ili.....?

 
0 0 hvala 0
17 godina
offline
C++ rekurzija

Neće ići tako, string je skup slova. Morat ćeš napisati vlastite funkcije kojima ćeš zbrajati i oduzimati brojeve u stringovima.

 
0 0 hvala 0
17 godina
neaktivan
offline
C++ rekurzija

Ne mora biti.

Naime, granice integera (i ostalih tipova podataka) varijaju od kompajlera do kompajlera

Tako npr integer je najcesce +-2^31, ili priblizno:+- 3e9 (3 milijarde)
Ali postoji jos i long integer. To je tip podataka koji ima 2 puta vise bita nego integer. Znaci, u njega stane +-2^63 ili priblizno: +-9e19
(kod nekih kompajlera ovo gore vrijedi samo za long long integer)

Takodjer, svaki tip podataka u C++-u, moze biti signed ili unsigned. Unsigned je po defaultu, ako nis ne napises...
Signed u C++-u oznacava da ce vrijednost nekog obijekta biti uvijek pozitivna. S toga, nije potreban onaj jedan bit koji oznacava predznak (dali je pozitivan ili nije). Znaci, raspon pozitivnih vrijednosti ce biti poduplan.

Znaci,
int = +-2^31,
unsignet int = +2^32,


Ako zelite vidjeti granice svojeg kompajlera, pokrenite ovaj kod:

 

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

int main(int argc, char** argv)
{
    printf ("\
        CHAR_BIT=%d;\n\
        SCHAR_MIN=%d;\n\
        SCHAR_MAX=%d;\n\
        UCHAR_MAX=%d;\n\
        CHAR_MIN=%d;\n\
        CHAR_MAX=%d;\n\
        MB_LEN_MAX=%d;\n\
        SHRT_MIN=%d;\n\
        SHRT_MAX=%d;\n\
        USHRT_MAX=%d;\n\
        INT_MIN=%d;\n\
        INT_MAX=%d;\n\
        UINT_MAX=%u;\n\
        LONG_MIN=%ld;\n\
        LONG_MAX=%ld;\n\
        ULONG_MAX=%lu;",
        CHAR_BIT,
        SCHAR_MIN,
        SCHAR_MAX,
        UCHAR_MAX,
        CHAR_MIN,
        CHAR_MAX,
        MB_LEN_MAX,
        SHRT_MIN,
        SHRT_MAX,
        USHRT_MAX,
        INT_MIN,
        INT_MAX,
        UINT_MAX,
        LONG_MIN,
        LONG_MAX,
        ULONG_MAX);
    return 0;
}

 
0 0 hvala 0
17 godina
neaktivan
offline
RE: C++ rekurzija
Jasmin kaže...

Da, da...skužio sam da se u string može pohranit 13 znamenki ali kako da string pozovem u rekurzivnoj funkciji.

 

int suma(unsigned long int n)
{
    if(n==0)
        return 0;
    else

        return(n%10+suma(n/10));
}

int main()
{
    string JMBG;
    cout<<"unesi svoj JMBG: ";
    cin >>JMBG;
    cout<<"\nSuma znamenaka JMBG-a je "<<suma(JMBG)<<endl;
}

 

Moram li koristiti "string suma(string n)" za funkciju ili.....?

 Pa za tako jednostavan problem nema potrebe koristiti rekurziju.  Mozes to jednostavnom while petljom:

unsigned long long int x, sum;
cin >> x;
sum = 0;
while (x > 0) {
    sum += x % 10;
    x /= 10;  
}
cout << x << endl;


Sada, kako bi zbrojio znamenke stringa?
Pa znas da je string niz znakova. Prvo sta trebas napravit je pretvorit znak 'x' u broj tipa integer vrijednosti x.
S obzirom da znakovi idu po ASCII tabeli, mozes jednostavno od ASCII vrijednosti znaka 'x' oduzeti znak '0' (ako ti nije jasno zasto, pogledaj ASCII tabelu na google-u).

Znaci, imas ovo:
string x;
cin >> x;

int sum = 0;
int N = x.size();
for (int i = 0; i < N; i++)
     sum += x[i]-'0';
cout << sum << endl;

Rekurzijom mozes ovo samo zakomplicirati.... Morao bi raditi substring-ove i slati ih u stack sta trosi i memoriju i vrijeme....

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice