Как решить уравнение в c
Перейти к содержимому

Как решить уравнение в c

  • автор:

Решение квадратных уравнений

Квадратные уравнения изучают в 8 классе, поэтому ничего сложного здесь нет. Умение решать их совершенно необходимо.

— это уравнение вида ax 2 + bx + c = 0, где коэффициенты a , b и c — произвольные числа, причем a ≠ 0.

Прежде, чем изучать конкретные методы решения, заметим, что все квадратные уравнения можно условно разделить на три класса:

  1. Не имеют корней;
  2. Имеют ровно один корень;
  3. Имеют два различных корня.

В этом состоит важное отличие квадратных уравнений от линейных, где корень всегда существует и единственен. Как определить, сколько корней имеет уравнение? Для этого существует замечательная вещь — дискриминант.

Дискриминант

Пусть дано квадратное уравнение ax 2 + bx + c = 0. Тогда — это просто число D = b 2 − 4 ac .

Эту формулу надо знать наизусть. Откуда она берется — сейчас неважно. Важно другое: по знаку дискриминанта можно определить, сколько корней имеет квадратное уравнение. А именно:

  1. Если D < 0, корней нет;
  2. Если D = 0, есть ровно один корень;
  3. Если D > 0, корней будет два.

Обратите внимание: дискриминант указывает на количество корней, а вовсе не на их знаки, как почему-то многие считают. Взгляните на примеры — и сами все поймете:

  1. x 2 − 8 x + 12 = 0;
  2. 5 x 2 + 3 x + 7 = 0;
  3. x 2 − 6 x + 9 = 0.

Выпишем коэффициенты для первого уравнения и найдем дискриминант:
a = 1, b = −8, c = 12;
D = (−8) 2 − 4 · 1 · 12 = 64 − 48 = 16

Итак, дискриминант положительный, поэтому уравнение имеет два различных корня. Аналогично разбираем второе уравнение:
a = 5; b = 3; c = 7;
D = 3 2 − 4 · 5 · 7 = 9 − 140 = −131.

Дискриминант отрицательный, корней нет. Осталось последнее уравнение:
a = 1; b = −6; c = 9;
D = (−6) 2 − 4 · 1 · 9 = 36 − 36 = 0.

Дискриминант равен нулю — корень будет один.

Обратите внимание, что для каждого уравнения были выписаны коэффициенты. Да, это долго, да, это нудно — зато вы не перепутаете коэффициенты и не допустите глупых ошибок. Выбирайте сами: скорость или качество.

Кстати, если «набить руку», через некоторое время уже не потребуется выписывать все коэффициенты. Такие операции вы будете выполнять в голове. Большинство людей начинают делать так где-то после 50-70 решенных уравнений — в общем, не так и много.

Корни квадратного уравнения

Теперь перейдем, собственно, к решению. Если дискриминант D > 0, корни можно найти по формулам:

Формула корней квадратного уравнения

Когда D = 0, можно использовать любую из этих формул — получится одно и то же число, которое и будет ответом. Наконец, если D < 0, корней нет — ничего считать не надо.

  1. x 2 − 2 x − 3 = 0;
  2. 15 − 2 x − x 2 = 0;
  3. x 2 + 12 x + 36 = 0.

Первое уравнение:
x 2 − 2 x − 3 = 0 ⇒ a = 1; b = −2; c = −3;
D = (−2) 2 − 4 · 1 · (−3) = 16.

D > 0 ⇒ уравнение имеет два корня. Найдем их:

Решение простого квадратного уравнения

Второе уравнение:
15 − 2 x − x 2 = 0 ⇒ a = −1; b = −2; c = 15;
D = (−2) 2 − 4 · (−1) · 15 = 64.

D > 0 ⇒ уравнение снова имеет два корня. Найдем их

Наконец, третье уравнение:
x 2 + 12 x + 36 = 0 ⇒ a = 1; b = 12; c = 36;
D = 12 2 − 4 · 1 · 36 = 0.

