який у подальшому буде инициализирован як матриця, що відповідає за розміром системі обмежень поставленого завдання (
num_l x
num_v ).
int * sign зберігає в собі знак кожного обмеження системи. Є покажчиком типу int, який буде инициализирован як одновимірний масив типу з розміром num_l . Раціонально використовувати в даному випадку цілочисельний тип а не строковий. т.к. У нас є три знаки: lt; =,=і gt; =, які храняться в * sign як 0, 1 і 2 відповідно.
bool way зберігає в собі напрямок цільової функції задачі (min/max). При вирішенні завдання на максимум ця змінна-член буде зберігати в собі значення істини (true). А при вирішенні на мінімум, відповідно, брехня (false). Такий спосіб зберігання даних дуже раціональний у даному випадку, оскільки напрямків у функції мети може бути тільки два. Тому тип bool ідеально підходить для цього.
Функція void get_data_from_user () , власне запитує у користувача дані, які обробляє належним чином і поміщає в захищені змінні-члени даного класу, наведені вище. У заголовному файлі зберігається тільки прототип даної функції. Саме визначення функції знаходиться у файлі user_data.cpp . Розглянемо вміст цього файлу.
Лістинг 2. user_data.cpp
# include lt; iostream gt;
# include lt; string gt;
# include lt; cstdlib gt;
# include user_data.h std :: cout; std :: cin; std :: endl; std :: string;
error (int err_no)
{(err_no) {0: lt; lt; nВи ввели некоректне значення. n lt; lt; endl;
break; 1: lt; lt; nВи не можете задати менше двох обмежень. n lt; lt; endl ;; 2: lt; lt; nВи не можете задати більше 500 обмежень. n lt; lt; endl ;; 3: lt; lt; nВи не можете задати менше двох змінних. n lt; lt; endl ;; 4: lt; lt; nВи не можете задати більш 500 рівнянь. n lt; lt; endl;
break;
}
}
user_data :: get_data_from_user ()
{num_limits, num_vars, s_var, fr_m, sn, func, w; i, j; validator=false;
do { lt; lt; Введіть кількість обмежень у системі: raquo ;;
getline (cin, num_limits); (atoi (num_limits.c_str ()) lt; 2) (1); if (atoi (num_limits.c_str ()) gt; 500) (2); =true;
} while (! validator);
_ l=atoi (num_limits.c_str ());
validator=false;
{ lt; lt; Введіть кількість змінних в системі обмежень: raquo ;;
getline (cin, num_vars); (atoi (num_vars.c_str ()) lt; 2) (3); if (atoi (num_vars.c_str ()) gt; 500) (4); =true;
} while (! validator);
_ v=atoi (num_vars.c_str ());=false;=new double [num_v];=new double * [num_l]; (i=0; i lt; num_l; i ++) [ i]=new double [num_v];=new double [num_l];=new int [num_l];
cout lt; lt; nЗаполніте коефіцієнти при цільовій функції. n lt; lt; endl;
for (i=0; i lt; num_v; i ++) {
do { lt; lt; Введіть коефіцієнт цільової фукнции при x lt; lt; i + 1 lt; lt; laquo ;: raquo ;;
getline (cin, func); (atof (func.c_str ()) == 0) (0); {= true; [i]=atof (func.c_str ());
}
} while (! validator);=false;
} {
cout lt; lt; Введіть напрямок цільової функції (min, max): raquo ;;
getline (cin, w); (w == max || w == MAX || w == min || w == MIN ) {= true; (w == max || w == MAX )=true;=false;
} (0);
} while (! validator); lt; lt; nЗаполніте систему обмежень. n lt; lt; endl;
(i=0; i lt; num_l; i ++) {
cout lt; lt; Заповніть lt; lt; i + 1 lt; lt; -е обмеження. n lt; lt; endl;
for (j=0; j lt; num_v; j ++) {
do { lt; lt; Введіть коефіцієнти при x lt; lt; j + 1 lt; lt; laquo ;: raquo ;;
getline (cin, s_var); (atof (s_var.c_str ()) == 0) (0); {= true;
}
} while (! validator); [i] [j]=atof (s_var.c_str ());
validator=false;
}
<...