Пятничные задачки

Добавил(а) Алексей Румянцев около 6 лет назад

Появилась идея давать вам маленькие задачки по шарпу, для общего развития так сказать:) Программировать ничего не надо, только подумать пару минут и дать ответ.
Если заинтересуетесь, то буду делать это регулярно.
Вообщем вот:
  1. есть такой кусок кода:
    Action action = null;
    for (int i = 0; i < 3; i++)
    {
      action += () => Console.Write(i);
    }
    action();
    

    Что будет выведено на консоль?
  2. Наверно все знают, что у нас в LinearAlgebra есть класс Vector, у него есть конструкторы Vector(int size) и Vector(params double[] data) и свойтво Size, возвращающее размерность вектора. Что будет выведено на консоль?
    Vector a = new Vector(4.0);
    Vector b = new Vector(1, 2, 3);
    Vector c = new Vector(2, 3);
    Vector d = new Vector(3);
    Console.Write("{0}{1}{2}{3}", a.Size, b.Size, c.Size, d.Size);
    

Ответы пишем тут в комментариях.


Ответы (28)

Comment

RE: Пятничные задачки - Добавил(а) Мария Семёнова около 6 лет назад

1. Странно, но напомнило конструкцию передачи аргументов в функцию в Maple. Мой ответ - "дырка":)

2. Может так:

Vector a = new Vector(4.0);
Vector b = new Vector(1, 2, 3);
Vector c = new Vector(2, 3);
Vector d = new Vector(3);  
Console.Write(String.Format("{0}{1}{2}{3}", a.Size, b.Size, c.Size, d.Size));
Ответ - 1, 3, 2, 3.

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

В Console.Write можно сразу писать строку форматирования и параметры, без String.Format. Так красивее и правильнее:)
Насчет правильности/неправильности ответов пока промолчу, пусть другие тоже чего-нибудь напишут.

Comment

RE: Пятничные задачки - Добавил(а) Аноним около 6 лет назад

1. Не понял, то есть я это не читал) но думаю что логично предположить 333, так как точно не 012, и точно будет работать и выдавать результат, так как Лёша не умеет писать не работающий код))
2. 1323

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Кто не залогинился? =)

Comment

RE: Пятничные задачки - Добавил(а) Мария Семёнова около 6 лет назад

Аноним! Покажи личико, кто ты?

Comment

RE: Пятничные задачки - Добавил(а) Екатерина Чимитова около 6 лет назад

А когда появятся правильные ответы? В следующую пятницу?

Comment

RE: Пятничные задачки - Добавил(а) Дёмин Виктор около 6 лет назад

Блин, ну известно кто))) Я уже не в первый раз не логинюсь)

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Екатерина Чимитова писал(а):

А когда появятся правильные ответы? В следующую пятницу?

Пусть будут, например, во вторник. Чтобы до следующей пятницы их можно было обсудить.

Comment

RE: Пятничные задачки - Добавил(а) Аноним около 6 лет назад

Во второй задачке ответ 1, 3, 2, 3.

Comment

RE: Пятничные задачки - Добавил(а) Александра Апонасович около 6 лет назад

Теперь я аноним)

Comment

RE: Пятничные задачки - Добавил(а) Аня Наумова около 6 лет назад

1. вроде 333
2. 1323

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Ура, ответы:)
В первом задании будет выведено 333 (хотя часто отвечают 012), кстати кто-нибудь может объяснить почему?
Во втором задании - 1323. Тут все просто, главное не перепутать, что для Vector(4.0) и Vector(3) вызовутся разные конструкторы.

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Ага, про замыкания все верно, полезно почитать и знать.
Вот еще пара задач. Что будет выведено в каждой из них?

1.

public class Point
{
}

public class ColorPoint : Point
{
}

public class Program
{
  public static void Function(Point p, ColorPoint cp)
  {
    Console.WriteLine("Point, ColorPoint");
  }

  public static void Function(ColorPoint p, Point cp)
  {
    Console.WriteLine("ColorPoint, Point");
  }

  public static void Main(string[] args)
  {
    ColorPoint cp = new ColorPoint();
    Function(cp, cp);
  }
}

2.

char a = 'a';
int b = 100;
Console.WriteLine(true ? a : b);

Comment

RE: Пятничные задачки - Добавил(а) Аноним около 6 лет назад

1. Вообще хочется явное приведение типа поставить.
2. a

Comment

RE: Пятничные задачки - Добавил(а) Мария Семёнова около 6 лет назад

1. Бывают sql-запросы, которыми можно убить. Этим куском кода можно нанести серьезные увечья. Я бы выдала ошибку или хоть предупреждение. Если все же что-нибудь выведется, то с вероятностью 50% - ColorPoint, Point.
2. Не просто 'a', а какой-нибудь код этого символа.

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Сорри, немного припозднился с ответами.
Первая задача не скомпилируется, потому что вызов Function(cp, cp) подходит под обе сигнатуры и компилятор не знает какую именно выбрать.
Во второй будет выведен числовой код символа 'а', то есть 97, так как произойдет преобразование к общему типу int.

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Вот пара задач на сегодня. Что будет выведено в каждой из них?

1.

public struct Struct
{
  public int A;

  public Struct(int a)
  {
    A = a;
  }
}

public class Class
{
  public int A;

  public Class(int a)
  {
    A = a;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Class c = new Class(1);
    Struct s = new Struct(2);

    object oc = c;
    object os = s;

    c.A = 3;
    s.A = 4;

    Console.Write("{0} {1}", ((Class)oc).A, ((Struct)os).A);
  }
}

2.

try
{
  Console.Write("A");
  return;
}
finally
{
  Console.Write("B");
}
Console.Write("C");

Comment

RE: Пятничные задачки - Добавил(а) Аноним около 6 лет назад

1. 3 2
2. AB и всё - конец программе.

Comment

RE: Пятничные задачки - Добавил(а) Мария Семёнова около 6 лет назад

ну теперь я не залогинилась)

Comment

RE: Пятничные задачки - Добавил(а) Алексей Румянцев около 6 лет назад

Все правильно, в первой 3 2, во второй AB.
Что-то нет ажиотажа среди отвечающих:)
Ладно, вот пара на сегодня:

1.

public class Factory<T>
{
  public static T CreateInstance()
  {
    return new T();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    int i = Factory<int>.CreateInstance();
    Console.Write(i);
  }
}

2.

int j = 0;
for (int i = 0; i < 10; i++);
{
  j++;
}
Console.Write(j);

Comment

RE: Пятничные задачки - Добавил(а) Александра Апонасович около 6 лет назад

А)))во втором будет 1)

Comment

RE: Пятничные задачки"'`-- - Добавил(а) Аноним 4 месяца назад

1

Comment

RE: Пятничные задачки - Добавил(а) Аноним 4 месяца назад

1

1 2 (1-25/28)

Ответить