2 (Семинары и упражнения)

PDF-файл 2 (Семинары и упражнения) Информатика (4440): Семинары - 2 семестр2 (Семинары и упражнения) - PDF (4440) - СтудИзба2019-04-28СтудИзба

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

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

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

Текст из PDF

Семинар 2.Ссылочные переменные. Функции: перегрузка, параметры поумолчанию, ссылочные параметры. Обобщенное программирование:шаблоны.1. Ссылочные переменныеint i1 = 5;int &ir; // Ошибка – нельзя без инициализации;int &i1r = i1; // ir1 – псевдоним переменной i1;cout << i1 <<'\t'<< i1r; // 55Использование ссылок в качестве формальных параметров функции:void swap1(int *i1, int *i2){int tmp;tmp = *i1;*i1 = *i2;*i2 =tmp;}void main(){int i1 = 1, i2=2;show (i1, i2); // 1 2swap1(&i1, &i2);show (i1, i2); // 2 1}void swap2(int &i1, int &i2){int tmp;tmp = i1;i1 = i2;i2 = tmp;}void main(){int i1 = 1, i2=2;show (i1, i2); // 1 2swap2(i1, i2);show (i1, i2); // 2 1}2. Значения параметров функции по умолчанию (устанавливаются справа налево)void Show(int i, int j){cout << i+j << endl;}void Show(int i=10, int j=0){cout << i+j << endl;}void main(){Show (1,2);Show(1); // Error!}void main(){Show (1,2); // 3Show(1);// 1Show();// 10}3.

