2011-12-25 4 views
0

Я пытаюсь разработать приложение для начинающих, чтобы привыкнуть к некоторым утилитам разработки Xcode и iOS. Я пытаюсь создать приложение, которое будет решать квадратичное уравнение. Я попытался добавить этот код под действием кнопки «Рассчитать». Сначала у меня «Calculate» просто добавили три входа вместе. Теперь я пытаюсь решить эту проблему. Это то, что я сделал до сих пор. И позвольте мне напомнить, что я очень новичок в этом, поэтому то, что я, вероятно, выгляжу очень глупо и неправильно.Математические уравнения в Objecive C iOS development

-(IBAction) Calculate { 

float x = ([A.text floatValue]); 
float y = ([B.text floatValue]); 
float z = ([C.text floatValue]); 

total.text =[NSString alloc]initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x; 

} 

Я знаю, что это не полное уравнение, но это то, что у меня есть до сих пор. Ошибка, которую я получаю, заключается в добавлении скобки, где находится точка с запятой. Кто-нибудь знает, как сделать это более эффективным? Я хотел создать функцию solveEquation(), но я столкнулся с проблемами. Кто-нибудь знает, что я могу сделать? Любая помощь будет оценена!

+0

Также обратите внимание на ваш [порядок операций] (http://en.wikipedia.org/wiki/Order_of_operations) на это квадратичное уравнение. –

ответ

3

Вам нужно больше кронштейнов!

total.text = [[NSString alloc]initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x]; 

Скобки указывают, что вы отправляете сообщение Objective-C. Для каждого отправляемого сообщения вам потребуется одна пара скобок. Давайте разберем его вниз, как это:

NSString *uninitializedString = [NSString alloc]; 
NSString *initializedString = [uninitializedString initWithFormat:@"%.2f", x+y+z]; 
total.text = initializedString; 

В первой строке мы посылаем alloc сообщения NSString объекта, который на самом деле является классом объекта, который знает, как выделить экземпляры NSString. Но это не инициализировать экземпляры. Это в значительной степени просто выделяет память для них.

Во второй строке мы отправляем сообщение этому выделенному, но неинициализированному экземпляру NSString, сообщая ему инициализировать себя, форматируя шаблон %.2f. Это сообщение возвращает инициализированный экземпляр NSString.

Наконец, в третьей строке мы используем этот инициализированный экземпляр NSString.

Очевидно, было бы утомительно всегда иметь промежуточную переменную для хранения выделенного, но не инициализированного объекта. Поэтому мы устраняем его, беря результат первого сообщения и отправляя сообщение непосредственно ему:

total.text = [[NSString alloc] initWithFormat:@"%.2f", x+y+z]; 
+0

Я также добавлю, ошибки, подобные этому, намного проще увидеть с помощью простых строк формата. Возможно, вы захотите установить некоторую переменную в '-y + sqrtf (y * y-4 * x * z)/2 * x', а затем использовать ее в' initWithFormat: ', чтобы вы могли немного разобрать ее. –

+0

Большое вам спасибо. Я действительно помог мне. Я ценю всякий опыт! – jtrain

3

Вам нужно больше скобок. Правильный синтаксис - [object message], а с [NSString alloc] возвращает объект, вам нужно [[NSString alloc] initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x] (initWithFormat: - другое сообщение).

Смежные вопросы