Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Тело цикла
} 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 служит только для вывода. Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержимое массива.
|