
Вариант 22. Два сплава Имеется два сплава из двух металлов, соотношение этих металлов в каждом из
сплавов известно. Программа должна определять, какое количество объёмных единиц первого и второго сплава нужно взять, чтобы получить третий сплав с заданным соотношением этих металлов. Входные данные. Соотношение двух металлов в первом сплаве, во втором сплаве и в требуемом сплаве, а также количество объёмных единиц третьего сплава, которое требуется получить. Выходные данные. Количество объёмных единиц первого и второго сплава, которые следует соединить, для получения заданного количества третьего сплава, либо сообщение о том, что получить третий сплав из имеющихся двух невозможно. Напишите пожалуйста код решения отдельных моментов: оба соотношения в сплаве больше 1 и оба соотношения в сплаве меньше 1.Или объясните,почему тогда нет решения в положительных числах.

Ответы на вопрос

===== PascalABC.NET =====
function НОД(a, b: integer): integer;
begin
(a, b) := (Abs(a), Abs(b));
while b <> 0 do
(a, b) := (b, a mod b);
Result := a
end;
function Подходит(a, b: integer) :=
(Sign(a) = Sign(b)) and (b <> 0);
procedure СократитьДробь(var a, b: integer);
begin
var d := НОД(a, b);
if d > 1 then
(a, b) := (a div d, b div d)
end;
begin
Println('Введите соотношения металлов в сплаве.');
Println('Числа частей целые и вводятся через пробел.');
var (a1, b1) := ReadInteger2('Первый сплав:');
var (a2, b2) := ReadInteger2('Второй сплав:');;
var (a3, b3) := ReadInteger2('Нужный сплав:');;
var y1 := (a2 + b2) * (a1 * b3 - b1 * a3);
var y2 := a1 * b2 - a2 * b1;
if not Подходит(y1, y2) then
begin
Println('Решения нет');
exit
end;
var x1 := (a3 + b3) * y2 - y1;
var x2 := y2;
if not Подходит(x1, x2) then
begin
Println('Решения нет');
exit
end;
СократитьДробь(y1, y2);
СократитьДробь(x1, x2);
var (r1, r2) := (x1 * y2, x2 * y1);
СократитьДробь(r1, r2);
var v := ReadReal('Требуемый объем сплава:');
Writeln('Соотношение частей металла ', r1, ' : ', r2);
Writeln('Соотношение объемов: ', v * r1 / (r1 + r2),
' : ', v * r2 / (r1 + r2))
end.




Для решения этой задачи вам понадобится использовать системы линейных уравнений.
Предположим, что соотношение первого металла в первом сплаве равно a1, соотношение второго металла в первом сплаве равно b1. Аналогично, во втором сплаве соотношение первого металла равно a2, соотношение второго металла равно b2. Требуемое соотношение первого металла в третьем сплаве равно a3, соотношение второго металла равно b3. Количество объёмных единиц третьего сплава, которое требуется получить, равно V.
Тогда у нас есть следующая система уравнений:
a1 * x1 + a2 * x2 = a3 * V, b1 * x1 + b2 * x2 = b3 * V,
где x1 и x2 - количество объёмных единиц первого и второго сплава соответственно, которые следует соединить.
Если оба соотношения в сплаве больше 1, то решение можно получить следующим образом:
pythondef calculate_alloy_quantities(a1, b1, a2, b2, a3, b3, V):
det = a1 * b2 - a2 * b1
if det == 0:
# Решение невозможно
return None
x1 = (a3 * b2 - a2 * b3) / det
x2 = (a1 * b3 - a3 * b1) / det
return x1, x2
Если оба соотношения в сплаве меньше 1, то можно воспользоваться обратными значениями:
pythondef calculate_alloy_quantities(a1, b1, a2, b2, a3, b3, V):
det = b1 * a2 - b2 * a1
if det == 0:
# Решение невозможно
return None
x1 = (b3 * a2 - b2 * a3) / det
x2 = (b1 * a3 - b3 * a1) / det
return x1, x2
В обоих случаях, если det равно 0, значит решение невозможно в положительных числах. Это означает, что заданный третий сплав невозможно получить из имеющихся двух сплавов.


Похожие вопросы







Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili