2012-03-30 107 views
2

我一直在尋找一個科學計算器教程,但我找不到任何東西。我的目標是學習如何編寫類似iPhone中的計算器應用程序。是否知道任何可以幫助我學習如何將科學函數添加到計算器應用程序的教程。請記住,我已經嘗試了各種版本的基本計算器,並且已經通過了一些這些教程,只是想學習,並且可能會使用這些方法來添加科學函數,如rad,sin,cos和其他一些東西應用程序。我會很滿意的,我可以得到任何幫助。iPhone/ipad科學計算器教程

AP

編輯:

因爲有關於如何建立一個科學計算器在那裏(至少我還沒有發現具體的還沒有任何東西)沒有真材實料這裏是運行的如何向下建立一個。

首先創建一個NSObject類來保存您的操作方法。 (這是可選的,如果你喜歡,你可以將它設置在你的getter(.m)文件的頂部)。然後聲明以下頭文件。

{ 
double operand; 
double savedNumber; 
NSString *waitingOperation; 
double waitingOperand; 
} 

- (void)setOperand:(double)aDouble; 
- (double)performOperation:(NSString *)operation; 
- (void)performWaitingOperation; 

@end 

然後在NSObject類的.m文件中聲明操作函數的方法。類似如下:

-(void)setOperand:(double)num 
{ 
operand=num; 
} 
-(double)performOperation:(NSString *)operation 
{ 
if([operation isEqual:@"sqrt"]){ 
    operand = sqrt(operand); 
}else if ([operation isEqual:@"1/x"]){ 
    if(operand) 
     operand = 1/operand; 
}else if ([operation isEqual:@"2/x"]){ 
    if(operand) 
     operand = 2/operand; 
}else if ([operation isEqual:@"3/x"]){ 
    if(operand) 
     operand = 3/operand; 
}else if ([operation isEqual:@"+/-"]){ 
    if(operand) 
     operand = (-1) * operand; 
}else if ([operation isEqual:@"sin"]){ 
    operand = sin(operand); 
}else if ([operation isEqual:@"sinh"]){//you can add more scientific functions in the same way to this list. 
    operand = sinh(operand); 
}else if ([operation isEqual:@"cos"]){ 
    operand = cos(operand); 
}else if ([operation isEqual:@"cosh"]){ 
    operand = cosh(operand); 
}else if ([operation isEqual:@"tan"]){ 
    operand = tan(operand); 
}else if ([operation isEqual:@"tanh"]){ 
    operand = tanh(operand); 
}else if ([operation isEqual:@"M"]){ 
    savedNumber = operand; 
}else if ([operation isEqual:@"M+"]){ 
    savedNumber += operand; 
}else if ([operation isEqual:@"M-"]){ 
    savedNumber -= operand; 
}else if ([operation isEqual:@"Recall"]){ 
    [self setOperand:savedNumber]; 
}else if ([operation isEqual:@"C"]){ 
    savedNumber = 0; 
    operand = 0; 
    waitingOperand = 0; 
    savedNumber= 0; 
}else { 
    [self performWaitingOperation]; 
    waitingOperation = operation;  
    waitingOperand = operand; 
} 
return operand; 
    } 
    - (void) performWaitingOperation 
    { 
if([@"+" isEqual:waitingOperation]){ 
    operand = waitingOperand + operand ; 
} else if([@"-" isEqual:waitingOperation]){ 
    operand = waitingOperand - operand ; 
}else if([@"X" isEqual:waitingOperation]){ 
    operand = waitingOperand * operand ; 
}else if([@"/" isEqual:waitingOperation]){ 
    if(operand) 
     operand = waitingOperand/operand ; 
} 
    } 

現在,你是想顯示你需要訪問所有這些功能,並在你的店鋪顯示它們,如按鈕和文本字段等計算器視圖控制器。這裏是.h文件

IBOutlet UILabel *display; 
SCalcAI *ai; 
BOOL userIsInTheMiddleOfTypingNumber; 
} 

