И.Г. Головин - Варианты письменного экзамена (Методическое пособие), страница 2
Описание файла
PDF-файл из архива "И.Г. Головин - Варианты письменного экзамена (Методическое пособие)", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 2 страницы из PDF
Что будет напечатано в результате работы следующей программы наСи++?#include <iostream.h>class X {public:virtual void f() {cout << "X::f\n"; g(); }void g() { cout << "X::g\n";}};class Y : public X {public:void f() { cout << "Y::f\n"; }void g() { cout << "Y::g\n"; f();}};class Z : public Y {public:void f() { cout << "Z::f\n"; }void g() { cout << "Z::g\n"; f();}};void P(X*px,Y*py) {px->f(); px->g();py->f(); py->g();delete px; delete py;}int main() {P(new X, new Y);cout<<"------------------------------\n";P(new Y, new Z); return 0;}2.
В каких из перечисленных ниже языков есть понятие динамическогосвязывания подпрограмм (методов класса)?Ада 83, Ада 95, Си++, Оберон, Оберон-2, Модула-2, Java, Delphi, C#3. Напишитенаязыке Ада 95 объявления, эквивалентныеприведенным ниже описаниям на языке Оберон-2.TYPE T* = RECORD I*, J : INTEGER; END;TYPE T1* = RECORD (T) K : INTEGER; END;PROCEDURE (VAR X: T) P* (L : INTEGER);PROCEDURE (VAR X: T1) P* (L : INTEGER);4. В каких из перечисленных ниже языков есть конструкция try-finally?Объясните её смысл для какого-нибудь языка.Ада, Си++, Оберон, Модула-2, Java, Delphi, C#105. Сколько конструкторов имеет класс S, описанный на языке Си++?Ответ обоснуйте.struct S { explicit S(int); double i,j; };6.
Объясните смысл конструкции package в языке Java.7. Смоделируйте на языке Оберон понятие, аналогичное скрытому типуданных на языке Модула-2.8. Смоделируйте на языке Си++ функциюvoid f() throw (E1,E2,E3) { g(); h(); }предполагая, что конструкция throw не допускается компилятором.2.3. Вариант 20051. Что будет напечатано в результате работы следующей программы наСи++?#include <iostream>using namespace std;class A {public:virtual void f() {cout << "A::f\n"; g(); }void g() { cout << "A::g\n";}};class B : public A {public:void f() { cout << "B::f\n"; }void g() { cout << "B::g\n"; f();}};class C : public B {public:void f() { cout << "C::f\n"; }void g() { cout << "C::g\n"; f();}};void P(A*pa,B& b) {pa->f(); pa->g();b.f(); b.g();delete pa;}int main() {B b;P(new A, b);cout<<"------------------------------\n";C c;P(new B, c); return 0;}2.
Объясните, что означает термин «семантика возобновления» приобработке исключительных ситуаций. Приведите пример моделированиясемантики возобновления на языке Си++.113. Напишите спецификацию абстрактного типа данных Deque (очередьс двумя “хвостами”) на языках Ада и Java (тела методов и тело пакета можноопустить).4. Объясните, что означает термин «абстрактная функция». В каких изперечисленных ниже языков есть соответствующее понятие?Ада 83, Ада 95, Си++, Модула-2, Java, Delphi, C#5. Что означает ключевое слово super на языке Java? Есть ли его аналогв языке С#? Если есть, то приведите пример на каждом из этих языков.6. В каких из перечисленных ниже языков есть конструкция «свойство»(property)? Объясните, что она означает (на примере какого-либо языка).Java, Ада 83, Ада 95, Си++, Delphi, Оберон, Оберон-2, Модула-2, C#7.
Объясните, что означает термин «перегрузка»(overloading). В какихиз перечисленных ниже языков есть соответствующее понятие?Ада 83, Ада 95, Си++, Модула-2, Java, Delphi, C#, Оберон, Оберон-28. Чем отличается деструктор языка Си++ от деструктора языка С#?2.4. Вариант 20061. В каких языках из перечисленных ниже есть понятие «размеченноеобъединение»? Объясните, что оно означает.Ада, Си++, Оберон, Модула-2, Java, C#, Паскаль2. Назовите две причины большей надежности указателей языка Ада 83по сравнению с указателями языка Си++.3. Объясните, что означает понятие «раздельная независимаятрансляция». В каких языках из перечисленных ниже есть это понятие?Ада, Си, Си++, Оберон, Оберон-2, Модула-2, Java, C#, Паскаль4. Объясните смысл конструкции where в языке C# (версия 2.0).5.
Что будет напечатано в результате работы следующей программы наСи++?#include <iostream>using namespace std;class X {public:X() { f(); cout << '\n';}virtual void g(){cout<<1<<' ';}void f() { g();}};12class Y: public X {public:Y() {f(); cout << '\n';}void g() { cout<< 2<< ' ';}void f() { g(); }};class Z: public Y {public:Z(){g(); f(); cout << '\n';}void g() { cout << 3 << ' '; }void f() { g(); }};X x; Y y; Z z;X*px = &x; Y*py = &y; Z*pz = &z;void out(void) {px->f(); px->g();py->f(); py-> g();cout << '\n';}int main () {out(); px = py;out(); py = pz;out(); return 0;}6. В каких языках из перечисленных есть понятие «исключения»?Приведите пример возникновения исключения в каком-либо из этихязыков.Си, Си++, Ада 83, Ада 95, Visual Basic, Оберон, Модула-2, C#, Delphi7.
Ниже приведена спецификация шаблонной функции перемноженияматриц(двумерных массивов) на языке Си++. Напишите примерконкретизации этой функции, а также соответствующее описание родовойфункции на языке Ада.template <class T> Matrix<T>& MatMult (Matrix<T>& A,Matrix<T>&B);8. В каких областях памяти могут быть размещены объекты классовязыка Си++?132.5.
Вариант 20071. В каких языках из перечисленных нижеисключительных ситуаций используется семантикаОбъясните, что она означает.при обработкевозобновления?Ада, Си, Си++, Оберон, Оберон-2, Модула-2, Java, C#2. Что такое «явная реализация интерфейсов»? В каких языках онаиспользуется?3. Дайте определение оператора цикла for в языке Java (всеразновидности). Каким условиям должен удовлетворять класс-коллекция,чтобы его можно было использовать в этом операторе?4.
Дайте определение сопрограммы. Чем сопрограмма отличается отподпрограммы?5. Что будет напечатано в результате работы следующей программы наСи++?#include <iostream.h>class X {public:void g() { cout << 1 << ' '; }virtual void f() { g();}};class Y: public X {public:virtual void g(){ cout<< 2<< ' ';}void f() { g(); }};class Z: public Y {public:void g() { cout << 3 << ' '; }void f() { g(); }};X x; Y y; Z z; X*px = &x; Y*py = &y; Z*pz = &z;void out(void) {px->f(); px->g();py->f(); py-> g();cout << '\n';}int main () {out(); px = py;out(); py = pz;out(); return 0;}146.
В каких языках из перечисленных ниже отсутствует перечислимыйтип данных?Си, Паскаль, Ада 83, Ада 95, Си++, Оберон, Оберон-2, Модула-2Опишите реализацию перечислимого типа данных в языке C#.7. Опишите на языке Ада родовой модуль, реализующий абстрактныйтип данных Queue (очередь). Реализацию процедур и функций писать ненадо.8. В каких из перечисленных ниже языков есть двусторонняя связьмежду модулями при раздельной трансляции? Объясните её смысл длякакого-нибудь языка.Ада, Си++, Оберон, Модула-2, Java, Delphi, C#2.6.
Вариант 2008 (пересдача)1. Объясните смысл ключевого слова sealed в языке C#. В каких изперечисленных ниже языков есть соответствующее понятие?Java, Ада 83, Ада 95, Си++, Delphi, Оберон, Оберон-2, Модула-22. Объясните, что означает термин «вложенные модули». В каких изперечисленных ниже языков есть соответствующее понятие?Ада 83, Ада 95, Delphi, Оберон, Оберон-23. Напишите спецификацию абстрактного типа данных HashTable(перемешанная таблица, хэш-таблица) на языках Модула-2 и Java (теламетодов и модуль реализации можно опустить).4. Объясните, что означает термин «виртуальный метод»? В каких изперечисленных ниже языков есть соответствующее (или аналогичное)понятие?Ада 83, Ада 95, Java, Delphi, Оберон, Оберон-2, Cи, Cи++, С#5. Дайте определение абстрактного типа данных (АТД) и абстрактногокласса (АК).
Перечислите сходства и различия этих понятий. Приведитепримеры АК и АТД на каких-нибудь языках программирования (толькоспецификации – тела процедур и функций писать не надо).156. В каких из перечисленных ниже языков есть понятие «перегрузкаимен» (или «перекрытие имен»)? Объясните, что оно означает (на примерекакого-либо языка).Чем перегрузка отличается от замещения?Ада 83, Ада 95,Си, Си++, Оберон, Оберон-2, Модула-2, Java, Delphi, C#7. Объясните, чем отличается понятие «структура» от понятия «класс»в языке C#?8. Что означает ключевое слово override в языках C# и Delphi? Почемуэто ключевое слово (или аналогичное ему) отсутствует в языке Java?16III.
ОТВЕТЫ, УКАЗАНИЯ И РЕШЕНИЯ3.1. Вариант 20031.B::fB::gB::hA::hB::fB::gB::hB::h----C::fC::gA::hC::fC::gB::h2. Ада 83, Ада 95, Delphi, C#3. Конструкция языка Delphi «uses список_имен_модулей» служит дляимпорта всех имен, объявленных в интерфейсе модулей из списка. При этомимпортированные имена становятся непосредственно видимыми (если нетконфликтов с именами из других модулей).Конструкция языка Ада «use список_имен_пакетов» обеспечиваетнепосредственную видимость имен из спецификаций пакетов из списка (еслинет конфликтов).Сходство: конструкции обеспечивают непосредственную видимостьимен из интерфейсов (спецификаций) при отсутствии конфликтов.Различие: вDelphi «uses» импортирует имена из интерфейсовбиблиотечных модулей, в Аде импорт имен обеспечивается другимиконструкциями, а «use» служит только для разрешения непосредственнойвидимости.4.
Си++.Пример динамического массива в языке Java (или C#):void f(int N) {byte [] dynArray = new byte [N];// ...обработка ...}Замечание: в языках Оберон и Модула-2 длина формальныхпараметров — открытых массивов является динамическим атрибутом. Вдругих случаях длина массива — статический атрибут. В Аде формальные17параметры неограниченных типов-массивов также имеют динамическийатрибут-длину (равно как и динамические массивы-локальные переменные).5.Семантика возобновления: после обработки исключенияуправление может вернуться непосредственно в точку, где возниклоисключение (варианты: на следующий оператор или на любой оператор изтого же блока).Пример языка: Visual Basic.Семантика завершения: после возникновения исключения блок, вкотором оно возникло, обязательно завершается.