D = 0 ⇒ уравнение имеет один корень. Можно использовать любую формулу. Например, первую:

Как видно из примеров, все очень просто. Если знать формулы и уметь считать, проблем не будет. Чаще всего ошибки возникают при подстановке в формулу отрицательных коэффициентов. Здесь опять же поможет прием, описанный выше: смотрите на формулу буквально, расписывайте каждый шаг — и очень скоро избавитесь от ошибок.

Неполные квадратные уравнения

Бывает, что квадратное уравнение несколько отличается от того, что дано в определении. Например:

  1. x 2 + 9 x = 0;
  2. x 2 − 16 = 0.

Несложно заметить, что в этих уравнениях отсутствует одно из слагаемых. Такие квадратные уравнения решаются даже легче, чем стандартные: в них даже не потребуется считать дискриминант. Итак, введем новое понятие:

Уравнение ax 2 + bx + c = 0 называется , если b = 0 или c = 0, т.е. коэффициент при переменной x или свободный элемент равен нулю.

Разумеется, возможен совсем тяжелый случай, когда оба этих коэффициента равны нулю: b = c = 0. В этом случае уравнение принимает вид a x 2 = 0. Очевидно, такое уравнение имеет единственный корень: x = 0.

Рассмотрим остальные случаи. Пусть b = 0, тогда получим неполное квадратное уравнение вида ax 2 + c = 0. Немного преобразуем его:

Решение неполного квадратного уравнения

Поскольку арифметический квадратный корень существует только из неотрицательного числа, последнее равенство имеет смысл исключительно при (− c / a ) ≥ 0. Вывод:

  1. Если в неполном квадратном уравнении вида ax 2 + c = 0 выполнено неравенство (− c / a ) ≥ 0, корней будет два. Формула дана выше;
  2. Если же (− c / a ) < 0, корней нет.

Как видите, дискриминант не потребовался — в неполных квадратных уравнениях вообще нет сложных вычислений. На самом деле даже необязательно помнить неравенство (− c / a ) ≥ 0. Достаточно выразить величину x 2 и посмотреть, что стоит с другой стороны от знака равенства. Если там положительное число — корней будет два. Если отрицательное — корней не будет вообще.

Теперь разберемся с уравнениями вида ax 2 + bx = 0, в которых свободный элемент равен нулю. Тут все просто: корней всегда будет два. Достаточно разложить многочлен на множители:

Разложение уравнения на множители

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

  1. x 2 − 7 x = 0;
  2. 5 x 2 + 30 = 0;
  3. 4 x 2 − 9 = 0.

x 2 − 7 x = 0 ⇒ x · ( x − 7) = 0 ⇒ x 1 = 0; x 2 = −(−7)/1 = 7.

5 x 2 + 30 = 0 ⇒ 5 x 2 = −30 ⇒ x 2 = −6. Корней нет, т.к. квадрат не может быть равен отрицательному числу.

4 x 2 − 9 = 0 ⇒ 4 x 2 = 9 ⇒ x 2 = 9/4 ⇒ x 1 = 3/2 = 1,5; x 2 = −1,5.

Смотрите также:

  1. Теорема Виета
  2. Следствия из теоремы Виета
  3. Тест на тему «Значащая часть числа»
  4. Метод коэффициентов, часть 1
  5. Однородные тригонометрические уравнения: общая схема решения
  6. Задача B4: строительные бригады
  • Вход для учеников
  • ЕГЭ-2024
  • Школьникам
  • 1. Арифметика
  • Арифметика
  • Дроби
  • Модуль
  • Проценты
  • Корни
  • Степени
  • Прогрессии
  • Текстовые задачи
  • 2. Алгебра
  • Уравнения
  • Системы уравнений
  • Неравенства
  • Системы неравенств
  • Рациональные дроби
  • Функции
  • Многочлены
  • Логарифмы
  • Экспонента
  • Задачи с параметром
  • Вероятность
  • 4. Геометрия
  • Треугольники
  • Многоугольники
  • Окружность
  • Стереометрия
  • Векторы
  • 3. Математический анализ
  • Тригонометрия
  • Предел
  • Производная
  • Интегралы
  • Студентам
  • Реклама
  • Обо мне
  • © 2010—2024 ИП Бердов Павел Николаевич
    ИНН 760708479500; ОГРНИП 309760424500020
  • При использовании материалов ссылка на сайт обязательна
    Телефон: +7 (963) 963-99-33; почта: pavel@berdov.com
  • Карта сайта