- (IBAction) digitPressed: (UIButton *)sender; 
- (IBAction) operationPressed: (UIButton *) sender; 

記住要將NSObject類頭文件導入到此文件的頂部,否則會出現錯誤。那麼在.m文件中你需要聲明這些函數。

-(NameofyourNSOBjectClass *) ai 
{ 
if(!ai) 
{ 
ai = [[SCalcAI alloc] init]; 
} 
return ai; 
    } 

    - (IBAction) digitPressed: (UIButton *)sender 
    { 

NSString *digit = [[sender titleLabel] text]; 
    if(userIsInTheMiddleOfTypingNumber){ 
     [display setText:[[display text] stringByAppendingString:digit]]; 
    } else{ 
     [display setText:digit]; 
     userIsInTheMiddleOfTypingNumber = YES; 
    } 

} 
- (IBAction) operationPressed: (UIButton *) sender 
{ 
    if(userIsInTheMiddleOfTypingNumber){ 
     [[self ai] setOperand:[[display text] doubleValue]]; 
     userIsInTheMiddleOfTypingNumber = NO; 
    } 
    NSString *operation = [[sender titleLabel] text]; 
    double result = [[self ai] performOperation:operation]; 
    [display setText:[NSString stringWithFormat:@"%g", result]]; 
} 

然後將所有按鈕連接到他們需要在故事板或xib中連接的操作。就是這樣。以上是整個事情的骨架版本,但我相信你可以在此基礎上進行構建。如果您需要幫助,請發送消息給我。

+0

這是時髦:d我會設置一個XCode項目,測試了這一點:看到這一切是如何走到一起。如果你在同一時間有一個git倉庫和你的工作示例應用程序會很好。作爲使我的代碼非常可怕的事情之一,我試圖爲+9按鈕創建委託方法,其中包括10個數字,基本函數,然後是tan,sqrt等。必須有一種組合方式一切都很好,而不是通過UIButtons連接到UIActions。唉,你的代碼在這裏讓我開始使數學代碼看起來不錯。 – Pavan 2014-02-11 20:35:16

+0

嘿,我有幾個問題: 1)除了保持代碼清潔,是否有任何其他原因,你有'waitingOperation'方法分開,而不是在相同的方法? 2)另外,你能解釋一下'operand','savedNumber','waitingOperation'和'waitingOperand'是關於什麼的? – Pavan 2014-02-11 21:23:59

+0

@Pavan 1)沒有真正的原因,我只是喜歡乾淨和平易近人的代碼。保存的數字是指當您想要切換操作(如一個功能)時,然後按住同時立即創建另一個操作。等待操作正在使用保存的數字並完成該操作,等待操作數是等待發生的操作,因此需要等於操作數。另外你還有等待操作。在這種方法中,你不需要在getter文件的頂部聲明main函數爲常量,這就是我爲什麼這樣寫的原因。我相信你能做得比我做得更好。 – 2014-02-12 03:52:48

回答

3

Standford iOS programming class cs193p有一個構建簡單計算器的示例。可能是一個開始的好地方。偉大的課程,偉大的視頻。 Paul Hagarty是一位非常好的導師。一旦你完成了核心任務,科學功能就不會難以添加。

兩個資源: http://www.tusharsharma.in/project/open-source/mathematical-calculator-iphone4/

http://emplementation.blogspot.com/2010/11/ios-development-tutorials-on-itune-u.html

+0

我已經度過了保羅在他的演講中所做的一切。但我無法弄清楚如何添加科學功能。他的講座停止創建一個簡單的計算器。我也瀏覽了iOS的文檔,發現了一組非常好的代碼,但它又是一個基本的代碼。我希望通過發現如何增加科學功能來學習更多。但謝謝你的回覆。 – 2012-03-30 20:20:19

+0

查看我剛剛添加的資源 – 2012-03-30 20:30:30

+0

感謝託德。我會看看這些源代碼。我認爲這些內容將引導我走向正確的方向。我想我有一些功課要做。再次感謝。 – 2012-03-31 01:56:24