игра брюс 2048
Главная / Программирование / C#: ООП и классы / Тест 1

C#: ООП и классы - тест 1

Упражнение 1:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) модификатор (спецификатор) protected определяет доступность вложенного класса коду производных классов 

 (2) модификатор (спецификатор) protected определяет, где доступен не вложенный класс или любой другой не вложенный тип 

 (3) модификатор (спецификатор) protected определяет доступность любого члена класса в производных классах в любом коде 

 (4) модификатор (спецификатор) protected определяет доступность любого члена класса в производных классах только в пределах включающей его сборки 

 (5) модификатор (спецификатор) protected нельзя применять к событиям 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) модификатор (спецификатор) internal определяет доступность класса в пределах включающей его сборки 

 (2) для определения доступности члена класса в других сборках необходимо указать модификатор (спецификатор) extern 

 (3) модификатор (спецификатор) internal определяет доступность любого члена класса во внешних сборках 

 (4) модификатор (спецификатор) internal определяет доступность любого члена класса в пределах включающей его сборки 

 (5) модификатор (спецификатор) internal нельзя применять к событиям 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) модификатор (спецификатор) protected internal определяет доступность вложенного класса любому коду включающей его сборки или коду производных классов в любых сборках 

 (2) модификатор (спецификатор) protected internal определяет, где доступен не вложенный тип 

 (3) модификатор (спецификатор) protected internal определяет доступность любого члена класса в производных классах любой сборки или в коде включающей его сборки 

 (4) модификатор (спецификатор) protected internal определяет доступность любого члена класса любому коду включающей его сборки или коду производных классов в любых сборках 

 (5) модификатор (спецификатор) protected internal определяет доступность любого члена класса только коду производных классов внешних сборок  


Номер 4
  

Определяемый программистом тип может быть


Ответ:

 (1) классом 

 (2) одномерным массивом 

 (3) делегатом 

 (4) строкой символов 

 (5) событием 


Номер 5
  

Определяемый программистом тип может быть


Ответ:

 (1) файлом 

 (2) структурой 

 (3) перечислением 

 (4) указателем 

 (5) многомерным массивом 


Номер 6
  

Определяемый программистом тип может быть


Ответ:

 (1) cтеком 

 (2) cписком 

 (3) очередью 

 (4) классом 

 (5) интерфейсом 


Упражнение 2:
Номер 1
Из приведенных ниже высказываний укажите истинное высказывание:

Ответ:

 (1) если метод описывается вне класса, то в классе должен быть указан его прототип 

 (2) если метод не возвращает значение, то он должен иметь модификатор (спецификатор) virtual 

 (3) для вызова метода можно не создавать экземпляр (объект) класса только в том случае, если метод вызывается внутри класса 

 (4) метод может иметь пустое тело 

 (5) метод должен возвращать какое-либо значение 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) если переменная описывается вне класса, то она является глобальной 

 (2) если метод не возвращает значение, то он должен иметь модификатор (спецификатор) abstract 

 (3) для вызова метода необходимо создавать экземпляр (объект) класса, если метод не является статическим или не вызывается внутри своего класса 

 (4) метод не обязан возвращать управление оператору, следующему после оператора вызова 

 (5) из тела метода можно выйти с помощью оператора goto 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) если метод описывается вне класса, то этот метод становится доступным из любого кода сборки 

 (2) члены класса с модификатором (спецификатором) private недоступны методам этого же класса 

 (3) для вызова метода можно не создавать экземпляр (объект) класса только в том случае, если метод является статическим или метод вызывается внутри класса 

 (4) метод, не возвращающий значение, должен вызываться отдельным оператором (не входящим в состав выражения) 

 (5) метод, возвращающий значение, должен входить в состав выражения 


Номер 4
  

В заголовке определяемого не вложенного типа программист может указать доступность типа с помощью модификатора:


Ответ:

 (1) internal 

 (2) protected 

 (3) private 

 (4) static 

 (5) abstract 


Номер 5
  

В заголовке определяемого не вложенного типа программист может указать доступность типа


Ответ:

 (1) с помощью модификатора override 

 (2) с помощью модификатора protected 

 (3) с помощью модификатора private 

 (4) с помощью модификатора new 

 (5) по умолчанию 


Номер 6
Программист определил тип как
  
class MyOut {}
  
  
  

Тип MyOut будет доступен


Ответ:

 (1) из любого класса любого компоновочного блока 

 (2) из любого класса внутри компоновочного блока, в котором MyOut определен 

 (3) только из классов с модификатором public 

 (4) только из классов с модификатором internal 

 (5) только из классов, у которых доступность указана по умолчанию 


Упражнение 3:
Номер 1
Сборка Assembly2.cs, приведенная ниже:
  
class Test3
{   static void Main()
    {   ClassUser user = new ClassUser(); 
         int  count = user.count;  System.Console.Write("count=" + count);
    }
}
  
  ссылается на подключенную сборку Assembly1.cs, которая имеет следующий код:
  
internal class ClassUser
{   public int  count = 10; }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполнится, так как сборка Assembly2.cs создает объект user, в то время как класс ClassUser не принадлежит сборке Assembly2.cs 

 (2) count=0 

 (3) count=10 

 (4) будет выдано сообщение об ошибке компиляции, так как класс ClassUser недоступен в соответствии с его модификатором доступа 


Номер 2
Исходный модуль содержит код:
  
protected internal class A
{ public int x = 123; }

class B : A
{
    static void Main()
    {
        A a = new A();
        int i = a.x = 10;
        B b = new B();
        int j = b.x = 20;
        System.Console.Write("a.x={0} b.x={1}", i, j); 
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) a.x=20 b.x=10 

 (2) a.x=20 b.x=20 

 (3) a.x=10 b.x=20 

 (4) a.x=10 b.x=10 

 (5) программа не выполнится, так как класс A не может иметь модификатор protected internal 


Номер 3
Исходный модуль содержит код:
  
protected class A
{ int x = 123; }

class B : A
{  static void Main()
    {  A a = new A();
        int i = a.x = 10;
        B b = new B();
        int j = b.x = 20;
        System.Console.Write("a.x={0} b.x={1}", i, j); 
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) a.x=20 b.x=20 

 (3) a.x=10 b.x=20 

 (4) a.x=10 b.x=10 

 (5) программа не выполнится, так как класс A не может иметь модификатор protected 


Номер 4
Исходный модуль содержит код:
  
   internal class Point
    {
        public double x,y;  //координаты точки
        public Point(double x, double y) { this.x = x; this.y = y; }
        public void Move(double d){ x+=d; y+=d;}
    }
   class Program
    {
        static void Main()
        {
            Point p = new Point();
            p.Move(2);
            System.Console.Write("{0} {1}",p.x, p.y);
        }
    }
  
  Метод Main разрабатывался для перемещения точки по обеим координатам на 2.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) значение полей x и y не определено 

 (2) статический метод Main не может обращаться к полям объекта 

 (3) тип Point не доступен из класса Program 

 (4) поля x и y не доступны из класса Program 

 (5) в классе Point не определен конструктор без параметров 


Номер 5
Исходный модуль содержит код:
  
  internal class Point
    {
        public double x,y;
        public Point(double x, double y) { this.x = x; this.y = y; }
        public static void Move(double d){ x+=d; y+=d;}
    }
  class Program
    {
        static void Main()
        {
            Point p = new Point(1,1);
            Point.Move(2);
        }
    }
  
  Метод Main разрабатывался для перемещения точки по обеим координатам на 2.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) значение полей x и y не определено 

 (2) метод Move не может обращаться к полям объекта 

 (3) тип Point не доступен из класса Program 

 (4) метод Move должен вызываться как метод объекта, а не метод класса 

 (5) в классе Point не определен конструктор без параметров 


Номер 6
Исходный модуль содержит код:
  
    internal class Point
    {
        public double x,y;
        public Point(double x, double y) { this.x = x; y = y; }
        public void Move(double d){ x+=d; y+=d;}
    }
    class Program
    {
        static void Main()
        {
            Point p = new Point(1,1);
            p.Move(1);
            System.Console.Write("{0} {1}", p.x, p.y);
        }
    }
  
  Метод Main разрабатывался для перемещения точки по обеим координатам на 1.
  

При запуске программы выведены значения 2 1 вместо ожидаемых значений 2 2. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) значение полей x и y не определено 

 (2) значение поля y может быть изменено только конструктором 

 (3) локальная переменная y скрывает поле y 

 (4) метод Move должен вызываться как метод объекта, а не метод класса 

 (5) в классе Point не определен конструктор без параметров 


Упражнение 4:
Номер 1
Исходный модуль содержит код:
  
internal class Rectangle
{  public double width, hight;  
    public void Zoom(double d)
    { width += d; hight += d; }
    public void Rectangle(double width, double hight) 
    { this.width = width; this.hight = hight; }
}
class Program
{  static void Main()
    { Rectangle p = new Rectangle(10, 20);
        p.Zoom(-5);
        System.Console.Write("{0} {1}", p.width, p.hight);
}   }
  
  Метод Main разрабатывался для изменения размера прямоугольника.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) значение полей width и hight не определено 

 (2) статический метод Main не может обращаться к полям объекта 

 (3) тип Rectangle не доступен из класса Program 

 (4) в конструкторе не должно быть ключевого слова void 

 (5) в классе Rectangle не определен конструктор без параметров 


Номер 2
Исходный модуль содержит код:
  
internal class Rectangle
{  public double width, hight;  
    public void Zoom(double d)
    { width += d; hight += d; }
    public int Rectangle(double width, double hight) 
    { this.width = width; this.hight = hight; return width * hight;}
}
class Program
{  static void Main()
    { Rectangle p = new Rectangle(10, 20);
        p.Zoom(-5);
        System.Console.Write("{0} {1}", p.width, p.hight);
}   }
  
  Метод Main разрабатывался для изменения размера прямоугольника.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) метод Zoom должен вызываться как метод класса, а не метод объекта 

 (2) статический метод Main не может обращаться к полям объекта 

 (3) конструктор не может возвращать значение 

 (4) тип значения, возвращаемого методом Rectangle, должен быть double 

 (5) конструктор не может следовать за методами класса 


Номер 3
Исходный модуль содержит код:
  
class Rectangle
{  public double width, hight;
    public Rectangle()  { width = 40; hight = 80; }
    static Rectangle()   { width = 100; hight = 200; }
    public void Zoom(double d)  { width += d; hight += d; }
}
class Program
{   static void Main()
    {  Rectangle p;
        p = new Rectangle();
        p = new Rectangle();
        p.Zoom(15);
        System.Console.Write("{0} {1}", p.width, p.hight);
    }
}
  
  Метод Main разрабатывался для изменения размера прямоугольника.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) статический конструктор в классе Rectangle не может использовать нестатические поля 

 (2) в классе Rectangle не могут быть одновременно определены статический и нестатический конструкторы с одинаковой сигнатурой 

 (3) у нестатического конструктора в классе Rectangle отсутствует модификатор (спецификатор) доступа public 

 (4) тип значения, возвращаемого конструктором Rectangle, должен быть void 

 (5) в методе Main предпринята попытка создать объект дважды 


Номер 4
Исходный модуль содержит код классов MyMessage и Program.
  
class MyMessage
{
    private static string msg = "Назад!";
    public MyMessage(string s) { msg = s; } 
    public MyMessage() { }
    public string Msg() { return msg; } 
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
MyMessage m1 = new MyMessage("Ура!");
MyMessage m2 = new MyMessage("Вперед!");
MyMessage m3 = new MyMessage();
System.Console.Write(m1.Msg() + m2.Msg() + m3.Msg());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) Ура!Вперед!Назад! 

 (2) Ура!Вперед! 

 (3) Вперед! Вперед! Вперед! 

 (4) Назад! Назад! Назад! 


Номер 5
Исходный модуль содержит код классов MyMessage и Program.
  
class MyMessage
{
    public string msg = "Назад!";
    public MyMessage(string s) { msg = s; } 
    public MyMessage() { }
    public string Msg() { return msg; } 
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
MyMessage m1 = new MyMessage("Вперед!");
MyMessage m2 = new MyMessage("Ура!");
MyMessage m3 = m1;
m1.msg = "Ура!";
System.Console.Write(m1.Msg() + m2.Msg() + m3.Msg());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) Ура!Ура!Ура! 

 (2) Ура! Ура!Вперед! 

 (3) Вперед!Ура!Ура! 

 (4) Назад!Ура!Назад! 


Номер 6
Исходный модуль содержит код классов MyMessage и Program.
  
class MyMessage
{
    private readonly string msg = "Ура!";
    public MyMessage(string s) { msg = s; }
    public MyMessage() { msg = "Вперед"; }
    public string Msg() { return msg; } 
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
MyMessage m1 = new MyMessage("Назад!");
MyMessage m2 = new MyMessage();
MyMessage m3 = new MyMessage("Назад!");
System.Console.Write(m1.Msg() + m2.Msg() + m3.Msg());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) программа не корректна: попытка изменить переменную, доступную только по чтению 

 (2) Назад! Ура!Вперед! 

 (3) Назад!Вперед!Назад! 

 (4) Назад!Ура!Назад! 


Упражнение 5:
Номер 1
Исходный модуль содержит код:
  
class Rectangle
{  double width=15, hight=10, s;
    string t = "прямоугольник";
    public Rectangle(double w, double h) { width = w; hight = h; s = w * h; }
    public Rectangle(int w, int h) { width *= w; hight*=h; s = width * hight; }
    public string RectForm() { return string.Format("{0}: площадь={1}.  ", t, s); }
}
class Program
{  static void Main()
    { Rectangle k = new Rectangle(2, 3); Rectangle t = new Rectangle(3, 4.0);
       System.Console.Write(k.RectForm() + t.RectForm());
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) прямоугольник: площадь=900. прямоугольник: площадь=12 

 (2) прямоугольник: площадь=900. прямоугольник: площадь=1800 

 (3) прямоугольник: площадь=6. прямоугольник: площадь=1800 

 (4) прямоугольник: площадь=6. прямоугольник: площадь=12 

 (5) программа завершится аварийно, так как конструкторы имеют одинаковое количество параметров 


Номер 2
Исходный модуль содержит код:
  
class Rectangle
{  double width=15, hight=10, s;
    string t = "прямоугольник";
    public Rectangle(double w, double h) { width = w; hight = h; s = w * h; }
    public Rectangle(int k) { width *= k; hight *= k; s = width * hight; }
    public Rectangle(double side) : this(side, side) { t = "квадрат"; }
    public string RectForm() { return string.Format("{0}: площадь={1}.  ", t, s); }
}
class Program
{  static void Main()
    {    Rectangle k = new Rectangle(2); Rectangle t = new Rectangle(20.0);
          System.Console.Write(k.RectForm() + t.RectForm());
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) прямоугольник: площадь=4. квадрат: площадь=400 

 (2) прямоугольник: площадь=600. прямоугольник: площадь=6000 

 (3) прямоугольник: площадь=600. квадрат: площадь=400 

 (4) программа завершится аварийно, так как третий конструктор не вычисляет площадь 


Номер 3
Исходный модуль содержит код:
  
class Rectangle
{  double width=0.0, hight=0.0, s=0.0;
    string t = "Прямоугольник";
    public Rectangle(double w, double h) { width = w; hight = h; s = w * h; }
    public Rectangle(double side) : this(side, side) { t = "Квадрат"; }
    public Rectangle() : this(1.0, 1.0) { t = "Точка"; }
    public string RectForm() { return string.Format("{0}: площадь={1}  ", t, s); }
}
class Program
{    static void Main()
    {  Rectangle k = new Rectangle(10);    Rectangle t = new Rectangle();
        System.Console.Write(k.RectForm() + t.RectForm());
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) квадрат: площадь=0; точка: площадь=1 

 (2) квадрат: площадь=0; точка: площадь=0 

 (3) квадрат: площадь=100; точка: площадь=1 

 (4) программа завершится аварийно, так как вызываемые конструкторы не вычисляют площадь 


Номер 4
Программа предназначена для вывода на консоль строки СИДОРОВ:
  
namespace Message
{
  class MyPrint{ public static string View(){return "КОЗЛОВ";}}
}   
namespace OutPut
{
  class MyPrint { public static string View(){return "СИДОРОВ";}}
}   
class Program
{ 
   static void Main(string[] args)
   {     System.Console.Write(  _____________  );   }
}
  
  Среди приведенных ниже кодов укажите код, которым необходимо заменить знаки подчеркивания для получения корректной программы, решающей  поставленную задачу:
  

Ответ:

 (1) OutPut.View() 

 (2) MyPrint.View()::OutPut 

 (3) OutPut.MyPrint.View() 

 (4) OutPut::MyPrint.View() 

 (5) this.MyPrint.View() 


Номер 5
При выполнении метода Main необходимо создать объект класса Car со следующими атрибутами: заводской номер - 143155, марка - ГАЗ-3102.
  
 class Car
 {
    int nom;         //Заводской номер
    string mark;   //Марка 
    public Car(int nom) { this.nom = nom; }
    public Car(int nom,string mark):_________
        { this.mark = mark; }
 }
class Program
{
   static void Main()
   {
       Car car = new Car(143155,"ГАЗ-3102");
   }
}
  
  Среди приведенных ниже кодов укажите код, которым необходимо заменить знаки подчеркивания для получения корректной программы, решающей  поставленную задачу:
  

Ответ:

 (1) base(nom) 

 (2) base() 

 (3) Car(nom) 

 (4) this(nom) 

 (5) nom 


Номер 6
При выполнении метода Main необходимо создать объект класса Clock со следующими атрибутами: заводской номер - 3355, марка - ПОЛЕТ. 
  
class Clock
 {
    int nom;                   //Заводской номер
    static string mark;   //Марка  
    public Clock(int nom) { this.nom = nom; }
    public Clock() { nom = 3355; }
    static Clock() { mark = "ПОЛЕТ"; }
 }
class Program
{
   static void Main()
   {       Clock c = ________________;      }
}
  
  Среди приведенных ниже кодов укажите все коды, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, решающую  поставленную задачу:
  

Ответ:

 (1) new Clock(3355) 

 (2) Clock(3355) 

 (3) Clock(3355,"ПОЛЕТ") 

 (4) new Clock(3355,"ПОЛЕТ") 

 (5) new Clock()


Упражнение 6:
Номер 1
Укажите модификатор метода, который позволяет для его вызова из других классов не создавать объект:

Ответ:

 (1) virtual 

 (2) protected 

 (3) public 

 (4) partial 

 (5) static 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) инкапсуляция предполагает сокрытие полей класса 

 (2) свойство - это одна или две специальные функции, доступные для чтения и/или записи 

 (3) свойство - это набор параметров, характеризующих состав класса 

 (4) свойство не может иметь модификатор private, так как оно не будет доступно извне 

 (5) свойство может быть статическим 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) индексатор не может быть статическим 

 (2) индекс, используемый в качестве параметра индексатора, должен быть числом 

 (3) индексатор может быть создан только в случае наличия у класса скрытого массива 

 (4) индексатор не может иметь модификатор private, так как оно не будет доступно извне 

 (5) индексатор - это одна или две специальные функции, доступные для чтения и/или записи и получающие в качестве параметров один или несколько индексов 


Номер 4
Доступность метода из других классов может быть указана с помощью модификатора:
  

Ответ:

 (1) sealed 

 (2) protected 

 (3) private 

 (4) partial 

 (5) abstract 


Номер 5
Доступность метода из других классов может быть указана:
  

Ответ:

 (1) по умолчанию 

 (2) с помощью модификатора public 

 (3) с помощью модификатора static 

 (4) с помощью модификатора protected 

 (5) с помощью модификатора override  


Номер 6
Доступность поля из других классов может быть указана:
  

Ответ:

 (1) по умолчанию 

 (2) с помощью модификатора new 

 (3) с помощью модификатора out 

 (4) с помощью модификатора protected 

