• Ниже приведен код одной и той же программы на двух языках программирования.

    Си int main (void)
    {
    int a, b, x, y;
    scanf("%i%i", &a, &b);
    x = (a + 2*b) / 5;
    y = b - x;
    printf("%i %i", x, y);
    }
    паскаль
    var a, b, x, y: integer;
    begin

    read(a, b);
    x := (a + 2*b) div (5);
    y := b - x;
    write(x,' ',y);
    end.

    Определите, какие значения указал пользователь в качестве входных данных, если известно, что программа в результате вывела два числа: 1 и 0 в указанном порядке.

Ответы 2

  • Если программа вывела числа 1 и 0,то итоговым значение x будет x=1, а y=0.Следовательно (a+2b) div 5 = 1   и    b-1=0Из второго уравнения можно выразить b = 1Подставим b =1 в первое уравнение: (a+2) div 5 = 1a=3 b =1
    • Автор:

      otishrod
    • 5 лет назад
    • 0
  • Идем по программе от конца к началу.Программа выводит значения x=1 и y=0.y = b-x ⇒ b = y+x=0+1 = 1Значение b = 1 найдено.x = (a+2*b) div 5; (a+2*1) div 5 = 1; (a+2) div 5 = 1Отметим, что div - это операция целочисленного деления, которая отбрасывает остаток. Допустим, остаток был нулевой, тогда а+2 = 5 ⇒ a=3Но остаток мог быть и ненулевым! При делении на 5 остатком могут быть числа от 0 до 4, следовательно, в числителе могло быть значение на 1,2,3 или 4 большее, т.е. значение а могло быть не только 3, но и 4,5,6,7.Ответ: a\in[3;7], \ a\in \mathbb N, \ b=1
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years