tatakypzova
?>

Уровень c. напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/» выражение вводится как символьная строка, все числа целые. операция «/» выполняется как целочисленное деление (div). пример: введите выражение: 12*3+45 ответ: 81 выполняетски в паскале. тема: преобразование строка-число со спецификацией отмечу как лучшее

Информатика

Ответы

Dmitrievna Lvovich
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

function Res(a:integer;op:char;b:integer):integer;
begin
  case op of
  '+':Result:=a+b;
  '-':Result:=a-b;
  '*':Result:=a*b;
  '/':Result:=a div b
  end
end;

begin
  var s:=ReadlnString('Вводите:');
  var p:=s.Matches('(((\-)?\d+)|[\+\-\*\/])').ToArray;
  if p.Count<>5 then Writeln('Ошибка!')
  else begin
    var op1:=p[1].Value[1];
    var op2:=p[3].Value[1];
    var a:=p[0].Value.ToInteger;
    var b:=p[2].Value.ToInteger;
    var c:=p[4].Value.ToInteger;
    if (op1 in ['+','-']) and (op2 in ['*','/']) then
      Writeln('='+Res(Res(b,op2,c),op1,a))
    else Writeln('='+Res(Res(a,op1,b),op2,c))
    end
end.

Примеры
Вводите: -4--3--2
=1
Вводите: 12*3+45
=81
Вводите: 45+12*3
=81
Вводите: -26/13--5
=3
Kotvitskii
Вообщем стратегия такая: сначала наращиваем мощности, а потом копим печеньки
Программа вычисляет оптимальную максимальную мощность. Это оказывается 9 или 10 печенек в день (т.е 8 или 9 духовок)
в минимуме в общем целом на это уйдет 108 дней

код на руби

(1..100).step(1) {|max_productivity|
    productivity = 1
    cockies = 0
    days = 0
    upgrade_cost = 5 * productivity

    while cockies < 532
        if cockies >= upgrade_cost and productivity < max_productivity
            cockies -= upgrade_cost
            productivity += 1
            upgrade_cost = 5 * productivity
        else
            cockies += productivity
        end

        days += 1
    end
    p [max_productivity, days, cockies, productivity]
}

Вывод (куска)
[6, 119, 534, 6]
[7, 112, 532, 7]
[8, 109, 536, 8]
[9, 108, 540, 9]
[10, 108, 540, 10]
[11, 109, 539, 11]
[12, 111, 540, 12]
[13, 113, 533, 13]
[14, 116, 532, 14]
[15, 120, 540, 15]
[16, 124, 544, 16]
[17, 128, 544, 17]
[18, 132, 540, 18]
seletan1
Я уже решал эту задачу.
Я руками за 5 дней делаю 5 коробок, и на 6-ой день покупаю духовку.
Руками и духовкой я делаю 2 коробки в день, за 5 дней - 10 коробок.
На 6-ой день я покупаю вторую духовку.
Руками и 2-мя духовками я за 5 дней делаю 15 коробок, и на 6-ой день покупаю 3-ью духовку.
И так далее. Чтобы купить очередную духовку, я работаю 5 дней, а на 6-ой день ее покупаю, и у меня печенья не остается совсем.
То есть, после покупки каждой духовки я начинаю всё с нуля.
Главное - понять, когда нужно остановиться покупать духовки и начать уже копить печенье на складе.
Итак, подведем итоги:
1) На покупку каждой духовки мы тратим 6 суток и начинаем с нуля.
2) Имея n духовок, мы делаем 584 коробок печенья за 
trunc(584/(n+1)) + 1 дней, где trunc(x) = [x] - это целая часть x. 
3) Всего мы тратим времени T(n) = 6n + trunc(584/(n+1)) + 1 --> min
Минимум функции trunc(584/(n+1)) совпадает с минимумом 584/(n+1)
T(n) = 6n + 584/(n+1) + 1 --> min
T'(n) = 6 - 584/(n+1)^2 = (6(n+1)^2 - 584) / (n+1)^2 = 0
6(n+1)^2 - 584 = 0
(n+1)^2 = 584/6 = 97,33
n + 1 = √97,33 ~ 9,86 = 10
n = 9
Значит, нужно ограничиться покупкой 9 духовок.
За 6*9 = 54 дня мы их купим, и за 584/10 ~ 59 дней мы соберем нужное количество коробок на складе.
Всего мы истратим 54 + 59 = 113 дней.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Уровень c. напишите программу, которая вычисляет выражение, состоящее из трех чисел и двух знаков (допускаются знаки «+», «–», «*» и «/» выражение вводится как символьная строка, все числа целые. операция «/» выполняется как целочисленное деление (div). пример: введите выражение: 12*3+45 ответ: 81 выполняетски в паскале. тема: преобразование строка-число со спецификацией отмечу как лучшее
Ваше имя (никнейм)*
Email*
Комментарий*