2015-11-27 2 views
0

Мне просто нужна небольшая помощь в выполнении домашних заданий. Я пишу программу, чтобы найти уравнение перехвата наклона линии. y = mx + b. Проблема в том, что когда b минус, она печатает y = mx + -b вместо y = mx-b. может ли кто-нибудь указать, как это исправить.C++ печать двух знаков

void get2_pt(double *x1, double *y1, double *x2, double *y2) 
{ 

    printf("Enter the x-y cordinates of the first point separated by a space =>\n"); 
    scanf("%lf %lf", x1, y1); 
    printf("Enter the x-y cordinates of the second point separated by a space =>\n"); 
    scanf("%lf %lf", x2, y2); 

} 
void slope_intcpt_from2_pt(double x1, 
          double y1, 
          double x2, 
          double y2, 
          double *m, 
          double *y_intcpt) 
{ 

    *m = (y2 - y1)/(x2 - x1); 
    *y_intcpt = y2 - (*m * x2); 
} 
void display2_pt(double x1, double y1, double x2, double y2) 
{ 

    printf("Two-point form\nm = (%0.2lf-%0.2lf)/(%0.2lf-%0.2lf)\n", 
      y2, 
      y1, 
      x2, 
      x1); 

} 
void display_slope_intcpt(double m, double y_intcpt) 
{ 

    printf("Entered Q4DSI\n"); 
    printf("Slope-intercept form\ny = %0.2lfx + %0.2lf\n", m, y_intcpt); 
} 

int main() 
{ 

    double x1, x2, y1, y2, m, y_intcpt; 
    char again; 
    do 
    { 

     get2_pt(&x1, &y1, &x2, &y2); 
     slope_intcpt_from2_pt(x1, y1, x2, y2, &m, &y_intcpt); 
     display2_pt(x1, y1, x2, y2); 
     display_slope_intcpt(m, y_intcpt); 

     printf("Do another conversion (Y or N) =>\n"); 
     scanf("%c", &again); 
    } while (again != 'N'); 
    return 0; 
} 
+3

Распечатайте +, только если b> = 0. Простой if(). – deviantfan

ответ

0

Попробуйте

printf("Slope-intercept form\ny = %0.2lfx %c %0.2lf\n", m, (y_intcpt>=0 ? '+' : ''), y_intcpt); 

как второй линии в вашей display_slope_intcpt функции.

В качестве альтернативы, если вы немного перфекционист и хотите отрицательный знак, чтобы быть между двумя пробелами вместо справа рядом с у перехвата, вы можете сделать что-то вроде

printf("Slope-intercept form\ny = %0.2lfx %c %0.2lf\n", m, (y_intcpt>=0 ? '+' : '-'), abs(y_intcpt)); 
1

проверить значение y_intcpt перед печатью и соответствующим образом измените заявление печати. Например:

void display_slope_intcpt(double m, double y_intcpt) 
{ 

    printf("Entered Q4DSI\n"); 
    if (y_intcpt < 0) 
    { 
     printf("Slope-intercept form\ny = %0.2lfx - %0.2lf\n", m, y_intcpt * -1.0); 
    } 
    else 
    { 
     printf("Slope-intercept form\ny = %0.2lfx + %0.2lf\n", m, y_intcpt); 
    } 
} 
+1

'abs', no. 'std :: abs' да. Спасибо за исправление. – user4581301

0

попробовать это:

printf("Slope-intercept form\ny = %0.2lfx%+0.2lf\n", m, y_intcpt); 

printf напечатает правильный знак здесь.

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