 (5) с помощью модификатора private 


Упражнение 7:
Номер 1
Исходный модуль содержит код:
  
class A
{  private int b;
    public  static int B
    {  get { return b*b; }    set { b = value; }  }
}
public class Test
{   public static void Main()
    {       A.B = 5;
    System.Console.Write(A.B);
    }
}
  
  Метод Main разрабатывался для вывода квадрата числа 5.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) свойство B не может быть статическим 

 (2) статическое свойство B использует нестатическое поле 

 (3) для использования свойства В должен быть создан объект класса А 

 (4) значение поля b не определено 

 (5) поле b недоступно для использования в свойстве 


Номер 2
Исходный модуль содержит код:
  
class A
{
    private static double a;
    public static double this[double i]
    {  get { return System.Math.Pow(2.0, i); }
        set { a = value; }
    }
}
public class Test
{   public static void Main()
    {
        A[3] = 4;  double c = A[3];
        System.Console.Write(c);
    }
}
  
  Метод Main разрабатывался для вывода степени числа 2.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) класс А не может состоять только из статических членов 

 (2) для использования индексатора должен быть создан объект класса А 

 (3) индексатор не может быть статическим 

 (4) в индексаторе не используется массив 

 (5) класс А должен содержать массив для его использования в индексаторе 


Номер 3
Исходный модуль содержит код:
  
class A
{
    private static int b;
    public static int B
    { get { return b * b; } set { b = value; } }
}
public class Test
{
    public static void Main()
    {
        A a = new A();
        a.B = 5;
        System.Console.Write(a.B);
    }
}
  
  Метод Main разрабатывался для вывода квадрата числа 5.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) свойство B не может быть статическим 

 (2) класс А не может состоять только из статических членов 

 (3) значение поля b не определено 

 (4) для создания объекта класс А должен содержать конструктор 

 (5) свойство B не может быть доступно через ссылку на объект класса 


Номер 4
Исходный модуль содержит код:
  
class MyOut
{
   public  int A = 555;
               int B;
   public  int View() { return A + B; }
}
class Program
{
    static void Main()
    {
        MyOut mout = new MyOut();
        System.Console.Write(mout.A + mout.B);
    }
}
  
  Метод Main разрабатывался для получения суммы полей A и B объекта класса MyOut.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) значение поля B не определено 

 (2) статический метод Main не может обращаться к полям объекта 

 (3) поле B закрыто для доступа из других классов 

 (4) тип MyOut не доступен из класса Program 

 (5) в классе MyOut не определен конструктор без параметров 


Номер 5
Исходный модуль содержит код:
  
class MyOut
{
   int A,B=777;
   int View() { return A + B; }
}
class Program
{
    static void Main()
    {
        MyOut mout = new MyOut();
        System.Console.Write(mout.View());
    }
}
  
  Метод Main разрабатывался для получения суммы полей A и B объекта класса MyOut.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) поля A и B закрыты для доступа из других классов 

 (2) значение поля A не определено 

 (3) вызов метода View() должен содержать не имя объекта, а имя класса MyOut 

 (4) в классе MyOut не определен конструктор без параметров 

 (5) метод View() закрыт для доступа из других классов 


Номер 6
Исходный модуль содержит код:
  
class MyOut
{
   protected static int A = 999;
   protected int B;
   public static int View() { return A; }
}
class Program
{
    static void Main()
    {
        MyOut mout = new MyOut();
        System.Console.Write(mout.View() + mout.B);
    }
}
  
  Метод Main разрабатывался для получения суммы полей A и B объекта класса MyOut.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) поле A недоступно из класса Program 

 (2) в классе MyOut не определен конструктор без параметров 

 (3) тип MyOut не доступен из класса Program 

 (4) поле B недоступно из класса Program 

 (5) значение поля B не определено 


Упражнение 8:
Номер 1
Исходный модуль содержит код:
  
class Сотрудник
{
    private int id;
    private float зарплата;
    public Сотрудник(int i, float z) { id = i; зарплата = z; }
    public float Зарплата(int номер)  {   return номер < id ? зарплата : -1; }
    public void Зарплата(int номер, ref float зарпл)
    {   if (номер < id)
        {  float зрпл = зарплата;
            зарплата = зарпл;   зарпл = зрпл;
 } }  }
class Program
{   static void Main()
    {  Сотрудник Иванов = new Сотрудник(12, 40000.0f);
        float z = 45000.0f; Иванов.Зарплата(10, ref z);
        System.Console.Write("Зарплата Иванова = " + z);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) 40000 

 (2) 45000 

 (3) 20000 

 (4) -1 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Исходный модуль содержит код:
  
class Сотрудник
{  private int id;
    private float зарплата = 20000;
    public Сотрудник(int i, float z) { id = i; зарплата = z; }
    public float Зарплата(int номер)  {   return номер < id ? зарплата : -1; }
    public void Зарплата(int номер, ref float зарпл)
    {   if (номер < id)
        {  float зрпл = зарплата;
            зарплата = зарпл;   зарпл = зрпл;
 } }  }
class Program
{   static void Main()
    {  Сотрудник Иванов = new Сотрудник(12, 40000.0f);
        float z = 45000.0f; Иванов.Зарплата(10, ref z);
        System.Console.Write("Зарплата Иванова = " + Иванов.Зарплата(8));
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) 40000 

 (2) 20000 

 (3) 45000 

 (4) -1 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Сборка Assembly2.cs, приведенная ниже:
  
public class Test3
{   static void Main()
    {  ClassUser user = new ClassUser ();   
        int  count = ClassUser. count = 112;  
        System.Console.Write ("count=" + count);
    }
}
  
  ссылается на подключенную сборку Assembly1.cs, которая имеет следующий код:
  
public class ClassUser
{   internal static int  count = 10; }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) count=10 

 (2) программа не выполнится, так как сборка Assembly2.cs создает объект user, в то время как класс ClassUser не принадлежит сборке Assembly2.cs 

 (3) будет выдано сообщение об ошибке компиляции, так как нельзя работать с недоступным в соответствии с модификатором полем count 

 (4) count=112 

 (5) будет выдано сообщение об ошибке компиляции, так как нельзя создать объект класса ClassUser, содержащего недоступное в соответствии с модификатором поле count 


Номер 4
Исходный модуль содержит код:
  
class Сотрудник
{
    private int id;
    private float зарплата;
    public Сотрудник(int i, float z) { id = i; зарплата = z; }
    public float Зарплата(int номер)  {   return номер < id ? зарплата : -1; }
    public void Зарплата(int номер, ref float зарпл)
    {   if (номер < id)
        {  float зрпл = зарплата;
            зарплата = зарпл;   зарпл = зрпл;
 } }  }
class Program
{   static void Main()
    {  Сотрудник Иванов = new Сотрудник(12, 40000.0f);
        float z = 45000.0f; Иванов.Зарплата(10, ref z);
        System.Console.Write("Зарплата Иванова = " + Иванов.Зарплата(12));
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) 40000 

 (2) 45000 

 (3) 20000 

 (4) -1 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 5
Исходный модуль содержит код:
  
class Room
    {
        private int nom1;  
        public  int nom2; 
        public Room(int a, int b){ nom1 = a; nom2 = b; }
        public int Nom
        {
            get { return nom1 * 100 + nom2; }
            set { if (value<5555) {nom1 = value/100; nom2 = value%100; }}
        }
    }
    class Program
    {
        static void Main()
        {
            Room r = new Room(65,98);
            r.Nom = 6712;
            System.Console.Write("{0}  ",  r.Nom);
        }
    }
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 6598 

 (2) 6712 

 (3) 6512 

 (4) 6798 


Номер 6
Исходный модуль содержит код:
  
class Room
    {
        private int nom1;  
        public  int nom2; 
        public Room(int a, int b){ nom1 = a; nom2 = b; }
        public int Nom
        {
            get { return nom1 * 100 + nom2; }
            set { if (value<5555) {nom1 = value/100; nom2 = value%100; }}
        }
    }
    class Program
    {
        static void Main()
        {
            Room r = new Room(12,45);
            r.Nom = 4431;
            System.Console.Write("{0}  ",  r.Nom);
        }
    }
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 1231 

 (2) 1245 

 (3) 4431 

 (4) 4445 


Номер 7
Исходный модуль содержит код:
  
class Room
    {
        public int nom1;  
                   int nom2; 
        public Room(int a, int b){ nom1 = a; nom2 = b; }
        public int Nom
        {
            get { return nom1 * 100 + nom2; }
            set { if (value<5555) {nom1 = value/100; nom2 = value%100; }}
        }
    }
    class Program
    {
        static void Main()
        {
            Room r = new Room(21,56);
            r.nom1 = 77;
            System.Console.Write("{0}  ", r.Nom);
        }
    }
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 2156 

 (2) 2177 

 (3) 7721 

 (4) 7756 


Упражнение 9:
Номер 1
Программа предназначена для присвоения переменной r класса B значения 4 :
  
class A
{  public B b = null;
    public A()
    {   B b = new B();  }
    public class B
    {  static public int r;
        public int t;
}   }
class Test
{    public static void Main()
    {  A a = new A();
        ___________
    }
}
  
  Среди приведенных ниже кодов укажите код, которым необходимо заменить знаки подчеркивания для получения корректной программы, решающей  поставленную задачу:
  

Ответ:

 (1) a.B.r = 4; 

 (2) A.B.r = 4; 

 (3) a.b.r = 4; 

 (4) A.b.r = 4; 

 (5) B.r = 4; 


Номер 2
Программа предназначена для присвоения переменной t класса B значения 8 :
  
class A
{  public B b = null;
    public A()
    {   B b = new B();  }
    public class B
    {  static public int r;
        public int t;
}   }
class Test
{    public static void Main()
    {  A a = new A();
        ___________
    }
}
  
  Среди приведенных ниже кодов укажите код, которым необходимо заменить знаки подчеркивания для получения корректной программы, решающей  поставленную задачу:
  

Ответ:

 (1) a.B.t = 8; 

 (2) A.B.t = 8; 

 (3) a.b.t = 8; 

 (4) A.b.t = 8; 

 (5) b.t = 8; 


Номер 3
Программа предназначена для присвоения переменной t класса B значения 8 :
  
class A
{  static public B b = null;
    public A()
    {   B b = new B();  }
    public class B
    {  static public int r;
        public int t;
}   }
class Test
{    public static void Main()
    {  A a = new A();
        ___________
    }
}
  
  Среди приведенных ниже кодов укажите код, которым необходимо заменить знаки подчеркивания для получения корректной программы, решающей  поставленную задачу:
  

Ответ:

 (1) a.B.t = 8; 

 (2) A.B.t = 8; 

 (3) a.b.t = 8; 

 (4) A.b.t = 4;  

 (5) B.t = 8; 


Номер 4
Исходный модуль содержит код:
  
class ЧЕЛОВЕК
    {
        class ПАСПОРТ {}  
        class ДОЛЖНОСТЬ {} 
    }   
    class Program
    {
        static void Main() { ______  P; }
    }
  
  В методе Main требуется объявить ссылку P на тип ДОЛЖНОСТЬ. Среди приведенных ниже вариантов ответов укажите истинный вариант:
  

Ответ:

 (1) вместо знаков подчеркивания укажите ЧЕЛОВЕК 

 (2) вместо знаков подчеркивания укажите ЧЕЛОВЕК.ДОЛЖНОСТЬ 

 (3) вместо знаков подчеркивания укажите ДОЛЖНОСТЬ 

 (4) вместо знаков подчеркивания укажите ЧЕЛОВЕК.ПАСПОРТ.ДОЛЖНОСТЬ 

 (5) объявить требуемую ссылку в методе Main невозможно 


Номер 5
Исходный модуль содержит код:
  
class ЧЕЛОВЕК
    {
        class ПАСПОРТ {}  
        public class ДОЛЖНОСТЬ {} 
    }   
    class Program
    {
        static void Main() { ______  P; }
    }
  
  В методе Main требуется объявить ссылку P на тип ДОЛЖНОСТЬ. Среди приведенных ниже вариантов ответов укажите истинный вариант:
  

Ответ:

 (1) вместо знаков подчеркивания укажите ЧЕЛОВЕК 

 (2) вместо знаков подчеркивания укажите ЧЕЛОВЕК.ДОЛЖНОСТЬ 

 (3) вместо знаков подчеркивания укажите ДОЛЖНОСТЬ 

 (4) вместо знаков подчеркивания укажите ПАСПОРТ.ДОЛЖНОСТЬ 

 (5) объявить требуемую ссылку в методе Main невозможно 


Номер 6
Исходный модуль содержит код:
  
class ЧЕЛОВЕК
    {
        public class ПАСПОРТ {}  
        public class ДОЛЖНОСТЬ {} 
    }   
    class Program
    {
        static void Main() { ______  P; }
    }
  
  В методе Main требуется объявить ссылку P на тип ПАСПОРТ. Среди приведенных ниже вариантов ответов укажите истинный вариант:
  

Ответ:

 (1) вместо знаков подчеркивания укажите ЧЕЛОВЕК 

 (2) вместо знаков подчеркивания укажите ПАСПОРТ 

 (3) вместо знаков подчеркивания укажите ЧЕЛОВЕК.ПАСПОРТ 

 (4) вместо знаков подчеркивания укажите ЧЕЛОВЕК.ДОЛЖНОСТЬ.ПАСПОРТ 

 (5) объявить требуемую ссылку в методе Main невозможно 


Упражнение 10:
Номер 1
  Язык С# допускает
  

Ответ:

 (1) наследование классом нескольких классов 

 (2) наследование классом нескольких интерфейсов 

 (3) наследование классом делегата 

 (4) наследование классом структуры 

 (5) наследование структурой класса 


Номер 2
  Класс, в заголовке которого указан модификатор sealed:
  

Ответ:

 (1) допускает наследование другого класса 

 (2) не может быть унаследован другим классом 

 (3) может быть унаследован другим классом в текущей сборке 

 (4) может быть унаследован структурой 

 (5) может быть унаследован другим классом во внешней сборке 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) System.Object - это статический объект класса System 

 (2) System.Object - это класс, являющийся базовым для всех остальных классов 

 (3) базовый класс должен иметь конструктор без параметров, если в производном классе определен конструктор с параметрами и без ключевого слова base 

 (4) производный класс не накладывает каких-либо требований на состав конструкторов базового класса 

 (5) если в производном классе нет явно определенных конструкторов, то в базовом классе должен быть конструктор без параметров 


Номер 4
  

Класс, в заголовке которого указан модификатор public:


Ответ:

 (1) может быть предком для нескольких классов - прямых потомков 

 (2) может иметь только один класс в качестве прямого предка 

 (3) определяет все поля класса как общедоступные 

 (4) определяет все методы класса как общедоступные 

 (5) может иметь несколько классов в качестве прямых предков 


Номер 5
  

Класс, в заголовке которого указан модификатор sealed:


Ответ:

 (1) может быть предком только для одного класса - прямого потомка 

 (2) является базовым классом и не может иметь предков 

 (3) определяет все поля и методы класса как защищенные 

 (4) может иметь не более одного класса в качестве прямого предка 

 (5) является изолированным классом и не может иметь потомков 


Номер 6
  

Класс, в заголовке которого указан модификатор internal:


Ответ:

 (1) может иметь несколько классов в качестве прямых предков 

 (2) является базовым классом и не может иметь предков 

 (3) определяет все поля и методы класса как закрытые 

 (4) может быть предком для нескольких классов - прямых потомков 

 (5) является изолированным классом и не может иметь потомков 


Упражнение 11:
Номер 1
Исходный модуль содержит код:  
  
class A
{ protected internal int x = 123; }

class B : A
{
    static void Main()
    {  A a = new A();
        int i = a.x = 10;
        B b = new B();
        int j = b.x = 20;
        System.Console.Write("a.x={0} b.x={1}", i, j); 
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) a.x=20 b.x=20 

 (3) a.x=10 b.x=20 

 (4) a.x=10 b.x=10 

 (5) программа не выполнится, так как поле x класса А недоступно в классе В 


Номер 2
Исходный модуль содержит код:
  
class A
{ protected int x = 123; }
class B : A
{
    static void Main()
    {  A a = new A();
        int i = a.x = 10;
        B b = new B();
        int j = b.x = 20;
        System.Console.Write("a.x={0} b.x={1}", i, j); 
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) a.x=10 b.x=10 

 (3) a.x=10 b.x=20 

 (4) a.x=20 b.x=20 

 (5) программа не выполнится, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Исходный модуль содержит код:
  
sealed class A
{ public int x = 123; }

class B : A
{   static void Main()
    {
        A a = new A();
        int i = a.x = 10;
        B b = new B();
        int j = b.x = 20;
        System.Console.Write("a.x={0} b.x={1}", i, j); 
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) a.x=10 b.x=10 

 (3) a.x=10 b.x=20 

 (4) a.x=20 b.x=20 

 (5) программа не выполнится, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Исходный модуль содержит код:  
  
    class ПРИБОР 
    {   public ПРИБОР() { System.Console.Write("ПРИБОР "); }   }
    class ПРИЕМНИК : ПРИБОР
    {   public ПРИЕМНИК() { System.Console.Write("ПРИЕМНИК "); }   }
    class ТЕЛЕВИЗОР : ПРИЕМНИК
    {   public ТЕЛЕВИЗОР() { System.Console.Write("ТЕЛЕВИЗОР "); }  }
    class Program
    {
       static void Main()  {   ПРИБОР  P = new ТЕЛЕВИЗОР();       }
    }
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) ПРИБОР 

 (2) ПРИБОР ТЕЛЕВИЗОР 

 (3) ПРИБОР ПРИЕМНИК ТЕЛЕВИЗОР 

 (4) ТЕЛЕВИЗОР 


Номер 5
Исходный модуль содержит код:
  
    class ПРИБОР 
    {   public ПРИБОР() { System.Console.Write("ПРИБОР "); }   }
    class ПРИЕМНИК : ПРИБОР
    {   public ПРИЕМНИК() { System.Console.Write("ПРИЕМНИК "); }   }
    class ТЕЛЕВИЗОР : ПРИЕМНИК
    {   public ТЕЛЕВИЗОР() { System.Console.Write("ТЕЛЕВИЗОР "); }  }
    class Program
    {
       static void Main()  { ПРИБОР  P = new ПРИЕМНИК();  }
    }
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) ПРИЕМНИК 

 (2) ПРИБОР ПРИЕМНИК 

 (3) ПРИБОР ПРИЕМНИК ТЕЛЕВИЗОР 

 (4) ТЕЛЕВИЗОР 


Номер 6
Исходный модуль содержит код:
  
    class ПРИБОР 
    {   public ПРИБОР() { System.Console.Write("ПРИБОР "); }   }
    class ПРИЕМНИК : ПРИБОР
    {   public ПРИЕМНИК() { System.Console.Write("ПРИЕМНИК "); }   }
    class ТЕЛЕВИЗОР : ПРИБОР
    {   public ТЕЛЕВИЗОР() { System.Console.Write("ТЕЛЕВИЗОР "); }  }
    class Program
    {
       static void Main()  { ПРИБОР  P = new ТЕЛЕВИЗОР();  }
    }
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) ПРИБОР 

 (2) ПРИБОР ТЕЛЕВИЗОР ПРИЕМНИК 

 (3) ПРИБОР ПРИЕМНИК ТЕЛЕВИЗОР 

 (4) ПРИБОР ТЕЛЕВИЗОР 


Упражнение 12:
Номер 1
Исходный модуль содержит код:
  
class Студент
{   string фамилия;
    public string Фамилия    {  get { return фамилия; }  }
    public Студент(string ф) { фамилия = ф; }
}
class Магистр : Студент
{  int курс;
    public int Курс   {   get { return курс; }  }
    public Магистр(string фам, int к) : base(фам) { this.курс = к; }
}   
class Test 
{   static void Main()
    {  Студент  Иванов = new Магистр("Петров",4);
        System.Console.Write("{0} {1}", _______________ );
    }
}
  
