Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2136 / 487 | Длительность: 24:14:00
Лекция 3:

Операторы управления

Задача 3.4. Написать программу решения квадратного уравнения ax^2 + bx + c = 0.

Исходные данные: вещественные числа a, b и c — коэффициенты квадратного уравнения.

Результаты работы программы: вещественные числа x1 и x2 — корни квадратного уравнения либо сообщение о том, что корней нет.

Вспомогательные переменные: вещественная переменная d, в которой будет храниться дискриминант квадратного уравнения.

Составим словесный алгоритм решения этой задачи.

  1. Начало алгоритма.
  2. Ввод числовых значений переменных a, b и c.
  3. Вычисление значения дискриминанта d по формуле d = b^2 - 4ac.
  4. Если d < 0, то переход к п.5, иначе переход к п.6.
  5. Вывод сообщения "Действительных корней нет" и переход к п.8.
  6. Вычисление корней x1=\frac{-b+\sqrt{d}}{2a} и x2=\frac{-b-\sqrt{d}}{2a}.
  7. Вывод значений x1 и x2 на экран.
  8. Конец алгоритма.

Блок-схема, соответствующая этому описанию, представлена на рис. 3.15.

Текст программы, которая реализует решение квадратного уравнения:

#include <iostream>
#include <math.h>
using namespace std;
int main ( )
{
	float a, b, c, d, x1, x2;
	//Ввод значений коэффициентов квадратного уравнения.
	cout<<" a = "; cin >>a;
	cout<<" b = "; cin >>b;
	cout<<" c = "; cin >>c;
	d=b*b-4*a*c; //Вычисление дискриминанта.
	if (d<0)
		//Если дискриминант отрицательный, то вывод сообщения, о том что действительных корней нет,
		cout<<"Нет действительных корней";
	else
	{
		//иначе вычисление действительных корней
		x1=( -b+sqrt (d) ) /2/a;
		x2=( -b-sqrt (d) ) /(2 * a);
		//и вывод их значений.
		cout<<" X1 = "<<x1<<" \t X2 = "<<x2<<" \n ";
	}
	return 0;
}
			
Алгоритм решения квадратного уравнения

Рис. 3.15. Алгоритм решения квадратного уравнения

Задача 3.5. Составить программу нахождения действительных и комплексных корней квадратного уравнения ax^2 + bx + c = 0.

Исходные данные: вещественные числа a, b и c — коэффициенты квадратного уравнения.

Результаты работы программы: вещественные числа x1 и x2 — действительные корни квадратного уравнения либо x1 и x2 — действительная и мнимая части комплексных корней квадратного уравнения.

Вспомогательные переменные: вещественная переменная d, в которой будет храниться дискриминант квадратного уравнения.

Можно выделить следующие этапы решения задачи:

  1. Ввод коэффициентов квадратного уравнения a, b и c.
  2. Вычисление дискриминанта d по формуле d = b^2 - 4ac.
  3. Проверка знака дискриминанта. Если d > 0, то вычисление действительных корней: x1=\frac{-b+\sqrt{d}}{2a} и x2=\frac{-b-\sqrt{d}}{2a} и вывод их на экран. При отрицательном дискриминанте выводится сообщение о том, что действительных корней нет, и вычисляются комплексные корни2Комплексные числа записываются в виде a + ib, где a — действительная часть комплекс-ного числа, b — мнимая часть комплексного числа, i — мнимая единица \sqrt{-1}. Подробно о комплексных числах можно прочитать в главе 9. x1=\frac{-b}{2a}+i\frac{\sqrt{\left|{d}\right|}}{2a},x2=\frac{-b}{2a}-i\frac{\sqrt{\left|{d}\right|}}{2a}.

У обоих комплексных корней действительные части одинаковые, а мнимые отличаются знаком. Поэтому можно в переменной x1 хранить действительную часть числа \frac{-b}{2a}, в переменной x2 — модуль мнимой части \frac{\sqrt{\left|{d}\right|}}{2a}, а в качестве корней вывести x1 + i \cdot x2 и x1 - i \cdot x2.

На рис. 3.16 изображена блок-схема решения задачи. Блок 1 предназначен для ввода коэффициентов квадратного уравнения. В блоке 2 осуществляется вычисление дискриминанта. Блок 3 осуществляет проверку знака дискриминанта, если дискриминант отрицателен, то корни комплексные, их расчёт происходит в блоке 4 (действительная часть корня записывается в переменную x1, модуль мнимой — в переменную x2), а вывод — в блоке 5 (первый корень x1+i\cdot x2, второй — x1 - i \cdot x2). Если дискриминант положителен, то вычисляются действительные корни уравнения (блок 6) и выводятся на экран (блок 7).

Текст программы, реализующей поставленную задачу:

#include <iostream>
#include <math.h>
using namespace std;
int main ( )
{
	float a, b, c, d, x1, x2;
	cout<<" a = "; cin>>a;
	cout<<" b = "; cin>>b;
	cout<<" c = "; cin>>c;
	d=b*b-4*a*c;
	if (d<0)
	{ //Если дискриминант отрицательный, то вывод соответствующего сообщения.
		cout<<"Нет вещественных корней \n ";
		x1=-b/(2 * a ); //Вычисление действительной части комплексных корней.
		x2=sqrt ( fabs (d) ) /(2 * a ); //Вычисление модуля мнимой части комплексных корней
		//Сообщение о комплексных корнях уравнения вида ax2 + bx + c = 0.
		cout<<"Комплексные корни уравнения \n ";
		cout<<a<<" x ^2+ "<<b<<" x + "<<c<<" =0 \n ";
		//Вывод значений комплексных корней в виде x1 + ix2, x1 - ix2 
		if ( x2>=0)
		{
			cout<<x1<<" + "<<x2<<" i \t ";
			cout<<x1<<" -"<<x2<<" i \n ";
		}
		else
		{
			cout<<x1<<" -"<<abs ( x2 )<<" i \t ";
			cout<<x1<<" + "<<abs ( x2 )<<" i \n ";
		}
	}
	else
	{
		//Если дискриминант положительный, вычисление действительных корней и вывод их на экран.
		x1=( -b+sqrt (d) ) /2/a;
		x2=( -b- sqrt (d) ) /(2 * a );
		cout<<"Вещественные корни уравнения \n ";
		cout<<a<<" x ^2+ "<<b<<" x + "<<c<<" =0 \n ";
		cout<< X1 = "<<x1<<" \t X2 = "<<x2<<" \n ";
	}
	return 0;
}
			
Алгоритм решения задачи 3.5

Рис. 3.16. Алгоритм решения задачи 3.5

Результаты работы программы к задаче 3.5 показаны ниже.

a=-5
b=-3
c=-4
Нет вещественных корней
Комплексные корни уравнения
-5x^2+-3x+-4=0
-0.3-0.842615i -0.3+0.842615i
==============================
a=2
b=-3
c=1
Вещественные корни уравнения
2x^2+-3x+1=0
X1=1 X2=0.5
			
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?