Qcom
Qcom

Reputation: 19173

Connecting extremely basic objective-c program to iPhone application

I was wondering if it is feasible for me to connect this simple console program I have in objective-c into a very simple iPhone application.

Since I have no experience using Interface Builder, I'm not sure how long it would take for me to learn it.

Also, I believe my code would have to be adjusted to some iPhone APIs, rather than using the console for input and output.

Here is the program's main.m file, where all of its code is store:

//Simple program to convert Fahrenheit to Celsius and Celsius to Fahrenheit

#import <stdio.h>

@interface Converter: NSObject
{
//Instance variable which stores converting formula for objects
double formula;
}

//Declare instance methods for setting and getting instance variables
-(void) convert: (double) expression;
-(double) formula;

@end


@implementation Converter;

//Define instance method to set the argument (expression) equal to the instance variable
-(void) convert: (double) expression
{
formula = expression;
}

//Define instance method for returning instance variable, formula
-(double) formula
{
return formula;
}

@end

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

//Point two new objects, one for the Fahrenheit conversions and the other for the Celsius conversions, to the Converter class
Converter *fahrenheitConversion = [[Converter alloc] init];
Converter *celsiusConversion = [[Converter alloc] init];

//Declare two double variables holding the user-inputted data, and one integer variable for the if else statement   
double fahrenheit, celsius;
int prompt;

NSLog(@"Please press 0 to convert Celsius to Fahrenheit, or 1 to convert Fahrenheit to Celsius\n ");
scanf("%d", &prompt);
if(prompt == 0) {
    NSLog(@"Please enter a temperature in Celsius to be converted into Fahrenheit!:\n");
    scanf("%lf", &celsius);
    if(celsius < -273.15) {
        NSLog(@"It is impossible to convert temperatures less than −273.15 degrees Celsius, because this is absolute zero, the coldest possible temperature.");
    }
    else {
        [fahrenheitConversion convert: (((((celsius)*9)/5)+32))];
        NSLog(@"%lf degrees Celsius is %lf Fahrenheit", celsius, [fahrenheitConversion formula]);
    }
}

else {
    NSLog(@"Please enter a temperature in Fahrenheit to be converted into Celsius!:\n");
    scanf("%lf", &fahrenheit);
    if(fahrenheit < -459.67) {
        NSLog(@"It is impossible to convert temperatures less than −459.67 degrees Fahrenheit, because this is absolute zero, the coldest possible temperature.");
    }
    else {
        [celsiusConversion convert: ((((fahrenheit - 32)/9)*5))];
        NSLog(@"%lf degrees Fahrenheit is %lf Celsius", fahrenheit, [celsiusConversion formula]);
    }
}

return 0;
}

Upvotes: 1

Views: 1202

Answers (2)

Brock Woolf
Brock Woolf

Reputation: 47302

How about this?

I tried not to change your code too much. It uses your original formulas and converter class, even though I was tempted to change it.

Screenshot:

alt text http://brockwoolf.com/shares/stackoverflow/3443063/tempcalc-iphone.png

Source Code:

ViewController interface:

#import <UIKit/UIKit.h>

@interface TempCalc_iPhoneViewController : UIViewController {

    UITextField *celciusTextField;
    UITextField *fahrenheitTextField;
    UILabel     *statusLabel;

    double minFahrenheit;
    double minCelcius;

    NSString *normalStatus;
    NSString *belowFahrenheitMessage;
    NSString *belowCelciusMessage;
}

@property (nonatomic,retain) IBOutlet UITextField *celciusTextField;
@property (nonatomic,retain) IBOutlet UITextField *fahrenheitTextField;
@property (nonatomic,retain) IBOutlet UILabel *statusLabel;

- (IBAction) convertCelciusToFahrenheit:(UITextField*)sender;
- (IBAction) convertFahrenheitToCelcius:(UITextField*)sender;

@end

ViewController implementation

#import "TempCalc_iPhoneViewController.h"
#import "Converter.h"

@implementation TempCalc_iPhoneViewController

@synthesize celciusTextField, fahrenheitTextField, statusLabel;

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
    [super viewDidLoad];

    minCelcius = -273.15;
    minFahrenheit = -459.67;

    normalStatus = @"Please type to convert temperature";
    belowFahrenheitMessage = @"impossible to convert temperatures less than −459.67 degrees Fahrenheit";
    belowCelciusMessage = @"impossible to convert temperatures less than −273.15 degrees Celsius";
}

// Delegate method
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
    NSLog(@"User pressed the DONE button on the keyboard (any keyboard!)");
    [theTextField resignFirstResponder];
    return YES;
}

- (IBAction) convertCelciusToFahrenheit:(UITextField*)sender
{
    Converter *celciusConversion = [[Converter alloc] init];
    double celcius = [sender.text doubleValue];

    if(celcius < minCelcius) {
        NSLog(@"It is impossible to convert temperatures less than −273.15 degrees Celsius, because this is absolute zero, the coldest possible temperature.");
        self.statusLabel.text = belowCelciusMessage;
    }
    else
    {
        [celciusConversion convert: ((((celcius)*9)/5)+32)];
        NSString *fahrenheitValue = [NSString stringWithFormat:@"%lf", [celciusConversion formula]];
        NSLog(@"%lf degrees Celsius is %@ Fahrenheit", celcius, fahrenheitValue);
        self.fahrenheitTextField.text = fahrenheitValue;
        self.statusLabel.text = normalStatus;
    }

    [celciusConversion release];
}

- (IBAction) convertFahrenheitToCelcius:(UITextField*)sender
{
    Converter *fahrenheitConversion = [[Converter alloc] init];
    double fahrenheit = [sender.text doubleValue];

    if(fahrenheit < minFahrenheit) {
        NSLog(@"It is impossible to convert temperatures less than −459.67 degrees Fahrenheit, because this is absolute zero, the coldest possible temperature.");
        self.statusLabel.text = belowFahrenheitMessage;
    }
    else {
        [fahrenheitConversion convert: (((fahrenheit - 32)/9)*5)];
        NSString *celciusValue = [NSString stringWithFormat:@"%lf", [fahrenheitConversion formula]];
        NSLog(@"%lf degrees Fahrenheit is %@ Celsius", fahrenheit, celciusValue);
        self.celciusTextField.text = celciusValue;
        self.statusLabel.text = normalStatus;   }

    [fahrenheitConversion release];
}

Upvotes: 4

Merrimack
Merrimack

Reputation: 1726

Porting it should be really simple. Apple provides some good sample apps. your fastest road to success is probably to download a simple textfield + button sample and add your calculations. Excluding the time it takes to download and install you'll have it ready in 1-2 hours.

Good luck!

Upvotes: 1

Related Questions