# Thread: Problem With Pow Function, Help?

1. ## Problem With Pow Function, Help?

Hey...

So I'm having a bit of difficulty with a program I've put together, and it all seems to be surrounding the pow function. I can't even do a simple pow(2,2) without getting an error. And I have included the cmath library.

This is the error I get:
ld:
Unresolved:
pow

Any ideas?
(It's a binary to decimal converter)

Thanks!

Code:
```          #include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

void main ()
{
int count = 0, bin, sum;
char line[32] ;

cin >> noskipws >> line[0] ;
while ( line[count] != '\n' )
{
count ++ ;
cin >> line[count] ;
}

sum = 0;

for ( bin = count - 1; bin >= 0; bin -- )
{
sum = sum + (line[bin] * pow(2,bin));
}

cout << sum;
cout << endl ;
}```

2. main() should be defined as an int, not void.

The pow function expects doubles, not ints, but the only one that's really required is the first arguement. Change your call to this:

Code:
`pow(2.0,bin);`
Also, if you want this thing to work, you should really look up the difference between 1 and '1'.

3. Hey,

Thanks for responding... I tried your suggestions, both the int in the main() and making the pow a double, but neither seem to be working. I still get the same error.

Any ideas?

Also, what do you mean, the difference between '1' and 1?

Here's the code:
Code:
```          #include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main ()
{
int count = 0, bin, sum;
char line[32] ;

cin >> noskipws >> line[0] ;
while ( line[count] != '\n' )
{
count ++ ;
cin >> line[count] ;
}

sum = 0;

for ( bin = count - 1; bin >= 0; bin -- )
{
sum = sum + (line[bin] * pow(2.0,bin));
}

cout << sum;
cout << endl ;
}```

4. Your compiler doesn't like that you're multiplying a character by a double, then. Perhaps it's reading the * as a dereferencing operator? :/

As, I said, you have to know why the character '1' and the integer 1 are different. Go to http://www.lookuptables.com, look at what the decimal value of the character 1 is.

5. your sum should also be a double!
Code:
``` #include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main ()
{
int count = 0, bin;
double sum;
char line[32] ;

cin >> noskipws >> line[0] ;
while ( line[count] != '\n' )
{
count ++ ;
cin >> line[count] ;
}

sum = 0.0;

for ( bin = count - 1; bin >= 0; bin -- )
{
sum = sum + (line[bin] * pow(2.0,bin));
}

cout << sum;
cout << endl ;
}```

6. Hey,

Thanks for all of the suggestions, but I'm still getting the same error. ...I don't know what to do. I just want to get past this problem with the pow function.

Thanks!

7. Even when I change the bin variable to a double number, 2.0, I still get the error.

8. I just want to get past this problem with the pow function.
Have you ever succesfully used pow()? Try this: write a program that uses pow() to square the number 3 and display it. Does it work?

Also, what do you mean, the difference between '1' and 1?
Try this code:
Code:
```char ch = '1';
int bin = ch;

cout<<bin<<endl;```
Is the result what you expected?

9. No, I understand that. And yes, I have written several programs that have allowed me to use the pow function. I have reason to believe that it has something to do with the compiler. I've tried the same source code on another compiler and the problem was resolved.

However, I'm having a different problem at this point...

At present, the program is for the most part finished, and it successfully converts any positive binary number up to 32 bits into its corresponding decimal form. However, I can't seem to make it user friendly, ie, I can't get it to successfully ask the user whether or not they want to convert bin to dec, or whether or not they want to continue.

I've got to get the program to initially ask whether or not they want to convert from bin to dec, if not the program is supposed to terminate. If so, it's supposed to execute. After it executes, it's supposed to ask the user whether or not they want to try again with another number, and at that point, it's supposed to loop.

Here's the source code:
Code:
```#include <iostream>

#include <iomanip>

#include <cmath>

using namespace std;

main ()

{

int count = 0, bin, num=0, sum=0;

char forward[32], backward[32], convert, swap, cont;

cout << "This program converts positive integer" << endl;

cout << "binary numbers (up to 32 bits) to decimal." << endl << endl;

cout << "Enter binary number you wish to convert: ";

cont = 'y';

while(cont == 'y' || cont == 'Y')

{

cin >> noskipws >> forward[0];

while(forward[count] != '\n')

{

count ++ ;

cin >> forward[count] ;

}

for ( bin = count-1; bin >= 0  ; bin -- )

{

swap = forward[bin];

backward[num] = swap;

num++;

}

sum = 0;

cout << endl << endl;

for ( num=0; num <= count-1; num++)

{

sum = sum + ((backward[num]-48) * pow(2.0,num));

}

for ( bin = 0; bin <= count-1; bin++)

{

cout << forward[bin];

}

cout << " in decimal is " << sum << endl;

cout << "Continue? (y/n): ";

cin >> cont;

}

}```

This code isn't letting me insert a cin before the first cin there with the noskipws. And that includes when it loops after the first run through. If I have a cin before that intial cin there, it just takes whatever value it has stored and reruns or runs that, whether null or with previous results.

...Does anyone know what's wrong with this? Why is this happening?

This should just be a matter of an if/else and a while loop, but it doesn't seem to be working so flawlessly.

Thanks!

10. Remember the main() function should be declared to return an int. To fix your looping problem, you need to eat the newline after asking if the user wants to continue (I used cin.ignore()). Also you never reset count and num.
Code:
```#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

int main ()
{

int bin, sum=0;

char forward[32], backward[32], convert, swap, cont;

cout << "This program converts positive integer" << endl;

cout << "binary numbers (up to 32 bits) to decimal." << endl << endl;

//cout << "Enter binary number you wish to convert: ";

cont = 'y';

while(cont == 'y' || cont == 'Y')

{

int count = 0;
cout << "Enter binary number you wish to convert: ";
cin >> noskipws >> forward[0];

while(forward[count] != '\n')

{

count ++ ;

cin >> forward[count] ;

}

int num = 0;
for ( bin = count-1; bin >= 0  ; bin -- )

{

swap = forward[bin];

backward[num] = swap;

num++;

}

sum = 0;

cout << endl << endl;

for ( num=0; num <= count-1; num++)
{

sum = sum + ((backward[num]-48) * pow(2.0,num));

}

for ( bin = 0; bin <= count-1; bin++)
{
cout << forward[bin];
}

cout << " in decimal is " << sum << endl;

cout << "Continue? (y/n): ";

cin >> cont;
cin.ignore(80, '\n');

}

}```

11. Right. Thank you. How would I reset num and count? Wouldn't I have to then reset bin as well??

...Do I just do a num=0; or something?

Thanks!

12. >How would I reset num and count?
I added that in the above code. Here are the two lines I added:
Code:
```>         int count = 0;
.
.
>         int num = 0;```
I basically just moved their declarations from where you had them (at the top) to inside the loop.
>Wouldn't I have to then reset bin as well??
You already initialized bin in this loop:
Code:
```         int num = 0;
for ( bin = count-1; bin >= 0  ; bin-- )```
As an aside, num could also be initialized this way:
Code:
```         int num;
for ( bin = count-1, num=0; bin >= 0  ; bin-- )```