Главная страница
Навигация по странице:

  • 19.Шаблоны 19.1. Шаблоны функций

  • 19.2. Шаблоны классов

  • Приложение Правила оформления кода

  • Лабораторные работы Лабораторная работа №1

  • Лабораторная работа №2

  • Лабораторная работа №3

  • методичка. Языки C, C++ (1). Методическое пособие для учащихся Москва 2017 Оглавление 2 удк ббк хлебников А. А


    Скачать 2.43 Mb.
    НазваниеМетодическое пособие для учащихся Москва 2017 Оглавление 2 удк ббк хлебников А. А
    Анкорметодичка
    Дата18.09.2022
    Размер2.43 Mb.
    Формат файлаpdf
    Имя файлаЯзыки C, C++ (1).pdf
    ТипМетодическое пособие
    #683739
    страница6 из 6
    1   2   3   4   5   6
    18.4 Функции форматирования ввода и вывода
    В отличие от манипуляторов, функция форматирования не должна вставляться в поток, ее применение полностью соответствует применению любой другой функции. Каждая библиотека из семейства ios имеет свои собственные функции (хотя доступ к ним всем можно всегда получить из iostream, если речь идет о вводе и выводе данных).
    Функции ios
    Функция
    Назначение setf(flags)
    Устанавливает флаг форматирования unsetf(fags)
    Сбрасывает флаг форматирования width(w)
    Устанавливает ширину текущего поля w =width()
    Возвращает текущее значение ширины поля precision(p)
    Возвращает число вводимых знаков для формата с плавающей запятой fill(ch)
    Устанавливает символ заполнения сh=fill()
    Возвращает символ заполнения setf(flags, field)
    Очищает поле, затем устанавливает флаги форматирования
    Функции iostream get(ch)
    Извлекает один символ в ch get(str)
    Извлекает символы в массив str до ‘\n’ get(str, Max)
    Извлекает до Maxчисла символов в массив get(str, lim)
    Извлекает символы в массив до ограничителя lim get(str, Max, lim)
    Извлекает символы в массив до Maxсимволов или до ограничителя lim getline(str, Max, lim)
    Извлекает символы в массив до Max символа или до ограничителя lim. Извлекает ограничитель из потока putback(ch)
    Вставляет последний прочитанный символ обратно во

    Оглавление
    102 входной поток ignore(Max, lim)
    Извлекает и удаляет доMaxчисла символов до ограничителя
    ‘\n’ в массив peek(ch)
    Читает один символ, оставляя его в потоке count=gcount()
    Возвращает число символов, прочитанныхтолько что встретившимися вызовами get(), getline(), read() read(str, Max)
    (Для файлов) Извлекает до Maxчисла символов в массив до
    EOF(признак конца файла) seekg()
    Устанавливает расстояние (в байтах) от начала до файлового указателя seek(pos, seek_dir)
    Устанавливает расстояние (в байтах) от указанной позиции до файлового указателя. seek_dirможет принимать значения ios::beg, ios::cur, ios::end; pos=tellg(pos)
    Возвращает позицию (в байтах) указателя файла от начала файла

    Оглавление
    103
    19.Шаблоны
    19.1. Шаблоны функций
    Возвращаясь к предыдущей теме, можно сказать, что помимо перегрузки функций, есть более элегантный способ решения.
    Действительно ведь, функции возведения в корень отличаются только типом аргумента. Это настолько часто встречающееся явление в программировании, что C++ предоставляет программисту возможность использовать шаблоны. Шаблоны функций — это инструкции, согласно которым создаются локальные версии функции с шаблоном для определенного набора параметров и типов данных. Если проще, то вместо указания типа аргумента, можно написать шаблон и вызывать функцию для работы со всеми типами (конечно, если к этим типам применимы операции, которые вы описали в функции). Это немного трудно для понимания, поэтому небольшой пример
    Третья строка - template - это шаблон функции перед объявлением.
    Также templateнеобходимо поставить и перед определением
    Итак, первое отличие этой программы от предыдущей состоит в том, что появляется ключевое слово template, с помощью него мы определяем

    Оглавление
    104 шаблон функции. Далее идут угловые скобки, в которых стоит еще одно ключевое слово typename, на самом деле его можно заменить либо на type, либо на class. И, наконец, переменная T (может называться как угодно, T– просто случайное название, не несущее смысловой нагрузки). При вызове функции, Tзаменяется на тот тип данных, который был передан в качестве аргумента, при каждом новом вызове иного типа создается еще новая функция, то есть, если вы вызвали шаблонную функцию для integer и float, то на самом деле, у вас будет две функции, шаблоны помогают в удобстве написания кода, но не в экономии памяти. Подстановка соответствующего типа называется реализацией шаблона функции. Важное замечание – функция с шаблоном должна иметь определение этого самого шаблона перед объявлением и определением.
    Примечание
    Аргументы шаблона должны быть согласованы, следующий пример демонстрирует, как не надо делать:
    Если вы хотите использовать различные аргументы, то можно сделать так:

    Оглавление
    105
    Небольшой совет: не начинайте написание функции сразу с шаблонов, сначала лучше убедиться в ее работе с фиксированным типом данных.

    Оглавление
    106
    19.2. Шаблоны классов
    Как можно было догадаться, шаблоны могут применяться не только в функциях, но и в классах. Рассмотрим пример реализации стека для разных типов данных:

    Оглавление
    107
    Разберем же, что здесь происходит. Сначала перед объявлением класса ставится уже знакомая конструкция: template. Так же она ставится перед каждым определением функции вне класса (что схоже с логикой объявления / определения шаблонных функций). Обратите внимание на то, что после template в определении идет – void
    Stack :: push(T var), где Stack помогает идентифицировать класс.
    Создание объекта происходит же посредством написания имени класса и указания в угловых скобках имя типа : Stackst.

    Оглавление
    108
    Приложение
    Правила оформления кода
    Отступы
    ∗ Для обозначения отступа используйте 4 пробела подряд;
    ∗ Используйте пробелы, а не табуляцию.
    Объявление переменных
    ∗ Объявляйте по одной переменной в строке;
    ∗ Избегайте, если это возможно, коротких и запутанных названий переменных (Например: «a», «rbarr», «nughdeget»);
    ∗ Односимвольные имена переменных подходят только для итераторов циклов, небольшого локального контекста и временных переменных. В остальных случаях имя переменной должно отражать ее назначение;
    ∗ Заводите переменные только по мере необходимости:
    ∗ Функции и переменные должны именоваться с прописной буквы, а если имя переменной или функции состоит из нескольких слов, то первое слово должно начинаться с прописной буквы, остальные – со строчных;
    ∗ Избегайтеаббревиатур:
    ∗ Имена классов всегда начинаются с заглавной буквы.

    Оглавление
    109
    Пробелы
    ∗ Используйте пустые строки для логической группировки операторов, где это возможно;
    ∗ Всегда используйте одну пустую строку в качестве разделителя;
    ∗ Всегда используйте один пробел перед фигурной скобкой:
    ∗ Всегда ставьте один пробел после * или &, если они стоят перед описанием типов. Но никогда не ставьте пробелы после * или & и именем переменной:
    ∗ Бинарные операции отделяются пробелами с 2-х сторон;
    ∗ После преобразования типов не ставьте пробелов;
    ∗ Избегайте преобразования типов в стиле C:
    Фигурные скобки
    ∗ Возьмитезаосновурасстановкуоткрывающихфигурныхскобокнаоднойстрок есвыражением, которому они предшествуют:
    ∗ Исключение: Тело функции и описание класса всегда открывается фигурной скобкой, стоящей на новой строке:

    Оглавление
    110
    ∗ Используйте фигурные скобки в условиях, если тело условия в размере превышает одну линию, или тело условия достаточно сложное, и выделение скобками действительно необходимо:
    ∗ Исключение 1: Используйте скобки, если родительское выражение состоит из нескольких строк или оберток:
    ∗ Исключение 2: Используйте фигурные скобки, когда тела ветвлений if- then-else занимают несколько строчек:

    Оглавление
    111
    ∗ Используйте фигурные скобки для обозначения пустого тела условия:
    Круглые скобки
    ∗ Используйте круглые скобки для группировки выражений:
    Использование конструкции switch
    ∗ Операторы case должны быть в одном столбце со switch
    ∗ Каждый оператор case должен иметь закрывающийbreak (илиreturn) или комментарий, который предполагает намеренное отсутствие break или return:

    Оглавление
    112
    Разрыв строк
    ∗ Длина строки кода не должна превышать 100 символов. Если надо – используйте разрыв строки. ∗ Запятые помещаются в конец разорванной линии; операторы помещаются в начало новой строки. В зависимости от используемой вами IDE, оператор на конце разорванной строки можно проглядеть:
    Наследование и ключевое слово virtual
    ∗ При переопределении virtual-метода, ни за что не помещайте слово virtual в заголовочный файл.
    Главное исключение
    ∗ Не бойтесь нарушать описанные выше правила, если вам кажется, что они только запутают ваш код.

    Оглавление
    113
    Лабораторные работы
    Лабораторная работа №1
    Задача с 3 массивами
    В каждом варианте необходимо обработать три массива разного размера.
    Необходимо написать функцию, которая выполняет требуемые действия, применить её ко всем трём массивам и сравнить полученные результаты. Все исходные данные задаются на этапе компиляции.
    Пример решения
    Определить в каком массиве больше среднее арифметическое элементов, меньших заданного числа. Если в двух или трёх массивах значения среднего арифметического совпадают, вывести соответствующее сообщение.

    Оглавление
    114 1. Определить в каком массиве меньше среднее арифметическое элементов, больших заданного числа. Если в двух или трёх массивах значения среднего арифметического совпадают, вывести соответствующее сообщение.
    2. Определить в каком массиве больше количество элементов, меньших заданного числа. Если в двух или трёх массивах количества искомых элементов совпадают, вывести соответствующее сообщение.

    Оглавление
    115 3. Определить в каком массиве меньше количество элементов, больших заданного числа. Если в двух или трёх массивах количества искомых элементов совпадают, вывести соответствующее сообщение.
    4. Определить в каком массиве минимум элементов больше заданного числа.
    Если в двух или трёх массивах минимумы совпадают, вывести соответствующее сообщение.
    5. Определить в каком массиве максимум элементов меньше заданного числа. Если в двух или трёх массивах максимумы совпадают, вывести соответствующее сообщение.
    6. Определить в каком массиве больше сумма элементов, попадающих в заданный диапазон. Если в двух или трёх массивах суммы совпадают, вывести соответствующее сообщение.
    7. Определить в каком массиве меньше сумма элементов, не попадающих в заданный диапазон. Если в двух или трёх массивах суммы совпадают, вывести соответствующее сообщение.
    8. Определить в каком массиве больше произведение элементов, непопадающих в заданный диапазон. Если в двух или трёх массивах произведения совпадают, вывести соответствующее сообщение.
    9. Определить в каком массиве меньше произведение элементов, попадающих в заданный диапазон. Если в двух или трёх массивах произведения совпадают, вывести соответствующее сообщение.
    10. Определить в каком массиве меньше среднее арифметическое элементов, меньших заданного числа. Если в двух или трёх массивах значения среднего арифметического совпадают, вывести соответствующее сообщение.

    Оглавление
    116 11. Определить в каком массиве больше среднее арифметическое элементов, больших заданного числа. Если в двух или трёх массивах значения среднего арифметического совпадают, вывести соответствующее сообщение.
    12. Определить в каком массиве меньше количество элементов, меньших заданного числа. Если в двух или трёх массивах количества искомых элементов совпадают, вывести соответствующее сообщение.
    13. Определить в каком массиве больше количество элементов, больших заданного числа. Если в двух или трёх массивах количества искомых элементов совпадают, вывести соответствующее сообщение.
    14. Определить в каком массиве меньше минимум элементов, больших заданного числа. Если в двух или трёх массивах минимумы совпадают, вывести соответствующее сообщение.
    15. Определить в каком массиве больше максимум элементов, меньших заданного числа. Если в двух или трёх массивах максимумы совпадают, вывести соответствующее сообщение.
    16. Определить в каком массиве меньше сумма элементов, попадающих в заданный диапазон. Если в двух или трёх массивах суммы совпадают, вывести соответствующее сообщение.
    17. Определить в каком массиве больше сумма элементов, непопадающих в заданный диапазон. Если в двух или трёх массивах суммы совпадают, вывести соответствующее сообщение.
    18. Определить в каком массиве меньше произведение элементов, непопадающих в заданный диапазон. Если в двух или трёх массивах произведения совпадают, вывести соответствующее сообщение.

    Оглавление
    117 19. Определить в каком массиве больше произведение элементов, попадающих в заданный диапазон. Если в двух или трёх массивах произведения совпадают, вывести соответствующее сообщение.
    20. Определить в каком массиве больше среднее арифметическое элементов, меньших заданного числа. Если в двух или трёх массивах значения среднего арифметического совпадают, вывести соответствующее сообщение.
    21. Определить в каком массиве меньше среднее арифметическое элементов, больших заданного числа. Если в двух или трёх массивах значения среднего арифметического совпадают, вывести соответствующее сообщение.
    22. Определить в каком массиве больше количество элементов, меньших заданного числа. Если в двух или трёх массивах количества искомых элементов совпадают, вывести соответствующее сообщение.
    23. Определить в каком массиве меньше количество элементов, больших заданного числа. Если в двух или трёх массивах количества искомых элементов совпадают, вывести соответствующее сообщение.
    24. Определить в каком массиве больше минимум элементов, больших заданного числа. Если в двух или трёх массивах минимумы совпадают, вывести соответствующее сообщение.

    Оглавление
    118
    Лабораторная работа №2
    Обработка матриц
    При выполнении этого задания необходимо написать две функции. Одна из этих функций должна получать и обрабатывать матрицу целиком.
    Другая функция должна обрабатывать одномерный массив. В качестве этого одномерного массива передаётся одна строка матрицы. Ввод осуществляется из файлов с использованием аргументов функции main.
    Вывод–на экран или в файл с обязательным выводом исходных данных.
    Пример выполнения задания
    0
    . Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти максимальный элемент в каждой строке.

    Оглавление
    119

    Оглавление
    120

    Оглавление
    121

    Оглавление
    122

    Оглавление
    123
    Варианты:
    1. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, проверить наличие положительных элементов в каждой строке.

    Оглавление
    124 2. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти количество положительных элементов в каждой строке.
    3. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти сумму положительных элементов в каждой строке.
    4. Даны две матрицы разного размера. Для той из матриц, в которой больше максимальный элемент, найти среднее арифметическое ненулевых элементов в каждой строке.
    5. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти минимальный элемент в каждой строке.
    6. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, проверить наличие отрицательных элементов в каждой строке.
    7. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти количество отрицательных элементов в каждой строке.
    8. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти произведение ненулевых элементов в каждой строке.
    9. Даны две матрицы разного размера. Для той из матриц, в которой есть элементы, равные 0, найти среднее арифметическое положительных элементов в каждой строке.

    Оглавление
    125 10. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти минимальный элемент в каждой строке.
    11. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, проверить наличие отрицательных элементов в каждой строке.
    12. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти количество отрицательных элементов в каждой строке.
    13. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти произведение ненулевых элементов в каждой строке.
    14. Даны две матрицы разного размера. Для той из матриц, в которой меньше количество нулевых элементов, найти среднее арифметическое положительных элементов в каждой строке.
    15. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти минимальный элемент в каждой строке.
    16. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, проверить наличие отрицательных элементов в каждой строке.
    17. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти количество отрицательных элементов в каждой строке.

    Оглавление
    126 18. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти произведение ненулевых элементов в каждой строке.
    19. Даны две матрицы разного размера. Для той из матриц, в которой меньше среднее арифметическое положительных элементов, найти среднее арифметическое положительных элементов в каждой строке.
    20. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти максимальный элемент в каждой строке.
    21. Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, проверить наличие положительных элементов в каждой строке.
    22 Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти количество положительных элементов в каждой строке.
    23 Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти сумму положительных элементов в каждой строке.
    24 Даны две матрицы разного размера. Для той из матриц, в которой больше произведение ненулевых элементов, найти среднее арифметическое ненулевых элементов в каждой строке.

    Оглавление
    127
    Лабораторная работа №3
    Пример выполнения задания:
    0. Строка состоит из слов, разделенных одним или несколькими пробелами.
    Поменяйте местами наибольшее по длине слово и наименьшее.

    Оглавление
    128

    Оглавление
    129

    Оглавление
    130 1. Строка состоит из слов, разделенных одним или несколькими пробелами.
    Переставьте слова в алфавитном порядке.
    2. Строка состоит из слов, разделенных одним или несколькими пробелами.
    Переставьте слова по убыванию их длин.
    3. Дана строка, представляющая из себя арифметическое выражение, состоящее из чисел, скобок и арифметических операций. Проверьте данное выражение на правильность расстановки скобок.
    4. Даны две строки. Выделить из каждой строки наибольшей длины подстроки, состоящие только из цифр, и объедините эти подстроки в одну новую строку.
    5. Даны три строки. Заменить все вхождения второй строки в первую на третью строку.

    Оглавление
    131 6. Дана строка. Придумать алгоритм шифрования данной строки и дешифрования.
    7. Даны две строки, состоящие из слов, разделенных пробелами.
    Сформировать строку, состоящую из слов, которые: а) встречаются хотя бы в одной строке; б) (8) встречаются только в первой строке; в) (9) встречаются только в одной из строк.
    10. Дана строка, состоящая из слов, разделенных пробелами. Сформировать новую строку со следующими свойствами: а) все слова в нижнем регистре, кроме первой буквы первого слова; б) (11) все ссылки в словах заменяются на ”[ссылка запрещена]”; в ) (12) все email заменяются на”[контакты запрещены]”; г) (13) все слова длины более 3 символов, содержащие только цифры, удаляются.
    14. В сообщении, состоящем из одних русских букв и пробелов, каждую букву заменили ее порядковым номером в русском алфавите (А – 1, Б – 2, …,
    Я – 33),а пробел– нулем. Требуется по заданной последовательности цифр найти количество исходных сообщений, из которых она могла получиться.
    15. Непустая строка, содержащая некоторое слово, называется палиндромом, если это слово одинаково читается как слева направо, так и справа налево.
    Пусть дана строка, в которой записано слово s, состоящее из n прописных букв латинского алфавита. Вычеркиванием из этого слова некоторого набора символов можно получить строку, которая будет палиндромом. Требуется найти количество способов вычеркивания из данного слова некоторого
    (возможно, пустого) набора таких символов, что полученная в результате

    Оглавление
    132 строка является палиндромом. Способы, различающиеся только порядком вычеркивания символов, считаются одинаковыми.
    16. Даны две строки s и w, вывести строку х максимальной длины, состоящую из букв, таких, что существует перестановках, являющаяся подстрокой перестановки s и одновременно являющаяся подстрокой перестановки w.
    17. Исключить из строки группы символов, расположенные между символами «/*»,«*/» включая границы. Предполагается, что нет вложенных скобок.
    18. Заданный текст является правильной записью римскими цифрами целого числа от 1 до 1999, получить это число.
    19. Заданное натуральное число от 1 до 1999 вывести римскими цифрами.
    20. Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно два раза (в том порядке, как они встречаются в тексте).
    21. Проверить, соблюдается ли в заданном тексте баланс открывающих и закрывающих круглых скобок, то есть можно ли установить взаимно однозначное соответствие открывающих и закрывающих скобок, причем открывающая скобка всегда предшествует соответствующей закрывающей.
    22. Для встречающихся в заданном тексте пар рядом расположенных символов указать, сколько раз встречается в тексте каждое из таких двухбуквенных сочетаний.

    Оглавление
    133 23
    ∗ Определить является ли введенный текст записью целого числа, записью вещественного числа.
    24
    ∗ Написать программу получения строки, в которой удалены все
    «лишние» пробелы, то есть из нескольких подряд идущих пробелов оставить только один.
    25
    ∗ Написать программу, которая осуществляет сравнение двух строк.
    26
    ∗ Написать программу, реализующую процедуру удаления k символов с позиции номер n из строки S.
    1   2   3   4   5   6


    написать администратору сайта