Procedure GetRV(var r, v: real; var Final: boolean); { Организует ввод и возвращает значения роста и веса. Значение параметра Final=true - сигнал окончить ввод данных, для чего вводят нули } begin Write('Введите рост (см) и вес (кг) ->'); Readln(r, v); Final := ((r > 0) and (v > 0)) end;
function DefDesk(r: real): string; begin if r <= 140 then DefDesk := 'S' else if r < 150 then DefDesk := 'M' else DefDesk := 'L' end;
var rost, ves: real; flag: boolean;
begin repeat GetRV(rost, ves, flag); if flag then Writeln('Нужна парта типа ', DefDesk(rost)) until (not flag) end.
Тестовое решение: Введите рост (см) и вес (кг) ->135 31 Нужна парта типа S Введите рост (см) и вес (кг) ->143 41 Нужна парта типа M Введите рост (см) и вес (кг) ->151 48 Нужна парта типа L Введите рост (см) и вес (кг) ->0 0
Разбиваешь прямую на отрезки по точкам, в которых модули = 0.
1) При x < -1/2 будет |2x+1| = -2x-1, |2x-1| = 1-2x
-2x-1 = 1-2x
-1 = 1 - не верно, решений в этой области нет.
При -1/2 <= x < 1/2 будет |2x+1| = 2x+1, |2x-1| = 1-2x
2x+1 = 1-2x
4x = 0, x = 0 - принадлежит промежутку, поэтому это решение.
При x >= 1/2 будет |2x+1| = 2x+1, |2x-1| = 2x-1
2x+1 = 2x-1
1 = -1 - не верно, решений в этой области нет.
ответ: x = 0
2) 2x+1 под корнем, значит x >= -1/2
При -1/2 <= x < 1 будет |x-1| = 1-x
корень(2x+1) = 2(1-x)
2x+1 = 4(1-x)^2 = 4(x^2 - 2x + 1) = 4x^2 - 8x + 4
4x^2 - 10x + 3 = 0
D/4 = 5^2 - 4*3 = 25 - 12 = 13
x1 = (5 - корень(13))/4 ~ 0,35 - входит в промежуток, это решение.
x2 = (5 + корень(13))/4 ~ 2,15 > 1, не подходит.
При x >= 1 будет |x-1| = x-1
корень(2x+1) = 2(x-1)
2x+1 = 4(x-1)^2 = 4(x^2 - 2x + 1) = 4x^2 - 8x + 4
4x^2 - 10x + 3 = 0
D/4 = 5^2 - 4*3 = 25 - 12 = 13
x1 = (5 - корень(13))/4 ~ 0,35 < 1, не подходит.
x2 = (5 + корень(13))/4 ~ 2,15 - входит в промежуток, это решение.
ответ:
x1 = (5 - корень(13))/4
x2 = (5 + корень(13))/4
3) При x < -1/2 будет |2x+1| = -2x-1, |3x-1| = 1-3x
1 - 3x - 2x - 1 = 8
-5x = 8, x = -8/5 < -1/2 - входит в промежуток, это решение.
При -1/2 <= x < 1/3 будет |2x+1| = 2x+1, |3x-1| = 1-3x
1 - 3x + 2x + 1 = 8
-x = 6, x = -6 - не входит в промежуток
При x >= 1/3 будет |2x+1| = 2x+1, |3x-1| = 3x-1
3x - 1 + 2x + 1 = 8
5x = 8, x = 8/5 > 1/3 - входит в промежуток, это решение.
ответ: x1 = -8/5, x2 = 8/5
{ Организует ввод и возвращает значения роста и веса.
Значение параметра Final=true - сигнал окончить ввод данных,
для чего вводят нули }
begin
Write('Введите рост (см) и вес (кг) ->');
Readln(r, v);
Final := ((r > 0) and (v > 0))
end;
function DefDesk(r: real): string;
begin
if r <= 140 then DefDesk := 'S'
else if r < 150 then DefDesk := 'M'
else DefDesk := 'L'
end;
var
rost, ves: real;
flag: boolean;
begin
repeat
GetRV(rost, ves, flag);
if flag then Writeln('Нужна парта типа ', DefDesk(rost))
until (not flag)
end.
Тестовое решение:
Введите рост (см) и вес (кг) ->135 31
Нужна парта типа S
Введите рост (см) и вес (кг) ->143 41
Нужна парта типа M
Введите рост (см) и вес (кг) ->151 48
Нужна парта типа L
Введите рост (см) и вес (кг) ->0 0