Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Примеры для самостоятельного решения

Лабораторная работа № 4

ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ ПРОЦЕССОВ

 

Цель и порядок работы

Цель работы - изучить операторы, используемые при организации циклических вычислительных процессов, получить практические навыки в составлении программ.

Порядок выполнения работы:

· ознакомиться с описанием лабораторной работы;

· получить задание у преподавателя по вариантам;

· разработать схему алгоритма решения задачи;

· написать программу, соответствующую схеме алгоритма;

· ввести программу, отладить и выполнить ее на ЭВМ;

· оформить отчет.

·

Общие сведения

Понятие цикла

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

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

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

Алгоритм циклической структуры в наиболее общем виде должен содержать:

- подготовку цикла: задание начальных значений переменным цикла перед первым его выполнением;

- тело цикла; действия, повторяемые в цикле для различных значений переменных цикла;

- изменение значений переменных цикла при каждом новом его выполнении;

- управление циклом: проверку условия продолжения работы цикла.

Один проход тела цикла называется итерацией. Если параметр цикла целочис­ленный, он называется счетчиком цикла.

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

Передавать управление извне внутрь цикла запре­щается (при этом возникает ошибка компиляции).

Операторы управления

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

В С# есть пять таких операторов:

- оператор безусловного перехода goto;

- оператор выхода из цикла break;

- оператор перехода к следующей итерации цикла continue;

- оператор возврата из функции return;

- оператор генерации исключения throw.

Эти операторы могут передать управление в пределах блока, в котором они использованы, и за его пределы. Передавать управление внутрь другого блока запрещается.

Первые четыре оператора рассматриваются в этой лабораторной работе, а оператору throw посвящена специальная лабораторная работа.

Оператор goto

Оператор безусловного перехода используется в одной из трех форм:

goto метка;

goto case константное_выражение;

goto default;

В теле функции должна присутствовать ровно одна конструкция вида

метка: оператор;

Оператор goto метка передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, что и оператор перехода. После выполнения оператора Goto опять восстанавливается естественный порядок выполнения операторов, но начиная уже с помеченного оператора. Если помеченный оператор не является оператором управления, то будет выполняться следующий за ним оператор и т. д.

При использовании Goto следует учитывать следующие требования:

- Goto не должен передавать сообщения внутрь цикла;

- вход в блок должен осуществляться через заголовок.

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

- принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;

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

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

Вторая и третья формы оператора goto используются в теле оператора выбора switch.

Оператор:

goto case константное_выражение

передает управление на соответствующую константному выражению ветвь, а оператор

goto default — на ветвь default.

 

Оператор break

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

Оператор continue

Оператор перехода к следующей итерации текущего цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на нача­ло следующей итерации.

 

Оператор return

Оператор возврата из функции return завершает выполнение функции и переда­ет управление в точку ее вызова. Синтаксис оператора:

return [ выражение ];

Тип выражения должен иметь неявное преобразование к типу функции. Если тип возвращаемого функцией значения описан как void, выражение должно от­сутствовать.

 

Операторы циклов

В С# существует четыре вида циклических операторов: цикл с параметром for, цикл с предусловием while, цикл с постусловием do и цикл перебора foreach. Все эти структуры повторения имеют как общие моменты в своей организации и функционировании, так и отличия. Далее рассмотрим все структуры повторения более подробно. Но, для того чтобы лучше уяснить общие моменты работы циклических операторов и их отличия друг от друга, реализуем одну и ту же пару простейших задач с помощью различных циклических структур.

Оператор циклаfor

Схема алгоритма цикла с параметром представлена на рис. 1.

Рисунок 1 - Схема алгоритма цикла с параметром

 

Для организации цикла такой структуры в С# используется специальный оператор цикла for. Оператор цикла for это такой оператор, где все управление циклом сосредоточено в его заголовке. Он по сравнению с другими циклическими операторами компактнее и понятнее и любим программистами.

Цикл for – это одна из наиболее гибких конструкций С#, так как допускает множество вариантов. Весьма важным в работе рассматриваемой структуры повторения является понятие: параметр цикла или управляющая переменная (переменные) цикла. Назначение их вполне очевидно — управлять работой цикла.

Общий формат записи оператора for имеет следующий вид:

for (инициализация; условие; итерация)

{последовательность операторов}

Элемент инициализация обычно представляет собой инструкцию присваивания, которая, с одной стороны, служит для объявления параметров, используемых в цикле, а с другой стороны, устанавливает им начальные значения. Каждый параметр цикладействует в качестве счетчика. Если в части «инициализация» требуется записать несколько опера­торов присваивания, то их необходимо разделять запятой, например:

for (int i = 0, j = 20;...

int k, m;

for (k = 1, m = 0;...

Областью действия переменных, объявленных в части инициализации цикла, яв­ляется цикл. Инициализация выполняется один раз в начале исполнения цикла. Цикл с параметром реализован как цикл с преду­словием.

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

Элемент итерация - это выражения, которые определяют, как изменяются значения параметров цикла после каждой итерации.

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

Оставив пустым условное выражение цикла for, можно создать бесконечный цикл (цикл, который никогда не заканчивается). Например:

for (;;) {

// специально созданный бесконечный цикл

}

Большинство "бесконечных циклов" - это просто циклы со специальными требованиями к завершению.

В отличии от Pascal, в котором к параметру цикла предъявляются довольно жесткие требования, в C# все спокойнее и проще: переменная цикла может быть дробным числом, либо отсутствовать вообще, так же шаг цикла может быть дробным.

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

Пример 1. Известны интервал (xn ¸ xk), шаг изменения аргумента hx. Написать программу для вычисления значений функции для каждого значения аргумента (задача табуляции функции). Тип аргумента и тип значения функции – вещественные.

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

 

Рисунок 2 - Схема алгоритма с оператором цикла for к примеру 1

В данном примере параметром цикла является вещественная переменная х, которая изменяется от хn до xk с каждой итерацией на величину hx.

Листинг 1 – К примеру 1

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

double xn, xk, hx,y;

Console.Write("Enter xn ");

xn = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter xk ");

xk = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter hx ");

hx = Convert.ToDouble(Console.ReadLine());

for (double x = xn; x <= xk; x += hx)

{

y = Math.Sin(x);

Console.WriteLine("х="+ x+" у="+ y);

}

}

}

}

Пример 2. Вычислить произведение натурального ряда чисел от 1 до 25, т.е. значение факториала 25, математическая запись которого - 25!.

Рисунок 3 - Схема алгоритма с оператором цикла for к примеру 2

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

Листинг 2 – К примеру 2

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int p=1,n;

Console.Write("Enter n ");

n = Convert.ToInt32(Console.ReadLine());

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

p = p * i;

Console.WriteLine("p="+ p);

}

}

}

Оператор цикла с предусловием while

Не лишним будет вспомнить схему алгоритма организации цикла с предусловием, представленную на рис.4.

Рисунок 4 - Схема алгоритма цикла с предусловием к примеру 1

Для организации цикла такой структуры в С# используется специальный оператор цикла while. Общая синтаксическая форма данного оператора цикла имеет вид:

while (условие) {

последовательность операторов

}

Здесь под элементом последовательность операторов понимается либо одиночный оператор, либо блок операторов. Работой цикла управляет элемент условие, который представляет собой любое допустимое выражение типа bool. Элемент инструкция выполняется дотех пор, пока условное выражение возвращает значение true. Как только это условие становится ложным, управление передается оператору, который следует за этим циклом.

Рисунок 5 - Схема алгоритма с циклом с предусловием к примеру 1

Листинг 3 – с циклом с предусловием к примеру 1

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

double xn, xk, hx, y;

Console.Write("Enter xn ");

xn = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter xk ");

xk = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter hx ");

hx = Convert.ToDouble(Console.ReadLine());

double x = xn;

while (x <= xk)

{

y = Math.Sin(x);

Console.WriteLine("х=" + x + " у=" + y);

x += hx;

}

 

}

}

}

 

Рисунок 6 - Схема алгоритма c циклом с предусловием к примеру 2

Листинг 4 – с циклом с предусловием к примеру 2

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int p=1,n,i=1;

Console.Write("Enter n ");

n = Convert.ToInt32(Console.ReadLine());

while (i <= n)

{

p = p * i;

i++;

}

Console.WriteLine("p="+ p);

}

}

}

 

Оператор цикла с постусловиемdo

Напомним схему алгоритма организации цикла с постусловием, представленную на рис.7.

Эта разновидность циклических структур характеризуется тем, что тело цикла обязательно выполняется хотя бы один раз.

Рисунок 7 - Схема алгоритма цикла с постусловием

Для организации цикла такой структуры в С# используется специальный оператор цикла do. Цикл с постусловием имеет следующий формат:

do

последовательность операторов

while выражение;

Сначала выполняется простой или составной оператор, образующий тело цикла, а затем вычисляется выражение (оно должно иметь тип bool). Если выражение истинно, тело цикла выполняется еще раз, и проверка повторяется. Цикл завершается, когда выражение примет значение false, или в теле цикла будет выполнен какой-либо оператор передачи управления.

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

Рисунок 8 - Схема алгоритма с циклом с постусловием к примеру 1

Листинг 5 – с циклом с постусловием к примеру 1

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

double xn, xk, hx, y;

