Page 1 of 1

Problem with two functions in single cout

Posted: Mon 23 Apr 2012, 05:25
by mahaju

Code: Select all

#include<iostream>
#include<conio.h>
using namespace std;
typedef unsigned long ulong;


long eeuclid(long m, long b, long *inverse){        /// eeuclid( modulus, num whose inv is to be found, variable to put inverse )
    long A1 = 1, A2 = 0, A3 = m,
         B1 = 0, B2 = 1, B3 = b,
         T1, T2, T3, Q;

         cout<<endl<<"eeuclid() started"<<endl;

        while(1){
            if(B3 == 0){
                *inverse = 0;
                return A3;      // A3 = gcd(m,b)
            }

            if(B3 == 1){
                *inverse = B2; // B2 = b^-1 mod m
                return B3;      // A3 = gcd(m,b)
            }

            Q = A3/B3;

            T1 = A1 - Q*B1;
            T2 = A2 - Q*B2;
            T3 = A3 - Q*B3;

            A1 = B1; A2 = B2; A3 = B3;
            B1 = T1; B2 = T2; B3 = T3;
       }
    cout<<endl<<"ending eeuclid() "<<endl;
}

int main(){
    long a, b, c, d=0, e, inverse = 0;
    int ch;
        cout<<"Preparing extended Euclid ---> "<<endl;
        cout<<"m >> ";
        cin >> a;
        cout<<"b >> ";
        cin >> b;
        cout<<"gcd("<<a<<","<<b<<") = "<<eeuclid(a, b, &inverse);
        cout<<" and inverse  = "<<inverse<<endl;
        cout<<endl<<"Press q to quit ... "<<endl;
    return 0;
}
In the above code, in the main() function, if

Code: Select all

cout<<"gcd("<<a<<","<<b<<") = "<<eeuclid(a, b, &inverse);
        cout<<" and inverse  = "<<inverse<<endl;
is replaced by

Code: Select all

cout<<"gcd("<<a<<","<<b<<") = "<<eeuclid(a, b, &inverse)<<" and inverse  = "<<inverse<<endl;
the value of inverse prints out as 0, even though single stepping through the code and examining the value in memory shows that the variable inverse has the correct value
Why is that??

Posted: Mon 23 Apr 2012, 06:14
by technosaurus
printf still works in C++ ... cout and cin and the <<knife jabs>> are an almost as much an abomination as sed picket fences (and reason 999 I prefer C) - you should post it on stackoverflow though, where there are a few people that bought into the hype and actually think c++ is a good tool (most Puppy coders use C or bash/shell)

I don't write much C++, but it is probably this bit FUNCTION(...)<<... (stops going to cout, and goes to your function)
... seriously printf is much easier to read and debug

Posted: Mon 23 Apr 2012, 07:37
by mahaju
What I actually don't understand is, this is code that I had completed and tested months ago
Yesterday when I as running it again it was working fine for the first few runs
Since this is not a very long code I usually do a rebuild and rerun of this project every time I want to run it again
For the first few rebuilds and reruns it worked as expected
Then suddenly this happened
I didn't expect something like that was possible