Перегрузка функций (проявление полиморфизма). Сигнатура.void Show(int i){cout << i+1 << endl;}void Show(double i){cout << i+0.5 << endl;}Функциям, осуществляющим однотипные действияс различными аргументами, полезно даватьодинаковые имена.void main(){Show (1); // 2Show (1.); // 1.5}На основе сигнатуры вызываемой функции (типа,количества и последовательности аргументов)происходит выбор конкретной функции из набора содинаковыми именами (но различной сигнатурой).Тип возвращаемого значения не оказывает влияниена сигнатуру.4. Шаблоныvoid Swap2(int &i, int &j){int tmp;tmp = i;i = j;j = tmp;}template <typename T>void Swap2(T &i, T &j){T tmp;tmp = i;i = j;j = tmp;}void Swap2(double &i, double &j){1.

Шаблоны уменьшают вероятность случайнойdouble tmp;ошибки в похожих функциях.tmp = i;2. Вместо typename допускается использованиеi = j;ключевого слова classj = tmp;}3. Явно описанная функция перекрывает шаблон.void main(){int i1 = 1, i2 = 2;double d1 = 1.1, d2 = 2.2;Swap2(i1,show (i1,Swap2(d1,show (d1,i2);i2); // 2 1d2);d2); // 2.2 1.1}4.1 Перегружаемые шаблоныtemplate <typename T>void Swap2(T &i, T &j){T tmp;tmp = i;i = j;j = tmp;}template <typename T>void Swap2(T *a, T *b, int n){T tmp;for (int i = 0; i < n; i++){tmp = a[i];a[i] = b[i];b[i] = tmp;}}template <typename T>void Show (T i, T j){cout << i << ' ' << j <<endl;}void main(){int i1 = 1, i2 = 2;int a[] = {1,2,3};int b[] = {10,20,30};Swap2(i1, i2);Swap2(a,b,3);Show (i1, i2); //2Show (a[0],b[0]);// 1011}1.

Не обязательно все параметры функции должны иметь шаблон.2. В общем случае в шаблоне может быть не один, а целый список параметров, например:template <typename T1, typename T2>4.2 Явная специализацияПусть есть две структурные переменные r1 и r2. Так как существует операция присвоения одной структурезначения другой структуры (r1 = r2), то обменять эти значения (попарно каждого элемента структуры)можно, воспользовавшись уже готовым шаблоном, вызвав функцию Swap2(r1, r2).

Предположим,для конкретной структуры struct Root {int h; int t;} требуется при операции обмена менятьзначения не всех элементов, а только первого – h. Для этой структуры необходимо изменить алгоритм2действий при вызове функции обмена Swap2. Это можно сделать с помощью явной специализации, добавивследующий шаблон:template <> void Swap2(Root &i, Root &j){int tmp;tmp = i.h;i.h = j.h;j.h = tmp;}1. Одно и то же имя может использоваться для обычной функции, шаблона функций, и явной специализациишаблона.2.

Определение и прототип явной специализации должны начинаться с template <>.3. Обычная функция перекрывает специализацию, а специализация перекрывает обычный шаблон.5. Встраиваемая функцияЗаменяют макроопределения с параметрами.Встраиваемая функцияМакроопределение с параметрамиinline double Sq(double x) {return x*x;}#define Sq(x) x*x1. Запрос компилятору на генерацию встраиваемойфункции (как правило, для небольших функций)2. + Явное указание типов.3.

+ Нет подобных проблем (см. справа).Использование в программе выражения Sq(1+3)приводит к генерации кода: 1+3*1+3, что вбольшинстве случаев является ошибкой (значение 7,а не 16, как предполагалось).6. Спецификаторы mutable и volatile5.1 volatile int a; // Указывает, что переменная a может быть изменена вне программы.5.2 struct Root {int h; mutable int m;};const Root root = {0, 1};root.h++; // ошибка, т.к. root объявлена константной, ее элементы не могут быть измененыroot.m++; // допускается, т.к. элемент m объявлен со спецификатором mutableЛитература.Стивен Прата.

"Язык программирования Си++. Лекции и упражнения. Учебник: Пер. С англ." - ОООДиаСофтЮП, 2004. Главы 7, 8, 9.Упражнение С2_1.Дана структура вида struct Root {int h; int m;}, элементы которой содержат время в формате: h –количество часов, m – число минут.1. Создайте две переменные типа Root и введите с клавиатуры в эти переменные время.2. Напишите функцию ShowTime, которой передается константная ссылка на структуру Root (constRoot&), и которая выводит на экран время в формате H часов M минут.3. Напишите функцию AddTime, которой передаются константные ссылки на две структуры типа Root.Функция должна сложить время двух структур, поместив результат в локальную структуру Root и вернувего.

Вы должны предпринять меры, чтобы результат не пропал после выхода из функции. При сложенииполученное значение минут не должно превышать 59.4. Выведите на экран итоговое время, передав функцииAddTime.ShowTimeрезультат,возвращаемый5. Модифицируйте функцию AddTime так, чтобы она возвращала ссылку на результат.3Упражнение С2_2.1. Напишите функцию, которая выводит на экран содержимое переданной ей строки. В качестве аргументафункция принимает константный указатель на выводимую строку.2.

Реализуйте возможность вывода предопределенной строки "Привет!" при вызове вашей функции безпараметров, и повтор вывода переданной строки n раз при вызове функции с двумя параметрами, используя:a) значения параметров по умолчанию;б) механизм перегрузки функций.Примечание. Для корректного отображения кириллицы в консольном приложении Visual C++ используйте вначале программы вызов функции setlocale(LC_ALL,"Russian");Упражнение С2_3*.1. Напишите программу для работы с динамически создаваемыми "треугольными" массивамивида:xxxxxxxxxxТип элементов - любой базовый (char, int, float и т.п.), число строк произвольное.2.

Используя шаблоны, напишите следующие функции для работы с такими массивами:а) Функция создания массива из n строк. Все элементы должны бытьинициализированы нулевым значением. По умолчанию n=10. Функция должнавозвращать указатель на созданный массив или NULL, если создать его неудалось.б) Функция присвоения элементу j-ой строки k-го столбца заданного значения.Функция должна препятствовать выходу за пределы массива.в) Функция чтения элемента j-ой строки k-гопрепятствовать попытке чтения за пределами массива.столбца.Функциядолжна3. Используя ваши функции, создайте два треугольных массива:a) Массив элементов типа double с числом строк и значениями элементов поумолчанию.б) Целочисленный массив из 8 строк.

Присвойте элементам этого массивадвузначные значения. Первая цифра (десятки) номер строки, отсчитываемый от 1;вторая цифра (единицы) номер столбца, также отсчитываемый от 1.4. Выведите на экран построчно значения элементов этих массивов.Примечание. Так как создаваемый «треугольный» массив является разновидностьюдвумерного массива, который в языке Си++ трактуется как «массив массивов» (массивуказателей на одномерные массивы), то прототип шаблона функции, создающей такоймассив (назовем ее Triangle), мог бы иметь следующий вид:template <typename T> T **Triangle(T j, int n);Здесь возвращаемое функцией значение T** - массив указателей типа T (или «указательна указатель»), первый аргумент функции шаблонного типа T j нужен только для того,чтобы задать тип элементов создаваемого массива; второй аргумент int n – число строкв нем.4.

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