игра брюс 2048
Главная / Программирование / Common Intermediate Language и системное программирование в Microsoft .NET / Тест 10

Common Intermediate Language и системное программирование в Microsoft .NET - тест 10

Упражнение 1:
Номер 1
Прием программирования, заключающийся в том, что фрагменты кода порождаются и запускаются непосредственно во время выполнения программы - это:

Ответ:

 (1) динамическая генерация кода 

 (2) динамическая фрагментация кода 

 (3) динамическая интерпретация кода 

 (4) динамическая трансляция кода 


Номер 2
Целью динамической генерации кода является использование информации, доступной только во время выполнения программы, для:

Ответ:

 (1) повышения качества исполняемого кода 

 (2) повышения динамичночти исполняемого кода 

 (3) повышения качетсва верификации исполняемого кода 

 (4) повышения качества компиляции исполняемого кода 


Номер 3
При динамической генерации кода тип процессора - эта та часть информации, которая становится известной:

Ответ:

 (1) до выполнения программы 

 (2) только во время выполнения программы 

 (3) после выполнения программы 

 (4) до или во время выполнения программы 


Упражнение 2:
Номер 1
Применение динамической генерации оправдано, если:

Ответ:

 (1) запуск этого фрагмента осуществляется многократно 

 (2) выполнение фрагмента связано с существенными затратами времени процессора 

 (3) запуск этого фрагмента осуществляется однократно 

 (4) выполнение фрагмента не связано с затратами времени процессора 


Номер 2
В .NET доступны следующие способы организации динамической генерации кода:

Ответ:

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

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

 (3) порождение программы на языке C++ и вызов компилятора C# 

 (4) порождение программы на языке C# и вызов компилятора C# 


Номер 3
Программно вычисление численного интегрирования функции можно выполнять следующими способами:

Ответ:

 (1) без динамической генерации кода 

 (2) путем динамической генерации программы на языке C# 

 (3) путем динамической генерации метаданных и CIL-кода 


Упражнение 3:
Номер 1
Идеальным вариантом представления функции, которое бы не зависело от конкретного способа вычисления значения функции является:

Ответ:

 (1) реальный класс Function 

 (2) абстрактный класс Function 

 (3) вещественный класс Function 

 (4) псевдокласс Function 


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

Ответ:

 (1) Func 

 (2) Abstract 

 (3) Math 

 (4) Function 


Номер 3
Для проверки работоспособности алгоритма следующего алгоритма:static double Integrate(Function f, double a, double b, int n)
{
  double h = (b-a)/n, sum = 0.0;
  for (int i = 0; i < n; i++)
    sum += h*f.Eval((i+0.5)*h);
  return sum;
}можно объявить тестовый класс TestFunction, реализующий вычисление функции f(x) = x * sin(x) следующим образом:

Ответ:

 (1) public class TestFunction: Function { public override double Eval { return x * Math.Sin(x); } } 

 (2) public class TestFunction: Function { public override double Eval(double x) { return x * Math.Sin(x); } } 

 (3) public class TestFunction: Function { public override double Eval(double x) { return x * Math.Sin; } } 

 (4) public class TestFunction: Function { public override double Eval(double x) { } } 


Упражнение 4:
Номер 1
В данном примере: public abstract class Expression
{
 public abstract string GenerateCS();
 public abstract void GenerateCIL(ILGenerator il);
 public abstract double Evaluate(double x);
}
                  метод GenerateCIL:

Ответ:

 (1) выполняет непосредственное вычисление значения выражения 

 (2) транслирует выражение в фрагмент программы на C# 

 (3) транслирует выражение в CIL-код 


Номер 2
В данном примере: public abstract class Expression
{
 public abstract string GenerateCS();
 public abstract void GenerateCIL(ILGenerator il);
 public abstract double Evaluate(double x);
}
                  метод GenerateCS:

Ответ:

 (1) транслирует выражение в фрагмент программы на C# 

 (2) транслирует выражение в CIL-код 

 (3) выполняет непосредственное вычисление значения выражения 


Номер 3
В данном примере: public abstract class Expression
{
 public abstract string GenerateCS();
 public abstract void GenerateCIL(ILGenerator il);
 public abstract double Evaluate(double x);
}
                  метод Evaluate:

Ответ:

 (1) транслирует выражение в CIL-код 

 (2) выполняет непосредственное вычисление значения выражения 

 (3) транслирует выражение в фрагмент программы на C# 


Упражнение 5:
Номер 1
Порождение текста C#-программы и компиляция этой программы с помощью компилятора C#, доступного через библиотеку классов .NET является:

Ответ:

 (1) самым простым способом динамической генерации кода 

 (2) самым сложным способом динамической генерации кода 

 (3) самым простым способом автоматической генерации кода 

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


Номер 2
Классы, отвечающие за компиляцию исходного кода, относятся:

Ответ:

 (1) к пространству имен System.Compiler 

 (2) к пространству имен System.CodeDom.Compiler 

 (3) к пространству имен CodeDom.Compiler 

 (4) к пространству имен System.CodeDom.Compiler.Text 


Номер 3
Метод CreateCompiler класса CSharpCodeProvider может создавать экземпляр компилятора C#, к которому можно обращаться через интерфейс:

Ответ:

 (1) ICodeCompiler 

 (2) CodeCompiler 

 (3) ISharpCompiler 

 (4) SharpCompiler 


Упражнение 6:
Номер 1
При трансляции выражений в CIL метод начинается:

Ответ:

 (1) с создания динамической сборки 

 (2) с создания заготовки для будущей сборки 

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


Номер 2
Вызывая метод DefineDynamicAssembly домена приложений мы можем получить:

Ответ:

 (1) класс Assembly 

 (2) метод класса AssemblyBuilder 

 (3) класс AssemblyBuilder 

 (4) объект класса AssemblyBuilder 


Номер 3
Компилятор C# создает конструкторы:

Ответ:

 (1) с параметрами по умолчанию 

 (2) без параметров по умолчанию 

 (3) с специальными параметрами 

 (4) без специальных параметров 


Упражнение 7:
Номер 1
При генерации динамической сборки через классы пространства имен System.Reflection.Emit конструкторы:

Ответ:

 (1) автоматически не добавляются 

 (2) добавляются автоматически 

 (3) добавляются статически 


Номер 2
При каком способе вычисления значения функции на динамическую сборку будет затрачено 547 мс, на компьютере с процессором Intel Pentium 4 с тактовой частотой 3000 МГц и 1 Гб оперативной памяти:

Ответ:

 (1) предварительная компиляция С# 

 (2) интерпретация дерева выражения 

 (3) предварительная компиляция в CIL 


Номер 3
Результаты измерений эффективности трех способов вычисления выражений, проведенных на компьютере с процессором Intel Pentium 4 с тактовой частотой 3000 МГц и 1 Гб оперативной памяти показывают, что динамическая генерация кода может:

Ответ:

 (1) на два порядка уменьшить время работы программы 

 (2) на три порядка уменьшить время работы программы 

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

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


Упражнение 8:
Номер 1
Линейными участками можно называть участки кода:

Ответ:

 (1) не содержащие развилок и защищенных блоков 

 (2) содержащие развилки и защищенные блоки 

 (3) содержащие развилки и не содержащие защищенных блоков 

 (4) не содержащие развилки и содержащие защищенные блоки 


Номер 2
Правило Expr ::= local x assign Expr можно описать так:

Ответ:

 (1) унарный минус 

 (2) пустой список фактических параметров метода 

 (3) параметр метода с именем x 

 (4) операция присваивания переменной x значения выражения 


Номер 3
Определим набор функций, отображающих различные деревья абстрактного синтаксиса в соответствующие им последовательности инструкций CIL, можно считать, что каждая функция принимает в качестве параметра:

Ответ:

 (1) дерево абстрактного синтаксиса 

 (2) абстрактный синтаксис 

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

 (4) реальный синтаксис 


Упражнение 9:
Номер 1
Разделить фаз генерации и оптимизации кода позволяет 

Ответ:

 (1) существенно упростить генератор 

 (2) сделать генератор независимым от оптимизатора 

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

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


Номер 2
Алгоритм peephole-оптимизации использует понятие:

Ответ:

 (1) блока 

 (2) секции 

 (3) пакета 

 (4) фрейма 


Номер 3
Для peephole-оптимизации CIL-кода вместо:stloc(starg) x
ldloc(Ldarg) хможно использовать:

Ответ:

 (1) ldloc(ldarg) x dup 

 (2) pop 

 (3) dup stloc(starg) x 

 (4) pop pop 

 (5) idc.i4.0 stloc(starg) x 


Упражнение 10:
Номер 1
Использование каких структурных конструкций позволяет существенно упростить генерацию развилок:

Ответ:

 (1) выбор 

 (2) множественный выбор 

 (3) цикл с предусловием 

 (4) последовательность 

 (5) цикл с постусловием 


Номер 2
Следующее правило:LogExpr ::= LogExpr
 ComparisonOp LogExprможно описать так:

Ответ:

 (1) применение логического ИЛИ 

 (2) равенство 

 (3) больше 

 (4) сравнение двух выражений 


Номер 3
Функции какого набора отображают деревья абстрактного синтаксиса, соответствующие логическим выражениям, в CIL:

Ответ:

 (1) GenLogExpr 

 (2) LogExpr 

 (3) GenLog 

 (4) GenLogExprTree 


Упражнение 11:
Номер 1
При записи абстрактного синтаксиса управляющих конструкций используется нетерминал LogExpr для представления:

Ответ:

 (1) определения последовательностей 

 (2) условий выбора 

 (3) циклов 

 (4) описания условий 


Номер 2
Правило Statement ::= Statement StatementList можно описать так:

Ответ:

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

 (2) цикл с постусловием 

 (3) цикл с предусловием 

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


Номер 3
Функций какого набора транслируют деревья абстрактного синтаксиса в последовательности инструкций:

Ответ:

 (1) GenStatementTree 

 (2) GenStatement 

 (3) StatementAbs 

 (4) AbsStatementTree 


Упражнение 12:
Номер 1
Для обнаружения избыточных инструкций сохранения значений выполняется анализ использования переменной, состоящий из следующих фаз:

Ответ:

 (1) построение графа использования переменной. 

 (2) анализ графа использования переменной 

 (3) выполнение графа использования переменной 


Номер 2
При удалении псевдонима Y переменной X осуществляются следующие действия:

Ответ:

 (1) инструкция инициализации переменной Y заменяется инструкцией pop 

 (2) все использования переменной Y заменяются использованиями переменной X 

 (3) инструкция инициализации переменной Y заменяется инструкцией dup 


Номер 3
При воспроизведении константы C, являющейся значением переменной Y осуществляются следующие действия:

Ответ:

 (1) инструкция инициализации переменной Y заменяется инструкцией pop 

 (2) инструкции ldloc(ldarg) Y заменяются инструкциями ldc C 

 (3) инструкции ldloc(ldarg) Y заменяются инструкциями ldr C 

 (4) инструкция инициализации переменной Y заменяется инструкцией dup 




Главная / Программирование / Common Intermediate Language и системное программирование в Microsoft .NET / Тест 10