Задание 2 Написать и отладить программу для примеров 21 и 22.

Тема № 3. Циклический вычислительный процесс

Циклическим называется алгоритм, в котором некоторая часть операция (тело цикла последовательность команд) выполняется многократно. Цикл не может быть бесконечным, т.к. алгоритм должен приводить к результату через конечное число шагов. В цикл обязательно должен входить блок проверки условия. В зависимости от того, где располагается это условие, циклы делятся на циклы типа «пока» (условие располагается перед телом цикла) и циклы типа «до» (условие располагается после тела цикла.

Другой виз классификации циклов – это циклы с параметром и циклы с выходом по условию.

Циклы с параметром

Теория

Цикл с параметром или цикл со счетчиком используется для организации циклов, в которых можно выделить параметр с известным начальным значением, конечным значением и определить закономерность, по которому параметр изменяется при каждой итерации цикла. Итерацией цикла называется ка­ждое повторение исполнения тела цикла Алгоритм работы оператора цикла с параметром можно представить следующей блок-схемой:

 

Для реализации этого алгоритма оператор цикла с параметром имеет следующий вид:

for (парамер=нач.знач.; условие_работы_цикла; изменение_параметра)

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

Если тело цикла состоит более чем из одного оператора, эти операторы заключаются в фигурные скобки. Как видно из блок-схемы, в цикле for проверка выполнения условия прекращения работы цикла осуществляется перед первой итера­цией, и, таким образом, возможен цикл for, тело которого не выполняется ни разу. В большинстве случаев параметр цикла с каждой итерацией изменяется на одну и ту же величину – шаг. В этом случае блок схема может быть сокращена, и, согласно ГОСТ принято еще одно обозначения цикла с параметром:

Оператор соответствующий такой блок-схеме имеет следующий вид:

for (парам.=нач.знач.; парам.<=кон.знач.; парам.=парам.+шаг)

Например:

for (a=0; a<=3; a=a+0.1)

Convert.WriteLine(”sin({0})={1:F3}”,a, Math.sin(a));

Если надо считать, сколько раз проработал цикл, то шаг равен 1, и цикл можно назвать не цикл с параметром, а цикл со счетчиком. В этом случае в сокращенной блок-схеме можно не указывать шаг.

Оператор соответствующий такой блок-схеме имеет следующий вид:

for (счетчик=нач.знач.; счетчик<=кон.знач.; счетчик++)

Тип параметра можно описывать непосредственно в цикле, но при этом следует помнить, что за пределами цикла этот параметр не определен.

Например:

for (int i=1; i<=10; i++)

Примеры

Пример 1.

Вычислить 10 значений d: d=a2-b2+ab-8,

c, если a<-3

где b= c/3, если -3£a£0

a+c+4, если a>0

а изменяется с шагом 4, начальное значение а равно -26 . Значение с – произвольное число.

Исходные данные: Значение с – вещественное число.

Результат: 10 значений d.

Тестовый пример: при с=3

i a d
1 -26 668
2 -22 476
3 -18 316
4 -14 188
5 -10 92
6 -6 28
7 -2 -7
8 2 -67
9 6 -63
10 10 -27

Пример 2.

Дано натуральное n <10. Получить n-значное натуральное число.

Для того, чтобы в C# генерировать числа надо использовать класс Random. Сначала создается объект этого класса: Random rnd=new Random(). После этого можно генерировать значение в любом интервале:

переменная = rnd.Next(начальное значение, конечное значение), если надо генерировать часла от 0 до конечного значения, оператор будет иметь следующий вид: rnd.Next(конечное значение).

Исходные данные: количество цифр n – целый тип.

Результат: d – целый тип.

Тестовый пример: проверяется только количество цифр.

Пример 3.

Вычислить сумму n вещественных чисел.

Исходные данные: n - количество введенных чисел - целый тип; х – переменная, куда помещаются вводимые числа - вещественный тип.

Результат: s - сумма введенных чисел – вещественный тип.

При вычислении суммы выполняется операция накопления данных в одной переменной, в данном случае в переменной s: s=s+x. Эта операция должна выполняться n раз. Для того чтобы в результате первой операции накопления было получено значение первого х, переменную s предварительно надо очистить, т.е. s=0.

Тестовый пример: при n=7 и последовательности:1.2, 3, 5.6, 6.1, -4, -1, 4.2, s=17.1.

 

Пример 4.

Во многих языках программирования отсутствует стандартная операция возведения в степень. Необходимо написать программу возведения в целую степень вещественного числа.

Исходные данные: n - степень, в которую возводится число – целый тип. х - число, которое возводится в степень n – вещественный тип.

Результат: p – вещественный тип.

Возвести в n-ю степень число – значит перемножить это число n раз

p=x×x×x×…×x

n

Операция перемножения х похожа на операцию сложения, только знак «+» заменяется на знак «*». Как и при сложении, в результате первого действия умножения надо получить само число х, т.е., и в этом отличие от суммирования, первоначально p должно быть равно 1.

Тестовый пример: При х=4 и n=5, p=1024.

Пример 5.

Ввести последовательность из n целых чисел. Найти минимальный член этой последовательности.

Исходные данные: n - количество введенных чисел - целый тип; а переменная, куда помещаются вводимые числа – целый тип.

Результат: min – целый тип.

Поиск минимального члена последовательности чисел похож на процедуру определения лучшего результат на соревновании лыжников с раздельным стартом. Когда первый лыжник прибегает на финиш, его результат считается лучшим, т.е. в min записывается этот результат. Затем, когда прибегает очередной лыжник, его результат сравнивается с лучшим (min), и если этот результат меньше, то в значение min записывается этот результат. Следует обратить внимание, что первоначальное значение min не может равняться нулю, так как в результате будет получен этот ноль.

Поиск максимального элемента отличается от поиска минимального только проверкой: если новое значение больше текущего максимального, в максимальное значение записывается это новое значение.

 

Тестовый пример: при n=7, последовательность: 8, 0, -1, 2, 10, 3, 5, min=-1.

 

Пример 6.

Дана числовая последовательность , где n=1, … 15. Определить, сколько отрицательных элементов в этой последовательности.

Исходные данные: количество элементов последовательности – 15.

Результат: количество отрицательных элементов k – целый тип.

Для нахождения количества отрицательных членов необходимо вычислить член последовательности и сравнить его с 0, если член меньше 0 увеличить k на единицу. В начале задачи k необходимо обнулить.

Тестовый пример: С помощью Excel получаем k=6.

 

Рассмотренные алгоритмы относятся к так называемым стандартным алгоритмам. Отметим. что у всех этих алгоритмов много общего. Рассмотрим следующую таблицу:

этап

Сумма s Произведение p Количество k Минимум min

До

цикла

s=0 p=1 k=0 min= первый элемент

В цикле

1 Получение элемента последовательности Получение элемента последовательности Получение элемента последовательности Получение элемента последовательности
2 Проверка, надо ли данный элемент суммировать (необязательно) Проверка, надо ли данный элемент умножать (необязательно) Проверка, удовлетворяет ли элемент условию Проверка, элемент меньше Min?
3 s=s+ элемент p=p* элемент k=k+1 min= элемент

 

Пример 7.

Вычислить факториал k. Факториалом называется произведение k!=1×2×3×…×k.

Исходные данные: k – целый тип.

Результат: fact – тип long int.

Факториал числа очень быстро растет. Поэтому результат должен иметь длинный целый тип.

Тестовый пример: При k=5, fact=120.

 

 

Пример 8.

Даны натуральное число n, символы s1, …, sn. Известно, что среди s1, …, sn есть по крайней мере одна запятая. Найти такое натуральное i, что si – первая по порядку запятая;

Исходные данные: Количество элементов n целое число, s – вводимый символ.

Результат: k – номер первой запятой.

Тестовый пример: при n=10 и последовательности ‘4hgj,e,6+,’ k=5.

Во многих задачах требуется выполнять вычисления над элементами числовой последовательности, в которой каждый член an является функцией натурального аргумента n. В примере 6 приведен вариант такой последовательности. Часто по элементам числовой последовательности требуется определить формулу для вычисления n-го элемента.

Пример 9.

Дана числовая последовательность {a1=2, a2=5, a3=8, …}. Члены последовательности с четными номерами заменили на обратные им числа (5 на -5). Найти сумму членов последовательности с десятого по тридцать первый включительно.

Исходные данные: начальный член последовательности 10, конечный член последовательности – 31.

Результат: Сумма членов последовательности s – целый тип.

Необходимо определить формулу для вычисления члена последовательности в зависимости от номера члена. С увеличением номера на 1 член последовательности изменяется на 3, т.е. член зависит от 3*n. При n=1 элемент равен 2. Чтобы получить 2 необходимо из 3*n вычесть 1. Таким образом an=3*n-1.

Чтобы определить четность номера достаточно найти остаток от деления номера на 2. Если остаток равен 0, то номер четный.

Тестовый пример: с помощью Excel получаем s=-33

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

Пример 10.

Пусть a0=1; ak=kak-1+1/k, k=1,2,… . Дано натуральное число n. Получить an.

Исходные данные: номер элемента n - целый тип.

Результат: n-й элемент последовательности а – вещественный тип.

Тестовый пример: с помощью Excel получаем при n=5, an =278.12.

Рассмотрим пример более сложной рекуррентной формулы

Пример 11.

Дана числовая последовательность: {a1=0, a2=4, …, an=an-1-3an-2}. Найти сумму отрицательных элементов при n=25.

Исходные данные: количество элементов n - целый тип, значение х - an-2 целый тип,

y - an-1  целый тип.

Результат: Сумма отрицательных элементов S – целый тип.

Для вычисления нового значения an необходимо знать 2 предыдущих значения. Для получения нового значения an надо знать an-1 и an-2 , которые необходимо сохранять в дополнительных переменных.

Тестовый пример: с помощью Excel получаем S= -1644128

 

Пример 12.

Даны натуральное число n, символы s1, …, sn. Выяснить, имеются ли в последовательности s1, …, sn такие члены последовательности, что si и si+1 совпадает с буквой t.

Исходные данные: Количество элементов n целое число, s – вводимый символ.

Результат: k – количество пар, равных t.

Для сравнения пар введенных символов необходимо сохранять предыдущий введенный символ в переменной а.

Тестовый пример:

при n=15 в последовательности ‘ertbyttbnvttvcd’ k=2.

 

Пример 13.

Дано натуральное число n. Определить, сколько у этого числа делителей (1 и само число не учитывать).

Исходные данные: n – целый тип.

Результат: количество делителей k- целый тип.

Тестовый пример: при n=24, k=6.

 

Пример 14.

Даны натуральное число n, символы. s1, …, sn Подсчитать наибольшее количество идущих подряд запятых.

Исходные данные: натуральное число n, вводимые символы s.

Результат: Максимальное количество пробелов max целый тип.

Если введенный символ равен ‘,’ надо увеличивать количество запятых идущих подряд на 1 (k). Если символ не запятая, надо проверить k, если символ следует сразу же после запятой (k>0) надо сравнить k с максимальным количеством запятых на данный момент. Если k>max, надо изменить значения max. После сравнения надо обнулить k перед поиском количества в новой серии запятых.

Тестовый пример:

при n=20, последовательность ’23,,wer,,,,,tyu,,,cv’, max=5.

 

 

Задание 1 Написать программу и отладить Пример 13

Контрольные вопросы

1. Как можно выйти досрочно из цикла.

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

3. Можно ли при поиске максимального значения в произвольной последовательности чисел первоначальное значение максимума задавать равное нулю и почему.

4. Как будет выглядеть блок-схема примера 3, если надо найти не минимум, а максимум.

5. Почему в примере 12 m=n/2 – наибольший возможный делитель?

6. Объясните проверку условия в примере 12.

7. Объяснить в примере 11 две последние операции в цикле.

Индивидуальные задания

1. Спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% от результата предыдущего дня. Найти какой путь пробежит спортсмен на 7 день.

2. Даны натуральное число n, символы s1, …, sn. Подсчитать:

· сколько раз среди данных символов встречается символ + и сколько раз символ *;

· общее вхождение символов +, -, * в последовательность s1, …, sn.

3. Даны натуральное число n, символы s1, …, sn. Известно, что среди s1, …, sn есть по крайней мере одна запятая. Найти такое натуральное i, что si – последняя по порядку запятая.

4. Дана числовая последовательность . Найти сумму членов с 10 по 25-й включительно.

5. Дано натуральное число n. Найти наибольшее среди чисел  (k=1, …, n), а также сумму всех этих чисел.

6. Вычислить , где

,

 

 

7. Дано натуральное число n, действительные числа y1, y2, …yn. Найти:

Max(|z1|, |z2|, …, |zn|), где

8. Даны натуральное n. Действительные числа a1, …an. Определить в этой последовательности число соседств двух чисел разного знака.

 

9. Пусть x1=0.3; x2=-0,3; xi=i+sin(xi-2), i=3,4, …, 100. Найти в этой последовательности ближайшее к какому-нибудь целому.

10. Даны натуральное число n, символы s1, …, sn. Выяснить, имеются ли в последовательности s1, …, sn такие члены последовательности si, si+1, что si – это запятая, а si+1 – тире.

11. Даны натуральное число n, символы s1, …, sn. Выяснить, верно ли, что в последовательности s1, …, sn имеются пять идущих подряд букв е.

12. Даны натуральное число n, символы s1, …, sn. Группы символов, разделенные пробелами (одним или несколькими) и не содержащими пробелов внутри себя, будем называть словами. Подсчитать количество букв в последнем слове данной последовательности.

Цикл с условием

Теория

Когда не известно сколько раз проработает цикл, используются циклы с условием. Окончание цикла происходит, когда выполняется/не выполняется условие. Существует два таких оператора цикла. Это цикл с предусловием или цикл «пока», и цикл с постусловием или цикл «до».

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

Точно так же как и в операторе со счетчиком, если тело цикла состоит из нескольких операторов, используются операторные скобки { }. Если тело цикла состоит из одного оператора, операторные скобки можно не использовать.

В цикле с постусловием сначала выполняется тело цикла, а потом идет проверка условия выхода из цикла. Блок-схема и оператор имеет вид.

При разработке программы выбор конкретного типа цикла лучше отложить. Вна­чале следует разработать блок-схему цикла, а уже затем преобразовать блок-схему в инструкции языка C#. На этом этапе будет проще принять решение об использова­нии определенного типа цикла языка C#.

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

В большинстве прочих случаев следует использовать циклы while и do-while; выбор нужного цикла — задача довольно легкая. Если тело цикла должно быть выполнено, по крайней мере, один раз, следует использовать цикл do-while. Если же возможна ситуация, когда тело цикла не будет выполняться ни разу, остановите свой выбор на цикле while. Он довольно часто используется при считывании входных данных, когда есть вероятность того, что входные данные могут отсутствовать вообще.

Оператор досрочного выхода из цикла break.

Примеры

Пример 15.

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

Исходные данные: начальное значение е=1. е – вещественное число.

Результат: значение, которое существенно для компьютера.

Пример 16.

Дан ряд целых чисел. Сколько отрицательных чисел стоит до первого нуля.

Исходные данные: члены ряда записываются в переменную a – целый тип.

Результат: количество отрицательных цифр k – целое.

Тестовый пример: для ряда 5 -9 6 -8 -3 5 9 0, k=3.

 

Пример 17.

Алгоритм Евклида. Даны целые числа A и B. Найти наибольший общий делитель этих чисел.

 

Исходные данные: A, B – целый тип

 

Результат: NOD наибольший общий делитель

 

Тестовый пример:

при A=36, B=48, НОД=12.

 

Пример 18.

Дана числовая последовательность:

{a1=8.2, a2=7.9, a3=7.6, …}

Найти сумму всех положительных членов.

 

Исходные данные: элементы последовательности а – вещественный тип.

Из приведенных данных видно, что очередной член числовой последовательности получен из предыдущего члена вычитанием 0.3.

Результат: Сумма положительных элементов последовательности S – вещественный тип.

 

Тестовый пример:S=116.2.

 

Пример 19.

Дано натуральное число. Определить, сколько цифр в этом числе.

Исходные данные: n – целый тип.

Результат: количество цифр k – целый тип.

Для получения количества цифр надо выполнять целочисленное деление на 10, до достижения 0.

Тестовый пример:

при n=12345, k=5.

 

 

 

 

Пример 20.

Создать программу вычисляющую

Для этого надо вычислить элементы числовой последовательности:

Найти первое значение xn, для которого |xnk-a|<10-4.

Исходные данные: a вещественный тип, k – целочисленный тип

Результат: x – вещественный тип

Тестовый пример: при a=8, k=3, x=2.

 

Пример 21.

Дано натуральное число N. Верно ли утверждение, что цифры в этом числе образуют возрастающую последовательность.

Исходные данные: N целый тип.

Результат: ключ k – равен нулю, если последовательность цифр возрастает, единице, если не возрастает.

Для сокращения числа на 1 цифру делим число на 10, для получения цифр в числе вычисляем остаток от деления на 10. Чтобы сравнивать две цифры используем переменные а и b. а – правая цифра в паре, b – левая цифра в паре.

Тестовый пример:

при N=35679 вывод ‘возрастает’;

при N=35479 вывод ‘не возрастает’.

 

 

 

Пример 22.

Даны натуральное число n, символы. Известно, что символ s1 отличен от восклицательного знака и что среди s2, s3, … есть по крайней мере один восклицательный знак. Пусть – символы данной последовательности, предшествующие первому восклицательному знаку (n заранее неизвестно). Выяснить, верно ли, что среди символов имеются все буквы, входящие в слово дом.

Исходные данные: элементы последовательности s – символьный тип.

Результат: количество букв «о» о – цедый тип, количество букв «д» d – целый тип, количество букв «м» m – целый тип. Если каждое из этих значений больше 0 – из символов последовательности можно составить слово «дом».

Тестовый пример:

при вводе последовательности ‘имркпоовдя!’ – вывод ‘можно’

при вводе последовательности ‘имркпгрпоовя!’ – вывод ‘нельзя’

 

 

 

Задание 2 Написать и отладить программу для примеров 21 и 22.

Контрольные вопросы.

1. Когда надо использовать цикл «до», а когда цикл «пока».

2. К какому виду цикла относится цикл со счетчиком.

3. Какой из 3-х циклов является универсальным?

4. Укажите, в каких ситуациях вместо цикла со счетчиком приходится использовать цикл while.

5. Всегда ли цикл while можно заменить циклом do.

6. Какой оператор надо использовать, если надо досрочно выйти из цикла.

7. Что означает условие выхода из цикла в примере 15.

8. Что такое наибольший общий делитель, и в каком примере приведен алгоритм его нахождения.

9. Как можно сократить пример 20.

Индивидуальные задания

1. Спортсмен в первый день пробежал 10 км. Каждый следующий день он увеличивал дневную норму на 10% от результата предыдущего дня. Найти через сколько дней спортсмен пробежит суммарный путь более 100 км?

2. Сколько чисел нужно взять в последовательности  чтобы получить число, больше чем N?

 

3. Шары расположены в форме треугольника так, что в первом ряду находится один шар, во втором – два, в третьем – три и так далее. Сколько рядов удастся построить, если имеется N шаров?

4. Вывести значения K, для которых Z=U+M-20K+T больше 0,

2U, если M<2

где K=  U, если 2£M£4

1-M, если M>4

и U=3M+1,

M изменяется от 0 до 6 с шагом 1.5, Т – произвольное число.

 

5. Дано натуральное n. Выяснить, входит ли цифра 3 в запись числа n2.

6. Дано натуральное n. Чему равна сумма его цифр?

7. Даны действительные числа x, y (x>1, y>1). Получить целое число k, удовлетворяющее условию

8. Даны натуральное число n, символы. Известно, что символ s1 отличен от восклицательного знака и что среди s2, s3, … есть по крайней мере один восклицательный знак. Пусть – символы данной последовательности, предшествующие первому восклицательному знаку (n заранее неизвестно). Определить количество пробелов среди s1, …, sn .

9. Даны натуральное число n, символы. Известно, что символ s1 отличен от восклицательного знака и что среди s2, s3, … есть по крайней мере один восклицательный знак. Пусть – символы данной последовательности, предшествующие первому восклицательному знаку (n заранее неизвестно). Выяснить, имеется ли среди s1, …, sn пара соседствующих одинаковых символов.

10. Даны натуральное число n, символы. Известно, что символ s1 отличен от восклицательного знака и что среди s2, s3, … есть по крайней мере один восклицательный знак. Пусть – символы данной последовательности, предшествующие первому восклицательному знаку (n заранее неизвестно). Выяснить, верно ли, что в последовательности имеются пять идущих подряд букв е.

11. Дано натуральное число N. Если число содержит 5 цифр, то получить новое число M, которое образуется путем исключения средней цифры исходного числа Если количество цифр не 5, то M=N.

12. Среди всех n-значных чисел указать те, сумма цифр которых равна заданному числу k.

 


Дата добавления: 2019-11-16; просмотров: 1712; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!