Калькулятор уравнений

С помощью этого калькулятора вы сможете решить линейное, квадратное или кубическое уравнение онлайн. Примеры вычислений можно найти в соответствующем разделе.

Решение уравнений

Уравнение — это равенство с переменной (или неизвестной). Уравнение с одной переменной $x$ в общем виде обычно записывается таким образом: $f(x) = g(x)$.

Решением (или корнем) уравнения называется такое значение переменной, при котором уравнение превращается в верное числовое равенство. Решить уравнение — значит найти все его решения или доказать, что их нет.

Как решить уравнение на калькуляторе: сначала ввести часть уравнения до знака =, нажать кнопку x=y, ввести оставшуюся часть уравнения, нажать кнопку =, чтобы произвести вычисления. Например, для уравнения $2x — 4 = 0$ корнем является $x = 2$. Вот как этот результат был получен с помощью калькулятора уравнений:

$$2x — 4 = 0 \\ \Downarrow \\ x = 2$$

Линейные уравнения

Линейное уравнение с одной неизвестной — это уравнение следующего вида:

  • $x$ — неизвестная,
  • $a$ — коэффициент при неизвестной,
  • $b$ — свободный член уравнения.

Линейные уравнения являются простейшим видом алгебраических уравнений, решение которых сводится к выполнению простых арифметических действий.

$$4x — 16 = 0 \\ \Downarrow \\ x = 4$$

$$3x + 2 = 6 — x \\ \Downarrow \\ x = 1$$

Квадратные уравнения

Квадратным уравнением называется уравнение следующего вида:

$$ax^2 + bx + c = 0 \ \ \ (a \ne 0)$$

Решение квадратных уравнений на калькуляторе:

$$4x^2 — 6x + 2 = 0 \\ \Downarrow \\ x_1 = 1, \ x_2 = 0.5$$

$$x^2 — 3x — 4 = 0 \\ \Downarrow \\ x_1 = 4, \ x_2 = -1$$

$$x^2 — 4x + 4 = 0 \\ \Downarrow \\ x_1 = x_2 = x = 2$$

Соотношения коэффициентов

Существуют такие квадратные уравнения, у которых коэффициенты находятся в соотношениях, позволяющих решать эти уравнения гораздо проще.

$$a + b + c = 0 \\ \Downarrow \\ x_1 = 1, \ x_2 = \frac $$

$$a + c = b \\ \Downarrow \\ x_1 = -1, \ x_2 = — \frac $$

Корни таких уравнений можно найти и с помощью обычного калькулятора.

Дискриминант

Дискриминант применяется для нахождения корней квадратного уравнения. Формула вычисления дискриминанта:

Формула вычисления корней с использованием дискриминанта:

Если $D > 0$, то уравнение имеет два различных корня. Например:

$$4x^2 — 6x + 2 = 0 \\ \Downarrow \\ a = 4, \ b = -6, \ c = 2 \\ \Downarrow \\ D = (-6)^2 — 4 × 4 × 2 = 4 \\ \Downarrow \\ x_ = \frac \\ \Downarrow \\ x_1 = \frac = 1, \ x_2 = \frac = 0.5$$

Если $D = 0$, то уравнение имеет один корень (или два одинаковых корня). Например:

$$x^2 — 4x + 4 = 0 \\ \Downarrow \\ a = 1, \ b = -4, \ c = 4 \\ \Downarrow \\ D = (-4)^2 — 4 × 1 × 4 = 0 \\ \Downarrow \\ x_ = \frac \\ \Downarrow \\ x_1 = x_2 = x = \frac = 2$$

