Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » 2014 экзамен ответы вариант 2

2014 экзамен ответы вариант 2 (Ответы на вопросы экзамена 2014)

PDF-файл 2014 экзамен ответы вариант 2 (Ответы на вопросы экзамена 2014) Языки программирования (53870): Ответы (шпаргалки) - 7 семестр2014 экзамен ответы вариант 2 (Ответы на вопросы экзамена 2014) - PDF (53870) - СтудИзба2019-09-19СтудИзба

Описание файла

Файл "2014 экзамен ответы вариант 2" внутри архива находится в папке "Ответы на вопросы экзамена 2014". PDF-файл из архива "Ответы на вопросы экзамена 2014", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

Ответы на вопросы экзамена по курсу«Языки программирования» 19.01.2015В ответах курсивом выделены необязательные пояснения, которые можно опустить(особенно на экзамене)Вариант 2Задача 2-1В каких языках из перечисленных ниже можно реагировать на ошибки переполнения,связанные с целочисленной арифметикой? Для каждого языка приведите примерсоответствующих конструкций.Си++, Модула-2, Java, Delphi, C#, Оберон, Python, JavaScriptОтветРечь идет об ошибках, связанных с выполнением арифметических операций, например,при сложении.

Присваивание значений других типов (выходящих за пределы диапазоназначений) не имеет никакого отношения собственно к арифметике.Также речь не идет об особенностях конкретных реализаций (например, опцияхконкретных компиляторов). Речь идет о стандартных языковых конструкциях, которыепозволяют включать реакцию на ошибки арифметического переполнения.Из перечисленных выше языков такой особенностью обладает язык C#. Он даетвозможность проконтролировать корректность результата целочисленных операций.

Дляэтого служит конструкция checked:checked {for (uint i = 256; i >= 0; i--) cnt++;}В блоке, следующем за ключевым словом checked, все целочисленные операциипроверяются на корректность, поэтому при возникновении переполнения (при попыткевычесть 1 из нулевого беззнакового значения) генерируется ошибка. Разумеется, времявыполнения операций растет, поэтому по умолчанию операции не контролируются.Среагировать на ошибку можно с помощью механизма обработки исключений.В других языках либо отсутствуют стандартные средства контроля, лиюо вычисления привыходе за границу диапазона переходят к расширенным типам данных и т.п.Задача 1-2Напишите спецификацию шаблона template <int N> struct ArraySum{....}; на языке С++ так, чтобы для любого неотрицательного целого константногозначения n значение ArraySum<n>::result было равно сумме первых n элементовмассива Arr, описанного следующим образом:static constexpr int Arr[] = {1,5,-3,.../* и так далее */...};ОтветПоскольку речь идет о шаблоне, то подразумевается, что вычисления производятсястатически (во время трансляции).

Текст программы(в ответе достаточно былоописания шаблонов, ошибки задания n не проверяются):#include <iostream>static constexpr int a[] = {1,2,3,4};template <int n> struct ArraySum{enum {r = ArraySum<n-1>::r + a[n-1]};};template <> struct ArraySum<1>{enum {r = a[0]};};int main(){std::cout << ArraySum<10>::r << "\n";return 0;}Задача 1-3Можно ли в языке С++ определить тело абстрактной функции? Если можно, то приведитепример контекста, в котором вызывается это тело.ОтветНесмотря на то, что обычно абстрактные функции в языках программирования не имеюттела (не путайте тело функции с функцией-заместителем — это разные понятия),абстрактные функции в языке С++ (называемые там чистыми виртуальнымифункциями), тем не менее, могут иметь тело.Возникает вопрос, а какой смысл в теле, если функция должна быть замещена внаследниках, объекты абстрактного класса создать невозможно, а при вызове функциииз наследника будет работать механизм замещения.

Так что, на первый взгляд, телоабстрактной функции вызвать нельзя.Существуют контексты, когда тело абстрактной функции может вызвано (отсюда ивозможность его определения).Например, вызов виртуальной функции (прямо или косвенно) из конструктораабстрактного класса:class Test{public:Test(){f();}virtual void f() = 0;};// вот и тело абстрактной функцииvoid Test::f(){std::cout << "Hello, abstract!\n";}class Conc : public Test{public:void f(){}};int main(){Conc t;}return 0;При создании объекта класса Conc сработает конструктор класса Test, и оттуда будетвызвана абстрактная функция Test::fКроме того, можно вызвать абстрактную функцию напрямую:Conc t; t.Test::f();При отсутствии тела (нормальный случай), вызывается функция из библиотеки,которая аварийно завершает выполнение программы (отсюда и диагностика во времявыполнения).

Если программист вдруг захотел отменить это поведение (зачем — небудем обсуждать), то он и использует этот механизм.Задача 1-4Напишите определение функции-генератора с именем NN на языке Python так, чтобыследующий фрагмент программы выдавал первые 100 квадратов целых чисел(1,4,9,16,.....):for x in NN(100):print(x)Ответdef NN(n):for in range(1,n+1):yield i*iЗадача 1-5Дайте общее определение операции преобразования типа в языке программирования.Напишите пример пользовательского переопределения операции преобразования типа вязыке С++ (определение операции и ее вызов).

Есть ли аналогичные средства в языке C#?Если есть, то приведите пример на этом языке, аналогичный приведенному для С++.ОтветОперация преобразования типа – это функция:F: T1 => T2. Она создает по объекту типа Т1 значение типа Т2.Базисная (то есть встроенная в язык) операция преобразования применима к некоторымбазисным типам T1,T2.

