Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР3 С#1 Линейные и разветвляющиеся алгоритмы

.pdf
Скачиваний:
1
Добавлен:
25.02.2024
Размер:
2.49 Mб
Скачать

2.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