$$x^2 + 4x + 5 = 0 \\ \Downarrow \\ a = 1, \ b = 4, \ c = 5 \\ \Downarrow \\ D = 6^2 — 4 × 1 × 5 = -4 \\ \Downarrow \\ x_ = \frac > \\ \Downarrow \\ x_1 = \frac = -2 + i, \\ x_2 = \frac = -2 — i$$

Теорема Виета

Теорема Виета устанавливает простые алгебраические соотношения (формулы Виета) между корнями квадратного уравнения $x_1, x_2$ и его коэффициентами $a, b, c$. Используя эти формулы, можно найти корни, если известны коэффициенты, или вычислить коэффициенты, если известны корни.

Биквадратные уравнения

Биквадратным уравнением называется уравнение следующего вида:

$$ax^4 + bx^2 + c = 0 \ \ \ (a \ne 0)$$

Если произвести замену $x^2$ на $y \ (y \ge 0)$, то получится квадратное уравнение, для которого можно найти корни $y_1, y_2$. Корни биквадратного уравнения находятся так:

Кубические уравнения

Кубическим уравнением называется уравнение следующего вида:

$$ax^3 + bx^2 + cx + d = 0 \ \ \ (a \ne 0)$$

$$x^3 — 6x^2 — 31x + 120 = 0 \\ \Downarrow \\ x_1 = -5, x_2 = 3, x_3 = 8$$

Если кубическое уравнение разделить на $a$ и заменить $x$ на $y — \frac $, то оно примет следующий более простой вид:

Формула Кардано

Если кубическое уравнение имеет следующий вид:

то для нахождения корней этого уравнения можно применить формулу Кардано:

Как решить квадратное уравнение написанное в виде строки?

Вводим,например: 21x^2+3x+5=0 . Нужно считать строку каким-то способом взять из нее a,b,c, то есть 21,3,5, чтобы эти числа были типом double. И потом уже решить квадратное уравнение. В программе можно использовать только библиотеку stdio и только одну функцию из библиотеки math.h — это sqrt , больше ничего нельзя. Уравнение я смогу написать а вот как изьять из строки числа как double понятия не имею.

Отслеживать
13.8k 12 12 золотых знаков 44 44 серебряных знака 77 77 бронзовых знаков
задан 13 дек 2017 в 17:49
43 3 3 бронзовых знака
Заменить все не-цифры на пробелы, а потом уже высканивать числа (1-е, 3-е и 4-е).
13 дек 2017 в 17:57

Понял схему.но не понимаю как именно с ее помощью вывести три числа в три разные переменные типа doble.Если бы вы могли написать.спасибо

13 дек 2017 в 17:59

@Akina Все не совсем так просто, ввести же могут (наверно) и 5+3x+21x^2=0 , и 21x^2+3x=-5 , и (наверняка) 21x^2+5=0 , и 21x^2+3x=0 . И это ещё без учета более экзотических вариантов типа 21x^2+2x+x+5=0 .

13 дек 2017 в 18:00
Нет,это примитивная задача как бы)Должны ввести точно так же как в примере ax^2+bx+c=0
13 дек 2017 в 18:02
@Сергей: И что, даже так вводить нельзя: 5x^2-3x-10=0 ?
14 дек 2017 в 5:45

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

В данном случае scanf() с одной большой форматной строкой, как предложил @Sergey, не подойдёт. Раз члены уравнения могут следовать в любом порядке, то и строку надо считывать частями.

Пусть на входе у нас строка вида S1+. +SN=0 или S1+. +SN= (где Si = x , либо Si = x^ ), а на выходе — массив коэффициентов, где индекс массива соответствует нужной степени при коэффициенте.

Важное замечание: так как число может быть сколь угодно большим, то во избежание переполнения строкового буфера мы будем считывать его поциферно. Ну а так как строка сложная, воспользуемся конечным автоматом.

