我一直在尋找一個科學計算器教程,但我找不到任何東西。我的目標是學習如何編寫類似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中連接的操作。就是這樣。以上是整個事情的骨架版本,但我相信你可以在此基礎上進行構建。如果您需要幫助,請發送消息給我。
這是時髦:d我會設置一個XCode項目,測試了這一點:看到這一切是如何走到一起。如果你在同一時間有一個git倉庫和你的工作示例應用程序會很好。作爲使我的代碼非常可怕的事情之一,我試圖爲+9按鈕創建委託方法,其中包括10個數字,基本函數,然後是tan,sqrt等。必須有一種組合方式一切都很好,而不是通過UIButtons連接到UIActions。唉,你的代碼在這裏讓我開始使數學代碼看起來不錯。 – Pavan 2014-02-11 20:35:16
嘿,我有幾個問題: 1)除了保持代碼清潔,是否有任何其他原因,你有'waitingOperation'方法分開,而不是在相同的方法? 2)另外,你能解釋一下'operand','savedNumber','waitingOperation'和'waitingOperand'是關於什麼的? – Pavan 2014-02-11 21:23:59
@Pavan 1)沒有真正的原因,我只是喜歡乾淨和平易近人的代碼。保存的數字是指當您想要切換操作(如一個功能)時,然後按住同時立即創建另一個操作。等待操作正在使用保存的數字並完成該操作,等待操作數是等待發生的操作,因此需要等於操作數。另外你還有等待操作。在這種方法中,你不需要在getter文件的頂部聲明main函數爲常量,這就是我爲什麼這樣寫的原因。我相信你能做得比我做得更好。 – 2014-02-12 03:52:48