ЛР3 С#1 Линейные и разветвляющиеся алгоритмы
.pdf2.7 Организация ввода/вывода данных в C#
2.7.1Организация ввода данных
Ввод данных в приложениях C# может осуществляться с помощью
текстового окна TextBox. Однако следует понимать, что получаемое значение имеет тип данных string. Для организации работы с числами необходимо использовать методы явного приведения типов.
Например, для преобразования строки символов в переменную типа
Double можно использовать метод Parse:
Double x;
x = Double.Parse(textBox1.Text);
Или метод Convert:
Double x;
x = Convert.ToDouble(textBox1.Text);
Используя метод TryParse, можно проверить тип вводимых данных. Метод возвращает значение, указывающее, успешно ли выполнена операция:
Single X;
if (Single.TryParse (textBox1.Text, out X) == false)
{
// Если пользователь ввел не число:
MessageBox.Show ("Следует вводить числа", "Ошибка",MessageBoxButtons.OK);
return;
}
Примечание. Первый параметр (textBox1.Text) – это вводимая строка символов, которую метод TryParse должен преобразовать в тип Single, второй параметр с модификатором out возвращает результат преобразования в переменную X.
41
2.7.2 Организация вывода данных
Вывод данных в приложениях C# может осуществляться с помощью текстового окна TextBox, изменяя его свойство Text:
Double x;
textBox1.Text = Convert.ToString(x);
Иногда некоторые результаты бывает удобно вывести в специальном окне.
Например, использовать метод Show() класса MessageBox:
MessageBox.Show("x = " + x,
"Результат работы", MessageBoxButtons.OK);
Текстовое поле, используемое только для вывода данных может быть помечено как недоступное поле (свойство Enabled устанавливается в значение False). Это может оказаться полезным приёмом, когда пользователю необходимо явно указать, что в данное поле нельзя вводить данные.
2.7.3 Форматированный вывод данных
Форматированный вывод данных позволят отображать данные в некотором формате. Например, для вещественных чисел можно указать количество отображаемых знаков после запятой или при необходимости одновременно с числом отобразить знак валюты и т.п.
В приведенных выше примерах числовые значения выводятся в неформатированном виде. Количество знаков после запятой ограничивается пятнадцатью цифрами.
Для вывода по формату можно воспользоваться методом ToString,
примененному к переменной, указав либо стандартный шаблон вывода:
textBox1.Text = "Результат = " + x.ToString("F2");
либо настраиваемый:
textBox1.Text = "Результат = " + x.ToString("0.00");
42
Для вывода по формату можно использовать также составное форматирование методом String.Format. В качестве входных данных для составного форматирования используются:
-строка составного формата;
-список выводимых объектов.
В общем виде форматирование задается следующим образом:
{n, [m [:спецификатор_формата [число]]},
где
n – номер параметра. Нумерация начинается с нуля, нулевой параметр заменяется значением первой переменной из списка вывода, первый параметр – второй переменной и т. д., например
String.Format("a = {0, 10:F2} b = {1, 8:F3}", a, b);
m – определяет минимальную ширину поля, которое отводится под выводимое значение. Если выводимому числу достаточно меньшего количества позиций, неиспользуемые позиции заполняются пробелами. Если числу требуется больше позиций, параметр игнорируется.
String.Format("a = {0, 10:F2} b = {1, 8:F3}", a, b);
Спецификатор формата определяет формат вывода значения:
-F (Fixed) задает вывод с фиксированным количеством знаков после запятой;
-С (Currency) означает, что параметр должен форматироваться как валюта с учетом национальных особенностей представления;
-X (Hexadecimal) задает шестнадцатеричную форму представления выводимого значения.
Например, в результате нижеследующего кода: a = 3.1415
textBox1.Text = String.Format("a = {0, 10:F3 }", a);
будет выведен результат «a= 3,141».
43
Общее задание 5
Создайте простейший калькулятор, позволяющий складывать два числа по алгоритму:
Начало
Ввод a, b
result = a + b
Вывод result
Конец
Шаг 1. Создайте новый проект.
Шаг 2. Создайте форму примерно как на рисунке 26
Рисунок 26 – Размещение элементов управления на форме Шаг 3. С помощью панели Свойства (а не программно как в
предыдущем задании) измените свойства элементов управления, чтобы макет
44
визуально соответствовал рисунку 27. Свойство Enabled для элемента textBox3 установите в значение False.
Рисунок 27 – Интерфейс для общего задания 5
Шаг 4. Запрограммируйте кнопку, написав в соответствующем обработчике следующий код:
double a, b, result;
a = Convert.ToDouble(textBox1.Text);
b = Convert.ToDouble(textBox2.Text);
result = a + b;
textBox3.Text = Convert.ToString(result);
В первой строке кода выполняется объявление переменных
Во второй и третьей – присвоение переменным a и b значений из текстовых полей
содновременным приведением типов.
Вчетвёртой строке переменной result присваивается значение суммы чисел a и b.
Впятой строке свойству Text поля textBox3 присваивается конвертированное значение переменной result.
Шаг 5. Запустите приложение. Введите в первое текстовое поле целое число, во второе – дробное. Нажмите на кнопку «=». Убедитесь, что
результат верный.
Задание 5 выполнено!
45
2.8 Разветвляющиеся алгоритмы. Операторы ветвления
Разветвляющийся алгоритм – это алгоритм, содержащий хотя бы одно условие, в результате проверки которого может осуществляться разделение на несколько параллельных ветвей алгоритма.
Структуру разветвляющегося алгоритма можно реализовать с помощью ветвления – выбора одного из трёх вариантов действий (рис. 28.
а) |
б) |
в)
Рисунок 28 – Структуры разветвляющихся алгоритмов
2.8.1 Оператор if
46
Простейшим и одновременно наиболее употребительным условным
оператором является оператор if (условный оператор), в общем случае
имеющий следующий синтаксис:
if (<лог_выр>)
{
//код,выполняемый,если <лог_выр>равно true;
}
else
{
//код,выполняемый,если <лог_выр> равно false;
}
Такой оператор реализует структуру алгоритма на рис. 28, б). Эта структура называется также развилкой. Реализация стуктуры, показанной на рисунке 28, а) (вариант развилки), может быть выполнена в виде следующего кода:
if (<лог_выр>)
{
//код,выполняемый,если <лог_выр>равно true;
}
В данном случае событие <лог_выр> равно false не
обрабатывается.
47
Команда if может проверить только одно условие. с помощью оператора else if можно реализовать проверку вложенных условий.
if (Лог_выр_1)
{
// Выполнение действий 1
}
else if (Лог_выр_2)
{
// Выполнение действий 2
}
else if (Лог_выр_3)
{
// Выполнение действий 3
}
else
{
// Выполнение действий 4
}
Если в какой-либо ветви требуется выполнить несколько операторов,
их необходимо заключить в блок ({ }), иначе компилятор не сможет понять,
где заканчивается ветвление.
Примечание 1. Следует избегать проверки вещественных величин на равенство, вместо этого лучше сравнивать модуль их разности с некоторым малым числом. Это связано с погрешностью представления вещественных значений в памяти:
Single |
а, |
b; |
|
if ( а |
== |
b ) |
//не рекомендуется! |
if ( Math.Abs(а - b) < 1e-6 ) // надежно!
Значение величины, с которой сравнивается модуль разности, следует выбирать в зависимости от решаемой задачи и точности участвующих в выражении переменных.
48
Снизу эта величина ограничена определенной в классах Single и Double константой
Epsilon (это минимально возможное значение переменной такое, что
1.0 + Epsilon != 1.0).
Примечание 2. Распространенная ошибка. Неверная запись проверки на принадлежность диапазону. Например, чтобы проверить условие 0 < х < 1, нельзя записать его в условном операторе непосредственно, так как каждая операция отношения должна иметь два операнда. Правильный способ записи:
if (0 < х && х < 1)
Аналогичные структуры алгоритмов могут быть реализованы также
тернарным оператором:
Синтаксис операции:
<лог. выр.>?<результат_если_Тruе>:
<результат_если_False>
Например:
string res = (myInt < 10) ? "Меньше 10" :
"Больше или равно 10";
Результатом будет одна из двух строк, которая присвоится переменной res,
в зависимости от сравнения значения переменной myInt с числом 10.
49
2.8.2 Оператор switch
Структуру разветвляющегося алгоритма можно реализовать с помощью выбора одного варианта из нескольких (рис. 28Ошибка!
Источник ссылки не найден., c) в зависимости от значения некоторой величины (селектора). Данная структура называется Выбор. Она реализуется с помощью оператора switch.
Синтаксис оператора выбора:
switch (<Селектор>)
{
case <значение для сравнения Зн_1> :
<операторы, выполняемые если значения Селектора ==
значению для сравнения Зн_1>;
break;
. . .
case <значение для сравнения Зн_N :
операторы, выполняемые если значения Селектора ==
значению для сравнения Зн_ N>;
break;
[default
< операторы, выполняемые если значения Селектора !=
ни одному из предложенных значений для сравнения;>]
}
Выполнение оператора начинается с вычисления выражения
(селектора). Тип выражения чаще всего целочисленный (включая char) или строковый. Затем управление передается первому оператору из списка case,
50