Console.Write("Enter xn ");

xn = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter xk ");

xk = Convert.ToDouble(Console.ReadLine());

Console.Write("Enter hx ");

hx = Convert.ToDouble(Console.ReadLine());

double x = xn;

do

{

y = Math.Sin(x);

Console.WriteLine("х=" + x + " у=" + y);

x += hx;

} while (x <= xk);

 

}

}

}

 

 

Рисунок 9 - Схема алгоритма с циклом с постусловием к примеру 2

Листинг 6 – с циклом с постусловием к примеру 2

using System;

 

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{

int p = 1, n, i = 1;

Console.Write("Enter n ");

n = Convert.ToInt32(Console.ReadLine());

do

{

p = p * i;

i++;

} while (i <= n);

Console.WriteLine("p=" + p);

}

}

}

Операторцикласперебором foreach

Цикл перебора foreach используется для просмотра всех объектов из некоторой группы данных – коллекции. В языке С# определен ряд типов коллекций, например, таковыми являются: массивы, списки или другие контейнеры. С этим оператором познакомимся несколько позже.

 

Примеры для самостоятельного решения

1. Дано натуральное n. Написать программу вычисления аn.

2. Дано натуральное n. Написать программу вычисления значений

1 1 1

+ +...+, n>=2

1*2 2*3 (n-1)*n

3. Дано натуральное n. Написать программу вычисления значений

1 (-1) (n-1)

1- +...+

2 n

4. Дано натуральное n. Написать программу вычисления значений

1 1 1

1+ * 1 + *...* 1+

12 22 n2

 

5. Дано число А. Написать программу получения в порядке убывания всех делителей данного числа.

6. Обозначим

1 1 1

f = + +...+, i=0,1,...

i2+1 i2+2 i2+i+1

Написать программу вычисления произведения

f * f *...* f. n - дано.

7. Объем V - цилиндрической подковы вычисляется по формуле

h u(n)

V= [a(3r2 – a2) + 3r2*(b-r)].

3b 180

Составить алгоритм для построения графика зависимости V от угла u, если a, b и r известны, а u изменяется в диапазоне от u1 до u2 с шагом du.

8. Составить алгоритм для расчета функции

0,95*(sin(x))3

y =

1+0,95*x2

при изменении x от 0 до 12 с шагом dх=0.2.

9. Самолет летит из пункта А к пункту В со средней скоростью v. Составить алгоритм для нахождения времени полета t1, если есть встречный ветер, скорость которого v1, и времени t2, если ветра нет. Расстояние между пунктами А и В считать известным и равным S. Скорость ветра v1 может изменяться от 0 до 15 м/с. Считать шаг изменения dv1 =0.5 м/с.

10. Цех вводится в строй постепенно, выдавая в первый день х1% продукции от нормы, во второй - х2%, в третий -x3%,..., в n-й день - хn%. Составить алгоритм для расчета продукции S за n дней, если в первый день цех выдал А продукции.

11. Составить алгоритм для расчета функции y

при значениях х=0; 0.1; 0.2;...;10.

x-1

, если x<=1

y = 2*x^2+3

 

1.05*(x-1)^2, если x>1.

12. Дана функция y=0.5+sin(5x), причем х изменяется от 0 до 2π с шагом dх=π/6. Составить алгоритм для расчета функции y.

13. Постоянная времени Т электрической цепи равна Т=RC, где R и С - соответственно сопротивление и емкость цепи. Составить алгоритм решения задачи при условии, что R изменяется от 102 Ом до 103 Ом с шагом dR=102 Ом.

14. Составить алгоритм для вычисления функции

1

===, если 0<y<1.36; dy=0.136;

v+y

 

z = 0, если y=0;

 

====, если -1.5<y<0; dy=0.15.

v-2y

 

15. Кинетическая энергия движущегося тела W=m*v2/2, где m - масса тела, v - его скорость. Составить алгоритм для получения зависимости W от m при значениях v, изменяющихся от v1 до v2 с шагом dv. Масса изменяется от m1 до m2 с шагом dm.

16. Дана функция x=a*sin(k*t+2)*cos(k*t). Составить алгоритм для расчета этой функции, если а изменяется от 5 до 7 с шагом 0.12, t изменяется от 4.2 до 6.2 с шагом 0.17 а k=1,2,3,...,12.

17. Составить алгоритм для нахождения итерационным методом с точностью до е корня уравнения 2*x-3*sin(x)=0.

18. Дана функция y=-2*x2+3*x+1.5. Составить алгоритм для поиска максимального значения y, если х изменяется в диапазоне 0.1<=х<=1 с шагом dх=0.01.

19. Слесарь-сантехник начинает работу в 8 ч. и заканчивает в 17 ч., делая перерыв на обед с 12 до 13 ч. Через каждые 30 мин работы он устраняет течь в кранах водопроводной системы одной из квартир жилого дома. Составить алгоритм для вычисления количества воды Q, которое вытечет из неисправных кранов за рабочий день слесаря - сантехника, если утечка воды в одной квартире составляет Q [л/мин].

20. Даны функции y1=x3 и y2=sin(x). Составить алгоритм для вычисления точки пересечения этих функций при х>0. Вычисления производить с точностью до е.

21. Даны целые числа n и K[n]. Получить сумму S последних цифр чисел K[n].

22. Дано целое число K. Найти сумму цифр числа К. (Пусть запись К в десятичной системе есть a[n]...a[2] a[1] a[0];найти a[0]+a[1]+a[2]+...+a[n]).

23. Даны действительные числа a,h, целое n. Вычислить:

f(a) + f(a+h)+f(a+2h)+...+ f(a+nh), где f(x)=(x2+ 1)/x.

24. Даны целое n, действительное x. Вычислить: sinx+sin2x+...+sinnx.

25. Дано целое n. Чему равно произведение его цифр?

26. Дано вещественное число a. Найти среди чисел

1; 1+1/2; 1+1/2+1/3... первое, большее a.

27. Дано целое K. Сколько цифр в числе 5*К?

28. Дано вещественное x. Вычислить:

s=(x-2)+(x-4)+(x-8)+...+(x-64);

p=(x-1)*(x-3)*(x-5)...(x-63).

29. Даны действительные числа x, a, целое число i. Вычислить:

((...((x+a)2 +a)2 +...+a)2 +a)2 +a, (0<a<9).

30. Дано вещественное число x. Вычислить:

x-x3/3!+ x5/5!-x7/7!+x9/9!-x11/11!+x13/13!

31. Вычислить (1-sin 0.1)+(1+sin 0.2)+...+(1+sin 1.0).

32. Даны целое n, вещественное х. Вычислить:

cosx + cosx2 +...+cosxn

33. Дано целое число n. Найти первую цифру числа n.

34. Дано целое число n. Вычислить: 3+6+...+3*(n-1)+3n.

35. Дано целое n. Вычислить:

1/sin 1+1/(sin 1+sin 2)+...+1/(sin 1+...+sin n).

36. Дано целое n. Вычислить: (1+1/12) (1+1/22)...(1+1/n2).

37. Дано вещественное число a, целое n. Вычислить:

а* (a-1)* (a-2) *...* (a-n).

38. Дано вещественное число a, целое n. Вычислить:

1/a+1/a2 + 1/a4 +...+1/a2n

39. Дано вещественное число a, целое n. Вычислить:

1/a+1/(a(a+1))+...+1/(a(a+1)...(a+n)).

40. Дано целое число K. Выяснить, входит ли цифра 3 в запись числа K?

41. Дано целое число K. Поменять порядок цифр в числе на обратный.

43. Дано целое число n. Получить a[n], имея зависимость a[0]=1;

a[k]=k*a[k-1]+1/k; k=1,2,...

44. Дано целое n (n>4). Получить a[n], если

a[1]=a[2]=0; a[3]=1.5;

a[i]=(i+1)/(i2 +1) a[i-1]-a[i-2]*a[i-3], i=4, 5,...

45. Даны вещественные q,r,b,c,d, целое n (n>2). Получить

x[n], если x[0]=c; x[1]=d;

x[k]=qx[k-1]+rx[k-2]+b, k=2, 3,...n

46. Найти произведение a[0] a[1]...a[14], если

a[0]=a[1]=1; a[k]=a[k-2]+a[k-1]/2(k-1), k=2, 3,...

47. Дано 50 вещественных чисел. Найти величину наибольшего из них.

48. Дано целое N>0, за которым следует N вещественных чисел. Определить, сколько среди них отрицательных.

49. Дана непустая последовательность положительных целых чисел, за которой следует 0 (это признак конца последовательности). Вычислить среднее геометрическое этих чисел.

50. Вычислить значение суммы функционального ряда (бесконечности)

---- 2*х(2*n+1)

S= ---------------

/ 2*n+1

----

n=1

с точностью Е=0.001 при заданном х.

51. Дано целое N>0, за которым следует N целых чисел. Определить, сколько среди них простых чисел.

52. Дано целое N>0, за которым следует N целых чисел. Определить, сколько среди них четырехзначных чисел.

 

Содержание отчета

4.1. Наименование и цель работы.

4.2. Индивидуальное задание на лабораторную работу.

4.3. Схема алгоритма решения задачи.

4.4. Текст программы на алгоритмическом языке.

4.5. Результаты вычислений.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...