  Требуется вывести фамилию и номер курса студента в виде: Петров 4. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу: 
  

Ответ:

 (1) Петров.Фамилия, Петров.Курс 

 (2) Иванов.Фамилия, ((Студент)Петров).Курс 

 (3) Петров.Фамилия, (Магистр)Петров.Курс 

 (4) Петров.Фамилия, ((Магистр)Петров).Курс 

 (5) Иванов.Фамилия, ((Магистр) Иванов).Курс 


Номер 2
Исходный модуль содержит код:
  
class Студент
{  string фамилия="Иванов";
    public string Фамилия { get { return фамилия; } }
    public Студент(string ф) { фамилия = ф; }
    public Студент() { }
}
class Магистр : Студент
{  int курс=4;
    public int Курс { get { return курс; } }
    public Магистр(string фам, int к) { this.курс = к; }
}
class Test
{  static void Main()
    {  Студент Петров = new Магистр("Петров", 5);
        System.Console.Write("{0} {1}", Петров.Фамилия, ((Магистр)Петров).Курс);
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Иванов 4 

 (3) Иванов 5 

 (4) Петров 5 

 (5) программа не выполнится, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Исходный модуль содержит код:
  
сlass Студент
{  string фамилия = "Петров";
    public string Фамилия { get { return фамилия; } }
    public Студент(string ф) { фамилия = ф; }
    public Студент() { фамилия = "Иванов"; }
}
class Магистр : Студент
{  static int  курс;
    public static int Курс { get { return курс; } }
    static Магистр() { курс = 4; }
}
class Test
{  static void Main()
    { Студент стд = new Студент("Сидоров");
        Магистр маг = new Магистр();
        System.Console.Write("{0} {1}", маг.Фамилия, Магистр.Курс);
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Петров 4 

 (3) Сидоров 4 

 (4) Иванов 4 

 (5) программа не выполнится, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Исходный модуль содержит классы ЧЕЛОВЕК,СОТРУДНИК и Program:
  
      class ЧЕЛОВЕК {
        string фамилия;  
        public ЧЕЛОВЕК(string фамилия) {this.фамилия = фамилия;}
        public string ФАМ() { return фамилия; } }
    class СОТРУДНИК:ЧЕЛОВЕК {
        string должность;
        public СОТРУДНИК(string фамилия, string должность):base(фамилия)
        { this.должность = должность; }
        public string ДОЛ { get {return должность;} } }  
  
  В классе Program определен метод Main, в теле которого находится код:
  
            ЧЕЛОВЕК  P = new СОТРУДНИК("Петров","Кассир");
            System.Console.Write("{0} {1}", ______________ );
  
  Требуется вывести фамилию и должность сотрудника. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) P.ФАМ(), P.ДОЛ 

 (2) P.ФАМ, P.ДОЛ() 

 (3) P.фамилия, P.должность 

 (4) P.ФАМ(), ((СОТРУДНИК)P).ДОЛ 


Номер 5
Исходный модуль содержит код классов ЧЕЛОВЕК,СОТРУДНИК и Program:
  
      class ЧЕЛОВЕК {
        string фамилия;  
        public ЧЕЛОВЕК(string фамилия) {this.фамилия = фамилия;}
        public string ФАМ() { return фамилия; } }
    class СОТРУДНИК:ЧЕЛОВЕК {
        string должность;
        public СОТРУДНИК(string фамилия, string должность):base(фамилия)
        { this.должность = должность; }
        public string ДОЛ { get {return должность;}  } } 
  
  В классе Program определен метод Main, в теле которого находится код:
  
            СОТРУДНИК  P = new СОТРУДНИК("Петров","Кассир");
            System.Console.Write("{0} {1}", ______________ );
  
  Требуется вывести фамилию и должность сотрудника. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) P.ФАМ(), P.ДОЛ 

 (2) P.ФАМ, P.ДОЛ() 

 (3) P.фамилия, P.должность 

 (4) P.ФАМ(), ((ЧЕЛОВЕК)P).ДОЛ 


Номер 6
Исходный модуль содержит код классов ЧЕЛОВЕК,СОТРУДНИК и Program:
  
      class ЧЕЛОВЕК {
        string фамилия;  
        public ЧЕЛОВЕК(string фамилия) {this.фамилия = фамилия;}
        public string ФАМ { get {return фамилия; } } }
    class СОТРУДНИК:ЧЕЛОВЕК {
        string должность;
        public СОТРУДНИК(string фамилия, string должность):base(фамилия)
        { this.должность = должность; }
        public string ДОЛ() { return должность; } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
            СОТРУДНИК  P = new СОТРУДНИК("Петров","Кассир");
            System.Console.Write("{0} {1}", ______________ );
  
  Требуется вывести фамилию и должность сотрудника. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу: 
  

Ответ:

 (1) P.ФАМ(), P.ДОЛ 

 (2) P.ФАМ, P.ДОЛ() 

 (3) P.фамилия, P.ДОЛ() 

 (4) P.ФАМ, ((ЧЕЛОВЕК)P).ДОЛ() 


Упражнение 13:
Номер 1
Исходный модуль содержит код:
  
using System;
class Дерево { public Дерево() { Console.Write("Дерево "); } }

class Плодовое : Дерево
{   public Плодовое (string s) { Console.Write(s); }  }

class Яблоня : Плодовое
{   public Яблоня(string s) { Console.Write("Яблоня "); } }
class Program
{ static void Main() { object P = new Яблоня("Антоновка "); } }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Антоновка Плодовое Дерево 

 (2) Дерево Антоновка Яблоня  

 (3) Яблоня Антоновка Дерево  

 (4) Дерево Плодовое Антоновка 

 (5) программа не выполнится, так как обнаружена синтаксическая ошибка: у класса Плодовое отсутствует конструктор без параметров  


Номер 2
Исходный модуль содержит код:
  
using System;
class Дерево { public Дерево() { Console.Write("Дерево "); } }

class Плодовое : Дерево
{ public Плодовое()  { Console.Write("Плодовое "); } 
  public Плодовое(string s) : this() { Console.Write(s); } }

class Яблоня : Плодовое
{    public Яблоня(string s) : base ("Лиственное ") { Console.Write("Яблоня "); } }

class Program
{ static void Main() { object P = new Яблоня("Антоновка "); } }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Дерево Плодовое Лиственное Яблоня Антоновка 

 (2) Дерево Плодовое Лиственное Яблоня  

 (3) Яблоня Лиственное Плодовое Дерево  

 (4) Антоновка Яблоня Лиственное Плодовое Дерево 

 (5) программа не выполнится, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Исходный модуль содержит код:
  
using System;
class Дерево  { public Дерево() { Console.Write("Дерево "); } }

class Плодовое : Дерево
{ public Плодовое() { Console.Write("Плодовое "); } }

class Яблоня : Плодовое
{    public Яблоня()    {  Console.Write("Яблоня ");  }
      public Яблоня(string s) : this()  { Console.Write(s); } 
}
class Program
{    static void Main() { object P = new Яблоня("Антоновка "); } 
 }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Антоновка Плодовое Дерево 

 (2) Дерево Плодовое Яблоня Антоновка 

 (3) Антоновка Яблоня Плодовое Дерево 

 (4) Дерево Плодовое Антоновка 

 (5) программа не выполнится, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Исходный модуль содержит классы ClassA, ClassB, ClassC и Program:
  
class ClassA { 
        int a;
        public int VA { get{return a; }  set{a=value; } } }
    class ClassB : ClassA {
        int b;
        public int VB { get{return b; }  set{b=value; VA=b-3; } } }
    class ClassC : ClassB {
        int c;
        public int VC { get{return c; }  set{c=value; VB=c-2; } } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
          ClassC P = new ClassC();
          P.VC = 10;
          System.Console.Write("{0} {1}", P.VC,  P.VA);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 10 0  

 (2) 10 7 

 (3) 10 5 

 (4) 8 5 


Номер 5
Исходный модуль содержит классы ClassA, ClassB, ClassC и Program:
  
    class ClassA { 
        int a;
        public int VA { get{return a;}   set{a=value;} } }
    class ClassB : ClassA {
        int b;
        public int VB { get{return b;}   set{b=value; VA=b+3;} } }
    class ClassC : ClassB {
        int c=3;
        public int VC { get{return c;} set{VB=c+2; c=value; } } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
          ClassC P = new ClassC();
          P.VC = 10;
          System.Console.Write("{0} {1}", P.VC, P.VA); 
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 10 8  

 (2) 10 15 

 (3) 3 8 

 (4) 10 13 


Номер 6
Исходный модуль содержит классы ClassA, ClassB, ClassC и Program:
  
class ClassA { 
        int a;
        public int VA { get{return a;}   set{a=value;} } }
    class ClassB : ClassA {
        int b;
        public int VB { get{return b;}   set{b=value; VA=b+3;} } }
    class ClassC : ClassA {
        int c=20;
        public int VC { get { return c; } set {c=value; VA=c+2;} } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
         ClassC P = new ClassC();
          P.VC = 10;
          System.Console.Write("{0} {1}", P.VC, P.VA); 
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 20 22 

 (2) 10 15 

 (3) 20 25 

 (4) 10 12 


Упражнение 14:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) в производном классе модификатор new у метода означает переопределение базового метода с тем же именем и не содержащего модификатор virtual 

 (2) в производном классе модификатор new у метода означает переопределение базового метода с тем же именем, у которого может быть модификатор virtual 

 (3) в производном классе модификатор new у метода означает переопределение базового метода с тем же именем, у которого должен быть модификатор virtual 

 (4) при переопределении базового метода с модификатором virtual должен использоваться только модификатор override 

 (5) базовый метод с модификатором virtual можно не переопределять в производном классе 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) в производном классе должны быть переопределены все виртуальные методы базового класса 

 (2) если в классе есть виртуальные методы, то класс должен быть объявлен с модификатором virtual 

 (3) для переопределения в производном классе виртуального метода может использоваться модификатор override 

 (4) для переопределения в производном классе виртуального метода может использоваться модификатор new 

 (5) объявление метода виртуальным означает, что все ссылки на этот метод будут разрешаться во время выполнения программы 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) переопределенный виртуальный метод должен обладать таким же набором параметров, как и одноименный метод базового класса  

 (2) виртуальный метод может быть статическим 

 (3) виртуальный метод может иметь модификатор abstract 

 (4) какая версия виртуального метода будет вызвана, определяется по типу объекта, на который указывает ссылка, имеющая тип базового класса 

 (5) свойства и индексаторы могут быть виртуальными 


Номер 4
Программист разработал следующее определение класса:
  
class Class
{
    private int x, y;
    public Class(int x, int y) { this.x = x; this.y = y; }
    public static bool operator >(Class a, Class b) { return a.x > b.x; }
}
  
  Среди приведенных ниже высказываний укажите  истинное высказывание:
  

Определение класса необходимо дополнить методом с именем


Ответ:

 (1) operator " 

 (2) operator >= 

 (3) operator < 

 (4) operator <= 

 (5) operator == 


Номер 5
Программист разработал следующее определение класса:
  
class Class
{
    private int x, y;
    public Class(int x, int y) { this.x = x; this.y = y; }
    public static bool operator<=(Class a, Class b) { return a.x <= b.x; }
}
  
  Среди приведенных ниже высказываний укажите  истинное высказывание:
  

Определение класса необходимо дополнить методом с именем


Ответ:

 (1) operator < 

 (2) operator > 

 (3) operator == 

 (4) operator != 

 (5) operator >= 


Номер 6
Программист разработал следующее определение класса:
  
class Class
{
    private int x, y;
    public Class(int x, int y) { this.x = x; this.y = y; }
    public static bool operator !=(Class a, Class b) { return a.x != b.x; }
}
  
  Среди приведенных ниже высказываний укажите  истинное высказывание:
  

Определение класса необходимо дополнить методом с именем


Ответ:

 (1) operator == 

 (2) operator >= 

 (3) operator <= 

 (4) operator > 

 (5) operator < 


Упражнение 15:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) можно создать объект абстрактного класса 

 (2) нельзя создать объект абстрактного класса 

 (3) абстрактный класс не должен содержать конструкторов 

 (4) абстрактный класс может содержать конструкторы 

 (5) абстрактный класс может содержать только конструктор без параметров 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) абстрактный класс может быть производным классом 

 (2) абстрактный класс не может быть базовым классом 

 (3) при наследовании абстрактного класса в производном классе должны быть реализованы все абстрактные методы абстрактного класса 

 (4) при наследовании абстрактного класса в производном классе может быть реализована часть абстрактных методов абстрактного класса 

 (5) если в классе есть хотя бы один абстрактный метод, то класс должен быть объявлен абстрактным 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) абстрактный класс может содержать открытые поля 

 (2) абстрактный класс не должен содержать открытые поля 

 (3) абстрактный класс должен содержать хотя бы один абстрактный метод 

 (4) если производный класс, являющийся наследником абстрактного класса, не переопределяет все абстрактные методы, то он должен быть помечен модификатором abstract 

 (5) абстрактный метод может иметь пустое тело 


Номер 4
Исходный модуль содержит классы Class и Program:
  
class Class
{
    private int x, y;
    public Class(int x, int y) { this.x = x; this.y = y; }
    public static Class operator ++(Class a) { return  new Class(a.x, a.y + 1);}
    public void View(){System.Console.Write("{0} {1} ",x,y);}
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
Class a = new Class(2,3),b;
b = ++a;
b.View(); a.View();
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 2 3 2 4 

 (2) 3 4 3 4 

 (3) 2 3 3 4 

 (4) 2 4 2 4 


Номер 5
Исходный модуль содержит классы Class и Program:
  
class Class
{
    private int x, y;
    public Class(int x, int y) { this.x = x; this.y = y; }
    public static Class operator ++(Class a) { return  new Class(a.x+1, a.y);}
    public void View(){System.Console.Write("{0} {1} ",x,y);}
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
Class a = new Class(4,3),b;
b = a++;
b.View(); a.View();
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 4 3 5 3 

 (2) 4 3 5 4 

 (3) 5 3 5 3 

 (4) 5 4 5 4 


Номер 6
Исходный модуль содержит классы Class и Program:
  
class Class
{
    private int x, y;
    public Class(int x, int y) { this.x = x; this.y = y; }
    public static Class operator ++(Class a) { return  new Class(a.x+1, a.y+2);}
    public void View(){System.Console.Write("{0} {1} ",x,y);}
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
Class a = new Class(2,5),b;
b = a++;
b.View(); a.View();
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 3 6 3 6 

 (2) 2 5 3 6 

 (3) 2 5 3 7 

