Как некоторые из вас, возможно, видели, как я экспериментировал с программой, конвертирующей из Фаренгейта в Цельсий и наоборот в Objective-C, основанной на вводе и выводе консоли.Я просто делаю это, чтобы лучше выучить язык, и я думаю, что это хороший способ продемонстрировать некоторые вещи, с которыми я сталкивался.
Так что, в любом случае, я собираюсь включить и Кельвин, иРанкин подходит к моей программе, хорошее предложение, которое я хотел бы рассмотреть, предложенное dreamlax.
Теперь, до этого момента, моя программа функционировала относительно хорошо для преобразования между градусами Фаренгейта и Цельсия, но если янужно конвертировать между этими 4 разными шкалами, мне нужно будет по-другому работать с этим, на мой взгляд.
Во-первых, мне нужно предоставить конечному пользователю возможность выбора начальной температуры.температура, из которой они хотят конвертировать.
Чтобы сделать это, мне нужно попросить их с помощью инструкции NSLog или printf, инструктирующей их сделать это.
Теперь я бы предпочелони набирают по Фаренгейту, Цельсию, Кельвину или Ранкину, основываясь на том, какой из них они хотели бы, а не 0-3.Теперь я не думаю, что scanf способен, но если я ошибаюсь, я хотел бы знать, имеет ли он эту функциональность, или это другой метод, которым я могу воспользоваться, чтобы добавить это в свою программу.
Далее, я немного растерялся.Очевидно, мне нужно было бы дать им указание выбрать целевую температуру, другими словами, температуру, которую они хотят преобразовать.
Мне нужна помощь по рекомендации, как организовать это в моей программе.использовать только 1 класс?Кроме того, я думаю, я мог бы настроить это следующим образом:
string baseTemp
string targetTemp
NSLog(@"Please type Fahrenheit, Celsius, Kelvin or Rankine to select your base temperature");
scanf or some other method here("string format specifier here" &baseTemp);
NSLog(@"Please type Fahrenheit, Celsius, Kelvin or Rankine to select your target temperature");
scanf or some other method here("string format specifier here" &targetTemp);
Теперь мне нужно лицо, принимающее решение, чтобы решить, есть ли Fahrenheit == baseTemp и Celsius == targetTemp, а затем настройте определенную формулу соответственно.
Это может стать утомительным, и мне в первую очередь нужен тот, кто принимает особые решения, или просто другой более простой метод.
Извините за, вероятно, довольно неловкий код, я пытаюсь использовать то, что яузнал до сих пор здесь.
Любые предложения, настройки, идеи и все, что между ними, высоко ценится!
Спасибо !!
ОБНОВЛЕНИЕ ОБНОВЛЕНИЕ: ОБНОВЛЕНИЕ:
Код для программных файлов class.h, class.m и main.m содержит окончательный код, по крайней мере для этого проекта, который Dreamlax очень помог мне, чтобы мы оба достигли своей цели,Еще раз спасибо Dreamlax !!
class.h:
#import <Cocoa/Cocoa.h>
@interface Temperature : NSObject
{
double kelvin;
}
//Instance methods to convert argument to kevin
-(void) setFahrenheitValue: (double) f;
-(void) setCelsiusValue: (double) c;
-(void) setKelvinValue: (double) k;
-(void) setRankineValue: (double) r;
//Instance methods for extracting the kelvin value using any scale
-(double) fahrenheitValue;
-(double) celsiusValue;
-(double) kelvinValue;
-(double) rankineValue;
@end
class.m:
#import "class.h"
@implementation Temperature;
-(void) setFahrenheitValue: (double) f
{
kelvin = ((f + 459.67)*(5.0/9.0));
}
-(void) setCelsiusValue: (double) c
{
kelvin = (c + 273.15);
}
-(void) setKelvinValue: (double) k
{
kelvin = k;
}
-(void) setRankineValue: (double) r
{
kelvin = (r*(5.0/9.0));
}
-(double) fahrenheitValue
{
return ((kelvin*(9.0/5.0)) - 459.67);
}
-(double) celsiusValue
{
return (kelvin - 273.15);
}
-(double) kelvinValue
{
return (kelvin);
}
-(double) rankineValue
{
return (kelvin * (9.0/5.0));
}
@end
main.m:
#import <Cocoa/Cocoa.h>
#import "class.h"
int main(int argc, char *argv[])
{
int result;
int prompt;
double sourceTemp;
printf("Please choose a source temperature scale:\n[1] Fahrenheit\n[2] Celsius\n[3] Kelvin\n[4] Rankine\n\n");
result = scanf("%i", &prompt);
if (result != 1)
printf("I couldn't understand your input, I need only one number!");
else if (result == EOF)
printf("I apologize, I encountered an error when trying to read your input.");
else if (result == 1)
{
printf("\nNow, please enter the temperature you would like to convert:\n\n");
scanf("%lf", &sourceTemp);
Temperature *converter = [[Temperature alloc] init];
switch (prompt)
{
case 1:
//end-user chooses Fahrenheit
[converter setFahrenheitValue:sourceTemp];
break;
case 2:
//end-user chooses Celsius
[converter setCelsiusValue:sourceTemp];
break;
case 3:
//end-user chooses Kelvin
[converter setKelvinValue:sourceTemp];
break;
case 4:
//end-user chooses Rankine
[converter setRankineValue:sourceTemp];
break;
}
printf("\nNow, please choose a target temperature scale:\n[1] Fahrenheit\n[2] Celsius\n[3] Kelvin\n[4] Rankine\n\n");
scanf("%i", &prompt);
switch (prompt)
{
case 1:
//end-user chooses Fahrenheit
printf("%lf degrees Fahrenheit\n", [converter fahrenheitValue]);
break;
case 2:
//end-user chooses Celsius
printf("%lf degrees Celsius\n", [converter celsiusValue]);
break;
case 3:
//end-user chooses Kelvin
printf("%lf degrees Kelvin\n", [converter kelvinValue]);
break;
case 4:
//end-user chooses Rankine
printf("%lf degrees Rankine\n", [converter rankineValue]);
break;
}
}
}
Просто идея, которую я пытаюсь реализовать, заключается в том, чтобы получить последнее приглашение, которое отображает конвертированную температуру для отображения следующим образом:
Предположим, что конечный пользователь выбрал Фаренгейт в качестве своего /ее температура источника, желая преобразовать 212 градусов в его / ее целевую шкалу температуры Цельсия.Преобразования должны равняться 100 градусам Цельсия, но я думаю, что программа будет лучше отображать результат следующим образом:
212 градусов Фаренгейт равно 100 градусов по Цельсию.
Теперь я сделал значения, которые нужно заменить на переменные, выделенные жирным шрифтом.У меня есть значения 212 и 100, которые легко решаются, потому что 100 был там, во-первых, и 212 можно легко исправить, заменив его строковым форматером переменной sourceTemp.
Теперь строка Фаренгейтанемного по-другому.
Я попытался установить что-то новое в нашем исходном переключателе, например, так:
switch (prompt)
{
case 1:
//end-user chooses Fahrenheit
[converter setFahrenheitValue:sourceTemp];
sourceTempText = 1;
break;
case 2:
//end-user chooses Celsius
[converter setCelsiusValue:sourceTemp];
sourceTempText = 2;
break;
case 3:
//end-user chooses Kelvin
[converter setKelvinValue:sourceTemp];
sourceTempText = 3;
break;
case 4:
//end-user chooses Rankine
[converter setRankineValue:sourceTemp];
sourceTempText = 4;
break;
}
ОК, поэтому я добавил в каждый другой случай, устанавливая новую переменную с именем sourceTempTextлибо 1-4, то же значение, которое конечный пользователь выбрал, чтобы выбрать его / ее температуру источника.
Теперь вот как я пытался отобразить окончательное приглашение для конечного пользователя с помощью последнего переключателя:
switch (prompt2)
{
case 1:
//end-user chooses Fahrenheit
printf("%lf degrees sourceTempText is %lf degrees Fahrenheit\n", sourceTemp, [converter fahrenheitValue]);
break;
case 2:
//end-user chooses Celsius
printf("%lf degrees sourceTempText is %lf degrees Celsius\n", sourceTemp, [converter celsiusValue]);
break;
case 3:
//end-user chooses Kelvin
printf("%lf degrees sourceTempText is %lf degrees Kelvin\n", sourceTemp, [converter kelvinValue]);
break;
case 4:
//end-user chooses Rankine
printf("%lf degrees sourceTempText is %lf degrees Rankine\n", sourceTemp, [converter rankineValue]);
break;
}
Сейчас я не уверен, смогу ли я вставить sourceTempText в строку, как здесь, вместо этого, возможно, мне придется использовать форматировщик строки, но я не уверен.Это должно быть легко исправить, я просто хотел выбросить это здесь!:)
Надеюсь, следующий проект будет ... GUI GUI GUI!XD