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

ЛР4 С#2 Многооконный интерфейс. Операторы цикла

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

Однако в качестве параметра цикла может выступать и ранее объявленная переменная, тогда в данном блоке операторов ей задается начальное значение

(тип не объявляется). В таком случае, значение переменной будет доступно и за пределами тела цикла.

Логическое выражение определяет условие выполнения цикла: если его результат равен true, цикл выполняется.

Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую:

for (int i = 0, j = 20; 1 < 5 && j > 10; i++, j--)

Если параметр цикла необходимо увеличить не на единицу, а на другую величину (например, на 0,1), то следует использовать следующую запись в блоке операторов модификации:

i+=0.1

Общее задание 2

Используя оператор цикла с параметром, создайте проект,

позволяющий решить задачу табулирования (нахождения её значений при изменении аргумента в заданном диапазоне) функции y 2 cos( x) на

отрезке [- ; ] с шагом /6.

При выводе результатов используйте форматирование с тремя знаками после запятой

Шаг 1. Создайте новый проект.

Шаг 2. На макет формы добавьте текстовое поле TextBox. В окне Свойства измените следующие свойства:

Multiline → True

ScrolBars → Vertical

13

Шаг 3. На макете формы измените размеры поля так, как показано на рисунке 6.

Рисунок 6 – Макет формы для задания 2

Шаг 4. Добавьте кнопку «Вычислить» и создайте для неё обработчик события клика.

Шаг 5. Напишите программный код, показанный на рисунке 7.

Рисунок 7 – Программный код для задания 2

Вданном коде в первой строке объявляются две переменные вещественного типа.

Вследующей строке кода в свойство Text элемента textBox1 записывается строка нулевой длины (в строке нет символов). Это позволяет очистить текстовое поле от любых символов. Если в коде не указать данную строку, то при повторном нажатии на кнопку «Вычислить» произойдет повторный вывод результата ниже, под результатами,

выведенными после первого запуска вычислений.

Далее задается цикл с параметром. В качестве параметра цикла используется ранее объявленная переменная x, которой присваивается значение - . Условием выполнения цикла,

согласно заданию, указано неравенство x ≤ . Модификация параметра цикла соответствует увеличению его значения на величину шага /6.

В теле цикла выполняется присвоение переменной y, вычисленного по заданной формуле, где в качестве аргумента выступает переменная x.

Вывод результатов осуществляется также в теле цикла. Для этого к свойству

Text добавляется строка, позволяющая осуществить форматированный вывод

14

переменной x и y. Используется знак +=, так как использование знака = приведет к перезаписи строковой переменной и отображению результата только последних вычислений в цикле. При этом в качестве формата вывода используется строка

"{0,8:F3} \t {1,8:F3}\r\n". Здесь в первых фигурных скобках (под номером 0)

указан формат вывода переменной x: используется 8 позиций для целой части и 3 позиции для вещественной (F – float, число с плавающей запятой). Знак \t (t – tabulator, табулятор)

является управляющей последовательностью, позволяющей установить отступ и выравнивание последующих отображаемых значений в столбец. В следующих фигурных скобках (с номером 1) указывается аналогичный формат представления для переменной y.

Управляющие последовательности \r\n (r – return, carriage return – возврат каретки, n – new row, новая строка) позволяют сформировать многострочный литерал. Использование данной управляющей последовательности возможно только для текстовых полей, у

которых свойство Multiline установлено в True.

Шаг 6. Запустите приложение и проверьте его работоспособность (рис. 8).

Рисунок 8 – Результат работы задания 2

Задание 2 выполнено!

15

2.2.2Операторы while, do-while

Циклы с условием используются в тех случаях, когда число повторений

тела цикла заранее неизвестно. Такой цикл продолжает работу, пока выполняется условие окончания цикла.

Если условие окончания цикла проверяется перед выполнением тела цикла, то такие циклические структуры называют циклами с предусловием

Выполнять пока») (рис. 9, а).

Если проверка условия происходит после выполнения тела цикла, то –

циклами с постусловием Выполнять до тех пор, пока») (рис. 9, б).

Тело цикла с постусловием выполнится как минимум один раз, тогда как в цикл с предусловием можно и не войти.

а) Цикл с предусловием

б) Цикл с постусловием

Условие продолжения цикла

Условие продолжения цикла

проверяется в начале цикла

проверяется в конце цикла

Рисунок 9 – Схемы циклов с условием

16

В C# такие циклы образуются с помощью конструкций while и

do while.

Оператор

Описание

 

 

while (<лог.выражение>)

Цикл с предусловием типа «Пока».

 

{

Логическое выражение проверяется до того,

 

 

как начнет выполняться тело цикла.

<тело цикла>

Цикл продолжает свою работу, пока значение

 

}

выражения остается истинным.

 

 

 

Цикл с постусловием типа «До тех пор