 (4) 3 7 3 7 


Упражнение 16:
Номер 1
Проанализируйте приведенный код.
  
class Rectangle
{  public int x = 10, y = 20;
    public Rectangle(int x, int y) { this.x = x; this.y = y; }
    public virtual int Zoom
    { get { return x * y; } set { x += value; y += value; } }
}
class Параллепипед : Rectangle
{  public int z;
    public Параллепипед(int x, int y, int z) : base(x, y) { this.z = z; }
    public override int Zoom
    { get { return x*y*z; } set { x+=value; y+=value; z+=value; } }
}
class Program
{   static void Main()
    {  Параллепипед парал = new Параллепипед(6, 8, 10);
        парал.Zoom = -5;   System.Console.Write(парал.Zoom);    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 375 

 (3) 3 

 (4) 15 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Проанализируйте приведенный код.
  
class Rectangle
{  public int x = 10, y = 20;
    public Rectangle(int x, int y) { this.x = x; this.y = y; }
    public virtual int Zoom
    { get { return x * y; } set { x += value; y += value; } }
}
class Параллепипед : Rectangle
{  public int z;
    public Параллепипед(int x, int y, int z) : base(x, y) { this.z = z; }
    public override int Zoom
    { get { return x*y*z; } set { x+=value; y+=value; z+=value; } }
}
class Program
{   static void Main()
    {  Rectangle парал = new Параллепипед(6, 8, 10);
        парал.Zoom = -5;   System.Console.Write(парал.Zoom);    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 3 

 (3) 15 

 (4) 375 

 (5) будет обнаружена синтаксическая ошибка, связанная с попыткой присвоить ссылке типа Rectangle адрес объекта типа Параллепипед 


Номер 3
Проанализируйте приведенный код.
  
class Rectangle
{  public int x = 10, y = 20;
    public Rectangle(int x, int y) { this.x = x; this.y = y; }
    public virtual int Zoom
    { get { return x * y; } set { x += value; y += value; } }
}
class Параллепипед : Rectangle
{  public int z;
    public Параллепипед(int x, int y, int z) : base(x, y) { this.z = z; }
    public override int Zoom
    { get { return x*y*z; } set { x+=value; y+=value; z+=value; } }
}
class Program
{   static void Main()
    {  Rectangle парал = new Rectangle (6, 8, 10);
        парал.Zoom = -5;   System.Console.Write(парал.Zoom);    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 3 

 (3) 15 

 (4) 375 

 (5) будет обнаружена синтаксическая ошибка, связанная с попыткой вызова виртуального свойства, переопределенного в другом классе 


Номер 4
Исходный модуль содержит определение классов A и B:
  
class A   {   public  virtual string P() {return "ПЕТРОВ"; }   }
  
  Класс B определен как наследник класса A. Среди приведенных ниже высказываний укажите все истинные высказывания:
  

В классе B метод P()


Ответ:

 (1) может быть быть переопределен с модификатором new 

 (2) может быть переопределен с модификатором override 

 (3) может не переопределяться 

 (4) должен быть перегружен 

 (5) должен быть определен как абстрактный метод 


Номер 5
Исходный модуль содержит определение классов A и B:
  
class A   {   public virtual void P() {System.Console.Write("ПЕТРОВ"); }   }
  
  Класс B определен как наследник класса A. Среди приведенных ниже высказываний укажите  истинное высказывание:
  

В классе B метод P()


Ответ:

 (1) может быть переопределен с модификатором new 

 (2) должен быть переопределен с модификатором override 

 (3) может быть переопределен с модификатором abstract 

 (4) переопределяться не может 

 (5) перегружаться не может 


Номер 6
Исходный модуль содержит определение классов A и B:
  
class A   {   public  void F() {System.Console.Write("ИВАНОВ"); }   }
  
  Класс B определен как наследник класса A. Среди приведенных ниже высказываний укажите все истинные высказывания:
  

В классе B метод F()


Ответ:

 (1) может быть переопределен с модификатором new 

 (2) может быть переопределен с модификатором override 

 (3) может быть переопределен с модификатором abstract 

 (4) переопределяться не может 

 (5) может быть определен с тем же именем, но другим составом параметров 


Упражнение 17:
Номер 1
Проанализируйте приведенный код.
  
class Rectangle
{  public double width, hight;
    public Rectangle(double width, double hight)
    { this.width = width; this.hight = hight; }
    abstract public int Zoom(int d);
    public double Zoom(double d)
    { width += d; hight += d; return width * hight; }
}
public class Program 
{  static void Main()
    {  Rectangle rect = new Rectangle(10, 20);
        rect.Zoom(-5);
        System.Console.Write("{0} {1}", rect.width, rect.hight);
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 5 15 

 (3) 10 20 

 (4) 15 25 

 (5) будет обнаружена синтаксическая ошибка, связанная с неправильным описанием заголовка класса Rectangle 


Номер 2
Проанализируйте приведенный код.
  
abstract class Rectangle
{  public double width, hight;
    public Rectangle(double width, double hight)
    { this.width = width; this.hight = hight; }
    public double Zoom(double d)
    { width += d; hight += d; return width * hight; }
}
class Program
{   static void Main()
    {  Rectangle rect = new Rectangle(10, 20);
        rect.Zoom(-5);
        System.Console.Write("{0} {1}", rect.width, rect.hight);
    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 5 15 

 (3) 10 20 

 (4) 15 25 

 (5) будет обнаружена синтаксическая ошибка, связанная с попыткой создания объекта 


Номер 3
Проанализируйте приведенный код.
  
abstract class Rectangle
{  public double x=10, y=20;
    public Rectangle(double x, double y)  { this.x = x; this.y = y; }
    abstract public int Zoom(int d);
    public double Zoom(double d)   { x += d; y += d; return x * y; }
}
class Параллепипед : Rectangle
{  public double z;
    public Параллепипед(double x, double y, double z) : base (x, y)  { this.z = z; }
}
class Program 
{  static void Main()
    {  Параллепипед парал = new Параллепипед(6, 8, 10);
        парал.Zoom(-5);
        System.Console.Write("{0} {1} {2}", парал.x, парал.y, парал.z);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 1 3 5  

 (3) 1 3 10 

 (4) 5 15 10 

 (5) будет обнаружена синтаксическая ошибка, связанная с тем, что класс Параллепипед не переопределяет абстрактный метод Zoom 


Номер 4
Исходный модуль содержит классы A, B и Program:
  
class A
{
    public virtual string F1() { return "1"; }
    public virtual string F2() { return "2"; }
}
class B : A
{
    public new string F1() { return "3"; }
    public override string F2() { return "4"; }
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
A p = new B();
System.Console.Write(p.F1()+ p.F2());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 24 

 (2) 13 

 (3) 14 

 (4) 23 

 (5) 34 


Номер 5
Исходный модуль содержит классы A, B и Program:
  
class A
{
   public virtual string F1(){ return "1"; }
   public virtual string F2(){ return "2"; } 
}
class B:A
{
   public new        string F1() { return "3"; }
   public override string F2() { return "4"; } 
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
B p = new B();
System.Console.Write(p.F1()+ p.F2());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 12 

 (2) 34 

 (3) 14 

 (4) 23 

 (5) 13 


Номер 6
Исходный модуль содержит классы A, B и Program:
  
class A
{
   public virtual string F1(){return "1";}
   public virtual string F2(){return "2";} 
}
class B:A
{
   public override string F1() { return "3"; }
   public new      string F2() { return "4"; } 
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
A p = new B();
System.Console.Write(p.F1()+ p.F2());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 12 

 (2) 34 

 (3) 14 

 (4) 13 

 (5) 32  


Упражнение 18:
Номер 1
Проанализируйте приведенный код.
  
class Круг
{  protected double r = 5;
    public Круг(double r) { this.r = r; }
    public virtual int Фигура() { return (int)(3.14*r*r); }
}
class Цилиндр : Круг
{  double h = 10;
    public Цилиндр(double r, double h) : base(r) { this.h = h; }
    public override int Фигура() { return (int)(3.14*r*r*h); }
}
class Конус : Круг
{  double h = 10;
    public Конус(double r, double h) : base(r) { this.h = h; }
    public override int Фигура() { return (int)(3.14*r*r*h/3.0); }
}
class Program
{  static void Param(Круг fig)  { System.Console.Write(fig.Фигура()+" "); }
    static void Main()
    {   Param(new Круг(1));  }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 3 

 (3) 12 

 (4) 2 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Проанализируйте приведенный код.
  
class Круг
{  protected double r = 5;
    public Круг(double r) { this.r = r; }
    public virtual int Фигура() { return (int)(3.14*r*r); }
}
class Цилиндр : Круг
{  double h = 10;
    public Цилиндр(double r, double h) : base(r) { this.h = h; }
    public override int Фигура() { return (int)(3.14*r*r*h); }
}
class Конус : Круг
{  double h = 10;
    public Конус(double r, double h) : base(r) { this.h = h; }
    public override int Фигура() { return (int)(3.14*r*r*h/3.0); }
}
class Program
{   static void Param(Круг fig)  { System.Console.Write(fig.Фигура()+" "); }
    static void Main()
    {   Param(new Цилиндр(2, 1));    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 3 

 (3) 12 

 (4) 2 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Проанализируйте приведенный код.
  
class Круг
{  protected double r = 5;
    public Круг(double r) { this.r = r; }
    public virtual int Фигура() { return (int)(3.14*r*r); }
}
class Цилиндр : Круг
{  double h = 10;
    public Цилиндр(double r, double h) : base(r) { this.h = h; }
    public override int Фигура() { return (int)(3.14*r*r*h); }
}
class Конус : Круг
{  double h = 10;
    public Конус(double r, double h) : base(r) { this.h = h; }
    public override int Фигура() { return (int)(3.14*r*r*h/3.0); }
}
class Program
{   static void Param(Круг fig)  { System.Console.Write(fig.Фигура()+" "); }
    static void Main()
    {    Param(new Конус(1, 2));    }
}
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 3 

 (3) 12 

 (4) 2 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Исходный модуль содержит классы A, B и Program:
  
class A
{    public virtual void F() { System.Console.Write("Фрукты "); }  }
class B : A
{
    public new void F() { base.F();  System.Console.Write("Яблоки"); }
    public void F(string s) {System.Console.Write(s); }
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
A p1 = new B();   B p2 = new B();
______________  ;
  
  Требуется вывести сообщение: Фрукты Яблоки. Среди перечисленных ниже кодов укажите все варианты кода, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, решающую поставленную задачу:
  

Ответ:

 (1) p1.F() 

 (2) p2.F() 

 (3) p1.F(); p2.F() 

 (4) p1.F(); p2.F("Яблоки") 

 (5) p1.F("Яблоки") 


Номер 5
Исходный модуль содержит классы A, B и Program:
  
class A
{    public virtual void F() { System.Console.Write("Фрукты "); }  }
class B : A
{
    public override void F() { base.F();  System.Console.Write("Яблоки"); }
    public void F(string s) {System.Console.Write(s); }
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
A p1 = new B();   B p2 = new B();
______________  ;
  
  Требуется вывести сообщение: Фрукты Яблоки. Среди перечисленных ниже кодов укажите все варианты кода, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, решающую поставленную задачу:
  

Ответ:

 (1) p1.F(); 

 (2) p2.F(); 

 (3) p1.F(); p2.F(); 

 (4) p1.F(); p2.F("Яблоки"); 

 (5) p2.F("Яблоки"); 


Номер 6
Исходный модуль содержит классы A, B и Program:
  
class A
{  public virtual void F() { System.Console.Write("Фрукты "); }  }
class B : A
{
    public override void F() { System.Console.Write("Яблоки"); }
    public void F(string s) {System.Console.Write(s); }
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
A p1 = new A(); A p2 = new B();
______________  ;
  
  Требуется вывести сообщение: Фрукты Яблоки. Среди перечисленных ниже кодов укажите  вариант кода, подстановка  которого вместо знаков подчеркивания позволяет получить корректную программу, решающую поставленную задачу:
  

Ответ:

 (1) p1.F() 

 (2) p2.F() 

 (3) p1.F(); p2.F() 

 (4) p2.F("Фрукты"); p2.F() 

 (5) p1.F(); p2.F("Яблоки") 


Упражнение 19:
Номер 1
Проанализируйте приведенный код.
  
class TwoD 
{  int x, у;
    public TwoD()  { x = у = 0; }
    public TwoD(int i, int j)  {  x = i; у = j;    }
    public static bool operator true(TwoD op)
    {     if ((op.x != 0) || (op.у != 0))    return true;
        else    return false;  
    }
    public static bool operator false(TwoD op)
    {   if ((op.x == 0) && (op.у == 0))   return true; 
        else    return false;
    }
}
class Program
{    public static void Main()
    {  TwoD точка = new TwoD(5, 6);
        if (_______________) System.Console.Write("точка1-ИСТИНА");
        else System.Console.Write("точка-ЛОЖЬ");
}  }
  
  Требуется вывести строку точка-ИСТИНА. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) программа завершится аварийно 

 (2) точка>0 

 (3) точка 

 (4) (точка.x != 0) || (точка.у != 0) 


Номер 2
Проанализируйте приведенный код.
  
class TwoD 
{  int x, у;
    public TwoD()  { x = у = 0; }
    public TwoD(int i, int j)  {  x = i; у = j;    }
    public static bool operator true(TwoD op)
    {     if ((op.x != 0) || (op.у != 0))    return true;
        else    return false;  
    }
    public static bool operator false(TwoD op)
    {   if ((op.x == 0) && (op.у == 0))   return true; 
        else    return false;
    }
}
class Program
{    public static void Main()
    {  TwoD точка = new TwoD();
        if (_______________) System.Console.Write("точка1-ИСТИНА");
        else System.Console.Write("точка-ЛОЖЬ");
}  }
  
  Требуется вывести строку точка-ЛОЖЬ. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) (точка.x == 0) & (точка.у == 0) 

 (2) точка=0 

 (3) точка 

 (4) (точка.x == 0) && (точка.у == 0) 

 (5) (точка.x == 0) || (точка.у == 0) 


Номер 3
Проанализируйте приведенный код.
  
class TwoD 
{  int x, у;
    public TwoD()  { x = у = 0; }
    public TwoD(int i, int j)  {  x = i; у = j;    }
    public static bool operator true(TwoD op)
    {     if ((op.x != 0) || (op.у != 0))    return true;
        else    return false;  
    }
}
class Program
{    public static void Main()
    {  TwoD точка = new TwoD(5, 6);
        if (_______________) System.Console.Write("точка1-ИСТИНА");
        else System.Console.Write("точка-ЛОЖЬ");
}  }
  
  Требуется вывести строку точка-ИСТИНА. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) (точка.x != 0) | (точка.у != 0) 

 (2) точка>0 

 (3) точка 

 (4) (точка.x != 0) || (точка.у != 0) 

 (5) (точка.x != 0) && (точка.у != 0) 


Номер 4
  

Класс должен быть определен как абстрактный класс, если


Ответ:

 (1) в классе не определен конструктор 

 (2) в классе отсутствуют поля 

 (3) все поля класса - статические 

 (4) один из методов класса не содержит реализации 

 (5) все методы класса не содержат реализации 


Номер 5
  

Класс должен быть определен как абстрактный класс, если


Ответ:

 (1) хотя бы один из методов класса определен как абстрактный метод 

 (2) хотя бы один из методов класса определен как виртуальный метод 

 (3) все методы класса определены как виртуальные методы 

 (4) хотя бы одно из полей класса определено как поле только для чтения 

 (5) требуется запретить наследование от этого класса 


Номер 6
Из приведенных ниже высказываний укажите все истинные высказывания, относящиеся к абстрактным классам:

Ответ:

 (1) объект абстрактного класса создать невозможно 

 (2) абстрактный класс может быть использован в качестве базового класса 

 (3) класс - прямой потомок абстрактного класса, должен переопределить все абстрактные методы предка 

 (4) класс - прямой потомок абстрактного класса, должен быть в обязательном порядке определен как абстрактный класс 

 (5) определение абстрактного класса может содержать определение полей 


Упражнение 20:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) класс, реализующий интерфейс, не может включать свои собственные методы 

 (2) класс может реализовать несколько интерфейсов 

 (3) класс должен реализовать интерфейс в полном объеме 

 (4) класс может реализовать не все интерфейсные методы, а только требуемые  

 (5) класс не может одновременно наследовать базовый класс и интерфейсы 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) интерфейс не может иметь полей 

 (2) интерфейс не может объявлять сигнатуры свойств 

 (3) интерфейсные методы не должны иметь тела 

 (4) интерфейс может иметь конструктор без тела 

 (5) при наследовании базового класса и интерфейсов порядок следования имен класса и интерфейсов может быть произвольным 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) интерфейс не может определять конструкторов 

 (2) интерфейс может объявлять сигнатуры индексаторов 

 (3) любой член интерфейса может быть объявлен статическим 

 (4) интерфейсные методы должны быть объявлены с модификатором public  

 (5) при наследовании базового класса и интерфейсов первым в заголовке производного класса должно следовать имя базового класса, а затем имена интерфейсов 


Номер 4
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) любой класс, не содержащий полей, должен быть определен как интерфейс 

 (2) метод, объявленный в интерфейсе, неявно является открытым (public-метод) 

 (3) метод, объявленный в интерфейсе, не должен содержать реализации 

 (4) интерфейс может быть реализован только в одном классе 

 (5) сигнатура метода в реализации должна точно совпадать с сигнатурой метода, объявленной в интерфейсе 


Номер 5
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) интерфейс должен содержать определение конструктора без параметров 

 (2) доступность метода, объявляемого в интерфейсе, может указываться с помощью модификатора protected 

 (3) ни один метод интерфейса не может быть объявлен статическим 

 (4) в классе, который явно реализует интерфейс, реализуемые методы должны быть определены как открытые 

 (5) класс может реализовать не более одного интерфейса 


Номер 6
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) класс может реализовать несколько интерфейсов 

 (2) объект типа интерфейса создать невозможно 

 (3) интерфейс может содержать определение деструктора 

 (4) доступность метода, объявляемого в интерфейсе, может указываться с помощью модификатора private 

 (5) интерфейс может содержать определение виртуального метода 


Упражнение 21:
Номер 1
  Проанализируйте приведенный код.
  
interface IФигура { int Периметр();  int Площадь(); }
class Квадрат : IФигура
{  int длина;
    public Квадрат(int длина) { this.длина = длина;}
    public int Периметр() { return 4*длина; }
    public int IФигура.Площадь()  { return длина * длина; }
}

class Test
{   public static void Main()
    {  IФигура фигура;
        фигура = new Квадрат(10);
        System.Console.WriteLine("Периметр={0} Площадь={1}",
                       фигура.Периметр(), фигура.Площадь());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Периметр=40 Площадь=100 

 (3) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что для вызова методов Периметр() и Площадь() необходимо ссылку фигура привести к типу Квадрат 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что ссылка фигура должна иметь тип Квадрат 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с наличием модификатора public у метода Площадь() 


Номер 2
Проанализируйте приведенный код.
  
interface IФигура { int Периметр();  int Площадь(); }
class Квадрат : IФигура
{  int длина;
    public Квадрат(int длина) { this.длина = длина;}
    public int Периметр()        { return 4*длина; }
    int IФигура.Площадь()     { return длина * длина; }
}
class Test
{   public static void Main()
    {  IФигура фигура;
        фигура = new Квадрат(10);
        System.Console.WriteLine("Периметр={0} Площадь={1}",
                       фигура.Периметр(), фигура.Площадь());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Периметр=40 Площадь=100 

 (3) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что для вызова методов Периметр() и Площадь() необходимо ссылку фигура привести к типу Квадрат 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что ссылка фигура должна иметь тип Квадрат 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с отсутствием модификатора public у метода Площадь() 


Номер 3
Проанализируйте приведенный код.
  
interface IФигура { int Периметр(); int Площадь(); }
class Квадрат : IФигура
{
    int длина;
    public Квадрат(int длина) { this.длина = длина; }
    public int Периметр() { return 4 * длина; }
    int IФигура.Площадь() { return длина * длина; }
}
class Test
{   public static void Main()
    {  Квадрат фигура = new Квадрат(10);
        System.Console.WriteLine("Периметр={0} Площадь={1}",
                       фигура.Периметр(), фигура.Площадь());
} }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Периметр=40 Площадь=100 

 (3) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что перед именем метода Площадь() не может быть указано имя интерфейса 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что для вызова метода Квадрат() ссылка фигура должна иметь тип IФигура  

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с отсутствием модификатора public у метода Площадь() 


Номер 4
Исходный модуль содержит код:
  
interface IЧеловек  {  string Имя();    string Фамилия(); }
class Человек : IЧеловек
{
    string имя, фамилия;
    public Человек(string имя, string фамилия)  { this.имя=имя; this.фамилия=фамилия; }
    public string Имя() { return имя; }
    public string Фам() { return фамилия; }
}
class Program
{
    static void Main()
    {
        Человек чел = new Человек("Иван","Сидоров");
        System.Console.Write(чел.Имя()+чел.Фам());
    }
}
  
  Метод Main разрабатывался для вывода имени и фамилии человека.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) метод Имя() объявлен в интерфейсе как закрытый 

 (2) класс Человек не может иметь конструктора с параметрами 

 (3) сигнатура метода Имя(), объявленного в интерфейсе, не совпадает с сигнатурой метода Имя(), реализованного в классе Человек 

 (4) класс Человек не полностью реализует интерфейс 

 (5) интерфейс не может содержать объявления нескольких методов 


Номер 5
Исходный модуль содержит код:
  
interface IЧеловек
{  public string Имя();  public string Фамилия(); }
class Человек : IЧеловек
{
    string имя, фамилия;
    public Человек(string имя, string фамилия){ this.имя=имя; this.фамилия=фамилия; }
    public string Имя() { return имя; }
    public string Фамилия() { return фамилия; }
}
class Program
{
    static void Main()
    {
        Человек чел = new Человек("Иван","Сидоров");
        System.Console.Write(чел.Имя()+чел.Фамилия());
    }
}
  
  Метод Main разрабатывался для вывода имени и фамилии человека.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) объявление методов в интерфейсе не может иметь модификаторов доступности 

 (2) класс Человек не полностью реализует интерфейс 

 (3) сигнатура метода Фамилия(), объявленного в интерфейсе, не совпадает с сигнатурой метода Фамилия(), реализованного в классе Человек 

 (4) интерфейс IЧеловек недоступен для реализации в классе Человек 

 (5) для обращения к методам Имя() и Фамилия() необходимо создать объект типа IЧеловек 


Номер 6
Исходный модуль содержит код:
  
interface IЧеловек
{ string Фамилия(); string Должность(); }
class Человек { public string фамилия;  }
class Сотрудник : IЧеловек,Человек
{ 
    public string должность; 
    public string Фамилия() {return фамилия;}
    public string Должность() { return должность; }
}
class Program
{
    static void Main()
    {
        Сотрудник с = new Сотрудник();
        с.фамилия = "Иванов"; с.должность = "Инженер";
        System.Console.Write(с.Фамилия()+с.Должность());
    }
}
  
  Метод Main разрабатывался для вывода фамилии и должности сотрудника.
  

Трансляция программы завершена неудачно. Из приведенных высказываний укажите высказывание, которое раскрывает причину некорректности программы:


Ответ:

 (1) класс Человек не может иметь открытых полей 

 (2) класс Сотрудник не может иметь открытых полей 

 (3) объявление метода Фамилия() в интерфейсе должно содержать модификатор public 

 (4) объявление метода Должность() в интерфейсе должно содержать модификатор public 

 (5) в определении класса Сотрудник имя базового класса должно предшествовать имени реализуемого интерфейса 


Упражнение 22:
Номер 1
Проанализируйте приведенный код.
  
interface Интерфейс  { int Метод(); }
class Класс1 : Интерфейс
{  int len;
    public Класс1(int l) { len = l; }
    public int Метод() { return len * len; }
}
class Класс2 : Класс1
{  int w, h;
    public Класс2(int w1, int h1) : base (w1) { w = w1; h = h1; }
    new public int Метод() { return w * h; }
}
class Test
{   public static void Main()
    {  Класс2 объект1 = new Класс2(5, 10);
        Интерфейс объект2 = объект1;
        System.Console.WriteLine("Значение1={0} Значение2={1}", 
                                               объект1.Метод(), объект2.Метод());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Значение1=50 Значение2=50 

 (2) Значение1=50 Значение2=25 

 (3) Значение1=25 Значение2=25 

 (4) Значение1=25 Значение2=50 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с наличием модификатора new у метода Метод 


Номер 2
Проанализируйте приведенный код.
  
interface Интерфейс  { int Метод(); }
class Класс1 : Интерфейс
{  int len;
    public Класс1(int l) { len = l; }
    public virtual int Метод() { return len * len; }
}
class Класс2 : Класс1
{  int w, h;
    public Класс2(int w1, int h1) : base (w1) { w = w1; h = h1; }
    public override int Метод() { return w * h; }
}
class Test
{   public static void Main()
    {  Класс2 объект1 = new Класс2(5, 10);
        Интерфейс объект2 = объект1;
        System.Console.WriteLine("Значение1={0} Значение2={1}", 
                                               объект1.Метод(), объект2.Метод());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Значение1=50 Значение2=25 

 (2) Значение1=25 Значение2=25 

 (3) Значение1=25 Значение2=50 

 (4) Значение1=50 Значение2=50 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с наличием модификатора virtual у метода Метод 


Номер 3
Проанализируйте приведенный код.
  
interface Интерфейс { int Метод(); }
class Класс1 : Интерфейс
{  int len;
    public Класс1(int l) { len = l; }
    public int Метод() { return len * len; }
}
class Класс2 : Класс1, Интерфейс
{  int w, h;
    public Класс2(int w1, int h1) : base(w1) { w = w1; h = h1; }
    public int Метод() { return w * h; }
}
class Test
{   public static void Main()
    {  Класс2 объект1 = new Класс2(5, 10);
        Интерфейс объект2 = объект1;
        System.Console.WriteLine("Значение1={0} Значение2={1}", 
                                               объект1.Метод(), объект2.Метод());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Значение1=50 Значение2=25 

 (2) Значение1=25 Значение2=25 

 (3) Значение1=50 Значение2=50 

 (4) Значение1=25 Значение2=50 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с повторным наследованием интерфейса Интерфейс 


Номер 4
Исходный модуль содержит определения:
  
interface IСмена { void Сменить(); }
class Переключатель: IСмена
{
    bool s;
    public Переключатель(bool s){this.s = s;}
    public void Сменить() { s = !s; System.Console.Write(" " + s); }
}
class Счетчик : IСмена
{
    int s;
    public Счетчик(int s) { this.s = s; }
    public void Сменить() { s++; System.Console.Write(" " + s); }
}
  
  В этом же модуле определен класс Program c методом Main(), в котором содержится следующий код:
  
        IСмена a = new Переключатель(false);
        IСмена b = new Счетчик(1);
        a.Сменить();   a = b;   a.Сменить();   b.Сменить();   a.Сменить();
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) True 2 3 4 

 (2) True False 2 True 

 (3) True 2 False True 

 (4) 2 3 4 5 

 (5) при запуске фиксируется синтаксическая ошибка, указывающая на несовместимость типов при объявлении переменных в методе Main() 


Номер 5
Исходный модуль содержит определения:
  
interface IСмена { void Сменить(); }
class Переключатель: IСмена
{
    bool s;
    public Переключатель(bool s){this.s = s;}
    public void Сменить() { s = !s; System.Console.Write(" " + s); }
}
class Счетчик : IСмена
{
    int s;
    public Счетчик(int s) { this.s = s; }
    public void Сменить() { s++; System.Console.Write(" " + s); }
}
  
  В этом же модуле определен класс Program c методом Main(), в котором содержится следующий код:
  
        IСмена a = new Переключатель(false);
        IСмена b = new Счетчик(1);
        b.Сменить(); a.Сменить(); b = a; b.Сменить(); a = b; a.Сменить();
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 2 True 3 False 

 (2) 3 True 4 False 

 (3) 3 False True False 

 (4) 2 True False True 

 (5) при запуске фиксируется синтаксическая ошибка, указывающая на несовместимость типов при объявлении переменных в методе Main() 


Номер 6
Исходный модуль содержит определения:
  
interface IСмена { void Сменить(); }
class Переключатель: IСмена
{
    bool s;
    public Переключатель(bool s){this.s = s;}
    public void Сменить() { s = !s; System.Console.Write(" " + s); }
}
class Счетчик : IСмена
{
    int s;
    public Счетчик(int s) { this.s = s; }
    public void Сменить() { s--; System.Console.Write(" " + s); }
}
  
  В этом же модуле определен класс Program c методом Main(), в котором содержится следующий код:
  
IСмена a = new Переключатель(true);
IСмена b = new Счетчик(9),c;
c = b;   a.Сменить();   b.Сменить();   b = a;   b.Сменить();   b = c;    b.Сменить();
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) True 8 False 7 

 (2) False 8 7 6 

 (3) False 8 True 7 

 (4) 8 7 6 False 

 (5) при запуске фиксируется синтаксическая ошибка, указывающая на несовместимость типов при объявлении переменных в методе Main() 


Упражнение 23:
Номер 1
Проанализируйте приведенный код.
  
interface Интерфейс1 { string Метод(); }
interface Интерфейс2 { string Свойство {get;} }
class Класс1 : Интерфейс1
{    public string Метод() { return "Есть Интерфейс1. "; } }
class Класс2 : Интерфейс1, Интерфейс2
{  public string Метод() { return "Есть Интерфейс1. "; }
    public string Свойство { get { return "Есть Интерфейс2. "; } }
}
class Test
{   static string GetValue(object ob)
    {  string str = "Найден интерфейс ";
        Интерфейс1 I1 = ob as Интерфейс1;
        if (I1 != null) str = I1.Метод();
        Интерфейс2 I2 = ob as Интерфейс2;
        if (I2 != null) { str += I2.Свойство; } 
        return str;
    }
    public static void Main()
    {  Класс2 объект2 = new Класс2();
        System.Console.WriteLine( GetValue(объект2));
}   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Есть Интерфейс1. Есть Интерфейс2. 

 (2) Есть Интерфейс1. 

 (3) Есть Интерфейс2. 

 (4) Найден интерфейс 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что интерфейс не может определять свойство 


Номер 2
Проанализируйте приведенный код.
  
interface Интерфейс1 { string Метод(); }
interface Интерфейс2 { string Свойство { get;} }
class Класс1 : Интерфейс1
{ public string Метод() { return "Класс1: есть Интерфейс1 "; } 
}
class Класс2 : Класс1, Интерфейс2
{  public string Метод() { return "Класс2: есть Интерфейс1 "; }
    public string Свойство { get { return "Класс2: есть Интерфейс2 "; } }
}
class Test
{  static string GetValue(object ob)
    {  string str = "Найден интерфейс ";
        if (ob is Интерфейс1) str = ((Интерфейс1)ob).Метод();
        if (ob is Интерфейс2) { str += ((Интерфейс2)ob).Свойство; }
        return str;
    }
    public static void Main()
    {  Интерфейс1 объект1 = new Класс2();
        System.Console.WriteLine(GetValue(объект1));
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Класс1: есть Интерфейс1 Класс2: есть Интерфейс2 

 (2) Класс2: есть Интерфейс1. Класс2: есть Интерфейс2. 

 (3) Класс2: есть Интерфейс2. 

 (4) Найден интерфейс 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что посредством интерфейсной ссылки объект1 типа Интерфейс1 нельзя вызвать Свойство, определенное в Интерфейс2 


Номер 3
Проанализируйте приведенный код.
  
interface Интерфейс1 { string Метод(); }
interface Интерфейс2 { string Свойство { get;} }
class Класс1 : Интерфейс1
{ public string Метод() { return "Класс1: есть Интерфейс1 "; } 
}
class Класс2 : Интерфейс1, Интерфейс2
{  public string Метод() { return "Класс2: есть Интерфейс1 "; }
    public string Свойство { get { return "Класс2: есть Интерфейс2 "; } }
}
class Test
{  static string GetValue(object ob)
    {  string str = "Найден интерфейс ";
        if (ob is Интерфейс1) str = ((Интерфейс1)ob).Метод();
        if (ob is Интерфейс2) { str += ((Интерфейс2)ob).Свойство; }
        return str;
    }
    public static void Main()
    {  Интерфейс1 объект1 = new Класс2();
        System.Console.WriteLine(GetValue(объект1));
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Класс2: есть Интерфейс1. 

 (2) Класс2: есть Интерфейс1. Класс2: есть Интерфейс2. 

 (3) Класс2: есть Интерфейс2. 

 (4) Найден интерфейс 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что посредством интерфейсной ссылки объект1 типа Интерфейс1 нельзя вызвать Свойство, определенное в Интерфейс2 


Номер 4
Исходный модуль содержит код:
  
interface IФормула { int F(int x); }
class  A: IФормула{ public int F(int x) { return x*x; } }
class  B: IФормула{ public int F(int x) { return x * x * x; } }
class Program
{
    static int Out(IФормула f, int x ) {return  f.F(x); }
    static void Main()
    {
        A a = new A(); B b = new B(); 
        System.Console.WriteLine( _________ );
    }
}
  
  Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить корректную программу для вычисления 3*3 + 2*2*2:
  

Ответ:

 (1) Out(a,2) + Out(b,3) 

 (2) Out(a,3) + Out(b,2) 

 (3) Out(a.F,3) + Out(b.F,2) 

 (4) Out(a.F(3)) + Out(b.F(2)) 

 (5) Out(a.F(2)) + Out(b.F(3)) 


Номер 5
Исходный модуль содержит код:
  
interface IФормула { int F(int x); }
class A: IФормула{ public int F(int x) { return x*x*x; } }
class B: IФормула{ public int F(int x) { return x*x; } }
class Program
{
    static int Out(IФормула f, int x ) {return  f.F(x); }
    static void Main()
    {
        A a = new A(); B b = new B();
        System.Console.WriteLine( ______________);
    }
}
  
  Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить корректную программу для вычисления 2*2*2 + 4*4:
  

Ответ:

 (1) Out(a, 2) + Out(b, 4) 

 (2) Out(a,4)+ Out(b,2) 

 (3) Out(a.F,2)+ Out(b.F,4) 

 (4) Out(a.F(2))+ Out(b.F(4)) 

 (5) Out(a.F(4))+ Out(b.F(2)) 


Номер 6
Исходный модуль содержит код:
  
interface IФормула { int F(int x); }
class A: IФормула{ public int F(int x) { return x*x*x; } }
class B: IФормула{ public int F(int x) { return x*x; } }
class Program
{
    static int Out(IФормула f, int x ) {return  f.F(x); }
    static void Main()
    {
        A a = new A(); B b = new B();
        System.Console.WriteLine(Out(a, 3) + Out(b, 4));
    }
}
  
  Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить корректную программу для вычисления 3*3*3 + 2*2:
  

Ответ:

 (1) Out(a, 2) + Out(b, 2) 

 (2) Out(a,F)+ Out(b,F) 

 (3) Out(a.F())+ Out(b.F()) 

 (4) Out(a.F(3))+ Out(b.F(2)) 

 (5) Out(a, 3) + Out(b, 2) 


Упражнение 24:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) структура может наследовать другие структуры 

 (2) структура не может наследовать другие структуры 

 (3) любое перечисление имеет ряд унаследованных статических методов 

 (4) структура, как и класс, является ссылочным типом данных 

 (5) структура является значимым, а не ссылочным типом данных 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) структура может наследовать интерфейсы 

 (2) структура не может наследовать интерфейсы 

 (3) перечисление может состоять из элементов строкового типа 

 (4) структура имеет конструктор по умолчанию, который инициализирует поля значениями по умолчанию 

 (5) поля структуры не инициализируются значениями по умолчанию 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) в структуре можно определить конструктор по умолчанию 

 (2) в структуре нельзя определить конструктор по умолчанию 

 (3) перечисление состоит из элементов целочисленного типа 

 (4) класс может наследовать структуру 

 (5) структура может быть объявлена с модификатором protected 


Номер 4
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) в структуре могут быть определены свойства 

 (2) в структуре может быть определен конструктор без параметров 

 (3) в структуре может быть определен деструктор 

 (4) структура может содержать только определение полей 

 (5) структура как тип может быть определена с модификатором доступа public 


Номер 5
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) в структуре может быть определен конструктор с параметрами 

 (2) структура может содержать определения вложенных типов структур 

 (3) структура может быть определена как абстрактная 

 (4) тип структуры по умолчанию является бесплодным (sealed

 (5) методы структур могут быть определены как виртуальные 


Номер 6
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) структура может содержать определения методов 

 (2) структура может переопределять методы, унаследованные от класса object 

 (3) в определении структуры нельзя задавать начальное значение поля, если это поле не статическое 

 (4) методы структур могут быть определены как абстрактные 

 (5) структура не может содержать реализацию интерфейсов 


Упражнение 25:
Номер 1
Проанализируйте приведенный код.
  
public enum Языки { СSarp, CPP, VB, Java }
struct Структура
{  public string Имя;
    public Языки я;
    public override string ToString()
    {  return string.Format("Программист {0} программирует на {1}", Имя, я);  }
}
class Test
{   public static void Main()
    {  Структура c1 = new Структура();
        Структура c2 = new Структура();
        c1.Имя = "Иванов"; c1.я = Языки.СSarp;
        c2 = c1;  c1.Имя = "Петров"; c2.я = Языки.CPP;
        System.Console.WriteLine(c2);
}   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Программист Петров программирует на СPP 

 (2) Программист Иванов программирует на СSarp 

 (3) Программист Иванов программирует на СPP 

 (4) Программист Петров программирует на СSarp 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура не может иметь методов 


Номер 2
Проанализируйте приведенный код.
  
public enum Языки { СSarp, CPP, VB, Java }
struct Структура
{  public string Имя;
    public Языки я;
    public override string ToString()
    {  return string.Format("Программист {0} программирует на {1}", Имя, я);  }
}
class Test
{   public static void Main()
    {
        Структура c1 = new Структура();
        Структура c2;
        c1.Имя = "Иванов"; c1.я = Языки.VB;
        c2 = c1;
        c2.Имя = "Петров"; c1.я = Языки.Java;
        System.Console.WriteLine(c2);
}   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Программист Петров программирует на Java 

 (2) Программист Иванов программирует на VB 

 (3) Программист Иванов программирует на Java 

 (4) Программист Петров программирует на VB 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура C2 не создана оператором new 


Номер 3
Проанализируйте приведенный код.
  
public enum Языки { СSarp, CPP, VB, Java }
struct Структура
{  public string Имя;
    public Языки я;
    public override string ToString()
    {  return string.Format("Программист {0} программирует на {1}", Имя, я);  }
}

class Test
{   public static void Main()
    {
        Структура c1;
        Структура c2 = new Структура();
        c1 = c2;
        c1.Имя = "Иванов"; c1.я = Языки.VB;
        System.Console.WriteLine(c2);
 }   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Программист программирует на 

 (2) Программист программирует на СSarp 

 (3) Программист Иванов программирует на Java 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура C1 не создана оператором new 


Номер 4
Исходный модуль содержит определение типов Газета, Журнал и Program:
  
{
    public int Страницы;
    public override string ToString() { return Страницы.ToString(); } 
}
struct Журнал
{   public int Страницы;  }
  
  В классе Program определен метод Main, в теле которого находится код:
  
Газета a;  Журнал b;
a.Страницы=20;  b.Страницы =30;
System.Console.Write(a.ToString() + " " + b.ToString());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 20 30 

 (2) 20 Журнал 

 (3) 50 

 (4) Газета 30 

 (5) при запуске программы фиксируется ошибка: в структуре невозможно переопределить метод ToString() 


Номер 5
Исходный модуль содержит определение типов Газета, Журнал и Program:
  
struct Газета
{    public int Страницы;  }
struct Журнал
{
    public int Страницы;
    public override string ToString() { return Страницы.ToString(); }
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
Газета a;  Журнал b;
a.Страницы=20;  b.Страницы =30;
System.Console.Write(a.ToString() + " " + b.ToString());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) Газета Журнал 

 (2) 20 Журнал 

 (3) Газета 30 

 (4) 50 

 (5) при запуске программы фиксируется ошибка: в структуре невозможно переопределить метод ToString() 


Номер 6
Исходный модуль содержит определение типов Газета, Журнал и Program:
  
struct Газета
{
    public int Страницы;
    public override string ToString() { return Страницы.ToString(); } 
}
struct Журнал
{
    public int Страницы;
    public override string ToString() { return Страницы.ToString(); }
}
  
  В классе Program определен метод Main, в теле которого находится код:
  
Газета a;  Журнал b;
a.Страницы=20;  b.Страницы =30;
System.Console.Write(a.ToString() + " " + b.ToString());
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) Газета Журнал 

 (2) 30 20 

 (3) 50 

 (4) 20 30 

 (5) при запуске программы фиксируется ошибка: в структуре невозможно переопределить метод ToString() 


Упражнение 26:
Номер 1
Проанализируйте приведенный код.
  
interface Интерфейс { string Метод(); }
struct Структура : Интерфейс
{  public Структура(string и, int к)   { имя = и; курс = к; }
    public Структура()  { имя = "Нет имени"; курс = 0; }
    public string имя;
    public int курс;
    public string Метод()
    { return string.Format("Студент {0} учится на курсе {1}", имя, курс); }
}
class Test
{   public static void Main()
    {  Структура c1 = new Структура("Зайцев",1);
        Структура c2 = new Структура();
        c2 = c1;
        System.Console.WriteLine(c2.Метод());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Студент Зайцев учится на курсе 1 

 (2) Студент Нет имени учится на курсе 0 

 (3) Студент учится на курсе 0 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура не может наследовать интерфейс 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура не может определять конструктор по умолчанию 


Номер 2
Проанализируйте приведенный код.
  
struct Структура2
{ public string имя;
   public Структура2(string и) { имя = и; }
}
struct Структура : Структура2
{  public int курс;
    public Структура(string и, int к) : base (и)  { курс = к; }
    public string Метод()
    { return string.Format("Студент {0} учится на курсе {1}", имя, курс); }
}
class Test
{   public static void Main()
    {  Структура c2 = new Структура();
        Структура c1 = new Структура("Зайцева",1);   c1 = c2;
        System.Console.WriteLine(c1.Метод());
}   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Студент Зайцева учится на курсе 1 

 (2) Студент учится на курсе 0 

 (3) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура не может наследовать другую структуру 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что наследуемая структура не должна определять конструктор 


Номер 3
Проанализируйте приведенный код.
  
struct Структура
{  public string имя = "Без имени";
    static public int курс=1;
    public Структура(string и) { имя=и; }
    public string Метод()
    { return string.Format("Студент {0} учится на курсе {1}", имя, курс); }
}
class Test
{   public static void Main()
    {  Структура c2 = new Структура();
        Структура c1 = new Структура("Зайцев");   c2 = c1;
        System.Console.WriteLine(c2.Метод());
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Студент Зайцев учится на курсе 2 

 (2) Студент Зайцев учится на курсе 0 

 (3) Студент учится на курсе 0 

 (4) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что нестатические поля не могут инициализироваться в структуре 

 (5) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что структура не может иметь статические поля 


Номер 4
Исходный модуль содержит код:
  
enum Цвет{Красный,Зеленый,Синий,Желтый,Черный,Белый}
enum Сторона{Север=3,Юг,Восток,Запад,СевероЗапад,ЮгоВосток}
class Program
{
    static void Main()
    {
        Цвет цвет=Цвет.Синий;
        Сторона сторона = __________ ;
       System.Console.WriteLine("ЭТО БУДЕТ " + (int)сторона); 
   }
}
  
  Среди перечисленных ниже вариантов инициализации укажите все варианты, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, которая выведет на консоль сообщение ЭТО БУДЕТ 5:
  

Ответ:

 (1) Сторона.Восток 

 (2) (Сторона)(цвет + 3) 

 (3) (Сторона)5 

 (4) 5 

 (5) ЮгоВосток 


Номер 5
Исходный модуль содержит код:
  
enum Цвет{Красный,Зеленый,Синий,Желтый,Черный=2,Белый}
enum Сторона{Север,Юг,Восток,Запад,СевероЗапад,ЮгоВосток}
class Program
{
    static void Main()
    {
        Цвет цвет=Цвет.Желтый;
        Сторона сторона = _________ ;
        System.Console.WriteLine("ЭТО БУДЕТ " + (int)сторона);
    }
}
  
  Среди перечисленных ниже вариантов инициализации укажите все варианты, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, которая выведет на консоль сообщение ЭТО БУДЕТ 3:
  

Ответ:

 (1) Запад 

 (2) Сторона.Восток 

 (3) (Сторона)цвет 

 (4) (Сторона)Цвет.Белый 

 (5) Сторона.СевероЗапад 


Номер 6
Исходный модуль содержит код:
  
enum Цвет{Красный,Зеленый,Синий,Желтый=1,Черный,Белый}
enum Сторона{Север,Юг,Восток,Запад=1,СевероЗапад,ЮгоВосток}
class Program
{
    static void Main()
    {
        Сторона сторона = Сторона.СевероЗапад;
        Цвет цвет = __________ ;
        System.Console.WriteLine("ЭТО БУДЕТ " + (int)цвет);
    }
}
  
  Среди перечисленных ниже вариантов инициализации укажите все варианты, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, которая выведет на консоль сообщение ЭТО БУДЕТ 2:
  

Ответ:

 (1) 2 

 (2) Цвет.Зеленый 

 (3) Цвет.Черный 

 (4) Цвет.Синий 

 (5) (Цвет)(Сторона.ЮгоВосток - 1) 


Упражнение 27:
Номер 1
Проанализируйте приведенный код.
  
class Вуз {   public string название;
    public Вуз(string н)   { название = н; } }
class Student 
{  private string фамилия;  private Вуз вуз;
    public Student(string фам, Вуз уз) { фамилия = фам;  вуз = уз; }
    public override string ToString()
    { return string.Format("{0} учится в {1}" ,фамилия, вуз.название) ; }  }
class Program
{   static void Main(string[] args)
    {  Student[] студенты = new Student[2];
        Вуз вуз1 = new Вуз("МГУ");  студенты[0] = new Student("Иванов", вуз1);
        вуз1 = new Вуз("ГУ-ВШЭ");  студенты[1] = new Student("Петров", вуз1);
        вуз1.название = "МВТУ";   System.Console.WriteLine(студенты[1]);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Иванов учится в МГУ 

 (3) Петров учится в ГУ-ВШЭ 

 (4) Петров учится в МВТУ 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Проанализируйте приведенный код.
  
class Вуз {   public string название;
    public Вуз(string н)   { название = н; } }
class Student {    private string фамилия;  private Вуз вуз;
    public Student(string фам, Вуз уз)
    { фамилия = фам;  вуз = уз; }
    public override string ToString()
    { return string.Format("{0} учится в {1}" ,фамилия, вуз.название) ; }  }
class Program
{   static void Main(string[] args)
    {  Student[] студенты = new Student[2];
        Вуз вуз1 = new Вуз("МГУ");
        Вуз вуз2 = new Вуз("ГУ-ВШЭ");  вуз1 = вуз2;
        студенты[0] = new Student("Иванов", вуз1);
        студенты[1] = new Student("Петров", вуз2);
        System.Console.WriteLine(студенты[0]);
}   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Иванов учится в МГУ 

 (3) Иванов учится в ГУ-ВШЭ 

 (4) Петров учится в ГУ-ВШЭ 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Проанализируйте приведенный код.
  
class Вуз {   public string название;
    public Вуз(string н)   { название = н; } }
class Student {    private string фамилия;  private Вуз вуз;
    public Student(string фам, Вуз уз)
    { фамилия = фам;  вуз = уз; }
    public override string ToString()
    { return string.Format("{0} учится в {1}", фамилия, вуз.название) ; }  }
class Program
{   static void Main(string[] args)
    {  Student[] студенты = new Student[2];
        Вуз вуз1 = new Вуз("МГУ");
        Вуз вуз2 = new Вуз("ГУ-ВШЭ");  вуз1 = вуз2;
        студенты[0] = new Student("Иванов", вуз1);
        студенты[1] = new Student("Петров", вуз1);
        System.Console.WriteLine(студенты[1]);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Петров учится в МГУ 

 (3) Иванов учится в ГУ-ВШЭ 

 (4) Петров учится в ГУ-ВШЭ 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Исходный модуль содержит определения:
  
class Корпус {
    public string тип; public int цена;
    public Корпус (string тип,int цена){this.тип=тип; this.цена=цена; } }
class Лампочка {
    public int мощность; public int цена;
    public Лампочка(int мощность,int цена){this.мощность=мощность; this.цена=цена; } }
class Прибор {
    public Корпус кор; public Лампочка лам;
    public Прибор(Корпус кор,Лампочка лам){this.кор=кор; this.лам=лам; }
    public int Цена { get {return кор.цена + лам.цена; } } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
        Корпус кор = new Корпус("Тюльпан", 100); Лампочка лам = new Лампочка(60,50);
        Прибор пр1=new Прибор(кор, лам);
        лам.цена = 100;
        Прибор пр2 = new Прибор(кор, лам);
        System.Console.WriteLine(пр1.Цена + пр2.Цена);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 300 

 (2) 350 

 (3) 400 

 (4) 0 

 (5) 150 


Номер 5
Исходный модуль содержит определения:
  
class Корпус {
    public string тип; public int цена;
    public Корпус (string тип,int цена){this.тип=тип; this.цена=цена; } }
class Лампочка {
    public int мощность; public int цена;
    public Лампочка(int мощность,int цена){this.мощность=мощность; this.цена=цена; } }
class Прибор {
    public Корпус кор; public Лампочка лам;
    public Прибор(Корпус кор,Лампочка лам)
           {this.кор=кор; this.лам=new Лампочка(лам.мощность, лам.цена); }
    public int Цена { get {return кор.цена + лам.цена; } } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
        Корпус кор = new Корпус("Тюльпан", 100); Лампочка лам = new Лампочка(60,50);
        Прибор пр1=new Прибор(кор, лам);
        лам.цена = 100;
        Прибор пр2 = new Прибор(кор, лам);
        System.Console.WriteLine(пр1.Цена + пр2.Цена);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 300 

 (2) 350 

 (3) 400 

 (4) 0 

 (5) 150 


Номер 6
Исходный модуль содержит определения:
  
class Корпус {
    public string тип; public int цена;
    public Корпус (string тип,int цена){this.тип=тип; this.цена=цена; } }
class Лампочка {
    public int мощность; public int цена;
    public Лампочка(int мощность,int цена){this.мощность=мощность; this.цена=цена; } }
class Прибор {
    public Корпус кор; public Лампочка лам;
    public Прибор(Корпус кор,Лампочка лам)
           {this.кор=кор; this.лам=new Лампочка(лам.мощность, лам.цена); }
    public int Цена { get {return кор.цена + лам.цена; } } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
        Корпус кор = new Корпус("Тюльпан", 100); Лампочка лам = new Лампочка(60,50);
        Прибор пр1=new Прибор(кор, лам);
        Прибор пр2=new Прибор(кор, лам);
        лам.цена = 100;
        System.Console.WriteLine(пр1.Цена + пр2.Цена);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 300 

 (2) 350 

 (3) 400 

 (4) 0 

 (5) 150 


Упражнение 28:
Номер 1
Проанализируйте приведенный код.
  
struct Auto {  public string марка; 
    public Auto(string m) { марка = m; }
}
class Водитель
{   private string фамилия;   private Auto марка;
    public Водитель(string фам, Auto м)  { фамилия = фам; марка = м; }
    public override string ToString()
    { return string.Format("{0}у нравится {1}",фамилия, марка.марка) ; } 
}
class Program
{  static void Main(string[] args)
    {  Водитель[] водители = new Водитель[2];
        Auto auto1 = new Auto("Мерседес");
        Auto auto2 = new Auto("Тойота");
        водители[0] = new Водитель("Иванов", auto1);
        водители[1] = new Водитель("Петров", auto2);
        auto2 = auto1;  System.Console.WriteLine(водители[1]);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) Иванову нравится Тойота 

 (3) Петрову нравится Тойота 

 (4) Петрову нравится Мерседес 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Проанализируйте приведенный код.
  
struct Auto {  public string марка; 
    public Auto(string m) { марка = m; }
}
class Водитель
{    private string фамилия;   private Auto марка;
    public Водитель(string фам, Auto м)  { фамилия = фам; марка = м; }
    public override string ToString()
    { return string.Format("{0}у нравится {1}",фамилия, марка.марка) ; } 
}
class Program
{   static void Main(string[] args)
    {  Водитель[] водители = new Водитель[2];
        Auto auto1 = new Auto("Мерседес");
        Auto auto2 = new Auto("Тойота");
        водители[0] = new Водитель("Иванов", auto1);
        водители[1] = new Водитель("Петров", auto2); auto2.марка = "Форд";
        System.Console.WriteLine(водители[1]);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Петрову нравится Тойота 

 (2) Иванову нравится Мерседес 

 (3) Петрову нравится Форд 

 (4) программа завершится аварийно 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Проанализируйте приведенный код.
  
struct Auto {  public string марка; 
    public Auto(string m) { марка = m; }
}
class Водитель
{    private string фамилия;   private Auto марка;
    public Водитель(string фам, Auto м)  { фамилия = фам; марка = м; }
    public override string ToString()
    { return string.Format("{0} имеет {1}",фамилия, марка.марка) ; } 
}
class Program
{   static void Main(string[] args)
    {  Водитель[] водители = new Водитель[2];
        Auto auto1 = new Auto("Мерседес");
        Auto auto2 = new Auto("Тойота");    auto2 = auto1;
        водители[0] = new Водитель("Иванов", auto1);
        водители[1] = new Водитель("Петров", auto2);
        System.Console.WriteLine(водители[1]);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Иванов имеет Мерседес 

 (2) Петров имеет Мерседес 

 (3) Петров имеет Форд 

 (4) программа завершится аварийно 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Исходный модуль содержит определения:
  
struct Лампочка { 
  public int мощность;
  public Лампочка(int мощность){this.мощность=мощность;} }
class Прибор {
  public Лампочка[] лам;
  public Прибор(Лампочка лам)
      { this.лам = new Лампочка[2]; this.лам[0]=this.лам[1]=лам;}
  public int Мощность
  {  get { 
           int s=0;
           for (int i = 0; i < лам.Length; i++) s += лам[i].мощность;
           return s; }
  } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
Лампочка лам = new Лампочка(50);
Прибор пр1=new Прибор(лам);
лам.мощность = 100;
Прибор пр2=new Прибор(лам);
System.Console.WriteLine(пр1.Мощность + пр2.Мощность);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 300 

 (2) 200 

 (3) 400 

 (4) 100 

 (5) 150 


Номер 5
Исходный модуль содержит определения:
  
struct Лампочка { 
  public int мощность;
  public Лампочка(int мощность){this.мощность=мощность;} }
class Прибор {
  public Лампочка[] лам;
  public Прибор(Лампочка лам)
      { this.лам = new Лампочка[2]; this.лам[0]=this.лам[1]=лам;}
  public int Мощность
  {  get { 
           int s=0;
           for (int i = 0; i < лам.Length; i++) s += лам[i].мощность;
           return s; }
  } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
Лампочка лам = new Лампочка(50);
Прибор пр1=new Прибор(лам);
Прибор пр2=new Прибор(лам);
лам.мощность = 100;
System.Console.WriteLine(пр1.Мощность + пр2.Мощность);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 300 

 (2) 200 

 (3) 400 

 (4) 100 

 (5) 150 


Номер 6
Исходный модуль содержит определения:
  
struct Лампочка { 
     public int мощность;
     public Лампочка(int мощность){this.мощность=мощность;} }
class Прибор {
     public Лампочка[] лам;
     public Прибор(Лампочка[] лам)  { this.лам = лам;}
     public int Мощность
     {  get { 
           int s=0;
           for (int i = 0; i < лам.Length; i++) s += лам[i].мощность;
           return s; }
     } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
Лампочка л1 = new Лампочка(50);
Лампочка л2 = new Лампочка(100);
 Лампочка[] лам = new Лампочка[] { л1, л2 };
 Прибор пр1=new Прибор(лам);
  л2 = л1;
  Прибор пр2=new Прибор(лам);
  System.Console.WriteLine(пр1.Мощность + пр2.Мощность);
  
  Укажите результат вывода на консоль после выполнения метода Main():
  

Ответ:

 (1) 250 

 (2) 200 

 (3) 400 

 (4) 100 

 (5) 300 


Упражнение 29:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) для перебора элементов коллекции с помощью оператора foreach необходимо реализовать интерфейс IEnumerable 

 (2) класс Queue имеет метод, изменяющий порядок следования элементов всего списка или его части на обратный 

 (3) коллекция SortedList хранит элементы, отсортированные по значению 

 (4) коллекция класса ListDictionary является связным (однонаправленным) списком 

 (5) упаковка объектов - это процесс сжатия данных 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) для работы с коллекцией класса Queue можно использовать индексатор 

 (2) удаление элементов из коллекции класса Stack осуществляется по принципу "последним пришел - первым обслужен" 

 (3) коллекции являются динамическими, потому что они хранятся в динамической памяти 

 (4) распаковка объектов - это процесс восстановления исходного вида объекта, выполняемый после операции его сжатия (архивирования) 

 (5) если извлекаемый из коллекции ArrayList объект имеет тип, отличный от System.Object, то необходимо его принудительное преобразование в исходный тип  


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) удаление элементов из коллекции SortedList осуществляется по принципу "первым пришел - первым обслужен"  

 (2) удаление элементов из коллекции Queue осуществляется по принципу "последним пришел - первым обслужен"  

 (3) если коллекция наследует интерфейс IList, то с коллекцией можно работать, используя индексатор  

 (4) коллекция класса BitArray хранит последовательность байтов (со значениями ноль или один), каждый из которых рассматривается как соответствующий бит с тем же значением  

 (5) все объекты, записываемые в коллекцию, автоматически приводятся к типу System.Object 


Номер 4
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) доступ к элементам коллекции типа ArrayList может выполняться по индексу элемента 

 (2) значение свойства Count применительно к коллекции типа Stack соответствует количеству элементов в коллекции в данный момент 

 (3) значение свойства Count применительно к коллекции типа Queue доступно для записи и может быть установлено с помощью операции присваивания 

 (4) метод ToArray() применительно к коллекции типа Stack выполняет преобразование этой коллекции в коллекцию типа ArrayList 

 (5) коллекция типа ListDictionary не может хранить объекты классов, определяемых программистом 


Номер 5
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) доступ к элементам коллекции типа Stack может выполняться по индексу элемента 

 (2) значение свойства Count применительно к коллекции типа ListDictionary соответствует максимально возможному количеству элементов в коллекции 

 (3) в классе ArrayList определен метод сортировки элементов коллекции 

 (4) метод ToArray() применительно к коллекции типа Queue выполняет преобразование этой коллекции в массив объектов 

 (5) коллекция типа Stack может хранить объекты классов, определяемых программистом 


Номер 6
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) значение свойства Capacity применительно к коллекции типа ArrayList соответствует максимально возможному количеству элементов в коллекции 

 (2) метод Clear() применительно к коллекции типа Hashtable выполняет установку всех элементов коллекции в значение по умолчанию 

 (3) коллекция типа Queue поддерживает упорядоченность элементов в порядке их занесения в коллекцию 

 (4) коллекция типа Stack поддерживает упорядоченность элементов в порядке, обратном их занесения в коллекцию 

 (5) коллекция типа ArrayList может хранить объекты только типов значений 


Упражнение 30:
Номер 1
Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {   ArrayList al = new ArrayList();    
        al.Add("Иванов");
        al.Add("Петров");
        al.Add(3.1415f);
        al.Add("Ларин");
        foreach (string str in al)
            Console.Write(str + " ");
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно в момент добавления в коллекцию числа вместо фамилии 

 (3) Иванов Петров Ларин  

 (4) Иванов Петров 3,1415 Ларин 

 (5) программа завершится аварийно в цикле foreach 


Номер 2
Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {   ArrayList al = new ArrayList();    
        al.Add("Иванов");
        al.Add("Петров");
             al.Add(3.1415f);
        al.Add("Ларин");
        for (int i = 0; i < al.Count; i++)
            Console.Write(al[i] + " ");
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно, так как вместо фамилии в коллекцию делается попытка добавить число 

 (3) Иванов Петров Ларин 

 (4) Иванов Петров 3,1415 Ларин 

 (5) Иванов Петров 


Номер 3
Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {   ArrayList al = new ArrayList();    
        al.Add("Иванов");
        al.Add("Петров");
               al.Add(3.1415f);
        al.Add("Ларин");
        foreach (object str in al)   Console.Write(str + " ");
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно в момент добавления в коллекцию числа вместо фамилии 

 (3) Иванов Петров 3,1415 Ларин 

 (4) Иванов Петров Ларин 

 (5) программа завершится аварийно в цикле foreach 


Номер 4
Исходный модуль содержит указание используемых пространств имен System,  System.Collections и определения классов:
  
System.Collections и определения классов:
class A {public virtual void Show(){Console.Write("SOS! ");}}
class B:A {public new void Show(){Console.Write("ВСЕМ! ");} }
class C:A {public new void Show(){Console.Write("УРА! "); } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
ArrayList a = new ArrayList();
a.Add(new A());        a.Add(new B());        a.Add(new C());
for (int i=0; i<a.Count; i++)
     if(a[i] is A)
         ((A)a[i]).Show();
  
  Укажите результат вывода после запуска программы на компиляцию и выполнение:
  

Ответ:

 (1) SOS! ВСЕМ! УРА! 

 (2) генерируется исключение, так как невозможно преобразовать типы ссылок 

 (3) SOS! SOS! SOS! 

 (4) SOS! ВЕМ! SOS! 

 (5) SOS! SOS! УРА! 


Номер 5
Исходный модуль содержит указание используемых пространств имен System,  System.Collections и определения классов:
  
System.Collections и определения классов:
class A {public virtual void Show(){Console.Write("SOS! ");}}
class B:A {public override void Show(){Console.Write("ВСЕМ! ");} }
class C:A {public new void Show(){Console.Write("УРА! "); } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
ArrayList a = new ArrayList();
a.Add(new A());        a.Add(new B());        a.Add(new C());
for (int i=0; i<a.Count; i++)
     if(a[i] is A)
         ((A)a[i]).Show();
  
  Укажите результат вывода после запуска программы на компиляцию и выполнение:
  

Ответ:

 (1) SOS! ВСЕМ! УРА! 

 (2) генерируется исключение, так как невозможно преобразовать типы ссылок 

 (3) SOS! SOS! SOS! 

 (4) SOS! ВСЕМ! SOS! 

 (5) SOS! SOS! УРА! 


Номер 6
Исходный модуль содержит указание используемых пространств имен System,  System.Collections и определения классов:
  
System.Collections и определения классов:
class A {public virtual void Show(){Console.Write("SOS! ");}}
class B:A {public new void Show(){Console.Write("ВСЕМ! ");} }
class C:A {public override void Show(){Console.Write("УРА! "); } }
  
  В классе Program определен метод Main, в теле которого находится код:
  
ArrayList a = new ArrayList();
a.Add(new A());        a.Add(new B());        a.Add(new C());
for (int i=0; i<a.Count; i++)
     if(a[i] is A)
         ((A)a[i]).Show();
  
  Укажите результат вывода после запуска программы на компиляцию и выполнение:
  

Ответ:

 (1) SOS! ВСЕМ! УРА! 

 (2) генерируется исключение, так как невозможно преобразовать типы ссылок 

 (3) SOS! SOS! SOS! 

 (4) SOS! ВЕМ! SOS! 

 (5) SOS! SOS! УРА! 


Упражнение 31:
Номер 1
  Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {  Hashtable ht = new Hashtable();    
        ht.Add("ВУЗ ", " МГУ");
       ht.Add("Птица", "чиж");
        ht["Ветер"] = " пассат ";
        foreach (string str in ht.Keys)
            Console.Write(str + ": " + ht[str] + ". ");
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно в момент изменения отсутствующей в таблице строки с ключом Ветер 

 (3) ВУЗ: МГУ. Птица: чиж. Ветер: пассат. 

 (4) Птица: чиж. Ветер: пассат. 

 (5) программа завершится аварийно в цикле foreach 


Номер 2
Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {  Hashtable ht = new Hashtable();   
        ht.Add("ВУЗ", "МГУ");
        ht.Add("Птица", "чиж");
        ht.Add("Ветер", "пассат");
        ht.Sort();
        foreach (string str in ht.Keys)
            Console.Write(str + ": " + ht[str] + ". ");
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) ВУЗ: МГУ. Ветер: пассат. Птица: чиж. 

 (3) ВУЗ: МГУ. Птица: чиж. Ветер: пассат. 

 (4) Ветер: пассат. ВУЗ: МГУ. Птица: чиж. 

 (5) программа завершится аварийно в цикле foreach 


Номер 3
Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {
        Queue q = new Queue();
        q.Enqueue(11);
        q.Enqueue(22);
        q.Enqueue(33);
        q.Dequeue(); 
        q.Enqueue(44);
        Console.WriteLine("{0} {1} {2}", q[0], q[1], q[2] );
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) 11 22 33 44  

 (2) 11 22 44 

 (3) 22 33 44 

 (4) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (5) программа завершится аварийно, так как извлекаемое из коллекции число не присваивается переменной 


Номер 4
Программа разрабатывалась для заполнения таблицы автомобилей и вывода их марок на консоль:
  
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        Hashtable tab = new Hashtable();
        tab.Add(1, "Газ3102");
        tab.Add(2, "Ваз2110");
        foreach (  ____  ob in tab.Keys) Console.Write(tab[ob] + " ");
    }
}
  
  Среди перечисленных ниже кодов укажите все коды, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, которая выведет на консоль сообщение Ваз2110  Газ3102:
  

Ответ:

 (1) int 

 (2) string 

 (3) object 

 (4) tab 

 (5) Hashtable 


Номер 5
Программа разрабатывалась для заполнения таблицы автомобилей и вывода их марок на консоль:
  
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        Hashtable tab = new Hashtable();
        tab.Add(1, "Газ3102");
        tab.Add(2, "Ваз2110");
       foreach ( ______ ob in tab.Values) Console.Write(ob + " ");
    }
}
  
  Среди перечисленных ниже кодов укажите все коды, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, которая выведет на консоль сообщение Ваз2110  Газ3102:
  

Ответ:

 (1) int 

 (2) string 

 (3) object 

 (4) tab 

 (5) Hashtable 


Номер 6
Программа разрабатывалась для заполнения таблицы автомобилей и вывода их марок на консоль:
  
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        Hashtable tab = new Hashtable();
        tab.Add("Тип1", 2111);
        tab.Add("Тип2", 2101);
        foreach (string ob in tab.Keys) Console.Write(tab[ob] + " ");
    }
}
  
  Среди перечисленных ниже кодов укажите все коды, подстановка каждого из которых вместо знаков подчеркивания позволяет получить корректную программу, которая выведет на консоль сообщение 2101  2111:
  

Ответ:

 (1) string 

 (2) object 

 (3) int 

 (4) short 

 (5) class 


Упражнение 32:
Номер 1
Проанализируйте приведенный код.
  
    public static void Main()
    {
        System.Collections.Queue q = new System.Collections.Queue();
        q.Enqueue(11);
        q.Enqueue(22);
        q.Enqueue(33);
        ___________________ 
        q.Enqueue(44);
        foreach (int i in q) System.Console.Write(i + " ");
    }
  
  Требуется вывести числа 22 33 44. Среди перечисленных ниже кодов укажите все коды, подстановка каждого из которых вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) q.Peek(); 

 (2) q.Dequeue(); 

 (3) q.Dequeue(11); 

 (4) long a=(int)q.Dequeue(); 


Номер 2
Проанализируйте приведенный код.
  
    public static void Main()
    {
        System.Collections.Queue q = new System.Collections.Queue();
        q.Enqueue(11);
        q.Enqueue(22);
        q.Enqueue(33);
        ___________________ 
        q.Enqueue(44);
        foreach (int i in q) System.Console.Write(i + " ");
    }
  
  Требуется вывести числа 11 22 33 44. Среди перечисленных ниже кодов укажите  код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу:
  

Ответ:

 (1) Queue.Peek(); 

 (2) q.Peek(); 

 (3) q.Dequeue(); 

 (4) int a=(int)q[0]; 

 (5) int a=(int)q.Dequeue(); 


Номер 3
Приведенному ниже коду доступны пространства имен System и System.Collections.
  
    public static void Main()
    {
        Hashtable ht = new Hashtable();   
        ht.Add("ВУЗ", "МГУ");
        ht.Add("Птица", "чиж");
        ht.Add("Ветер", "пассат");
        Console.Write("{0} - это птица",_______________);
    }
  
  Требуется вывести строку чиж - это птица. Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить программу, решающую поставленную задачу: 
  

Ответ:

 (1) ht[2] 

 (2) ht.Keys[1] 

 (3) ht[1] 

 (4) ht.Keys["Птица"] 

 (5) ht["Птица"] 


Номер 4
Исходный модуль содержит указание используемых пространств имен System,  System.Collections. В модуле определен единственный класс Program c методом Main, в теле которого находится код:
  
Stack s = new Stack();
string str = "A2B43";
for(int i=0; i<str.Length; i++)
     if(str[i]>='0' && str[i]<='9') s.Push(str[i]);
while(s.Count > 0)
    Console.Write(s.Pop());
  
  Укажите результат вывода после запуска программы на компиляцию и выполнение:
  

Ответ:

 (1) 34B2A 

 (2) 243 

 (3) 342 

 (4) программа бесконечно выводит на консоль 3 

 (5) программа бесконечно выводит на консоль 2 


Номер 5
Исходный модуль содержит указание используемых пространств имен System,  System.Collections. В модуле определен единственный класс Program c методом Main, в теле которого находится код:
  
Stack s = new Stack();
string str = "A2B43";
for(int i=0; i<str.Length; i++)
     if(str[i]>='0' && str[i]<='9') s.Push(str[i]);
while(s.Count > 0)
    Console.Write(s.Peek());
  
  Укажите результат вывода после запуска программы на компиляцию и выполнение:
  

Ответ:

 (1) 34B2A 

 (2) 243 

 (3) 342 

 (4) программа бесконечно выводит на консоль 3 

 (5) программа бесконечно выводит на консоль 2 


Номер 6
Исходный модуль содержит указание используемых пространств имен System,  System.Collections. В модуле определен единственный класс Program c методом Main, в теле которого находится код:
  
Queue q = new Queue();
string str = "A2B43";
for(int i=0; i<str.Length; i++)
    if(str[i]>='0' && str[i]<='9') q.Enqueue(str[i]);
while(q.Count > 0)
    Console.Write(q.Peek());
  
  Укажите результат вывода после запуска программы на компиляцию и выполнение:
  

Ответ:

 (1) A2B43 

 (2) 243 

 (3) 342 

 (4) программа бесконечно выводит на консоль 3 

 (5) программа бесконечно выводит на консоль 2 


Упражнение 33:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) делегат - это структура 

 (2) делегат - это класс 

 (3) событие - это член класса 

 (4) делегат - это свойство 

 (5) делегат - это интерфейс 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) делегат не может вызывать статический метод 

 (2) с помощью одного делегата, можно вызывать методы с разным типом возвращаемого значения 

 (3) вызов экземпляра делегата на выполнение трансформируется в передачу управления методу, связанному с этим экземпляром 

 (4) делегат можно объявить в любом месте, где может быть помещен какой-либо класс.  

 (5) делегаты безопасны в отношении типов 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) с помощью одного делегата, можно вызывать любые доступные методы, имеющие такую же сигнатуру, включая тип возвращаемого значения 

 (2) создание экземпляра делегата связано с передачей конструктору имени метода 

 (3) у делегата может быть любой модификатор доступа 

 (4) делегат может вызывать только объектные методы 

 (5) экземпляр делегата не может быть статическим 


Номер 4
Среди перечисленных модификаторов укажите все модификаторы, допустимые при определении типа делегата:

Ответ:

 (1) static 

 (2) public 

 (3) protected 

 (4) sealed 

 (5) private 


Номер 5
При определении типа делегата обязательно необходимо указать:
  

Ответ:

 (1) модификатор доступности делегата 

 (2) модификатор доступности метода 

 (3) имя метода 

 (4) параметры метода (если таковые имеются) 

 (5) тип возвращаемого значения 


Номер 6
Определенный в программе тип делегата
  

Ответ:

 (1) может быть использован в качестве предка при определении делегатов - наследников 

 (2) должен содержать реализацию вызываемого метода 

 (3) может размещаться внутри одного из классов программы 

 (4) может размещаться вне всяких классов программы 

 (5) должен иметь конструктор без параметров 


Упражнение 34:
Номер 1
В классе Test определен приведенный ниже код:
  
    delegate string strMod(string str);
    public static string ReplaceSpaces(string a)   { return a.Replace(' ', '-'); }
    public int StrLength(string a)   { return a.Length; }

    public static void Main()
    {  strMod strOp = new strMod(Test.ReplaceSpaces);
        string str = strOp("Несложный тест");
        strOp = new strMod(new Test().StrLength);
        System.Console.WriteLine(strOp(str));
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) будет обнаружена синтаксическая ошибка, связанная с вызовом метода StrLength 

 (2) программа завершится аварийно  

 (3) Несложный тест 

 (4) Несложный-тест 

 (5) 14 


Номер 2
В классе Test определен приведенный ниже код:
  
    delegate string strMod(string str);
    public static string ReplaceSpaces(string a)  { return a.Replace(' ', '-'); }
    public string ReplaceHyphens (string a) { return a.Replace('-', '*'); }

    public static void Main()
    {  string str = System.Console.ReadLine();
        strMod strOp = new strMod(Test.ReplaceSpaces);
        str = strOp(str);
        strOp = new strMod(new Test().ReplaceHyphens);
        str = strOp(str);
        System.Console.WriteLine(strOp(str));
    }
  
  Пользователь собирается после запуска программы ввести фразу ОЧЕНЬ ПРОСТОЙ ТЕСТ. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно 

 (3) ОЧЕНЬ ПРОСТОЙ ТЕСТ 

 (4) ОЧЕНЬ*ПРОСТОЙ*ТЕСТ 

 (5) ОЧЕНЬ-ПРОСТОЙ-ТЕСТ 


Номер 3
В классе Test определен приведенный ниже код:
  
    delegate string strMod(string str, char ch);
    public static string ReplaceSpaces(string a) { return a.Replace(' ', '-'); }
    public string ReplaceHyphens(string a, char b) { return a.Replace('-', b); }
    public static void Main()
    {
        strMod strOp = new strMod(Test.ReplaceSpaces);
        string str = strOp("очень простой тест "); 
        strOp = new strMod(new Test().ReplaceHyphens);
        System.Console.WriteLine(strOp(str, '*'));
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно 

 (3) очень простой тест 

 (4) очень*простой*тест 

 (5) очень-простой-тест 


Номер 4
Программа предназначена для вычисления и вывода квадрата числа 3:
  
public delegate int F( int x);
class A { public int F(int x) { return x * x; }  }
class B { public double F(double x) { return x * x; } }
class Program
{
   static void Main()
   {
       F f = new F( _____ );
      System.Console.WriteLine(f(3));
    }
}
  
  Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить корректную программу, решающую эту задачу:
  

Ответ:

 (1) new B().F 

 (2) A.F 

 (3) A.F() 

 (4) new A.F() 

 (5) new A().F 


Номер 5
Программа предназначена для вычисления и вывода квадрата числа 3:
  
public delegate double F( double x);
class A { public int F(int x) { return x * x; }  }
class B { public static double F(double x) { return x * x; } }
class Program
{
       static void Main()
       {
           F f = new F(  _____  );
           System.Console.WriteLine(f(3));
       }
}
  
  Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить корректную программу, решающую эту задачу:
  

Ответ:

 (1) new B().F 

 (2) B.F 

 (3) B.F() 

 (4) new A().F 

 (5) A.F 


Номер 6
Программа предназначена для вычисления и вывода квадрата числа 3:
  
class D { public delegate double F(double x);}
class A { public int F(int x) { return x * x; } }
class B { public static double F(double x) { return x * x; } }
class Program
{
   static void Main()
   {
       ______________ ;
      System.Console.WriteLine(f(3));
   }
}
  
  Среди перечисленных ниже кодов укажите код, подстановка которого вместо знаков подчеркивания позволяет получить корректную программу, решающую эту задачу:
  

Ответ:

 (1) .F f = new F(B.F) 

 (2) D.F f = new D.F(A.F) 

 (3) D.F f = new D.F(B.F) 

 (4) D.F f = new F(B.F) 

 (5) D.F f = new D.F(new B().F) 


Упражнение 35:
Номер 1
В классе Test определен приведенный ниже код:
  
    public delegate int CallBackMethod(int a1, int a2);
    public static void Main()
    {  int s = 0;
        if (System.Console.ReadLine() == "1")
            s = CallMethod(new CallBackMethod(CBMethod1));
        else s = CallMethod(new CallBackMethod(CBMethod2));
        System.Console.WriteLine(s);
    }
    public static int CallMethod(CallBackMethod cbMethod)
    {   return cbMethod(33, 22);  }
    public static int CBMethod1(int a1, int a2)  {   return a1 + a2;  }
    public static int CBMethod2(int a1, int a2)  {   return a1 - a2;   }
  
  Пользователь собирается после запуска программы ввести цифру 1. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно 

 (3) 11 

 (4) Test.CallMethod 

 (5) 55 


Номер 2
В классе Test определен приведенный ниже код:
  
    public delegate int CallBackMethod(int a1, int a2);
    public static void Main()
    {  int s = 0;
        s = CallMethod(new CallBackMethod(CBMethod));
        System.Console.WriteLine(s);
    }
    public static int CallMethod(CallBackMethod cbMethod)
    {   return cbMethod(11, 22);  }
    public static int CBMethod(int a1, int a2)
    {   return a1 + a2;  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно 

 (3) 0; 

 (4) Test.CallMethod 

 (5) 33 


Номер 3
В классе Test определен приведенный ниже код:
  
    public delegate int CallBackMethod(int a1, int a2);
    public static void Main()
    {  int s = 0;
        if (System.Console.ReadLine() == "1")
            s = CallMethod(new CallBackMethod(CBMethod1));
        else s = CallMethod(new CallBackMethod(CBMethod2));
        System.Console.WriteLine(s);
    }
    public static int CallMethod(CallBackMethod cbMethod)
    {   return cbMethod(33, 22);  }
    public static int CBMethod1(int a1, int a2)  {   return a1 + a2;  }
    public static int CBMethod2(int a1, int a2)  {   return a1 - a2;   }
  
  Пользователь собирается после запуска программы ввести цифру 2. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) программа завершится аварийно 

 (3) 11; 

 (4) Test.CallMethod 

 (5) 55 


Номер 4
Проанализируйте приведенную ниже программу и укажите результат после попытки запустить программу на компиляцию и выполнение:
  
using System;
class Program
{
    static int[] a = new int[] { 10, 30, 20 };
    public delegate void F();
    public static void R() { Array.Reverse(a); }
    public static void S() { Array.Sort(a); }
    public static void M() { int buf = a[0]; a[0] = a[a.Length - 1]; a[a.Length - 1] = buf; }
    static void Main()
    {
      
      F f = new F(S);   f+=M;   f-=S;    f();
      for (int i = 0; i < a.Length; i++) Console.Write(a[i]+" ");
    }
}
  
  

Ответ:

 (1) 10 20 30 

 (2) 10 30 20 

 (3) 30 20 10 

 (4) 20 30 10 

 (5) возникает исключение при попытке обращения по null-ссылке 


Номер 5
Проанализируйте приведенную ниже программу и укажите результат после попытки запустить программу на компиляцию и выполнение:
  
using System;
class Program
{
    static int[] a = new int[] { 10, 30, 20 };
    public delegate void F();
    public static void R() { Array.Reverse(a); }
    public static void S() { Array.Sort(a); }
    public static void M() { int buf = a[0]; a[0] = a[a.Length - 1]; a[a.Length - 1] = buf; }
    static void Main()
    {
      F f = new F(R); f += S; f -= R; f -= S;  f();
      for (int i = 0; i < a.Length; i++) Console.Write(a[i]+" ");
    }
}
  
  

Ответ:

 (1) 10 20 30 

 (2) 10 30 20 

 (3) 30 20 10 

 (4) 20 30 10 

 (5) возникает исключение при попытке обращения по null-ссылке 


Номер 6
Проанализируйте приведенную ниже программу и укажите результат после попытки запустить программу на компиляцию и выполнение:
  
using System;
class Program
{
    static int[] a = new int[] { 10, 30, 20 };
    public delegate void F();
    public static void R() { Array.Reverse(a); }
    public static void S() { Array.Sort(a); }
    public static void M() { int buf = a[0]; a[0] = a[a.Length - 1]; a[a.Length - 1] = buf; }
    static void Main()
    {
      F f = new F(S); f += R; f += M; f -= S;  f();
      for (int i = 0; i < a.Length; i++) Console.Write(a[i]+" ");
    }
}
  
  

Ответ:

 (1) 10 20 30 

 (2) 10 30 20 

 (3) 30 20 10 

 (4) 20 30 10 

 (5) возникает исключение при попытке обращения по null-ссылке 


Упражнение 36:
Номер 1
Проанализируйте приведенный код.
  
delegate void MyEventHandler(ref int a); 
class MyEvent 	
{  public event MyEventHandler SomeEvent;
    public void OnSomeEvent(ref int d) 
   {  if (SomeEvent != null) SomeEvent(ref d);  } }
class EventTest
{  static void Handler1(ref int b) { b = 2 * b;  }
    static void Handler2(ref int c) {  c = c + 12; }
    public static void Main()
    {  MyEvent evt = new MyEvent();
        int a = int.Parse(System.Console.ReadLine());
        if (a > 0) evt.SomeEvent += new MyEventHandler(EventTest.Handler1);
        else if (a < 0) evt.SomeEvent += new MyEventHandler(EventTest.Handler2);
        evt.OnSomeEvent(ref a);   System.Console.WriteLine(a);   
} }
  
  Пользователь собирается после запуска программы ввести цифру 5. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа завершится аварийно 

 (2) 10 

 (3) 22 

 (4) 15 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Проанализируйте приведенный код.
  
delegate void MyEventHandler(ref int a); 
class MyEvent 	
{  public event MyEventHandler SomeEvent;
    public void OnSomeEvent(ref int d) 
   {  if (SomeEvent != null) SomeEvent(ref d);  } }
class EventTest
{  static void Handler1(ref int b) { b = 2 * b;  }
    static void Handler2(ref int c) {  c = c + 12;  Handler1(ref c);}
    public static void Main()
    {  MyEvent evt = new MyEvent();
        int a = int.Parse(System.Console.ReadLine());
        if (a > 0) evt.SomeEvent += new MyEventHandler(EventTest.Handler1);
        else if (a < 0) evt.SomeEvent += new MyEventHandler(EventTest.Handler2);
        evt.OnSomeEvent(ref a);   System.Console.WriteLine(a);    
} }
  
  Пользователь собирается после запуска программы ввести число -5. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) 7 

 (2) 14 

 (3) -5 

 (4) программа завершится аварийно 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Проанализируйте приведенный код.
  
delegate void MyEventHandler(ref int a); 
class MyEvent 	
{  public event MyEventHandler SomeEvent;
    public void OnSomeEvent(ref int d) 
   {  if (SomeEvent != null) SomeEvent(ref d);  } }
class EventTest
{  static void Handler1(ref int b) { b = 2 * b;  }
    static void Handler2(ref int c) {  c = c + 12;  Handler1(ref c);}
    public static void Main()
    {  MyEvent evt = new MyEvent();
        int a = int.Parse(System.Console.ReadLine());
        if (a > 0) evt.SomeEvent += new MyEventHandler(EventTest.Handler1);
        else if (a < 0) evt.SomeEvent += new MyEventHandler(EventTest.Handler2);
        evt.OnSomeEvent(ref a);   System.Console.WriteLine(a);    } }
  
  Пользователь собирается после запуска программы ввести цифру 0. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) 0 

 (2) 24 

 (3) 12 

 (4) программа завершится аварийно 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Проанализируйте приведенную ниже программу и укажите результат после попытки запустить программу на компиляцию и выполнение:
  
public delegate void Выдать(ref int a);
class Начисление{
    int s = 100;
    public event Выдать Зарплата;
    public void Начислить() { Зарплата(ref s);  }
    public void Получите()  { System.Console.Write(s); }}
class БумТрест {  public static void OnЗарплата(ref int s) { s = s + 10; } }
class БумСтрой {  public static void OnЗарплата(ref int s) { s = s - 30; } }
class Совместитель{
  static void Main(string[] args)  {
    Начисление нач = new Начисление();
    нач.Зарплата += new Выдать(БумТрест.OnЗарплата);
    нач.Зарплата += new Выдать(БумСтрой.OnЗарплата);
    нач.Начислить();   нач.Получите(); } }
  
  

Ответ:

 (1) 160 

 (2) 80 

 (3) 90 

 (4) 70 

 (5) возникает исключение при попытке обращения по null-ссылке 


Номер 5
Проанализируйте приведенную ниже программу и укажите результат после попытки запустить программу на компиляцию и выполнение:
  
public delegate void Выдать(ref int a);
class Начисление{
    int s = 100;
    public event Выдать Зарплата;
    public void Начислить() { Зарплата(ref s);  }
    public void Получите()  { System.Console.Write(s); }}
class БумТрест {  public static void OnЗарплата(ref int s) { s = s + 10; } }
class БумСтрой {  public static void OnЗарплата(ref int s) { s = s - 30; } }
class Совместитель{
    static void Main(string[] args)  {
    Начисление нач = new Начисление();
    нач.Зарплата += new Выдать(БумТрест.OnЗарплата);
    нач.Зарплата += new Выдать(БумСтрой.OnЗарплата);
    нач.Зарплата -= new Выдать(БумТрест.OnЗарплата);
    нач.Зарплата -= new Выдать(БумСтрой.OnЗарплата);
    нач.Начислить();   нач.Получите(); } }
  
  

Ответ:

 (1) 100 

 (2) 0 

 (3) 80 

 (4) 200 

 (5) возникает исключение при попытке обращения по null-ссылке 


Номер 6
Проанализируйте приведенную ниже программу и укажите результат после попытки запустить программу на компиляцию и выполнение:
  
public delegate void Выдать(ref int a);
class Начисление{
    int s = 100;
    public event Выдать Зарплата;
    public void Начислить() { Зарплата(ref s);  }
    public void Получите()  { System.Console.Write(s); }}
class БумТрест {  public static void OnЗарплата(ref int s) { s = s + 10; } }
class БумСтрой {  public static void OnЗарплата(ref int s) { s = s - 30; } }
class Совместитель{
    static void Main(string[] args)  {
    Начисление нач = new Начисление();
    нач.Зарплата += new Выдать(БумТрест.OnЗарплата);
    нач.Зарплата += new Выдать(БумСтрой.OnЗарплата);
    нач.Зарплата += new Выдать(БумТрест.OnЗарплата);
    нач.Зарплата -= new Выдать(БумСтрой.OnЗарплата);
    нач.Получите(); нач.Начислить();} }
  
  

Ответ:

 (1) 100 

 (2) 110 

 (3) 220 

 (4) 200 

 (5) возникает исключение при попытке обращения по null-ссылке 


Упражнение 37:
Номер 1
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) обработчик исключений - это метод, получающий управление в случае обнаружения определенной ошибки 

 (2) catch-блок должен следовать сразу же за try-блоком 

 (3) если в случае ошибки управление получает catch-блок, то после выполнения этого блока управление передается на аварийное завершение программы 

 (4) допускается вложенность try-блоков 

 (5) после выполнения инструкции throw, управление передается следующему оператору 


Номер 2
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) обработчик исключений - это объект класса, получающий управление в случае обнаружения определенной ошибки 

 (2) за try-блоком может следовать другой try-блок 

 (3) если в случае ошибки управление получает catch-блок, не содержащий оператора goto, то после выполнения этого блока управление передается на следующий за блоком оператор 

 (4) try-блоки могут пересекаться 

 (5) после выполнения инструкции throw, управление передается в CLR 


Номер 3
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) обработчик исключений - это блок кода, получающий управление в случае обнаружения соответствующей ему ошибки 

 (2) между try-блоком и catch-блоком могут находиться операторы 

 (3) если в случае ошибки управление получает catch-блок, то после выполнения этого блока управление передается на следующий за ним catch-блок, а если такового нет, то на завершение программы 

 (4) блок finally выполняется только в случае, если было сгенерировано исключение  

 (5) для повторного генерирования исключения используется инструкция throw 


Номер 4
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) пользователь может переопределить поля системного исключения в своем классе 

 (2) допускается отсутствие catch-блока после try-блока 

 (3) если в случае ошибки управление получает catch-блок, то после выполнения этого блока управление передается на блок finally, если последний определен 

 (4) вложенность catch-блоков не допускается 

 (5) после выполнения инструкции throw, управление всегда передается блоку finally 


Номер 5
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) исключение - это ситуация, нарушающая нормальное выполнение программы 

 (2) за try-блоком может следовать блок finally, если отсутствуют catch-блоки 

 (3) выполнение блока finally всегда приводит к завершению программы 

 (4) метод может иметь несколько блоков finally 

 (5) после выполнения catch-блока управление передается следующему за ним catch-блоку 


Номер 6
Из приведенных ниже высказываний укажите все истинные высказывания:

Ответ:

 (1) внутри catch-блока могут находиться try-блоки и соответствующие им catch-блоки 

 (2) между try-блоком и соответствующим ему catch-блоком может находиться блок finally 

 (3) блок finally получает управление, даже если исключение не было возбуждено  

 (4) если из catch-блока с помощью оператора goto передать управление оператору, следующему за блоком finally, то этот блок finally выполняться не будет  

 (5) инструкция throw используется для обработки исключения вне catch-блока 


Упражнение 38:
Номер 1
Проанализируйте приведенный код, определенный в методе Main (доступно пространство имен System):
  
        double a=100;
        Console.Write("Введи вещественное число:");
        try  {   a = double.Parse(Console.ReadLine()); a=100/a; }
        catch {  Console.Write ("Введено неверное значение! ");  }
        catch (FormatException)  {  Console.Write ("Неверный формат! ");  }
        Console.WriteLine("a="+a);
  
  Пользователь собирается запустить программу и ввести число 50. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) a=2 

 (3) Введено неверное значение! a=100 

 (4) Введено неверное значение! 

 (5) a=1 


Номер 2
Проанализируйте приведенный код, определенный в методе Main (доступно пространство имен System):
  
        double a=15;
        Console.Write("Введи вещественное число:");
        try
        {   a = double.Parse(Console.ReadLine()); a=100/a; }
        catch (FormatException)
        {     Console.Write ("Неверный формат! ");    }
        catch 
        {     Console.Write ("Введено неверное значение! ");    }
        Console.WriteLine("a="+a);
  
  Пользователь собирается после запуска программы ввести символы 0F. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) Неверный формат! a=0F 

 (3) Неверный формат! a=15 

 (4) Неверный формат! 

 (5) Введено неверное значение! 


Номер 3
Проанализируйте приведенный код, определенный в методе Main (доступно пространство имен System):
  
        int a = 100;
        Console.Write("Введи целое число:");
        try
        { a = int.Parse(Console.ReadLine()); a = 100 / a; }
        catch (FormatException)
        { Console.Write("Неверный формат! "); }
        catch
        { Console.Write("Введено неверное значение! "); }
        Console.WriteLine("a=" + a);
  
  Пользователь собирается запустить программу и ввести число 0. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) Неверный формат! a=0 

 (3) Неверный формат! a=100 

 (4) Неверный формат! 

 (5) Введено неверное значение! a=0 


Номер 4
Приведенному ниже коду доступно пространство имен System.
  
static void Main()
{  long a=0;
    Console.Write("Введи целое число:");
    try  {   a = long.Parse(Console.ReadLine()); a=100/a; }
    catch (FormatException)  {  Console.Write ("Неверный формат! ");  }
    catch (DivideByZeroException) { Console.Write("Делитель=0! "); }
    catch (ApplicationException) { Console.Write("Повторите ввод! "); }
    catch (Exception) { Console.Write("Программа завершается! "); }
    Console.WriteLine("a="+a);
}
  
  Пользователь собирается запустить программу и ввести символ d, код которого равен 100. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Неверный формат! Повторите ввод! Программа завершается! a=1 

 (2) Неверный формат! 

 (3) Неверный формат! a=0 

 (4) Неверный формат! Повторите ввод! Программа завершается! 

 (5) a=1 


Номер 5
Проанализируйте метод Main(), которому доступно пространство имен System.
  
    static void Main()
    {  int s = 0, i = 0;
        int[] a = { 1, 2, 3, 4, 5 };
        try {
            for (i = 0; i <= 5; i++)   s += a[i];
            if (i == 5)   s = s / (i - 5);
            Console.Write(" Сумма=" + s);
       }
        catch (IndexOutOfRangeException) { Console.Write(" Исключение-1 "); }
        catch (DivideByZeroException) { Console.Write(" Исключение-2 "); }
        catch { Console.Write(" Обнаружены ошибки! "); }
        Console.WriteLine(" i=" + i);
   }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) s=15 

 (2) Исключение-1 

 (3) Исключение-1 i=5 

 (4) Исключение-2 i=5 

 (5) Исключение-2 Обнаружены ошибки! 


Номер 6
Приведенному ниже коду доступно пространство имен System.
  
static void Main()
{  long a=0;
    Console.Write("Введи целое число:");
    try  {   a = long.Parse(Console.ReadLine()); a=100/a; }
    catch (FormatException)  {  Console.Write ("Неверный формат! ");  }
    catch (DivideByZeroException) { Console.Write("Делитель=0! "); }
    catch (ApplicationException) { Console.Write("Повторите ввод! "); }
    catch (Exception) { Console.Write("Программа завершается! "); }
    Console.WriteLine("a="+a);
}
  
  Пользователь собирается запустить программу и ввести число 0. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Делитель=0! Повторите ввод! Программа завершается! a=0 

 (2) Делитель=0! a=0 

 (3) Делитель=0! 

 (4) Делитель=0! Повторите ввод! Программа завершается! 

 (5) Делитель=0! Программа завершается! a=0 


Упражнение 39:
Номер 1
Приведенному ниже коду доступно пространство имен System.
  
    class Ex : Exception  { }
    static void Main()
    {  int a = 0;
        try  { if (a == 0) throw new Ex();   else a = 100 / a;  }
        catch (DivideByZeroException)
        { Console.Write("Делитель = 0! "); }
        catch 
        { Console.Write("Неверный формат! "); }
        Console.WriteLine("a=" + a);
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 

 (2) Неверный формат! 

 (3) Делитель = 0! a=0 

 (4) Неверный формат! a=0 

 (5) Делитель = 0! 


Номер 2
Приведенному ниже коду доступно пространство имен System.
  
    class Ex : Exception { }
    static void Main()
    {  int a = 0;
        try { a = Devide(a);  }
        catch  { Console.Write(" Ошибка в данных! ");  }
        Console.WriteLine(" a=" + a);
    }    
    static int Devide(int b)
    {   try  { if (b == 0) throw new Ex();  else b = 100 / b;   }
        catch (DivideByZeroException)  { Console.Write("Делитель = 0! "); }
        catch   { Console.Write("Неверный формат! "); throw; }
        Console.WriteLine("b=" + b);
        return b;
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Делитель = 0! a=0 

 (2) Неверный формат! b=0 Ошибка в данных! a=0 

 (3) Неверный формат! Ошибка в данных! a=0 

 (4) Неверный формат! b=0 a=0 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Проанализируйте приведенный код. 
  
    static void Main()
    {  int a = 0;
        try { a = Devide(a);  }
        catch (System.SystemException)
        { System.Console.Write(" Ошибка в данных! "); }
        finally { System.Console.Write(" Программа завершена!");  }
        System.Console.Write(" a=" + a);
    }
    static int Devide(int b)
    {  if (b == 0) throw new System.FormatException();  else b = 100 / b;
        return b;
    }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Программа завершена! a=0 

 (2) Ошибка в данных! Программа завершена! 

 (3) Ошибка в данных! Программа завершена! a=0 

 (4) Ошибка в данных! 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Проанализируйте приведенный ниже код.
  
class a
{   static void Main()
    {  int a = 0;
        try { a = Devide(a); }
        catch (System.SystemException)
        {  System.Console.Write(" Ошибка в данных! ");   goto M;  }
        finally { System.Console.Write(" Программа завершена!"); }

  M: System.Console.WriteLine(" a=" + a);
   }
    static int Devide(int b)
    {  if (b == 0) throw new System.FormatException(); else b = 100 / b;
        return b;
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что из блока catch не допускается выход с помощью оператора goto 

 (2) Ошибка в данных! Программа завершена! 

 (3) a=0 

 (4) Ошибка в данных! Программа завершена! a=0 

 (5) Ошибка в данных! 


Номер 5
Проанализируйте приведенный ниже код.
  
   static void Main()
    {  int a = 0;
        try { a = Devide(a); }
        catch (System.FormatException)
        {   System.Console.Write(" Ошибка в данных! ");    }
        finally { System.Console.Write(" Программа завершена!"); }
        System.Console.WriteLine(" a=" + a);
    }
    static int Devide(int b)
    { return 100 / b; }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Программа завершена! 

 (2) Программа завершена! a=0 

 (3) a=0 

 (4) Ошибка в данных! Программа завершена! 

 (5) программа завершится аварийно, так как отсутствует catch-блок для обработки сгенерированного исключения 


Номер 6
Проанализируйте приведенный ниже код.
  
    static void Main()
    {
        int a = 100;
        try { a = Devide(a); }
        finally { System.Console.Write(" Программа завершена!"); }
        System.Console.WriteLine(" a=" + a);
    }
    static int Devide(int b)
    { return 100 / b; }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) программа не выполняется, так как обнаружена синтаксическая ошибка, связанная с тем, что блок finally не может следовать за блоком try 

 (2) Программа завершена! a=1 

 (3) a=1 Программа завершена! 

 (4) a=1 

 (5) программа завершится аварийно, так как после try-блока отсутствует catch-блок 


Упражнение 40:
Номер 1
Приведенному ниже коду доступно пространство имен System.
  
    class ExceptA : ApplicationException { }
    class ExceptB : ExceptA { }
    public static void Main()
    {  string a = Console.ReadLine(); string  b = Console.ReadLine();
        try { if (a == "end") throw new ExceptA();
              else if (b == "exit") throw new ExceptB();
              else throw new Exception();
        }
        catch (ExceptB)  { Console.Write(" Исключение-1"); } 
        catch (ExceptA)  { Console.Write(" Исключение-2"); }
        catch (Exception){ Console.Write(" Исключение-3"); }
    }
  
  Пользователь собирается после запуска программы ввести end и cont. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Исключение-1 Исключение-2 

 (2) Исключение-2 Исключение-3 

 (3) Исключение-3  

 (4) Исключение-2 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 2
Приведенному ниже коду доступно пространство имен System.
  
    class ExceptA : ApplicationException { }
    class ExceptB : ExceptA { }

    public static void Main()
    {  string a = Console.ReadLine(); string  b = Console.ReadLine();
        try { if (a == "end") throw new ExceptA();
                else if (b == "exit") throw new ExceptB();
                else throw new Exception();
              }
        catch (ExceptB)  { Console.Write(" Исключение-1"); } 
        catch (ExceptA)  { Console.Write(" Исключение-2"); }
        catch (Exception){ Console.Write(" Исключение-3"); }
    }
  
  Пользователь собирается запустить программу и ввести cont и exit. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Исключение-1 Исключение-2 

 (2) Исключение-1 Исключение-3 

 (3) Исключение-1 

 (4) Исключение-3 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 3
Приведенному ниже коду доступно пространство имен System.
  
    class ExceptA : ApplicationException { }
    class ExceptB : ExceptA { }

    public static void Main()
    {   string a = Console.ReadLine(); string b = Console.ReadLine();
        try { if (a == "end") throw new ExceptA();
                else if (b == "exit") throw new ExceptB();
                else throw new Exception();
             }
        catch (ExceptB)  { Console.Write(" Исключение-1"); } 
        catch (ExceptA)  { Console.Write(" Исключение-2"); }
        catch (Exception){ Console.Write(" Исключение-3"); }
    }
  
  Пользователь собирается после запуска программы ввести no и yes. Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Исключение-3 

 (2) Исключение-1 Исключение-2 Исключение-3 

 (3) Исключение-1 Исключение-3 

 (4) вывод будет отсутствовать 

 (5) программа не выполняется, так как обнаружена одна или несколько синтаксических ошибок 


Номер 4
Приведенному ниже коду доступно пространство имен System.
  
class MyException1 : ApplicationException
{  public new string HelpLink = "Readme.txt ";
    public MyException1() : base("Исключение-1")  {   }
    public static int Метод()
    {  int s = 5;
        try {  s = s / (s - 5);  }
        catch (DivideByZeroException)
       {   Console.Write("Исключение-2 ");   throw new MyException1();  }
        return s;
 }  }
class Test
{   public static void Main()
    {  int s=21;
        try { s = MyException1.Метод();  }
        catch (MyException1 ex) { Console.Write(ex.HelpLink + ex.Message); }
        Console.WriteLine(" s=" + s);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Исключение-2 Readme.txt Исключение-2 

 (2) Исключение-2 Readme.txt Исключение-1 s=21 

 (3) Исключение-2 Readme.txt Исключение-2 s=21 

 (4) Исключение-2 Readme.txt MyException1 s=21 

 (5) Исключение-2 Readme.txt DivideByZeroException s=21 


Номер 5
Приведенному ниже коду доступно пространство имен System.
  
class Class1
{   public static int Сумма()
    {  int[] a = { 1, 2, 3, 4, 5}, b = { 1, 2, 3 };
        int s=0;
        for (int i = 0; i < a.Length; i++)
        {   try   {   s = a[i] + b[i];   }
            catch (IndexOutOfRangeException)
            {   Console.Write("Исключение-1. ");    throw;  }
        }
        return s;
}  }
class Test
{   public static void Main()
    {  int s=21;
        try {  s = Class1.Сумма();  }
        catch (IndexOutOfRangeException)
        {  Console.Write("Программа завершена. ");   }
        Console.WriteLine(" s=" + s);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Программа завершена. s=21 

 (2) s=21 

 (3) Исключение-1. s=21 

 (4) Исключение-1. Программа завершена. s=21 

 (5) Исключение-1. Программа завершена. 


Номер 6
Приведенному ниже коду доступно пространство имен System.
  
class MyExc : ApplicationException
{    public MyException1() :  base("Исключение-1") {   }
    public override string ToString() {  return "Исключение-3";  }
    public static int Метод()
    {  int s = 22;
        try {  s = s / (s - 22); }
        catch (DivideByZeroException)
        {  Console.Write("Исключение-2. ");  throw new MyExc ();   }
        return s;
} }
class Test
{   public static void Main()
    {  int s=0;
        try {  s = MyExc.Метод();  }
        catch (MyExc ex)  {  Console.Write(ex);  }
        Console.WriteLine(" s=" + s);
}  }
  
  Укажите результат вывода на консоль после попытки запустить программу на компиляцию и выполнение:
  

Ответ:

 (1) Исключение-2 DivideByZeroException 

 (2) Исключение-2 Исключение-1 s=0 

 (3) Исключение-2 MyExc s=0 

 (4) Исключение-2 MyExc 

 (5) Исключение-2 Исключение-3 s=0 




Главная / Программирование / C#: ООП и классы / Тест 1