2011-03-16 41 views
0

該程序應該執行一系列分數的sigma加法並顯示結果。但是,它只輸出0.000000。根據其他人的建議,它看起來像剩餘部分被整數算術截斷,但我找不到在哪裏。任何想法?:來自Kochan文本的Obj-C程序沒有像預期的那樣運行

#import <Foundation/Foundation.h> 

// The Fraction class 

@interface Fraction : NSObject 

{ 
    int numerator; 
    int denominator; 
} 

@property int numerator, denominator; 

-(void) print; 
-(void) setTo: (int) n over: (int) d; 
-(double) convertToNum; 
-(void) reduce; 
-(Fraction *) add: (Fraction *) f; 


@end 

--------------------------------------- 


#import "Fraction.h" 


@implementation Fraction 

@synthesize numerator, denominator; 

-(void) print 

{ 
    NSLog (@"%i/%i", numerator, denominator); 
} 

-(double) convertToNum 
{ 
    if (denominator != 0) 
     return ((double) numerator/(double) denominator); 
    else 
     return 1.0; 
} 

-(void) setTo: (int) n over: (int) d 
{ 
    numerator = n; 
    denominator = d; 
} 


-(void) reduce 

{ 
    int u = numerator; 
    int v = denominator; 
    int temp; 

    while (v != 0) { 
     temp = v % u; 
     u = v; 
     v = temp; 
    } 

    numerator /= u; 
    denominator /= u; 
} 


-(Fraction *) add: (Fraction *) f 

{ 

    Fraction *result = [[Fraction alloc] init]; 
    int resultNum, resultDenom; 

    resultNum = numerator * f.denominator + 
    denominator * f.numerator; 
    resultDenom = denominator * f.denominator; 

    [result setTo: resultNum over: resultDenom]; 

    [result reduce]; 
    return result; 
} 


@end 


------------------------------------------------------- 

#import "Fraction.h" 

int main (int argc, char *argv[]) 
{ 

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    Fraction *aFraction = [[Fraction alloc] init]; 
    Fraction *sum = [[Fraction alloc] init], *sum2; 
    int i, pow2, n; 

    // set 1stfraction to 0 

    [sum setTo: 0.0 over: 1.0]; 



    NSLog (@"Enter your value for n:"); 
    scanf ("%i", &n); 


    pow2 = 2.0; 
    for (i = 1; i <= n; ++i) { 
     [aFraction setTo: 1 over: pow2]; 
     sum2 = [sum add: aFraction]; 
     [sum release]; // release previous sum 
     sum = sum2; 
     pow2 *= 2.0; 


    } 

    NSLog (@"After %i iterations, the sum is %f", n, [sum convertToNum]); 
    [aFraction release]; 
    [sum release]; 




    [pool drain]; 
    return 0; 
} 

回答

2

解決:

- (無效)減少

{ INT U =分子; int v =分母; int temp;

while (v != 0) { 
    temp = u % v;   // 'u' and 'v' were transposed. 
    u = v; 
    v = temp; 
} 
+0

對我來說,好像對代碼的一些更好的評論會讓錯誤更容易被發現。我知道代碼是從教科書中複製的,所以我的問題是:是否缺少對作者的錯誤發表評論,或者是否在鍵入代碼時忽略了註釋?如果是前者,下次我在教科書市場中尋找不同的作者:-) – 2011-03-16 02:43:22

相關問題