#include #define bool unsigned char #define true 1 #define false 0 enum States < // Конечные состояния Result_Success, // Успешное завершение Result_CoefficientCantBeStored, // Ошибка: массив outCoeffs слишком мал Result_UnexpectedSymbolInCoeff, // Ошибка: неожиданный символ в коэффициенте Result_UnexpectedEndOfPower, // Ошибка: После знака степени нет самой степени Result_UnexpectedEndOfRightSide,// Ошибка: не указана правая часть уравнения // Промежуточные состояния State_AtCoeffStart, // Первый символ коэффициента (+/-/цифра) State_AtCoeff, // Дальнейшие цифры коэффициента State_AtX, // Буква "икс" State_AtPowerCoeffStart, // Первый символ показателя степени члена State_AtPowerCoeff, // Показатель степени члена State_AtRightSideStart, // Первый символ справа от знака равенства State_AtRightSide, // Дальнейшие цифры справа от знака равенства // Первое неконечное состояние (используется при проверке на необходимость выхода) FirstInternalState = State_AtCoeffStart >; /** * Функция разбора строки с линейным уравнением и вычленения из неё коэффициентов. * * Переметры: * * in * Дескриптор входного символьного потока. * * outCoeffs * Указатель на массив, который будет принимать коэффициенты, считанные * из уравнения. Коэффициент для N-й степени идёт в outCoeffs[N]. * Если определённый коэффициент не указан в уравнении, то в соответствующий * элемент массива будет записан положительный ноль. * * coeffsCount * Количество элементов в массиве outCoeffs. Если очередная степень приводит * к записи за пределами outCoeffs, функция возвращает * Result_CoefficientCantBeStored. * * Возвращаемое значение: * * Константа из семейства States::Result_*. При возникновении ошибки происходит * возврат кода, отличного от Result_Success; массив outCoeffs при этом содержит * те коэффициенты, которые были успешно считаны целиком до возникновения ошибки. */ enum States parse(FILE* in, double* outCoeffs, size_t coeffsCount) < // Зануляем все указанные коэффициенты, вдруг не все из них будут указаны в уравнении for(size_t i = 0; i < coeffsCount; ++i) outCoeffs[i] = 0.0; enum States state = State_AtCoeffStart; size_t currentPowCoefficient = 0; bool isPositiveCoeff; double numBuffer = 0.0; bool metDecimalDot = false; size_t denomPower = 0; // Так как нам может потребоваться попридержать текущий символ до следующего // состояния, введём для него промежуточный буфер char ch = fgetc(in); while(state >= FirstInternalState) < // Считываем очередной символ и решаем, что с ним делать (решение принимаем // с помощью простенького конечного автомата). // // Да простят меня нелюбители switch-bases FSM, но пробрасывать // во вспомогательные функции все параметры и переменные — для учебного // примера это, пожалуй, перебор. switch(state) < case State_AtCoeffStart: // Сюда мы можем выйти при завершении предыдущего члена. // Поэтому именно здесь мы выдаём готовый коэффициент. if(coeffsCount >currentPowCoefficient) < // Чтобы сместить десятичную точку на denomPower позиций // вправо, мы могли бы воспользоваться pow(). Однако, // для этого потребуется зпрещённая math.h, а потому мы //вынуждены крутить цикл double decimalPointOffseter = 1.0; for(size_t i = 0; i < denomPower; ++i) decimalPointOffseter /= 10.0; outCoeffs[currentPowCoefficient] = numBuffer * (isPositiveCoeff ? 1.0 : -1.0) / decimalPointOffseter; >else state = Result_CoefficientCantBeStored; // Переходим непосредственно к чтению нового члена metDecimalDot = false; if(ch == '-') < numBuffer = 0.0; isPositiveCoeff = false; ch = fgetc(in); state = State_AtCoeff; >else if(ch == '=') < ch = fgetc(in); state = State_AtRightSideStart; >else if(ch == EOF) < state = Result_Success; >else < numBuffer = 0.0; isPositiveCoeff = true; state = State_AtCoeff; >break; case State_AtCoeff: if(ch >= '0' && ch else if(ch == 'x') < state = State_AtX; ch = fgetc(in); >else if(ch == '+' || ch == '-' || ch == EOF) < // Окончание коэффициента с нулевой степенью. Придерживаем символ currentPowCoefficient = 0; state = State_AtCoeffStart; >else if(ch == '.') < metDecimalDot = true; denomPower = 0; >else state = Result_UnexpectedSymbolInCoeff; break; case State_AtX: // Подготавливаем аккумулятор для коэффициента currentPowCoefficient = 0; if(ch == '^') < ch = fgetc(in); state = State_AtPowerCoeffStart; >else < // Окончание коэффициента с первой степенью. Придерживаем символ currentPowCoefficient = 1; state = State_AtCoeffStart; >break; case State_AtPowerCoeffStart: state = (ch != EOF) ? State_AtPowerCoeff : Result_UnexpectedEndOfPower; break; case State_AtPowerCoeff: if(ch >= '0' && ch else state = State_AtCoeffStart; break; case State_AtRightSideStart: if(ch == '-') < numBuffer = 0.0; isPositiveCoeff = true; // Инверсия знака ch = fgetc(in); state = State_AtRightSide; >else if(ch == EOF) < state = Result_UnexpectedEndOfRightSide; >else < numBuffer = 0.0; isPositiveCoeff = false; // Инверсия знака state = State_AtRightSide; >break; case State_AtRightSide: if(ch == EOF) < currentPowCoefficient = 0; numBuffer = -numBuffer; // Переходим, чтобы сохранить коэффициент и сразу же выйти state = State_AtCoeffStart; >else if(ch == '.') < metDecimalDot = true; denomPower = 0; >else < numBuffer *= 10.0; numBuffer += (double)(int)(ch - '0'); ch = fgetc(in); ++denomPower; // Ничего не проверяем, всё равно будет сброс при точке >break; > > return state; > 

