4. Задача №112424. Квадратное уравнение На вход программы подаётся запись квадратного уравнения. Гарантируется, что коэффициент
уравнения при x 2 не равен нулю, все коэффициенты определены и корни вещественные.
Напишите программу, которая находит корни уравнения.
Входные данные
Входная строка содержит запись квадратного уравнения, в которой используются специальные
обозначения: x 2 обозначается как «a», x обозначается как «b». Например, уравнение 2 x 2 - 4 x -
6 запишется в виде строки 2a-4b-6 . Коэффициенты уравнения могут быть вещественными.
Выходные данные
Программа должна вывести два вещественных корня квадратного уравнения (в порядке
возрастания) в одной строке, разделив их пробелом. Значения должны быть выведены с тремя
знаками в дробной части.
Примеры
входные данные
2a-4b-6
выходные данные
-1.000 3.000
using System;
using System.Collections.Generic;
using System.Linq;
namespace Prog
{
class Program
{
static void Main(string[] args)
{
List<double> array = new List<double>() { 7, 25, 4.5, 0, 17, 61, -10, 0, 1, -4, 22 };
// TASK 5
int positive, negative, zero;
var tmp = array.FindAll(x => x > 0);
positive = tmp.Count;
tmp = array.FindAll(x => x == 0);
zero = tmp.Count;
negative = array.Count - zero - positive;
Console.WriteLine($"Кол-во полож. элементов: {positive}\n\rКол-во нулевых элементов: {zero}\n\rКол-во отриц. элементов: {negative}");
// TASK 6
double prv = 1;
for (int i = 0; i < array.Count; ++i)
{
if (array[i] != 0)
{
prv *= array[i];
}
}
Console.WriteLine($"Произведение ненулевых элементов равно: {prv}");
Console.ReadKey();
}
}
}
Объяснение:
const e=0.0001; // точность
var gold: real; // пропорция "Золотого сечения"
a,b: real; // начало и конец отрезка
x1,x2: real; // точки деления
y1,y2: real; // значения целевой функции в точках деления
function f(x:real):real; // целевая функция
begin
f:=x*x*x-8*x+1-5*sin(x);
end;
begin
gold:=(sqrt(5)+1)/2;
a:=-5;
b:=5;
repeat
x1:=b-((b-a)/gold);
x2:=a+((b-a)/gold);
y1:=f(x1);
y2:=f(x2);
if(y1<=y2) then a:=x1 else b:=x2; // условие - поиск максимума
until abs(y2-y1)<e;
writeln('max(',(x1+x2)/2:0:3,',',(y1+y2)/2:0:3,')'); // середина интервала
a:=-5;
b:=5;
repeat
x1:=b-((b-a)/gold);
x2:=a+((b-a)/gold);
y1:=f(x1);
y2:=f(x2);
if(y1>=y2) then a:=x1 else b:=x2; // условие - поиск минимума
until abs(y2-y1)<e;
writeln('min(',(x1+x2)/2:0:3,',',(y1+y2)/2:0:3,')');
End.
Объяснение:
Думаю код ясен.
f(X)=x*x*x-8*x+1-5*sinx
max(-1.612,14.703) min( 1.612,-12.703)
0