Objective C - Решатель квадратных уравнений

Итак, я делаю приложение, которое решает квадратные уравнения. Основной интерфейс просто просит пользователя ввести значения A, B и C. Проблема в том, что я не получаю правильного ответа. Вот код:

NSString *intStringa = [NSString stringWithFormat:@"%@", a.text];
int aa = [intStringa intValue];
NSString *intStringb = [NSString stringWithFormat:@"%@", b.text];
int bb = [intStringb intValue];
NSString *intStringc = [NSString stringWithFormat:@"%@", c.text];
int cc = [intStringc intValue];
double d = ( -(bb) + ( (bb)^2 - (4*aa*cc) ) ^0,5 ) / (2*aa);
double e = ( -(bb) - ( (bb)^2 - (4*aa*cc) ) ^0.5 ) / (2*aa);
label1.text = [NSString stringWithFormat:@"%lf", d];
label2.text = [NSString stringWithFormat:@"%lf", e];

Любые идеи? Спасибо!!!


person Daniel Ruhman    schedule 02.01.2013    source источник
comment
Используйте pow или sqrt. ^ является исключающим ИЛИ.   -  person nhahtdh    schedule 02.01.2013
comment
Если это домашнее задание, пожалуйста, отметьте его как таковое (добавьте тег домашнего задания).   -  person Rok Jarc    schedule 02.01.2013
comment
двойной d = (-(bb) + ((bb)^2 - (4*aa*cc)) ^0,5)/(2*aa); кроме ^ еще ошибка 0,5, должно быть 0,5   -  person Anoop Vaidya    schedule 02.01.2013
comment
@rokjarc: тег «Домашнее задание» устарел   -  person Reinstate Monica -- notmaynard    schedule 02.01.2013
comment
спасибо, не заметил. @DanielRuhman: извини за плохой совет   -  person Rok Jarc    schedule 02.01.2013


Ответы (4)


Использовать :

Для root нет оператора ^. используйте sqrt или pow(base,exp).

double d = ( -bb + sqrt( bb*bb - 4*aa*cc ) ) / (2*aa);
double e = ( -bb - sqrt( bb*bb - 4*aa*cc ) ) / (2*aa);

or,

double d = ( -bb + pow(( bb*bb - 4*aa*cc ), 0.5) ) / (2*aa);
double e = ( -bb - pow(( bb*bb - 4*aa*cc ), 0.5) ) / (2*aa);
person Anoop Vaidya    schedule 02.01.2013
comment
Разве sqrt не возвращает double? Это сделало бы числитель double и позволило бы избежать целочисленного деления без явного преобразования знаменателя в double. - person Ted Hopp; 02.01.2013

Вы не можете использовать ^ для возведения в степень в C и родственных языках (C++, Objective-C и т. д.) — это побитовый оператор XOR.

Сдача:

double d = ( -(bb) + ( (bb)^2 - (4*aa*cc) ) ^0,5 ) / (2*aa);
double e = ( -(bb) - ( (bb)^2 - (4*aa*cc) ) ^0.5 ) / (2*aa);

to:

#include <math.h>

...

double d = - (bb + sqrt(bb * bb - 4 * aa * cc)) / (2 * aa);
double e = - (bb - sqrt(bb * bb - 4 * aa * cc)) / (2 * aa);
person Paul R    schedule 02.01.2013

В C нет мощного оператора ^. Вы должны использовать pow(b,2) или просто b*b.

И почему вы используете stringWithFormat? Просто используйте [a.text intValue].

int aa = [a.text intValue];
int bb = [b.text intValue];
int cc = [c.text intValue];
double d = (-bb + sqrt(bb*bb - 4*aa*cc)) / (2.0*aa);
double e = (-bb - sqrt(bb*bb - 4*aa*cc)) / (2.0*aa);
label1.text = [NSString stringWithFormat:@"%lf", d];
label2.text = [NSString stringWithFormat:@"%lf", e];
person DrummerB    schedule 02.01.2013

У вас есть пара проблем: вы используете ^ в качестве оператора возведения в степень; Нет. Еще у вас опечатка в одном из "показателей": 0,5 вместо 0.5. Я бы написал ваши уравнения как:

double d = ( -bb + sqrt( bb*bb - 4*aa*cc ) ) / (2*aa);
double e = ( -bb - sqrt( bb*bb - 4*aa*cc ) ) / (2*aa);
person Ted Hopp    schedule 02.01.2013