2011. 12. 6. 20:55ㆍ제2외국어/iOS
지금 만드는 계산기는
5+6*2-9/3 = ? 같이 수식으로 계산하기 떄문에 좀 귀찮습니다.
예외처리하기.
1. 연산자 다음에 바로 연산자가 나오지 못 하게하기
ex ) 3 + 5 -+ (x)
2. '.'은 다음 연산자를 넣을 때 까지 한번만 사용하게 하기
ex ) 3.5.3 (x)
3. '.'누르고 바로 연산자가 오는 경우 0을 붙여주기
ex ) 3. + 할 경우 -> 3.0 + 로 바꾸어 주기
시간이 늦어서.. 내일 덧붙일게요.
이어서...
각 함수들 정의입니다.
계산기를... 다른 버전으로 만들어야 되서 그냥 소스 올립니다.
-(IBAction)pressedNumber:(id)sender
{
UIButton *pressed = sender;
if([showResult.text isEqualToString:@"0"]) // showResult.text 가 0과 같은가?
{
showResult.text = pressed.titleLabel.text;
}
else
{
if([pressed.titleLabel.text isEqualToString:@"0"])
{
showResult.text = [showResult.text stringByAppendingString:pressed.titleLabel.text];
}
}
}
-(IBAction)pressedCalculate:(id)sender
{
UIButton *pressed = sender;
// 마지막 문자 알아내기
int length = [showResult.text length];
NSString *temp =[showResult.text substringFromIndex:length-1];
if (![showResult.text isEqualToString:@"0"]) {
if( [temp isEqualToString:@"+"] || [temp isEqualToString:@"-"] || [temp isEqualToString:@"*"] || [temp isEqualToString:@"/"])
{
}else
{
if([temp isEqualToString:@"."])
{
showResult.text = [showResult.text stringByAppendingString:@"0"];
showResult.text = [showResult.text stringByAppendingString:pressed.titleLabel.text];
st_op[oP++] = pressed.titleLabel.text;
po = NO;
}
else
{
showResult.text = [showResult.text stringByAppendingString:pressed.titleLabel.text];
st_op[oP++] = pressed.titleLabel.text;
po = NO;
}
}
}
}
-(IBAction)pressedClear:(id)sender
{
showResult.text = @"0";
Result.text =@"";
}
-(IBAction)pressedDel:(id)sender
{
NSString *temp = showResult.text;
int length = [temp length]-1;
showResult.text = [showResult.text substringWithRange:(NSRange){0,length}];
if([showResult.text isEqualToString:@""])
showResult.text = @"0";
}
-(IBAction)pressedPoint:(id)sender
{
UIButton *pressed = sender;
// 마지막 문자 알아내기
int length = [showResult.text length];
NSString *temp =[showResult.text substringFromIndex:length-1];
if(po == NO)
{
if([showResult.text isEqualToString:@"0"])
{
showResult.text = [showResult.text stringByAppendingString:pressed.titleLabel.text];
po = YES;
}
else
{
if( [temp isEqualToString:@"+"] || [temp isEqualToString:@"-"] || [tempisEqualToString:@"*"] || [temp isEqualToString:@"/"] || [temp isEqualToString:@"."])
{
// 연산자 다음에는 0이 올 수 없다.
}
else
{
showResult.text = [showResult.text stringByAppendingString:pressed.titleLabel.text];
po = YES;
}
}
}
}
-(IBAction)pressedResult:(id)sender
{
// 숫자와 연산자 분리하기!
NSString *st_num[10];
NSString *temp = showResult.text;
NSCharacterSet *filter=[NSCharacterSet characterSetWithCharactersInString:@"+-*/"];
NSArray *result_temp = [temp componentsSeparatedByCharactersInSet: filter];
NSNumber *intarr;
int nP=0;
double outcome = 0.0;
for(intarr in result_temp)
{
NSLog(@"%@ %@",intarr,st_op[nP]);
st_num[nP++]=[NSString stringWithFormat:@"%@", intarr ];
}
NSLog(@"nP : %d",nP);
NSLog(@"oP : %d",oP);
// 순서 정하기
int i,n=0,key=0;
int turm[10]={0,};
for(i=0;i<oP;i++)
{
if([st_op[i] isEqualToString:@"*"] || [st_op[i] isEqualToString:@"/"])
{
turm[n++] = i;
}
NSLog(@"st_op [%d] = %@",i,st_op[i]);
}
for(i=0;i<oP;i++)
{
if([st_op[i] isEqualToString:@"*"] || [st_op[i] isEqualToString:@"/"])
{
}
else
turm[n++] = i;
}
NSLog(@"n : %d",n);
NSLog(@"outcome : %lf",outcome);
for(i=0;i<n;i++)
{
key =turm[i] ;
if( [st_op[ turm[i] ] isEqualToString:@"*" ] )
{
while([st_num[key] isEqualToString:@"0"]) key--;
outcome = [st_num[ key ] doubleValue] * [st_num[ turm[i] +1 ]doubleValue] ;
st_num[ key ] = [ NSString stringWithFormat:@"%lf",outcome];
st_num[ turm[i]+1 ] = @"0";
}else if( [st_op[ turm[i] ] isEqualToString:@"/" ] )
{
while([st_num[key] isEqualToString:@"0"]) key--;
outcome = [st_num[ key ] doubleValue] / [st_num[ turm[i] +1 ]doubleValue] ;
st_num[ key ] = [ NSString stringWithFormat:@"%lf",outcome];
st_num[ turm[i]+1 ] = @"0";
}
else if( [st_op[ turm[i] ] isEqualToString:@"+" ] )
{
while([st_num[key] isEqualToString:@"0"]) key--;
outcome = [st_num[ key ] doubleValue] + [st_num[ turm[i] +1 ]doubleValue] ;
st_num[ key ] = [ NSString stringWithFormat:@"%lf",outcome];
st_num[ turm[i]+1 ] = @"0";
}
else if( [st_op[ turm[i] ] isEqualToString:@"-" ] )
{
while([st_num[key] isEqualToString:@"0"]) key--;
outcome = [st_num[ key ] doubleValue] - [st_num[ turm[i] +1 ]doubleValue] ;
st_num[ key ] = [ NSString stringWithFormat:@"%lf",outcome];
st_num[ turm[i]+1 ] = @"0";
}
}
Result.text = st_num[0];
for(int i=0; i<10; i++)
st_op[i] = @"";
oP = 0;
}
'제2외국어 > iOS' 카테고리의 다른 글
[iOS] Html 파서, Hpple사용하기 (1) (1) | 2012.03.05 |
---|---|
[Storyboard] Segue 로 페이지 전환 (소스로) (2) | 2011.12.09 |
iPhone 계산기만들기(2) (0) | 2011.12.06 |
iPhone 계산기만들기(1) (0) | 2011.12.06 |
xcode 4.2가 되면서 달라진 점. (0) | 2011.10.31 |