do

пока».

 

{

Логическое выражение проверяется

 

<тело цикла>

после того, как выполнится тело цикла.

} while(<лог.выражение>);

Цикл продолжает свою работу, пока

 

 

значение выражения остается истинным.

 

 

17

Общее задание 3

Используя оператор цикла с постусловием, создайте проект,

позволяющий вычислить значение факториала от заданного пользователем числа n. Используйте алгоритм, вычисляющий значение факториала путём перемножения натуральных чисел от 1 до n (согласно определению факториала).

Начало

p=1; i=1

n

p = p * i; i = i + 1;

i ≤ n

p

Конец

18

Шаг 1. Создайте новый проект.

Шаг 2. Разместите на макете формы кнопку, предназначенную для запуска вычислений, а также два текстовых поля: одно для ввода данных,

второе – для вывода результата.

Шаг 3. В программном коде обработчика события клика по кнопке объявите необходимые целочисленные переменные: n – для хранения введённого пользователем числа, p – для хранения вычисляемого произведения, i – в качестве переменной цикла.

Шаг 4. Напишите строку кода, позволяющего считать число, введенное пользователем к текстовое поле. Это значение присвойте переменной n

(выполните необходимое преобразование типов).

Шаг 5. Переменным p и i присвойте единичные значения.

Шаг 6. Инициализируйте цикл с постусловием (рис. Рисунок 10). В

качестве условия укажите неравенство i <= n. Вычисления будут выполняться до тех пор, пока внутренняя переменная цикла не достигнет значения, равного числу, введенному пользователем.

Рисунок 10 – Фрагмент программного кода (описание цикла)

Шаг 7. В теле цикла выполните умножение текущего значения произведения p на число i и увеличьте переменную i на единицу.

Шаг 8. После выхода из цикла напишите код, позволяющий вывести значение переменной p (выполните необходимое преобразование типов).

Шаг 9. Запустите приложение и проверьте его работоспособность (рис.

11). Не вводите число больше 12, если указали тип int, так как число 13! не входит в

диапазон представления int.

19

Рисунок 11 – Результат вычисления для задания 3

Задание 3 выполнено!

Общее задание 4

Создайте проект, вычисляющий частичную сумму ряда:

-при задаваемом пользователем числе k членов ряда (реализовать с использованием цикла с параметром);

-при задаваемой пользователем точности, например: 0,0000001

(реализовать с использованием цикла с условием).

Выбор алгоритма вычислений осуществляется нажатием либо одной,

либо другой кнопки.

 

1

 

S ( 1)k

 

 

 

k!(k 1)!

k 1

 

 

При выводе результата используйте форматированный вывод с

 

 

 

восемью знаками после запятой.

 

 

 

 

 

Так как знаменатель слагаемых этой суммы содержит факториалы, то он может быть довольно большим числом, хранение которого может быть невозможным. Для того чтобы избавиться от больших чисел, воспользуемся рекуррентным соотношением.

Для этого найдем коэффициент с, разделив (k+1)-ое слагаемое на k–ое, и

сократим по правилам сокращения факториалов:

20

c

( 1)k 1

 

k!(k 1)!

 

k!

 

1

(k 1)! (k 2)!

( 1)k

 

(k 2)!

(k 1)(k 2)

 

 

 

Теперь если вычислить первое слагаемое (k = 1):

a1 12 ,

то все остальные слагаемые можно найти по формуле:

ak 1 c ak ,

где c

1

.

 

(k 1)(k 2)

 

 

 

Под точностью вычислений подразумевается следующее: если последующий член ряда не уточняет сумму и его значение по модулю не превосходит заданное значение ε, то вычисление необходимо остановить.

Шаг 1. Создайте новый проект.

Шаг 2. На макет формы перенесите необходимые элементы (рис. 12).

Рисунок 12 – Примерная форма для задания 4

Шаг 3. Для первой кнопки напишите код, вычисляющий сумму по заданному числу членов ряда (рис. 13, комментарии, приведенные в коде, не вставляйте).

Обратите внимание, что при присвоении переменной а начального значения -1/2

используется запись -1.0/2. Дело в том, что запись -1/2 вернет целое число (0 вместо -

0,5), так как компилятор определит число -1 как целое, число 2 как целое, поэтому и результат деления целых чисел вернет в виде целого числа (дробная будет отброшена).

21

Явная запись числа -1 как вещественного в виде -1.0 указывает компилятору, что и

результат деления вещественного числа на целое должно быть вещественным.

Рисунок 13 – Вычисление суммы при заданном числе членов ряда Шаг 3. Для второй кнопки напишите код, вычисляющий сумму по

заданной точности (рис. 14). Обратите внимание как реализована работа с параметром цикла

Рисунок 14 – Вычисление суммы при заданной точности Задание 4 выполнено!

22