Hi people, I'm trying to write a basic calculator using GNUstep+ObjC and I get 
stucked. I really don't know where is the problem in my code. May you help me?


I'm sending here what I have implemented until now:

@interface UCalc : NSObject
{
char operation; //just a char to validate the operation
id number1, number2; //number1 = the current button pressed, number2 = the old 
number
id result; //the calculator display
}
- (void) Add: (id)sender;
@end


@implementation UCalc
- (void) Add: (id)sender
{
operation = '+';
number2 = number1; //when you press the add button the current number becomes 
the old number
number1 = @"0";
}

- (void) Button0: (id)sender
{
number1 = @"0";
[result setStringValue: number1];
}

- (void) Button1: (id)sender
{
//if there is no number yet
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"1";
}
//else append the current number in itself, so we can get number > 9
else{
number1 = [number1 stringByAppendingFormat: @"1"];
}
[result setStringValue: number1];
}


- (void) Button2: (id)sender
{
if (number1 == nil || [number1 isEqual: @"0"]){
[result setStringValue: @""];
number1 = @"2";
}
else{
number1 = [number1 stringByAppendingFormat: @"2"];
}
[result setStringValue: number1];
}

All the others number buttons are implemented in the same way...

The problem is in Equal button:

- (void) Equal: (id)sender{
switch(operation){
case '+':
//trying to do this: number1 = number2 + number1 and then print in the display 
result
[number1 setDoubleValue: [number2 doubleValue] + [number1 doubleValue]];
[result setStringValue: number1];
break;
}
}

I already have created the window in Gorm, so everything is implemented there. 
The problem in this code is in the number1 = number2 + number1 in Equal method, 
I don't know why it's not assigning to number1 the operation correctly and then 
result working correctly. Any idea about what I'm doing wrong? Everything?

Sorry my english. Thanks.
/* All Rights reserved */

#include <AppKit/AppKit.h>

@interface UCalc : NSObject
{
  char operation;
  id number1, number2;
  id result;
}
- (void) Add: (id)sender;
- (void) Button0: (id)sender;
- (void) Button1: (id)sender;
- (void) Button2: (id)sender;
- (void) Button3: (id)sender;
- (void) Button4: (id)sender;
- (void) Button5: (id)sender;
- (void) Button6: (id)sender;
- (void) Button7: (id)sender;
- (void) Button8: (id)sender;
- (void) Button9: (id)sender;
- (void) Clear: (id)sender;
- (void) Div: (id)sender;
- (void) Dot: (id)sender;
- (void) Equal: (id)sender;
- (void) Mul: (id)sender;
- (void) Percent: (id)sender;
- (void) Sub: (id)sender;
- (void) Reverse: (id)sender;
@end
/* All Rights reserved */

#include <AppKit/AppKit.h>
#include "UCalc.h"

@implementation UCalc

- (void) Add: (id)sender
{
  operation = '+';
  number2 = number1;
  number1 = @"0";
  
}

- (void) Button0: (id)sender
{
  number1 = @"0";
  [result setStringValue: number1];
}


- (void) Button1: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    [result setStringValue: @""];
    number1 = @"1";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"1"];
  }
  [result setStringValue: number1];
}


- (void) Button2: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    [result setStringValue: @""];
    number1 = @"2";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"2"];
  }
  [result setStringValue: number1];
}


- (void) Button3: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    [result setStringValue: @""];
    number1 = @"3";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"3"];
  }
  [result setStringValue: number1];
}


- (void) Button4: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    number1 = @"4";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"4"];
  }
  [result setStringValue: number1];
}


- (void) Button5: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    number1 = @"5";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"5"];
  }
  [result setStringValue: number1];
}


- (void) Button6: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    number1 = @"6";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"6"];
  }
  [result setStringValue: number1];
}


- (void) Button7: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    number1 = @"7";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"7"];
  }
  [result setStringValue: number1];
}


- (void) Button8: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    number1 = @"8";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"8"];
  }
  [result setStringValue: number1];
}


- (void) Button9: (id)sender
{
  if (number1 == nil || [number1 isEqual: @"0"]){
    number1 = @"9";
  }
  else{
    number1 = [number1 stringByAppendingFormat: @"9"];
  }
  [result setStringValue: number1];
}


- (void) Clear: (id)sender
{
  [result setStringValue: @""];
  number1 = number2 = @"0";
}


- (void) Div: (id)sender
{
  //operation = '/';
  //number2 = number1;
}


- (void) Dot: (id)sender
{
  /* insert your code here */
}


- (void) Equal: (id)sender{
  switch(operation){
    case '+':
      [number1 setDoubleValue: [number2 doubleValue] + [number1 doubleValue]];
      [result setStringValue: number1];
      break;
   /* case '-':
      [result setDoubleValue: number2 - number1];
      [number1 setDoubleValue: [result doubleValue]];
      break;
    case '*':
      [result setDoubleValue: number2 * number1];
      [number1 setDoubleValue: [result doubleValue]];
      break;
    case '/':
      [result setDoubleValue: number2 / number1];
      [number1 setDoubleValue: [result doubleValue]];
      break;*/
    }
}


- (void) Mul: (id)sender
{
  //operation = '*';
  //[number1 setDoublevalue: [result doubleValue]];
}


- (void) Percent: (id)sender
{
  //number1 = number1/100;
  //[result setDoubleValue: [number1 doubleValue];
}


- (void) Sub: (id)sender
{
  //operation = '-';
  //[number1 setDoubleValue: [result doubleValue]];
}


- (void) Reverse: (id)sender
{
  //[number1 setDoubleValue: [result doubleValue] * (-1)];
  //[result setStringValue: [number1 stringValue]];
}

@end
_______________________________________________
Discuss-gnustep mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnustep

Reply via email to