C/C++

Помогите с программированием

Вывести таблицу значений функции на отрезке [a;b] c шагом h: y=lg(3x-1)
C++
пожалуйста помогите, не получается вообще
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
double a;
do a = real("a: "); while (3 * a < 1);
double b;
do b = real("b: "); while (a > b);
const auto h = real("h: ");
const auto end = b + h / 10;
puts("\n\tx\t\ty\n");
for (auto x = a; x <= end; x += h) {
cout << setw(10) << x << setw(18) << log10(3 * x - 1) << '\n';
}
system("pause > nul");
}
МБ
Михаил Бабуський
51 277
Лучший ответ
   Традиционная задача на табулирование функции. С моей точки зрения тут возможны 2 ошибки: использование неправильной функции и аргумент вне области определения.

1. Правильная функция определена в <cmath> — это функция log10().

2. Любой логарифм определён для неотрицательных значений аргумента (это следствие положительности основания: 10 в любой степени есть число положительное; единственный случай, когда логарифм равен 0 — это логарифм по основанию 0).
   Получается, что необходимо учесть условие 3x – 1 > 0, или, что то же самое, x > 1/3. Нужно, чтобы нижняя граница диапазона табулирования была больше чем 1/3, иначе при значениях x ≤ 1/3 будет возникать ошибка времени выполнения.
Данил Якутин
Данил Якутин
16 172
Данил Якутин    В решении этой задачи удобно использовать блоки try{} и catch{}, тогда не придётся проверять границы диапазона табулирования, и программа не станет вылетать по первой же ошибке.
   В блок try{} попадёт только вызов функции log10().
   В блокe catch{} должна быть реакция на исключительную ситуацию. Например, на экран на месте ожидаемого результата можно вывести сообщение "НЕ СУЩЕСТВУЕТ".