2008-2003 экзамен (из методички) (Решённые задачи прошлых лет)
Описание файла
Файл "2008-2003 экзамен (из методички)" внутри архива находится в папке "Решённые задачи прошлых лет". Документ из архива "Решённые задачи прошлых лет", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Онлайн просмотр документа "2008-2003 экзамен (из методички)"
Текст из документа "2008-2003 экзамен (из методички)"
35
II. Варианты экзаменационных работ
2.1. Вариант 2003
1. Что будет напечатано в результате работы следующей программы на языке Си++?
#include <iostream.h>
class A {
public:
virtual void f() {cout << "A::f\n"; g();}
virtual void g() { cout << "A::g\n"; }
void h() { cout << "A::h\n"; }
};
class B : public A {
public:
void f() { cout << "B::f\n"; }
void g() { cout << "B::g\n"; h(); }
void h() { cout << "B::h\n"; }
};
class C : public B {
public:
void f() { cout << "C::f\n"; }
void g() { cout << "C::g\n"; }
void h() { cout << "C::h\n"; f(); }
};
void P(A*pa,B*pb) {
pa->f(); pa->g(); pa->h();
pb->f(); pb->g(); pb->h();
delete pa; delete pb;
}
int main() {
P(new B, new B);
cout<<"------------------------------\n";
P(new C, new C); return 0;
}
2. В каких из перечисленных ниже языков есть оператор перехода «goto метка»?
Ада 83, Ада 95, Оберон, Оберон-2, Модула-2, Java, Delphi, C#
3. Сравните между собой конструкции "uses" в языке Delphi и "use" в языке Ада (для чего применяются, сходства, отличия).
4. В каких из перечисленных ниже языков длина массива является только статическим атрибутом? Приведите пример массива с динамическим атрибутом -длиной для какого-либо языка.
Ада, Си++, Оберон, Модула-2, Java, C#
5. Что означают термины "семантика возобновления" и "семантика завершения" при обработке исключений? Для каждого способа (семантики) приведите пример языка, где этот способ (семантика) используется.
6. Назовите хотя бы один язык, в котором нельзя передавать подпрограммы как параметры других подпрограмм.
7. В каких классах памяти могут размещаться данные в языках программирования? В каких классах памяти размещаются объекты классов языка С#?
8. Ниже приведена спецификация родового пакета Stacks на языке Ада. Напишите объявление шаблонного класса на языке Си++, предназначенного для той же роли, что и этот пакет.
GENERIC
TYPE T IS PRIVATE; SIZE : INTEGER;
PACKAGE Stacks IS
TYPE Stack IS LIMITED PRIVATE;
PROCEDURE Push(S: IN OUT Stack; X : IN T);
PROCEDURE Pop(S: IN OUT Stack; X : OUT T);
FUNCTION IsEmpty(S : IN Stack) RETURN BOOLEAN;
FUNCTION IsFull(S : IN Stack) RETURN BOOLEAN;
PRIVATE
TYPE Stack is RECORD
Body : ARRAY (1..SIZE) OF T;
Top : INTEGER := 1;
END RECORD;
END Stacks;
2.2. Вариант 2004
1. Что будет напечатано в результате работы следующей программы на Си++?
#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#
5. Сколько конструкторов имеет класс 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. Вариант 2005
1. Что будет напечатано в результате работы следующей программы на Си++?
#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. Объясните, что означает термин «семантика возобновления» при обработке исключительных ситуаций. Приведите пример моделирования семантики возобновления на языке Си++.
3. Напишите спецификацию абстрактного типа данных 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#, Оберон, Оберон-2
8. Чем отличается деструктор языка Си++ от деструктора языка С#?
2.4. Вариант 2006
1. В каких языках из перечисленных ниже есть понятие «размеченное объединение»? Объясните, что оно означает.
Ада, Си++, Оберон, Модула-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();}
};
12
class 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#, Delphi
7. Ниже приведена спецификация шаблонной функции перемножения матриц(двумерных массивов) на языке Си++. Напишите пример конкретизации этой функции, а также соответствующее описание родовой функции на языке Ада.
template <class T> Matrix<T>& MatMult (Matrix<T>& A,
Matrix<T>&B);
8. В каких областях памяти могут быть размещены объекты классов языка Си++?
2.5. Вариант 2007
1. В каких языках из перечисленных ниже при обработке исключительных ситуаций используется семантика возобновления? Объясните, что она означает.
Ада, Си, Си++, Оберон, Оберон-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;
}
6. В каких языках из перечисленных ниже отсутствует перечислимый тип данных?
Си, Паскаль, Ада 83, Ада 95, Си++, Оберон, Оберон-2, Модула-2
Опишите реализацию перечислимого типа данных в языке C#.
7. Опишите на языке Ада родовой модуль, реализующий абстрактный тип данных Queue (очередь). Реализацию процедур и функций писать не надо.
8. В каких из перечисленных ниже языков есть двусторонняя связь между модулями при раздельной трансляции? Объясните её смысл для какого-нибудь языка.
Ада, Си++, Оберон, Модула-2, Java, Delphi, C#
2.6. Вариант 2008 (пересдача)
1. Объясните смысл ключевого слова sealed в языке C#. В каких из перечисленных ниже языков есть соответствующее понятие?
Java, Ада 83, Ада 95, Си++, Delphi, Оберон, Оберон-2, Модула-2
2. Объясните, что означает термин «вложенные модули». В каких из перечисленных ниже языков есть соответствующее понятие?
Ада 83, Ада 95, Delphi, Оберон, Оберон-2
3. Напишите спецификацию абстрактного типа данных HashTable (перемешанная таблица, хэш-таблица) на языках Модула-2 и Java (тела методов и модуль реализации можно опустить).
4. Объясните, что означает термин «виртуальный метод»? В каких из перечисленных ниже языков есть соответствующее (или аналогичное) понятие?
Ада 83, Ада 95, Java, Delphi, Оберон, Оберон-2, Cи, Cи++, С#
5. Дайте определение абстрактного типа данных (АТД) и абстрактного класса (АК). Перечислите сходства и различия этих понятий. Приведите примеры АК и АТД на каких-нибудь языках программирования (только спецификации – тела процедур и функций писать не надо).
6. В каких из перечисленных ниже языков есть понятие «перегрузка имен» (или «перекрытие имен»)? Объясните, что оно означает (на примере какого-либо языка).
Чем перегрузка отличается от замещения?
Ада 83, Ада 95,Си, Си++, Оберон, Оберон-2, Модула-2, Java, Delphi, C#
7. Объясните, чем отличается понятие «структура» от понятия «класс» в языке C#?
8. Что означает ключевое слово override в языках C# и Delphi? Почему это ключевое слово (или аналогичное ему) отсутствует в языке Java?
III. ОТВЕТЫ, УКАЗАНИЯ И РЕШЕНИЯ
3.1. Вариант 2003
1.