Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Тело цикла






}

while (условие)

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

Пример 4.

int a, b, s, k;

Console.WriteLine(" Введите a" + " - левую границу отрезка");

a =int.Parse((Console.ReadLine()));

Console.WriteLine(" Введите b" + " - правую границу

отрезка");

b = int.Parse((Console.ReadLine()));

s = 0;

k = 0;

do

{s += a; k++; a++; }

while (a < = b);

Console.WriteLine('\t' + " РЕЗУЛЬТАТ: " + " s =" + s + " k=" + k

+ '\n');

 

Операторы break и continue

Для управления циклом имеются специальные операторы - break и continue. Оператор break вызывает прекращение вы­полнения цикла и передачу управления первому оператору, сле­дующему непосредственно за циклом. Оператор continue пере­даёт управление в начало цикла, к проверке условия. Обычно эти операторы используются совместно с оператором if.

 

Вложенные циклы

Цикл можно размещать внутри другого цикла. Размещение од­ной конструкции цикла в другой называется вложением циклов, а сам цикл вложенным.

При организации циклов, в том числе и вложенных, необходимо соблюдать следующие правила:

- переменная, объявленная в теле цикла, определена только внутри этого цикла;

- вход в цикл осуществляется через его заголовок;

- вход во внутренний цикл осуществляется после входа во внешний;

- выход из цикла, в том числе и вложенного возможен в любом месте тела цикла;

- параметры циклов со счётчиком не должны изменяться в теле цикла;

- вложенные циклы не должны пересекаться, т.е. начало и конец внутреннего цикла должны находиться во внешнем цикле;

- допускается делать вложение разных конструкций циклов.

 

Пример 5. (пример выполнения задания 1)

Написать и отладить программу вычисления значений функции , для каждого из заданных значении параметра a (0, 5; 1, 0; 1, 5; 2, 0) и при всех заданных значениях аргумента x (от 1 до 7 с шагом 0, 25).

StreamWriter p = new StreamWriter(" rez.txt");

float a, x, y;

p.WriteLine(" результаты расчёта");

for (a = 1; a < = 2; a += 0.5f) // Заголовок внешнего

// цикла по а

{

// Начало внешнего цикла по а p.WriteLine(M a=M + a);

for (x = 1; x < = 7; x += 0.25f) //Заголовок

// внутреннего

// цикла no x

{

// Начало внутреннего цикла по x

y = (float)(a * Math.Cos(x) / Math.Sqrt(1 + a * x * x));

p.WriteLine(M x= m + x + '\t' + m y= m + y);

/* Конец внутреннего цикла no x */

}

/* Конец внешнего цикла по a */

}

p.Close();

Результаты расчёта

(файл rez.txt)

Суммирование рядов

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

Пример 6. (пример выполнения задания 2)

Написать и отладить процедуру для приближённого вычисле­ния функции y = sin(x) с помощью ряда

Суммирование членов ряда проводить включительно до члена ряда, значение которого по абсолютной величине меньше чем 10-6.

Вычислить сумму членов заданного ряда для угла в 30 градусов и сравнить полученное значение со значением, вычисленным непо­средственно, с помощью функции y = sin(x).

Программа примера 6

double g, pi, x, y, s, a, p, d, чл, зн;

int n, k;

m1: Console.WriteLine(" Введите значение угла в градусах");

g = double.Parse((Console.ReadLine()));

pi = Math.PI; // Задание числа pi

x = g*pi/180; // Перевод градусов в радианы

Console.WriteLine('\t' Промежуточные результаты" + '\n');

K = 0; // Номер итерации.

S = 0;

p = 1;

n = 3;

d = 1;

a = x; // Первый член ряда.

while (Math.Abs(a)> = 0.000001)

{

S += a; // Сумма ряда на текущей итерации,

чл = x*x*x*d; // Вычисление числителя ряда

p = -p*(n-1)*n; // Вычисление факториала

зн = p; // Знаменатель ряда.

a = чл/зн; // Член ряда на текущей итерации.

d = x*x;

n += 2;

k++; // Счётчик итераций.

Console.WriteLine('\t + " Итерация №" + k + '\n' + " a=" + a + " s=" + s +'\n');

}

y = Math.Sin(x); // Непосредственное вычисление синуса.

Console.WriteLine('\t' + " РЕЗУЛЬТАТЫ: " +'\n' + " Заданное значение угла в

град.=" + g +\n' + " Вычисленная сумма ряда S =" + s + '\n' +

" Количество членов ряда - " + k + '\n' + " Функция SIN(X)=" + y + '\n');

Console.WriteLine(, \n' + " Для повторного ввода" + " набрать любую

клавишу." +'\n' + " Для завершения программы нажмите Enter.");

string rep = Console.ReadLine();

if (rep! = " ") goto m1;

 

 

2. Практическая часть

Задание 1. Составить и отладить программу вычисления задан­ной в таблице 4.1 функции у(х) для каждого из заданных значений параметра а и при всех заданных значениях аргумента х.

 

 

 

Задание 2. Составить и отладить программу для приближён­ного вычисления заданной функции у(х) путём суммирования чле­нов заданного её ряда s(x) см. таблицу 4.2. Суммирование членов ряда проводить до члена ряда, значение которого по абсолютной величине не будет превышать 10-6.

Вычислить сумму ряда s(x) и непосредственно функцию у(х) при указанных в таблице 4.2 контрольных значениях аргумен­та x. Сравнить и проанализировать полученные значения

 

*) для рядов, отмеченных звёздочкой, при оценке погрешности в членах ряда не учитывать синусы и косинусы.


 

ЛАБОРАТОРНАЯ РАБОТА № 5

Одномерные массивы

Краткие теоретические сведения

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

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

Число индексов характеризует размерность массива. Каждый индекс изменяется в некотором диапазоне [a, b], который называ­ется граничной парой, где а - нижняя граница, a b - верхняя гра­ница индекса. При объявлении массива границы задаются выраже­ниями. Если все границы заданы константными выражениями, то число элементов массива известно в момент его объявления и ему может быть выделена память еще на этапе трансляции. Такие мас­сивы называются статическими. Если же выражения, задающие границы, зависят от переменных, то такие массивы называются ди­намическими.

Язык С# поддерживает два вида или две категории типов: ти­пы значений (value types) и типы ссылок (reference types). Элемен­тами массива могут быть как значения, так и ссылки. Массив зна­чимых типов хранит значения, массив ссылочных типов - ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и null - для ссылочных. Массивы ссылочного типа являются массивами дина­мическими и память им отводится динамически в области памяти, называемой «кучей» (heap).

Массивами в С# можно пользоваться практически так же, как и в других языках программирования. Тем не менее у них имеется одна особенность: они реализованы в виде объектов. Реализация массивов в виде объектов дает ряд существенных преимуществ, и далеко не самым последним среди них является возможность ути­лизировать неиспользуемые массивы посредством " сборки мусора".

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

тип[] имя_массива;

во-вторых, нужно создать экземпляр массива, используя оператор new:

имя_массива = new тип[размер];

где тип объявляет конкретный тип элемента массива, а размер оп­ределяет число элементов массива. Тип элемента определяет тип данных каждого элемента, составляющего массив. Квадратные ско­бки указывают на то, что объявляется одномерный массив.

Здесь необходимо отметить, что в отличии от других языков программирования (С, C++, Fortran или VBA), квадратные (или круглые) скобки следуют после названия типа, а не имени массива.

Рассмотрим конкретный пример. В приведенной ниже строке кода создается массив типа int из десяти элементов, и переменная array, которая является ссылкой на массив типа int[] с элементами типа int.

int[ ] array = new int[10];

В переменной array хранится ссылка на область памяти, выде­ляемой для массива оператором new. Эта область памяти должна быть достаточно большой, чтобы в ней могли храниться десять элементов массиватипа int.

Приведенное выше объявление массива можно разделить на два отдельных оператора. Например:

int[ ] array; // объявление массива с именем array

array = new int[10]; // резервирование памяти для

// 10 чисел типа int

Доступ к отдельному элементу массива осуществляется по ин­дексу. В языке С# индекс первого элемента всех массивов является нулевым. В частности, массив array состоит из 10 элементов с ин­дексами от 0 до 9. Для индексирования массива достаточно указать номер требуемого элемента в квадратных скобках. Так, первый эле­мент массива array обозначается как array[0], а последний его элемент - как array[9]. Ниже приведен пример программы, в кото­рой заполняются все элементы массива iArray и массива chArray.

Пример 1.

// Заполнение массивов using System;

namespace Example5

{

class Example5_1

{

static void Main()

{

int j;

Console.WriteLine(" \n\n Одномерный массив iArray");

int[] iArray = new int[10];

for (j = 0; j < 10; j++)

iArray[j] = j * j;

// присваивание значений

// элементам в цикле

for (j = 0; j < 10; j++)

// вывод элементов

Console.WriteLine(" \n " + j + " " + iArray[j]);

Console.WriteLine(" \n Одномерный массив chArray с

инициализацией");

char[] chArray = { 'a', 'b', 'c', 'd' };

// Объявление с инициализацией

j = -i;

do

{

j++;

Console.WriteLine(" \n " + j + " " + chArray[j]);

}

while (chArray[j]! = 'd');

// вывод элементов массива

Console.WriteLine();

Console.Write(" \n Значения присвоены ");

Console.WriteLine(" He всем элемента массива

iiArray \n");

int[] iiArray = new int[10];

for (j = 0; j < 6; j++)

iiArray[j] = j * j;

iiArray[9] = 81;

foreach (int jj in iiArray)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

Console.Write(" ");

}

}

}

В начале программы объявлен массив iArray из 8 целых чи­сел. Потом в цикле присваиваются значения элементам. Аналогич­ный цикл используется и для вывода значений элементов на экран.

Далее объявляется массив символов chArray без указания ко­личества элементов с инициализацией, после чего поэлементно вы­водится в цикле do-while.

Кроме описанных ранее, в С# определен цикл foreach. Он перебирает подряд все элементы массива. В программе foreach примененяется к массиву chArray.

Выражение

foreach(char jj in iiArray){...}

показывает, что все элементы массива iiArray поочередно прис­ваиваются переменной цикла char, тип которой должен соответ­ствовать типу массива. На местах элементов, которым не присвое­ны значения, цикл foreach выводит нули, что демонстрируется на примере массива iiArray.

Следует, однако, иметь в виду, что переменная цикла в опера­торе foreach служит только для вывода. Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержи­мое массива.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.