вариант 1 (1161208)
Текст из файла
В каких языках из перечисленных ниже при обработке исключительных ситуаций используется семантика завершения? Объясните, что она означает.
Ада, Си, Си++, Оберон, Оберон-2, Модула-2, Java, С#
Ada, C++, C#, Delphi, Java
Суть такова: при появлении исключения выполнение текущего блока команд прекращается, управление передается в catch-блок, где производятся какие-то действия, после которых программа выполняется не с места появления ошибки, а с места выхода из try-блока
Дайте определение оператора цикла foreach в языке C#. Какими условиями должен удовлетворять класс-коллекция, чтобы его можно было использовать в этом операторе?
Пройти по всем элементам коллекции
Нужно написать класс, реализующий интерфейс ICollection
Объясните семантику ключевого слова yield в языке C#
class Program
{
public static IEnumerable<long> fib()
{
yield return 0;
long i = 0, j = 1;
while (true)
{
yield return j;
long temp = i;
i = j; j = temp + j;
}
}
static void Main(string[] args)
{
foreach (long n in fib())
{
if (n > 1000)
break;
Console.WriteLine(n);
}
}
}
Что будет напечатано в результате работы следующей программы на Си++?
1 1 2 2
2 1 2 2
2 1 3 2
В каких языках из перечисленных ниже отсутствует перечислимый тип данных?
Си, Паскаль, Ада 83, Ада 95, Си++, Оберон, Оберон-2, Модула-2, С#.
Опишите реализацию перечислимого типа данных в языке Java.
Оберон, Оберон-2
В Java перечислимый тип есть класс.
public enum test {A,B,C};
test x;
x = B;
7
template<class T> class Queue
{
protected:
T* start;
T* end;
public:
T pop();
void push(T);
};
в односторонней связи языка Ада ничего выдающегося нет, но модульная структура отличается - ведь логические модули могут быть и вложенными, в отличие от других рассматриваемых языков.
package Outer is
...
package Inner is
...
end Inner;
procedure P(x:T1,y:T2);
end Outer;
Первичная ЕК - определение Outer, вторичная - его тело.
ЕК2:
package body Outer is
package body Inner is separate;
procedure P(x:T1,y:T2) is separate;
end Outer;
Мы указываем раздельную трансляцию, это называется stub – заглушка.
ЕК3: неправильный вариант:
WITH Outer;
USE Outer;
package body Inner is
...
end Inner;
возникает двусторонняя связь между единицами компиляции, правильно записывается - с контекстом целиком.
ЕК3:
separate (Outer.Inner)
package body Inner is
...
end Inner;
ЕК4:
separate (Outer)
procedure P(x:T1,y:T2) is
...
end P;
В общем, зависимости должен указывать сам программист (например используя make-файл), после чего компилятор сам будет их отслеживать.
В языке Ада спецификация приватного типа данных выглядит так:
package Stacks is
type Stack is private;
-
операции над stack
procedure Push(S:inout Stack; X:integer);
procedure Pop(S:inout Stack; X:out integer);
...
private
type Stack is record
top:integer :=0;
body:array(0..N) of integer;
end record;
end Stacks;
Это значит, что структура типа пользователю должна быть неизвестной. В языке Ада побочный эффект функции запрещён. Появляется дополнительная приватная часть в спецификации пакета — там нужно расписать реализацию этого типа, структуру типа данных.
Можно написать Push(s,1); Pop(s,x);
Нельзя написать S.top:=1;
Компилятор проведет распределение памяти и инициализацию. Однако создатели проиграли в количестве перетрансляции. Допустим, я захочу сменить реализацию типа Stack — сделать в виде списка → надо переписать приватную часть. В приватной части полностью описывается структура и вспомогательные структуры — для этого она и нужна. Недоступна программисту, но доступна компилятору, а использовать эту структуру программист не имеет права.
type Stack is access;
type link is record
next:Stack;
X:integer;
end record;
type Stack is access Link;
или type Stack is new PLINK; ?
Так как у нас поменялась реализация, необходимо перекомпилировать все модули. Полностью абстрактным типом данных он не является — к нему применимы операции присваивания и сравнения. В случае типа данных Stack эти операции безопасны, но это не везде так. Вводятся ограниченные приватные типы данных.
type T is limited private;
Полный интерфейс типа данных Stack должен обязательно иметь Init, Destroy и Copy.
Есть либо публичный член, либо пакетный, а как таковых защищенных и приватных нет.
package M is
type base is tagged private;
….
private
type Base is tagged record;
…
end record;
end M;
package M1 is
use M;
type Derived is new Base
with record
K:integer;
end record;
procedure B(X: inout Derived) is….
Ниже представлено определение шаблона класса Queue. Оно помещено в заголовочный файл Queue.h вместе с определением шаблона QueueItem:
#ifndef QUEUE_H
#define QUEUE_H
// объявление QueueItem
template <class T> class QueueItem;
template <class Type>
class Queue {
public:
Queue() : front( 0 ), back ( 0 ) { }
~Queue();
Type& remove();
void add( const Type & );
bool is_empty() const {
return front == 0;
}
private:
QueueItem<Type&lgt; *front;
QueueItem<Type> *back;
};
#endif
Java, C#
Смысл - очистить мусор при выходе из try-блока по исключению (аналг свертки стека в С++)
Два - описанный и конструктор копирования
public void f()
{
try
{ g(); h(); }
catch(E1){}
catch(E2){}
catch(E3){}
catch {unexpected();}
}
X::f X::g Y::f Y::g
Y::f X::g Z::f Y::g
C++, Java, C#, Ada 95
-
Что означает ключевое слово super на языке Java? Есть ли его аналог в языке Delphi? Если есть, то приведите пример на каждом из этих языков.
super - ссылка на базовый класс. В Delphi такого нет.
Пример:
public class A { public void a() {} }
public class B extends A {public void a() {}; public void b() {super.a();} }
-
Чем отличается деструктор языка Си++ от финализатора языка Java?
В Java он вызывается сборщиком мусора. Нет свертки стека
-
Что будет напечатано в результате работы следующей программы Си++?
#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;
}
void main() {
B b;
P (new B, b);
cout << “------------------------------------\n”;
C c;
P (new C, c);
}
B :: f
A :: g
B :: f
B :: g
B :: f
------------------------------------
C :: f
A :: g
C :: f
B :: g
C :: f
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