Решение квадратного уравнения

Уравнение вида a⋅x 2 + b⋅x + c = 0квадратное уравнение.

a, b, c — действительные числа, a ≠ 0.

Для того чтобы вычислить корни квадратного уравнения, нужно сначала найти дискриминант.

D = b 2 — 4⋅a⋅c;

  • если D < 0, то квадратное уравнение не имеет корней;
  • если D = 0, то уравнение имеет один действительный корень(иногда говорят, что корней два, но они одинаковые):
    • x1 = x2 = -b / (2⋅a);
    • x1 = (-b + √D) / (2⋅a);
    • x2 = (-b + √D) / (2⋅a).

    Программа для решения квадратного уравнения

    using System; using System.Text; class Program < static void Main( ) < Console.OutputEncoding = Encoding.UTF8; Console.WriteLine("Решение квадратного уравнения"); //ввод данных Console.Write("a hljs-keyword">var a = double.Parse(Console.ReadLine()); Console.Write("b hljs-keyword">var b = double.Parse(Console.ReadLine()); Console.Write("c hljs-keyword">var c = double.Parse(Console.ReadLine()); double x1, x2; //дискриминант var discriminant = Math.Pow(b, 2) - 4 * a * c; if (discriminant < 0) < Console.WriteLine("Квадратное уравнение не имеет корней"); > else < if (discriminant == 0) //квадратное уравнение имеет два одинаковых корня < x1 = -b / (2 * a); x2 = x1; > else //уравнение имеет два разных корня < x1 = (-b + Math.Sqrt(discriminant)) / (2 * a); x2 = (-b - Math.Sqrt(discriminant)) / (2 * a); > //вывод корней уравнения Console.WriteLine($"x1 = ; x2 = "); > Console.WriteLine("Для выхода нажмите любую клавишу. "); Console.ReadKey(true); > > 

    Метод Math.Pow, языка C#, используется для возведения числа в степень.
    Метод Math.Sqrt используется для получения квадратного корня числа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *