Лекция 7. Циклы и циклические программы
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Ну, хорошо! Есть ООП, в котором используются такие конструкции как класс, объект, поле, свойство и т.п. А как писались программы до ООП (или без ООП), какие элементы программирования использовались до ООП? Наверняка с самого начала был оператор присваивания, были средства ввода и вывода данных, был условный оператор и были операторы, позволяющие выполнять похожие действия несколько раз. Это и есть операторы цикла. Оказывается, в принципе, только этих элементов программирования достаточно для решения задачи практически любой сложности.

Итак, циклы. Очевидно, что цикл в программировании не может быть бесконечным. Значит, в операторе цикла должно быть условие, при котором цикл будет закончен (или продолжен). Это условие должно проверяться при каждом проходе по циклу. Где могут проверяться эти условия? В начале цикла, где-то в середине цикла и в конце цикла. Оказалось, что в середине цикла проверять условие нецелесообразно. Поэтому различают два вида циклов: цикл с предусловием (рис. 7.1а), в котором условие проверяется перед операторами тела цикла и цикл с постусловием (рис. 7.1б), в котором условие проверяется за ними.

 

 

Рис. 7.1. Блок-схемы циклов с предусловием и с постусловием

 

В C# эти циклы реализуются следующим образом:

 

while (логическое выражение) оператор тела цикла;

 

или

Do

оператор тела цикла;

while (логическое выражение);

 

где «логическое выражение» – условие продолжения цикла, то есть продолжение цикла происходит при значении логического выражения истина (true), а выход из цикла происходит при значении фальшь (false). «оператор тела цикла» - один любой оператор языка C#. Если в теле цикла требуется выполнить несколько операторов, они объединяются в программный блок ({..}).

Подобные операторы есть во всех универсальных языках программирования. Они, как правило, называются итеративными и в них заранее неизвестно количество повторений операторов тела цикла. Кроме таких циклов во многих универсальных языках программирования выделяют случай, в котором количество повторений цикла заранее известно. Такие циклы часто называют регулярными. Для их записи используется слово for. И в языке C# есть цикл for. Но он используется и для случая, в котором количество повторений заранее неизвестно. Об операторе for из языка C# позже.

 

Рассмотрим примеры.

 



Примеры использования циклических структур

 

Сначала коротенькие примеры на уровне блок-схем для вычисления суммы чисел от 1 до 10 (пример 7.2а) и произведения чисел от 1 до 5 или факториала числа 5 (5!) (пример 7.2б).

 

 

 

Рис. 7.2. Схемы алгоритмов вычисления суммы и произведения чисел

 

Пример 7.3. Для заданной функции построить ее таблицу на отрезке от a до b с шагом h. По этой таблице найти минимальное значение функции и аргумент, доставляющий этот минимум. Определить количество значений функции больших нуля.

 

Схема алгоритма метода, решающего эту задачу с функцией, оформленной тоже в виде метода, представлена на рис. 7.3.

 

Рис. 7.3. Блок-схема задачи построения таблицы функции

 

Обсудим содержание класса, в котором полностью решается эта задача.

Нужны поля класса a,b,h для хранения исходных данных, а также поля min , xmin , count для хранения результатов. Два метода: закрытый метод, в котором описывается заданная функция, и открытый метод для построения таблицы и вычисления значений результатов.

Возникает вопрос – куда выводить таблицу в оконном режиме? Здесь есть несколько вариантов. Один из них – использовать визуальный компонент класса L istBox, который представляет собой набор строк. Этот визуальный компонент должен быть размещен на форме. Хорошо, если его размеры по ширине будут такими, чтобы там была видна вся строка таблицы. Если вся таблица не уместится в компонент по высоте, то появится скроллинг, который поможет просмотреть всю таблицу. В классе ListBox есть метод Add (), с помощью которого к концу уже имеющегося набора строк можно добавить новую строку. Понятно, что этот метод будет вызываться внутри цикла, в котором вычисляются значения заданной функции в пределах от a до b с шагом h. Конвертируя эти значения, надо будет формировать строку и каждый раз в цикле добавлять полученную строку к уже имеющемуся набору строк. В этом классе есть еще метод C lear(), который очищает список строк. Компонент класса L is t Box, расположенный на форме, следует передавать как параметр в метод, отвечающий за построение таблицы и другие результаты. Исходный текст файла Form1.cs приведен в примере 7.4.

Пример 7.4

 

using System ;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

Дата: 2019-11-01, просмотров: 157.