| Paste number 9644: | drats |
| Pasted by: | Summe Lindele |
| When: | 3 years, 11 months ago |
| Share: | Tweet this! | http://paste.lisp.org/+7FW |
| Channel: | #lisp |
| Paste contents: |
#include <iostream.h>
#include <math.h>
//#include <iosmanip.h>
//Marius Meyer
//July 4, 2005
//This is Program 4
void display();
void choice(char a);
void bhaskara();
void newton();
void russian();
int mult(int a, int b);
void monkey();
int main()
{ char response;
int num1, num2;
//cout<<setiosflags(ios::fixed)<<setprecision(3);
display();
cin>>response;
cout<<endl;
while (response == 'b' || response == 'B' || response == 'n' || response == 'N' || response == 'r' || response == 'R' || response == 'm' || response == 'M')
{ choice(response);
display();
cin>>response;
cout<<endl;
}
return 0;
}
void display()
{ cout<<"Here are the options:"<<endl;
cout<<"B: (B)haskara-Brouckner Algorithm for the square root."<<endl;
cout<<"N: (N)ewton's Iteration for the square root."<<endl;
cout<<"R: (R)ussian Peasant Multiplication."<<endl;
cout<<"M: (M)onkey Island coconut calculation."<<endl;
cout<<"Or any key to exit."<<endl;
cout<<"Please make a selection: ";
}
void choice(char a)
{ switch(a)
{case 'b': bhaskara();
break;
case 'B': bhaskara();
break;
case 'n': newton();
break;
case 'N': newton();
break;
case 'r': russian();
break;
case 'R': russian();
break;
case 'm': monkey();
break;
case 'M': monkey();
break;
default: cout<<endl;
}
}
void bhaskara()
{ double number, difference = 1, a, b, preva = 1, prevb = 1, error;
double const k = 0.0001;
int count = 0;
cout<<"Please enter a number: ";
cin>>number;
while (difference >= k)
{ a = preva + prevb*number;
b = preva + prevb;
difference = a/b - preva/prevb;
if (difference < 0) difference = difference * -1;
preva = a;
prevb = b;
count++;
}
error = double(1)/(2*pow(b,2));
cout<<"sqrt("<<number<<") = "<<a/b<<" with error "<<error<<".\n";
cout<<"The Bhaskara-Brouckner Algorithm was run "<<count<<" times.\n";
cout<<endl;
}
void newton()
{ double number, difference = 1, x, prevx = 1;
double const k = 0.0001;
int count = 0;
cout<<"Please enter a number: ";
cin>>number;
while (difference >= k)
{ x = 0.5*(prevx + number/prevx);
difference = x - prevx;
if (difference < 0) difference = difference * -1;
prevx = x;
count++;
}
cout<<"sqrt("<<number<<") = "<<x<<".\n";
cout<<"The Newton's Iteration method was run "<<count<<" times.\n";
cout<<endl;
}
void russian()
{ int number1, number2;
cout<<"Please enter two numbers for which you want to find the product.\n";
cout<<"Number 1 = ";
cin>>number1;
cout<<"Number 2 = ";
cin>>number2;
cout<<number1<<" x "<<number2<<" = "<<mult(number1, number2)<<endl;
cout<<endl;
}
int mult(int a, int b)
{ int sum = 0, leftNum, rightNum;
leftNum = abs(a);
rightNum = abs(b);
if (a == 0 || b == 0) sum = 0;
else {while (leftNum > 1)
{ if (leftNum % 2 == 1) sum = sum + rightNum;
leftNum = leftNum / 2;
rightNum = rightNum * 2;
}
sum = sum + rightNum;
}
if (a < 0 && b > 0) sum = sum * -1;
else if (a > 0 && b < 0) sum = sum * -1;
return sum;
}
void monkey()
{ int number = 1;
for (int i = 1; i <= 4; i++)
number = number*3 + 1;
cout<<"The smallest number of coconuts to have started with was:"<<endl;
cout<<number<<endl<<endl;
}This paste has no annotations.