#include <iostream>
#include <vector>
using namespace std;
int test(int x, int y);
int add2(int x, int y);
int subtract(int x, int y);
int mult(int x, int y);
int divide(int x, int y);
typedef decltype(test) *FuncP; //type declaration of a ptr to a function that takes two ints and returns int
int main(){
//6.7
vector<FuncP> ptrsToFuncs;
ptrsToFuncs.push_back(*add2);
ptrsToFuncs.push_back(*subtract);
ptrsToFuncs.push_back(*mult);
ptrsToFuncs.push_back(*divide);
vector<FuncP>::iterator fIter;
int test1 = 6, test2 = 8;
int test3 = 0;
cout << "Running four arithmetic functions with " << test1 << " and " << test2 << "\n\n";
for (fIter = ptrsToFuncs.begin(); fIter != ptrsToFuncs.end(); ++fIter)
{
int result = (*fIter)(test1, test2);
cout << result << endl;
}
system("PAUSE");
}
int test(int x, int y)
{
if (y != 0)
{
cout << "Modulo of one and two is: " << x % y << "\n\n";
return x % y;
}
else
{
cout << "Cannot divide by zero.\n\n";
return -1;
}
}
int add2(int x, int y)
{
return (x + y);
}
int subtract(int x, int y)
{
return (x - y);
}
int mult(int x, int y)
{
return (x * y);
}
int divide(int x, int y)
{
if (y != 0)
{
return (x / y);
}
else
{
cout << "Cannot divide by zero.\n";
return -1;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHRlc3QoaW50IHgsIGludCB5KTsKaW50IGFkZDIoaW50IHgsIGludCB5KTsKaW50IHN1YnRyYWN0KGludCB4LCBpbnQgeSk7CmludCBtdWx0KGludCB4LCBpbnQgeSk7CmludCBkaXZpZGUoaW50IHgsIGludCB5KTsKCnR5cGVkZWYgZGVjbHR5cGUodGVzdCkgKkZ1bmNQOyAvL3R5cGUgZGVjbGFyYXRpb24gb2YgYSBwdHIgdG8gYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBpbnRzIGFuZCByZXR1cm5zIGludAoKaW50IG1haW4oKXsKLy82LjcKdmVjdG9yPEZ1bmNQPiBwdHJzVG9GdW5jczsKcHRyc1RvRnVuY3MucHVzaF9iYWNrKCphZGQyKTsKcHRyc1RvRnVuY3MucHVzaF9iYWNrKCpzdWJ0cmFjdCk7CnB0cnNUb0Z1bmNzLnB1c2hfYmFjaygqbXVsdCk7CnB0cnNUb0Z1bmNzLnB1c2hfYmFjaygqZGl2aWRlKTsKCnZlY3RvcjxGdW5jUD46Oml0ZXJhdG9yIGZJdGVyOwppbnQgdGVzdDEgPSA2LCB0ZXN0MiA9IDg7CmludCB0ZXN0MyA9IDA7Cgpjb3V0IDw8ICJSdW5uaW5nIGZvdXIgYXJpdGhtZXRpYyBmdW5jdGlvbnMgd2l0aCAiIDw8IHRlc3QxIDw8ICIgYW5kICIgPDwgdGVzdDIgPDwgIlxuXG4iOwoKZm9yIChmSXRlciA9IHB0cnNUb0Z1bmNzLmJlZ2luKCk7IGZJdGVyICE9IHB0cnNUb0Z1bmNzLmVuZCgpOyArK2ZJdGVyKQp7CiAgICBpbnQgcmVzdWx0ID0gKCpmSXRlcikodGVzdDEsIHRlc3QyKTsKICAgIGNvdXQgPDwgcmVzdWx0IDw8IGVuZGw7Cn0KCgogICAgc3lzdGVtKCJQQVVTRSIpOwp9CgppbnQgdGVzdChpbnQgeCwgaW50IHkpCnsKICAgIGlmICh5ICE9IDApCiAgICB7CiAgICAgICAgY291dCA8PCAiTW9kdWxvIG9mIG9uZSBhbmQgdHdvIGlzOiAiIDw8IHggJSB5IDw8ICJcblxuIjsKICAgIHJldHVybiB4ICUgeTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBjb3V0IDw8ICJDYW5ub3QgZGl2aWRlIGJ5IHplcm8uXG5cbiI7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQp9CgppbnQgYWRkMihpbnQgeCwgaW50IHkpCnsKICAgIHJldHVybiAoeCArIHkpOwp9CgppbnQgc3VidHJhY3QoaW50IHgsIGludCB5KQp7CiAgICByZXR1cm4gKHggLSB5KTsKfQoKaW50IG11bHQoaW50IHgsIGludCB5KQp7CiAgICByZXR1cm4gKHggKiB5KTsKfQoKaW50IGRpdmlkZShpbnQgeCwgaW50IHkpCnsKICAgIGlmICh5ICE9IDApCiAgICB7CiAgICAgICAgcmV0dXJuICh4IC8geSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY291dCA8PCAiQ2Fubm90IGRpdmlkZSBieSB6ZXJvLlxuIjsKICAgICAgICByZXR1cm4gLTE7CiAgICB9Cn0=