Zimowe programowanie obiektowe - lista 3

  1. Rozpatrzmy funkcję f:
    int f(int x, int y)
    {
       while ((x %= y) && (y %= x))
          continue;
       if (x)
          return x;
       return y;
    }
    Jaki jest wynik wyrażenia f(6, 22)?
    Jaki znany algorytm realizuje ta funkcja? W jaki sposób wykorzystano w niej regułę short-circuit evaluation? W jakim celu zastosowano instrukcję continue? Co oznacza zapis if (x) ?
  2.   Dana jest funkcja foo

    double foo (double x, unsigned int n)
    {
      if (n == 0)
         return 1.0;

      while ((n & 1) == 0) {
         n >>= 1;
         x *= x;
      }

      double result = x;
      n >>= 1;
      while (n != 0) {
         x *= x ;
         if ((n & 1) != 0)
            result *= x;
         n >>= 1;
      }

      return result;
    }

    a.       Oblicz bez pomocy komputera foo(2.0, 0)

    b.   Oblicz bez pomocy komputera foo(-0.5, 2)

    c.   Oblicz bez pomocy komputera foo(2.0, 6)

    d.       Dlaczego foo(1.000000001, -1) w różnych implementacjach może mieć inną wartość?

    e.   Funkcja foo realizuje pewien standardowy algorytm (i możesz ją znaleźć w bibliotece standardowej języka C++ w pliku numeric). Czy domyślasz się, co to za algorytm?

  3. Napisz program, który wczytuje liczbę całkowitą n i wyświetla jej reprezentację w układzie dwójkowym.
  4. Napisz program, który wczytuje liczbę w reprezentacji dwójkowej i wyświetla jej wartość w układzie dziesiętnym.