Для С/С++ T1 и T2 могут быть, например, любымиарифметическими типами. Операции преобразования могут быть явными (явноуказываются — как правило, это можно для любой допустимой операции преобразования)и неявными (подставляются компилятором — когда и как — зависит от языка, например,арифметические преобразования в С/С++ могут быть неявными).В некоторых языках семантика операции преобразования может быть расширена напользовательские типы данных.В С++ допустимо переопределять операции преобразования, если:1). T1 – любой тип данных, а T2 – класс.

В этом случае преобразование задаетсяконструктором преобразования класса Т2:class T2 {public:T2(int x); // T1 - int.....};Если перед конструктором стоит explicit, то этотконструктор задает только явную операцию преобразования, впротивном случае преобразование -неявное.2). T1 – класс, а Т2 — любой тип данных. В этом случае преобразование задаетсяфункцией преобразования класса Т2:class T1 {public:operator int();// T2 - int...};В этом случае операция преобразования — неявная.В языке C# операции преобразования могут определяться только для пользовательскихклассов (но не встроенных типов и классов), при этом они задаются как статическиефункции члены либо класса Т1, либо класса Т2:class T1{....}class T2{public static operator T2(T1 t){ ....

}}Перед операцией преобразования может стоять ключевое слово explicit илиimplicit (явная или неявная операция). По умолчанию операция явная.Поэтому для примера выше можно писать:T1 t = new t();T2 tt = (T2)t;Но нельзя:T1 t = new t();T2 tt = t; // ошибка: есть только явная операцияЗадача 1-6Дайте определение и пример использования анонимной (лямбда-функции) в языке C#.В каких языках из перечисленных ниже есть аналогичное понятие? Для каждого такогоязыка приведите пример.JavaScript, Ада, Си++, Оберон, Оберон-2ОтветЛямбда-функция — это безымянная функция, тело которой — выражение, котороевозвращается как результат функции:arguments => expressionВыражение может включать в себя не только аргументы, но и доступные переменныеиз окружающих областей видимости, которые «захватываются» лямбда-функцией исоставляют так называемое «замыкание».Пример:var f = x=>x*x;int x = f(5); // = 25double d = f(1.717); // что-то около 3.0Лямбда-функции есть также (из перечисленных в условии языков) в JavaScript,Си++.JavaScript:f = function(x) { return x*x; }Си++:// определим лямбда-функцию и немедленно применим ее к 5auto twentyfive = [](int x) {return x*x; }(5);Задача 1-7Дайте определение понятия «объект, подобный массиву» в языке JavaScript.

Перечислитеего отличия от реального массива JavaScript.ОтветВ JavaScript можно добавить к любому объекту свойство с именем name:obj.name = “foo”obj.name1 = 1и т.д.Это же можно сделать и так:obj[“name”] = “foo”obj[“name1”] = 1Во втором случае имена полей могут вычисляться.Поэтому если в качестве имен полей в операции индексирования задать целые значения(или строки, которые представляют собой целые значения), а также определить все поля сименами-индексами от 0 до какого-то N-1, а свойству length будет присвоено значениеN, то по поведению этот объект будет практически не отличим от обычного массива.Пример:var obj = new Object()for (i = 1; i < 100; i++)obj[i] = i*iobj – не массив, но ведет себя как массив.Основное его отличие от настоящего объекта Array – то, что у реального массива естьвстроенное свойство length, изменение которого приводит к реальному изменениюколичества элементов:var arr = {1,2,3,4,5} // 5 элементовarr.length = 10 // добавилось в конец 5 неопределенных элементовarr.length = 0 // все пропало!Для obj из примера выше это, конечно, не работает.Примером объекта, который ведет себя как массив, является значение свойстваarguments в теле функции.Задача 1-8При ответе на эту задачу следует иметь ввиду то, что в Java приватные функции незамещаются в производных классах, так как они невидимы в них (см.

также ответ навопрос №3 из первого варианта). Поэтому приватная функция pf не будет замещаться впроизводных классах (неважно, замещается она публичной или приватной функцией —все равно не видна!).Задача №8 имела 2 варианта. Первый:Что будет напечатано в результате работы следующей программы на Java?public class PLExamTest2014 {static void P(A a,B b) { a.g(); b.g(); }public static void main(String[] args) {P(new A(), new B());System.out.println("------------------------------");P(new B(), new C());}}class A {private void pf() {System.out.println("A.pf"); }public void f() { System.out.println("A.f");}public void g() { f(); pf(); }}class B extends A {public void pf() { System.out.println("B.pf");}public void f() { System.out.println("B.f");}}class C extends B {public void pf() { System.out.println("C.pf");}public void f() { System.out.println("C.f");}}ОтветA.fA.pfB.fA.pf-----------------------------B.fA.pfC.fA.pfВторой вариант задачи №8:Что будет напечатано в результате работы следующей программы на Java?public class PLExamTest2014 {static void P(A a,B b) { a.g(); b.g(); }public static void main(String[] args) {P(new A(), new B());System.out.println("------------------------------");P(new B(), new C());}}class A {private void pf() {System.out.println("A.pf"); }public void f() { System.out.println("A.f");}public void g() { f(); pf(); }}class B extends A {private void pf() { System.out.println("B.pf");}public void f() { System.out.println("B.f");}public void g() { f(); pf(); }}class C extends B {public void pf() { System.out.println("C.pf");}public void f() { System.out.println("C.f");}}ОтветA.fA.pfB.fB.pf-----------------------------B.fB.pfC.fB.pf.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее