2002 досрок людской треш (Решённые задачи прошлых лет)
Описание файла
Файл "2002 досрок + людской треш" внутри архива находится в папке "Решённые задачи прошлых лет". Текстовый-файл из архива "Решённые задачи прошлых лет", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр текстового-файла онлайн
Возможно не удалось распознать кодировку файла
<html>insomnio
21.01.2003 16:43 Вариант экзамена по ЯП, предварительный экзамен, 2002 г.
1)Что будет напечатано в результате работы следующей программы на Си++?
#include <iostream.h>
class x {
public:
virtual void f() {cout<< ”x::fn”; g();}
void g() { cout<< ”x::gn”;}
};
class y: public x {
public:
void f() {cout<< ”y::fn”;}
void g() { cout<< ”y::gn”; f();}
};
class z: public y {
public:
void f() {cout<< ”z::fn”;}
void g() { cout<< ”z::gn”; f();}
};
void p(x*px,y*py){
px->f(); px->g();
py->f(); py->g();
delete px; delete py;
}
void main(){
p(new x,new y)
cout<<”--------------n”;
p(new y, new z);
}
2)В каких из перечисленных ниже языков есть понятие динамического связывания подпрограмм (методов класса)?
Ада 83, Ада 95, Си++, Оберон, Оберон-2, Модула-2, java, delphi, c#.
3)Ниже приведена спецификация шаблонной функции перемножения матриц
(двухмерных массивов) на языке Си++. Напишите пример конкретизации этой функции, а также соответствующее описание родовой функции на языке Ада.
template <class t> matrix<t>& matmult (matrix<t>& a, matrix<t>&b);
4)В каких из перечисленных языков есть конструкция try-finally? Объясните ее смысл для какого-нибудь языка:
Ада, Си++, Оберон, Модула-2, java, delphi, c#.
5)Сколько конструкторов имеет класс s, описанный на языке c++? Ответ обоснуйте.
struct s { explicit s(int); double i,j;};
6)Объясните смысл конструкции package в языке java.
insomnio
21.01.2003 16:47 а сколько заданий будет на основном экзамене?
fury
21.01.2003 17:01 2insomino:
Я уже ситаксиса Ады не помню :)), но фишка в том, что если в С++ ты просто используешь шаблонный тип (допустим Т), то в Аде тебе нужно будет написать, кажется, так type t is private with то ли function "+" то ли operation "+", короче, нужно указать, что над Т можно выполнять те операции, которые тебе понадобятся (для перемножения матриц это, ясное дело, "+" и "*"). Тебе нужно будет создать новый тип (матрица объектов Т), а уж затем, собственно, описать функцию. Кстати, не забудь указывать в параметрах, какие из них входные, а какие выходные (in и out). Сишный & ,вроде, в Аде как inout.
Если кто-нить кинет линк на лекции, то смогу конкретно написать, а не пусто разглагольствовать :о)
Конкретизация=пример использования (подразумевался пример на С++, как я понимаю).
insomnio
21.01.2003 17:49 Так у нас в Аде у функций все параметры in... или меня глючит? или нам надо процедуру писать?
А какого размера эта матрица? Это тоже параметр? Или она динамическая, без размера? В общем, как плохо быть тупой :( Я уже второй день только и пытаюсь переписать родовой сегмент на си++, а шаблон на Аде...
insomnio
21.01.2003 17:53 А как переписать вот это на си++
generic
type Т is private;
package lists is
type list is private;
procedure insert (s: inout list; x: in t) ;
procedure get (s: inout list; x: out deprocedure clear (s: inout list);
private
type plink is access;
type link is record inf:t; next:plink; end record;
type plink is access link;
type list is record last:plink := null; end record;
end lists;
а еще лучше это
generic
type t is private;
size : integer;
with function "+" (x,y:t) return t;
with function "*" (x,y:t) return t;
with function "/" (x,y:t) return t;
package g_matrix is
type m is limited private;
function "+" (x,y:m) return m;
function "*" (x,y:m) return m;
function "/" (x,y:m) return m;
procedure set(x: in out m; i,j:integer; el:t);
function get(x: m; i,j:integer) return t;
private
Тype m is array(1..size,1..size) of t;
end g_matrix;
в общем хоть что-нибудь!!!!!
заранее большое-пребольшое спасибо.
fury
21.01.2003 18:01 generic
type t is private;
with function "+" (a,b:t) return t;
with function "*" (a,b:t) return t;
type tm is new matrix(t); .
function matmult(a: inout tm, b: inout tm) return tm;
Блин, на работе запарка :((
Но вот, вроде бы так, хотя не искючено, что я мог где-нить напутать или что-нить забыть - поправьте, если что :о)
fury
21.01.2003 18:04 хотя, последняя строчка может быть и procedure matmult(a: inout tm, b: inout tm); - не уверен в обоих вариантах :((
insomnio
21.01.2003 18:41 а что такое type tm is new matrix(t)?
kaily
21.01.2003 18:49 Господа, а лекциями точно пользоваться на парте можно будет, да? Точно-точно?
fury
21.01.2003 18:54 2insomino:
Фишка в том, что matrix - это уже шаблонный тип (посмотри, что в С++ мы его используем как matrix<t>), объвленный где-то (нам этого не показывают), значит, в Аде мы тоже можем считать его объявленным. Теперь, чтобы не мучиться, снова объявляя matrix с новым типом элементов Т, мы просто создаём новый тип на базе имеющегося, что в принципе и означает строчка
type tm is new matrix(t).
Кстати, в лекциях это, вроде, было - правда, я этого не видел :о)
fury
21.01.2003 18:56 но лучше поищи в лекциях - меня часто глюююююючит :)))
fury
21.01.2003 19:03 Кстати, чтобы сделать первое задание нужно просто запомнить две вещи:
1) Однажды объявленная виртуальной, функция такой и остаётся во всех наследованных классах
2) Если функция невиртуальная, то в месте её вызова жёстко прописывается её адрес. Если же она виртульная, то в месте её вызова на самом деле записывается её адрес из vtbl (таблица виртуальных методов), который потом вычисляется в соответствии с тем, какой класс был передан в качестве параметра.
insomnio
21.01.2003 19:17 2fury
Мой ник insomnio (что в переводе - бессонница),а не insomino :)))
Спасибо большое, большое, пребольшое!
Только вопрос такой, а в Аде разве можно параметризовать тип matrix типом t? Что это за конструкция?
И вообще, зачем нам пишут, что это двумерный массив?
ЗЫ Мне кажется скоро я свихнусь, мне уже по ночам снятся родовые сегменты.
insomnio
21.01.2003 19:20 В лекциях был пример, если на Аде мы пишем
generic
type t is private;
type index is range < >;
type arr is array(index range < >) of t;
with function "<"(a, b: t) return boolean;
procedure g_sort(a: in out arr);
То на си++
template<class t>
class vector{…};
template<class t> void sort(vector<t> &v);
Тут-то мы на Аде явно выписываем тип arr. Или это необязательно?
demoniak
21.01.2003 20:43 2insomnio: наверно на Аде обязательно т.к. он входит в родовую функцию, а на Си++ не обязательно писать шаблоный класс т.к. он отдельно. ИМХО.
Ничего не понимаю, как это сдавать......
demoniak
21.01.2003 20:45 отдельно от шаблоной функции......
что такое конкретизация? Это типа выписать шаблоную функцию для конкретного типа?
kaily
21.01.2003 21:13 Так что насчет лекций? Можно ли точно ими пользоваться - кто-нибудь знает? Кто-нибудь был на последней лекции и слышал это своими ушами?:))
insomnio
21.01.2003 21:38 2demoniak
да, это просто надо выписать для какого-то конкретного типа, вместо t что-то подставить.
2kaily
я была и слышала это своими ушами. пользоваться можно всем. только это тебе не поможет, уверяю.
Аааааа, я ничего не понимаю! Как это сдавать? Это невозможно сдать, это выше моего понимания, это непостижимо моему уму!
titanikum (я)
21.01.2003 21:55 жжжжуть, депресняк полный...:-(
kaily
21.01.2003 22:29 Читаю я ваши неоптимистичные посты... и начинаю задумываться вот над чем:):