Применяется для форматирования данных, выводимых в поток при помощи методов Write() или WriteLine(), в частности, для аккуратного выравнивания данных в таблице (в т.ч. контроль числа выводимых десятичных разрядов). Выполняется с использованием форматирующей строки содержит всю информацию о выводимых элементах текста, а также шаблон для каждой указываемой далее переменной, причем каждый шаблон может содержать спецификацию формата. Например, форматированный вывод аккуратно выровненной таблицы значений функции y от варьируемого аргумента x можно выполнить таким предложением вывода:
Console.WriteLine("{0,4} {1,8:f2}", x, y);
которое означает «Взять нулевой выводимый элемент и записать его с выравниванием вправо в четырех столбцах, после чего взять первый выводимый элемент и записать его с выравниванием вправо в следующих восьми столбцах в формате с фиксированной точкой и двумя десятичными знаками». В результате получится красивая ровная таблица:
0 0.00
10 3.16
20 4.47
30 5.48
…
Форматирующий параметр является первым параметром вызова Write или WriteLine, которая имеет, таким образом, альтернативную форму:
Console.WriteLine("текст{формат0}текст{формат1}текст…"элемент0, элемент1, …);
Элементами вывода могут быть любые переменные С#, для которых может существовать спецификация формата. Спецификации формата формат0, формат1,... описаны ниже. Текстовые вставки текст не обязательны. В качестве формата может также выступать отдельная символьная строка.
Для правильной работы метод WriteLine должен содержать столько же спецификаций формата, сколько затем указано выводимых элементов. Спецификации формата заключаются в фигурные скобки и нумеруются от ноля. Форматы и элементы должны соответствовать друг другу.
Спецификация формата: {N,M:s}
N — указывает на позицию элемента в списке выводимых переменных после того, как строка формата будет передана в метод Write; позиции элементов нумеруются от 0.
М — задает ширину области, в которую будет помещено форматированное значение. Если М отсутствует или отрицательно, значение будет выровнено влево, иначе — вправо.
s — является необязательной строкой форматирующих кодов, которые используются для управления форматированием чисел, даты и времени, денежных знаков и т. д. Параметр s носит название спецификатора формата. В системе.NET имеются три стандартных типа спецификаторов формата: для чисел, объектов даты/времени и для перечислимых объектов.
Таблица 2.1. Примеры числовых спецификаторов форматов
Спецификатор | Буква | Данные | Пример | Строка |
Общий | G | Все (настраивается) | 8:G 8:G | __1234.5 ____1234 |
Фиксированная точка | F | Все | 8:F2 | _1234.50 |
С возвратом | R | Все | 8:R2 | 1234.5 |
Число | N | Все | 8:N1 | 1,2345.6 |
Выражение со степенью | Е | Все | 14:E6 | _1.234500E+003 |
Десятичное выражение | D | Только целые | 8:D | |
Денежные единицы | С | Все | 10:С | _$1,234.50 |
Проценты | Р | Все | 0:P | 89.00% |
Шестнадцатеричные числа | X | Только целые | 8X | 00089AF3 |
Спецификатор G при использовании его с числами обладает наибольшей гибкостью. Он подстраивается к типу получаемого им значения и не принимает в расчет спецификаторы точности. Им удобно пользоваться, если требуется вставлять числа в текст. Для таблиц он не так удобен. Для того чтобы выровнять числа и десятичные точки, следует использовать F или даже R. Спецификатор R формирует строку примерно так же, как F или Е, но имеет то дополнительное преимущество, что формируемая им строка при вводе может быть преобразована в точности в то число, из которого она получена, поэтому он удобен для сериализации. Спецификатор N удобен для представления больших чисел, потому что он делит число на группы из трех цифр, хотя во многих странах вставляемую им запятую приходится преобразовывать в пробел (см. ниже). Спецификатор Е также удобен для представления больших чисел, a D полезен в тех случаях, когда во всех числах должно быть одно и тоже число цифр, как, например, в банковских счетах.
Область использования спецификатора денежных единиц очевидна, однако может возникнуть необходимость в его дополнительной настройке. Спецификатор Р может привести к ошибке, так сначала он умножает значение на 100. Спецификатор X предназначен для представления шестнадцатеричных чисел и часто используется с фиксированным числом цифр, когда слева вставляются лидирующие ноли.
Задание.
Составить блок-схему алгоритма и программу на языке C#, реализующую такие операции в соответствии с индивидуальным заданием, выбираемым из таблицы 2.2:
- вычисления в цикле заданного вида значений заданной функции y выполнить для переменной x, изменяющейся в заданном интервале [ x 1, x 2] с заданным шагом D x, проверяя при этом возможность вычислений, как в предыдущей лабораторной работе;
- в теле цикла организовать поиск максимального y_max и минимального y_min значений функции y, а также номеров шагов n_max и n_min, на которых достигаются эти значения;
- вычисленные значения вывести на консоль в виде таблицы такого формата:
| № шага | x | y | y_min | n_min | y_max | n_max |
- выполнить ручной просчет для значения аргумента на третьем шаге и сравнить его с результатами выполнения программы;
- сделать вывод.
Содержание отчета:
- тема, цель, задание;
- листинг программы;
- консольное окно с результатами работы программы;
- блок-схема алгоритма;
- вывод.
Контрольные вопросы.
- Структура оператора ветвления.
- Синтаксис условного оператора.
- Структура оператора множественного выбора.
- Ограничения на использование оператора множественного выбора.
- Преимущества и недостатки оператора множественного выбора.
- Виды циклов, отличия и особенности использования.
- Что такое логическое выражение?
- Правила составления сложных логических выражений.
- Как работает оператор ветвления?
- Как работает оператор множественного выбора?
- Что такое тело цикла?
- Что такое параметрический цикл?
- Структура заголовка параметрического цикла.
- Что такое итерация?
- Оператор досрочного выхода из цикла и особенности его использования.
Таблица 2.2 Варианты индивидуальных заданий для лабораторной работы №2
№ варианта | Заданная функция | Интервал аргумента и величина шага | Вид цикла |
xÎ [0,3; 3], Dx = 0,15 | с предусловием | ||
xÎ [-1; 2], Dx = 0,15 | с постусловием | ||
xÎ [0,8; 2], Dx = 0,1 | параметрический | ||
xÎ [1; 1,5], Dx = 0,05 | с предусловием | ||
xÎ [1; 3], Dx = 0,1 | с постусловием | ||
xÎ [0,2; 4], Dx = 0,2 | параметрический | ||
xÎ [0; p], Dx = p/20 | с предусловием | ||
xÎ [1; 4], Dx = 0,2 | с постусловием | ||
xÎ [-5; 3], Dx = 0,5 | параметрический | ||
xÎ [0; 2p], Dx = p/10 | с предусловием | ||
xÎ [2; 7], Dx = 0,2 | с постусловием | ||
xÎ [0; p/2], Dx = p/60 | параметрический | ||
xÎ [0,5; 3,5], Dx = 0,25 | с предусловием | ||
xÎ [0,25; 2], Dx = 0,05 | с постусловием | ||
xÎ [0; 3p/2], Dx = p/10 | параметрический | ||
xÎ [-3; -1], Dx = 0,1 | с предусловием | ||
xÎ [2; 3], Dx = 0,05 | с постусловием | ||
xÎ [1; 4], D x = 0,2 | параметрический | ||
xÎ [-5; -4], Dx = 0,025 | с предусловием | ||
xÎ [0; 2p/3], Dx = p/40 | с постусловием | ||
xÎ [0; p/2], D x = p/40 | параметрический | ||
xÎ [0; 2p/3], D x = p/30 | с предусловием | ||
xÎ [0,5; 2,5], D x = 0,1 | с постусловием | ||
xÎ [0; p], D x = p/30 | параметрический | ||
xÎ [-5; 1], D x = 0,25 | с предусловием | ||
xÎ [1,5; 3], D x = 0,05 | с постусловием | ||
xÎ [0; 2p], D x = p/15 | параметрический | ||
xÎ [0,25; 5,25], D x = 0,25 | с предусловием | ||
xÎ [0; p/4], D x = p/60 | с постусловием | ||
xÎ [-2,5; 2,5], D x = 0,25 | параметрический | ||
xÎ [0; 3p/2], D x = p/20 | с предусловием | ||
xÎ [-0,5; 2,5], D x = 0,15 | с постусловием | ||
xÎ [1,3; 6,1], D x = 0,3 | параметрический | ||
xÎ [p/2; 3p/2], D x = p/30 | с предусловием | ||
xÎ [0; p/2], D x = p/40 | с постусловием | ||
xÎ [3p/2, 5p/2], D x = p/60 | параметрический | ||
xÎ [–p/2; p/2], D x = p/40 | с предусловием | ||
xÎ [-5; 3], D x = 0,4 | с постусловием | ||
xÎ [2,5; 7,5], D x = 0,25 | параметрический | ||
xÎ [0; p/3], D x = p/60 | с предусловием |