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

Курс лекций CS (первый семестр)

.pdf
Скачиваний:
7
Добавлен:
20.05.2015
Размер:
2.69 Mб
Скачать

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Если выбрать пункт меню Condition, то появляется окно вида:

Это окно содержит предупреждение: "Когда достигается точка останова, производится

вычисление выражения, и останов сработает только в том случае, если значение выражения true

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

Например, создадим точку останова в программе

191

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

И добавим условие вида: a>10, оставив выбранной первую радиокнопку. Результат: если пользователь введет число больше 10, то останов будет, в противном случае нет. Этот подход удобен, если вы хотите произвести останов, когда переменная, например, в теле цикла, превышает некоторе значение.

Если выбрать вторую радиокнопку, то в поле необходимо задавать некоторую переменную, изменение которой вы хотите отследить.

Выбор команды контекстного меню Hit Count приводит к открытию диалогового окна

В верхней части окна прочтем предупреждение: "Точка останова срабатывает, когда она

достигается и при этом условие оказывается выполненным. Счетчик повторений — это число срабатываний этой точки.", ниже из раскрывающегося списка можно выбрать условие: "Когда должна срабатывать контрольная точка:". Под списком слева находится кнопка "Обнулить счетчик повторений", справа — информационная строка: "Текущее значение счетчика повторений:".

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

переходить в режим останова всегда;

переходить в режим останова, когда счетчик повторений равен;

переходить в режим останова, когда счетчик повторений кратен;

переходить в режим останова, когда счетчик повторений больше или равен

Рассмотрим режим останова всегда для программы:

192

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Останов произойдет при первом же вызове функции Func(), т.е. при i=0, если затем опять нажать F5, то останов произойдет при i=1 и т.д.

Если изменить режим - когда счетчик повторений равен, то появится дополнительное окно, в котором введем 5, и останов произойдет при y=4 для а=7. А продолжение выполнения завершит программу без останова.

Если выбрать режим - когда счетчик повторений кратен, то в дополнительное окно вводится значение, например 3, и останов произойдет при y=2,5 для а=7.

Если выбран режим - когда счетчик повторений больше или равен, то в дополнительное окно вводится значение, например 5, и первый останов произойдет при y=4 для а=7. А продолжение выполнения приведет к останову для всех последующих значений y.

Мониторинг содержимого переменных.

Мониторинг содержимого переменных представляет собой пример той помощи, которую оказывает нам VS. Самый простой способ узнать значение, хранящееся в переменной, это подвести указатель мыши к имени переменной в исходном коде, находясь в режиме останова. В этом случае на экране появится вспомогательное поле желтого цвета, в котором содержится информация об этой переменной, включая ее текущее значение. Мы можем выделять таким же образом целые выражения, чтобы получить информацию о результате их выполнения. Однако применение этого способа весьма ограниченно, поскольку он не позволяет, например, просматривать содержимое массивов.

Вы, вероятно, уже успели заметить, что когда мы запускаем приложения посредством VS, то внешнее представление различных окон меняется. Появляется окно

193

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

в котором отображаются значения локальных переменных, в нашем примере – это переменная y. Внизу имеются закладки, которыми можно воспользоваться для перехода. Удобным является окно Watch1 – окно наблюдений, в котором можно задавать имена переменных для просмотра значений.

Более сложные переменные, такие как массивы, могут просматриваться посредством дополнительного запроса, для чего используются символы развертывания/свертывания (+ и -) с левой стороны от каждого имени, позволяющие представлять содержимое переменных в виде дерева.

Пример.

using System;

using System.Collections.Generic; using System.Text;

using System.Diagnostics;

namespace ConsoleApplication1

{

class Program

{

static void Func(int y)

{

y++;

}

static void Main(string[] args)

{

int a=Convert.ToInt32(Console.ReadLine());

194

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

int[] b = new int[a];

for (int i = 0; i < a; i++)

{

b[i] = i;

}

Func(5);

}

}

}

Имеем окно вида:

Пошаговое выполнение кода.

Когда мы переходим в режим останова, то слева от текста программы появляется стрелка (если для перехода в режим останова использовалась точка останова, то эта стрелка может изначально появляться внутри красного кружка, обозначающего точку останова), которая указывает на ту строку кода, которая должна выполняться: Стрелка показывает - нам, какой точки программы мы достигли на момент перехода

врежим останова. Отсюда мы можем продолжить выполнение программы в пошаговом режиме:

F10 – выполнение следующего оператора без входа в функцию,

F11 – выполнение следующего оператора с входом в функцию,

F5 – выполнение программы до следующей точки останова.

195

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Дополнительно

Рекуррентные соотношения.

Последовательность чисел, в которой каждый следующий член выражается через предыдущий, называется рекуррентной, а формулы, устанавливающие эту связь, - рекуррентными соотношениями. Рекуррентные соотношения удобно использовать при составлении алгоритмов вычисления величин, при этом нет необходимости хранить все промежуточные значения. В выражении следующего значения некоторой величины через ее предыдущие значения и состоит суть метода рекуррентных соотношений. Если последовательность чисел конечна, то для нахождения значений (например, суммы, произведения или n-ого члена) используется цикл, в котором заранее известно число повторений.

Вывод рекуррентной формулы.

При решении задач на вычисление сумм (произведений) членов конечных или бесконечных последовательностей, вычисления пределов последовательностей наибольшую трудность представляет получение рекуррентной формулы. Далеко не во всех задачах закономерность, связывающая предыдущий и последующий члены последовательности, очевидна, как, например, в последовательности

 

 

 

x

x2

 

xn

 

 

 

 

 

 

 

 

 

,

 

, ...,

 

,...

 

 

 

 

2

4

2n

 

 

 

 

Любой член последовательности можно выразить как предыдущий умноженный на

x

, т. е. a

a

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

n 1

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

А вот в последовательности

 

 

 

 

 

x2

x3

 

x4

 

 

 

 

 

 

,

 

,

 

,...

 

 

 

 

1 2 3

2 3 4

3 4 5

 

 

 

 

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

ai

 

 

xi

 

 

 

 

 

(i 1)

i (i 1)

 

 

 

 

 

 

 

 

 

Тогда n-ый член последовательности принимает вид:

 

an

 

xn

, а (n+1)-ый: an 1

 

xn 1

(n 1) n (n 1)

n (n 1)

(n 2)

 

 

 

 

196

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

Разделим (n+1)-ый член на n-ый.

a

xn 1(n 1)n(n 1)

 

x(n 1)

n 1

 

 

 

 

 

xnn(n 1)(n 2)

(n 2)

an

 

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

a

a

x(n 1)

.

 

n 1

n (n 2)

Правильность полученной формулы доказывается индукцией. Проверим, действительно ли по этой формуле получаем члены последовательности, идущие подряд.

При n=1 a1

 

x2

1 2

3

 

 

При n=2 a

a

 

x(2 1)

 

 

 

x2

 

 

x

 

 

 

x3

 

 

 

 

 

 

 

1 2

 

 

 

 

 

3 4

2

1 (2 2)

 

3 4

2

При n=3 a

a

 

x(3 1)

 

 

x3

 

x 2

 

 

x4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и т.д.

 

 

 

 

3

4

 

 

 

 

 

 

 

3

 

2 (3 2)

 

2

 

 

5

 

 

3

4 5

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

В качестве примера решим задачу.

Найти сумму членов последовательности:

k i

(i 1) i (i 1)

i2 x

Пример.

using System;

using System.Collections.Generic;

using System.Text;

197

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("Введите количество членов последовательности >=2"); int k = Convert.ToInt32(Console.ReadLine());

if (k < 2) return; Console.Write("x=");

double x = Convert.ToDouble(Console.ReadLine()); double a = x * x / 2 / 3;

double s=a;

for (int i =2; i < k; i++)

{

a = a * x * (i - 1) / (i + 2); s = s + a;

}

Console.WriteLine("S={0}", s);

Console.ReadLine();

}

}

}

Результат:

198

Кафедра теоретической механики ИМЭМ ОНУ им. И.И.Мечникова

199