
- •Введение
- •Создание простого приложения в ms Visual Studio
- •Отладка программы
- •Пошаговый режим
- •Точки останова
- •Безусловные точки останова
- •Условные точки останова
- •Просмотр переменных
- •Стек вызова функций
- •Разработка оконных приложений
- •Размещение компонентов на форме. Свойства компонента.
- •Компонент CheckBoxListBox
- •Переменные
- •Приведение типов
- •Операции, приоритет
- •Перегрузка операций
- •If(выражение_1) оператор_1
- •Циклы While
- •Цикл foreach
- •Программирование классов
- •Введение в классы и объекты в с#
- •Общий синтаксис класса
- •Поля и свойства
- •Использование переменного числа аргументов
- •Объявление объектов класса. Оператор new
- •Инциализация членов класса
- •Конструкторы и деструкторы
- •Ключевое слово this
- •Ключевое слово static
- •Наследование
- •Полиморфизм.
- •Абстрактные классы
- •Интерфейсы
- •Реализация интерфейсов
- •Интерфейсные свойства
- •Интерфейсные индексаторы
- •Массивы
- •Обработка исключительных ситуаций
- •Предварительная проверка параметров
- •Проверка кодов возврата функций и методов
- •Применение механизма исключений
- •Блоки try-catch
- •Применение блока finally
- •Массивы как коллекции
- •Коллекция ArrayList
Циклы While
Цикл while (выражение) является универсальным видом цикла, включаемым во все языки программирования. Тело цикла выполняется до тех пор, пока остается истинным выражение while. В языке C# у этого вида цикла две модификации - с проверкой условия в начале и в конце цикла. Первая модификация имеет следующий синтаксис:
while(выражение) оператор
Эта модификация соответствует стратегии: "сначала проверь, а потом делай". В результате проверки может оказаться, что и делать ничего не нужно. Тело такого цикла может ни разу не выполняться. Конечно же, возможно и зацикливание. В нормальной ситуации каждое выполнение тела цикла - это очередной шаг к завершению цикла.
Цикл, проверяющий условие завершения в конце, соответствует стратегии: "сначала делай, а потом проверь". Тело такого цикла выполняется, по меньшей мере, один раз. Вот синтаксис этой модификации:
do
оператор
while(выражение);
Рассмотрим пример, в котором участвуют обе модификации цикла while. Во внешнем цикле проверка выполняется в конце, во внутреннем - в начале. Внешний цикл представляет собой типичный образец организации учебных программ, когда в диалоге с пользователем многократно решается некоторая задача. На каждом шаге пользователь вводит новые данные, решает задачу и анализирует полученные данные. В его власти, продолжить вычисления или нет, но хотя бы один раз решить задачу ему приходится. Внутренний цикл do while используется для решения уже известной задачи с палиндромами. Вот текст соответствующей процедуры:
/// <summary>
/// Два цикла: с проверкой в конце и в начале.
/// Внешний цикл - образец многократно решаемой задачи.
/// Завершение цикла определяется в диалоге
/// с пользователем.
/// </summary>
public void Loop()
{
string answer, text;
do
{
Console.WriteLine("Введите слово");
text = Console.ReadLine();
int i =0, j = text.Length-1;
while ((i<j) && (text[i] == text[j]))
{i++; j--;}
if (text[i] == text[j])
Console.WriteLine(text +" - это палиндром!");
else
Console.WriteLine(text +" - это не палиндром!");
Console.WriteLine("Продолжим? (yes/no)");
answer = Console.ReadLine();
}
while(answer =="yes");
}//Loop
Цикл foreach
Новым видом цикла, не унаследованным от С++, является цикл foreach, удобный при работе с массивами, коллекциями и другими подобными контейнерами данных. Его синтаксис:
foreach(тип идентификатор in контейнер) оператор
Цикл работает в полном соответствии со своим названием - тело цикла выполняется для каждого элемента в контейнере. Тип идентификатора должен быть согласован с типом элементов, хранящихся в контейнере данных. Предполагается также, что элементы контейнера (массива, коллекции) упорядочены. На каждом шаге цикла идентификатор, задающий текущий элемент контейнера, получает значение очередного элемента в соответствии с порядком, установленным на элементах контейнера. С этим текущим элементом и выполняется тело цикла - выполняется столько раз, сколько элементов находится в контейнере. Цикл заканчивается, когда полностью перебраны все элементы контейнера.
Серьезным недостатком циклов foreach в языке C# является то, что цикл работает только на чтение, но не на запись элементов. Так что наполнять контейнер элементами приходится с помощью других операторов цикла.
В приведенном ниже примере показана работа с трехмерным массивом. Массив создается с использованием циклов типа for, а при нахождении суммы его элементов, минимального и максимального значения используется цикл foreach:
/// <summary>
/// Демонстрация цикла foreach. Вычисление суммы,
/// максимального и минимального элементов
/// трехмерного массива, заполненного случайными числами.
/// </summary>
public void SumMinMax()
{
int [,,] arr3d = new int[10,10,10];
Random rnd = new Random();
for (int i =0; i<10; i++)
for (int j =0; j<10; j++)
for (int k =0; k<10; k++)
arr3d[i,j,k]= rnd.Next(100);
long sum =0; int min=arr3d[0,0,0], max=arr3d[0,0,0];
foreach(int item in arr3d)
{
sum +=item;
if (item > max) max = item;
else if (item < min) min = item;
}
Console.WriteLine("sum = {0}, min = {1}, max = {2}",
sum, min, max);
}//SumMinMax