[ Pretender @ 04.08.2003. 21:42 ] @
Ukucao sam program za n-to stepenovanje unetog broja :


// F-ja za dizanje broja a, na n-ti stepen

# include <iostream.h>
# include <conio.h>

long step(short int x, unsigned short int n); // prototip f-je step

int main()
{
short int a;
unsigned short int n;
long int rezult;

cout << "\n" << " Program podize broj `a` na n-ti stepen";
cout << "\n\n" << " Unesite a: ";
cin >> a;
cout << "\n" << " Unesite n: ";
cin >> n;

rezult= step(a, n);
cout << "\n" << "Rezultat je: " << rezult;

getch();
return 0;
}


long step(short int v, unsigned short int w)
{
?????????????????????????????????????????
if (w<0)
cout << "\n" << "Ne znam da radim sa negativnim stepenima.";
return 0;
???????????????????????????????????????????
if (w==0)
return (1);
if (w==1)
return (v);
return (v * step(v, w-1));
}


i sve je dobro radilo, dok nisam dodao deo izmedju upitnika (kako bih porukom pokrio slucaj n<0). Sada dobijam "Rezultat je 0" za svaku komb. unetih brojeva.

Ako neko zna zasto dolazi do problema, molim da let me no.

Hvala
[ Dragi Tata @ 04.08.2003. 22:21 ] @
Pre svega, nije mi jasno zašto uopšte proveravaš da li je unsigned manje od nule.
[ filmil @ 04.08.2003. 22:30 ] @
Citat:
Pretender:
Code:

if (w<0)
        cout << "\n" << "Ne znam da radim sa negativnim stepenima.";
        return 0;



Treba:

Code:

if (w<0) {
        cout << "\n" << "Ne znam da radim sa negativnim stepenima.";
        return 0;
}


f
[ Pretender @ 04.08.2003. 23:16 ] @
Dragom Tati :

U pravu si, previd, ali ja sam hteo da vidim zasto gornji kod ne radi, za signed ili unsigned svejedno.


Filmilu :

Hvala.Kapiram gresku, ali izgleda da ne mogu pravilno da postavim sve zagrade (jer dodavanje ovih iziskuje i dodavanje jos nekih), tako da dobijam poruke gresaka.

Ako bi mogao da mi napises ceo kod definicije f-je, bio bih ti zahvalan.
[ filmil @ 04.08.2003. 23:56 ] @
Code:

// F-ja za dizanje broja a, na n-ti stepen

# include <iostream>

using namespace std;

long step(int x, unsigned short n); // prototip f-je step

int main()
{
    short a;
    unsigned short n;
    long rezult;

    cout << endl << " Program podize broj `a` na n-ti stepen";
    cout << endl << endl << " Unesite a: ";
    cin >> a;
    cout << endl << " Unesite n: ";
    cin >> n;

    rezult = step(a, n);
    cout << endl << "Rezultat je: " << rezult;

    return 0;
}


long step(short v, unsigned short w)
{

    if (w<0) {
        cout << "\n" << "Ne znam da radim sa negativnim stepenima.";
        return 0;
    }

    if (w==0)
        return (1);
    if (w==1)
        return (v);
    return (v * step(v, w-1));
}


Code:

cd /home/filip/
g++ -o step -Wall step.cc
step.cc: In function `long int step(short int, short unsigned int)':
step.cc:31: warning: comparison is always false due to limited range of data 
   type

Compilation finished at Mon Aug  4 22:54:14


f
[ Pretender @ 05.08.2003. 03:39 ] @
Sad je ok (`doterao` sam samo definiciju f-je).
Inace, izbrisao sam `unsigned`, pa vise nema upozoravajucih poruka.

Jos jedared hvala.