First of all i would just like to thank anyone who replies to this post, i feel very awkward asking for help as i prefer to solve it myself but, being very new to C++, i am having trouble with strings
I am just writing a simple program to convert a real number to binary and managed to get it working in a linear form. However, mostly for practice, partly for general organisation and for further development i decided to break it up into discrete functions. To output the binary at the end of the primary function (binary_conv) i decided to make a string with the binary digits within it. however, the output of the function is nonsensical and seems to be probably a value in the general memory. I am quite sure that return is probably not the right way to output a string but i am not aware of an alternative. I have used several cout s in my quest to solve this problem. I am sure my code is not the most elegant but is seems to get the job done Thanks again! I enclose the code below:
Code:
#include <iostream>
#include <math.h>
using namespace std;
int digits(int number);
int binary_conv(int digits, int real_number);
int main()
{
for(int x= 0; x<=10; x++)
{
int real;
cout<<"Please enter a real number: ";
cin>>real;
int c=digits(real);
int binary=binary_conv(c,real);
cout<<binary <<"\n";
}
}
int digits(int number) /* calculates the number of digits needed, ie. 101 = 3 digits */
{
float b = (float) number;
int c = 0;
while(b>=1.0) /* simply divides by two until b is less than 1 and counts the number of divisions */
{
b=b/2.0;
c++;
}
return c;
}
int binary_conv(int digits, int real_number)
{
char *binary = new char[digits+1]; /* I am not at all sure of this part */
float b=(float)real_number; /* Convert the number into a float for processing */
while(digits>0) /* Processes the real number through the repitition of a simple sequence*/
{
b=b/(pow(2,digits-1)); /* Dividing the real number by an appropriate bit value (starting at the highest for the number and decreasing) determines the state of the bit*/
if(b>=1)
{
strcat(binary,"1"); /* If a number higher than one is returned the program outputs a 1 */
cout<<"1"; /* Used to check the byte before the function outputs it */
b=b-1;
}
else
{
strcat(binary,"0"); /*If the bit is too big the program outputs a 0 */
cout<<"0"; /* Used to check the byte before the function outputs it */
}
b=b*(pow(2,digits-1)); /* Turns the remainder into an appropriate value to continue the loop */
digits=digits-1;
}
cout<<"\n"<<binary <<"\n"; /* Another check i was using */
return *binary; /* This is almost certainly a major part of the problem */
delete [] binary;
}
Peter