Составление программы линейной структуры (C#) — КиберПедия 

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

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Составление программы линейной структуры (C#)

2019-08-07 317
Составление программы линейной структуры (C#) 0.00 из 5.00 0 оценок
Заказать работу

1.Вычислить значение выражений: y=(sin^3)* ((x^2) + a) - √x/b и

z= (x^2/a)+ cos(x+b)^3 при a=1,1. b=0,004. x=0,2.

// Создаем переменные

 double a = 1.1, b = 0.004, x = 0.2, y, z;

 //Вычисляем Y и Z

 y = Math.Sin(Math.Pow(a, 2)) * (Math.Pow(x, 2) + a) - Math.Sqrt(x) / b;

 z = (Math.Pow(x, 2) / a) + Math.Pow(Math.Cos(x + b), 3);

 //Выводим ответы

 Console.WriteLine("Y = {0} \nZ = {1}", y, z);

 //Задержка

 Console.ReadKey();

 

    7. Составление программы с применением условного оператора.

    Условные операторы позволяют управлять потоком выполнения программы, чтобы не выполнялась каждая строка кода, как она следует в программе. Давайте рассмотрим все условные операторы языка C#:

 

    Оператор if

    Для организации условного ветвления язык C# унаследовал от С и С++ конструкцию if...else. Ее синтаксис должен быть интуитивно понятен для любого, кто программировал на процедурных языках:

 

if (условие)

оператор (операторы)

else

оператор (операторы)

    Если по каждому из условий нужно выполнить более одного оператора, эти операторы должны быть объединены в блок с помощью фигурных скобок {...}. (Это также касается других конструкций C#, в которых операторы могут быть объединены в блок — таких как циклы for и while.)

 

    Стоит обратить внимание, что в отличие от языков С и С++, в C# условный оператор if может работать только с булевскими выражениями, но не с произвольными значениями вроде -1 и 0.

 

    В операторе if могут применяться сложные выражения, и он может содержать операторы else, обеспечивая выполнение более сложных проверок. Синтаксис похож на применяемый в аналогичных ситуациях в языках С (С++) и Java. При построении сложных выражений в C# используется вполне ожидаемый набор логических операторов.

 

Давайте рассмотрим следующий пример:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleApplication1

{

class Program

{

   static void Main(string[] args)

   {

       string myStr;

       Console.WriteLine("Введите строку: ");

       myStr = Console.ReadLine();

       if (myStr.Length < 5)

           Console.WriteLine("\nВ данной строке меньше 5 символов");

       else if ((myStr.Length >= 5) && (myStr.Length <= 12))

           Console.WriteLine("\nВ данной строке {0} символов",myStr.Length);

       else Console.WriteLine("\nВ данной строке больше 12 символов");

       Console.ReadLine();

   }

}

}

 

    Результат:

    Как видите количество else if, добавляемых к единственному if, не ограничено. Один момент, который следует отметить касательно if: фигурные скобки применять не обязательно, если в условной ветви присутствует только один оператор, как показано в исходном примере.

    8. Составление программы с применением оператора множественного выбор.

    Оператор switch

    Вторым оператором выбора в C# является оператор switch, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора switch:

switch(выражение) {

1. case константа1:

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

3. break;

4. case константа2:

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

6. break;

7. case константаЗ:

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

9. break;

 

10....

 

11. default:

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

13. break;

14. }

 

    Хотя оператор switch...case должен быть знаком программистам на С и С++, в C# он немного безопаснее, чем его эквивалент С++. В частности, он запрещает "сквозные" условия почти во всех случаях. Это значит, что если часть case вызывается в начале блока, то фрагменты кода за последующими частями case не могут быть выполнены, если только не используется явно оператор goto для перехода к ним. Компилятор обеспечивает это ограничение за счет того, что требует, чтобы за каждой частью case следовал оператор break, в противном случае он выдает ошибку.

    Важно отметить, что заданное выражение в операторе switch должно быть целочисленного типа (char, byte, short или int), перечислимого или же строкового. А выражения других типов, например с плавающей точкой, в операторе switch не допускаются. Зачастую выражение, управляющее оператором switch, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе switch не допускается наличие двух одинаковых по значению констант выбора.

Давайте на примере рассмотрим использование оператора switch:

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{ class Program {   static void Main(string[] args)   {       Console.WriteLine("Введите язык (C#, VB или C++)");       string myLanguage = Console.ReadLine();       sw1(myLanguage);       Console.ReadLine();   }   // Данный метод выводит выбор пользователя   static void sw1(string s)   {       switch (s)       {           case "C#":               Console.WriteLine("Вы выбрали язык C#");               break;           case "VB":               Console.WriteLine("Вы выбрали язык Visual Basic");               break;           case "C++":               Console.WriteLine("Вы выбрали язык С++");               break;           default:               Console.WriteLine("Такой язык я не знаю");               break; }     }     }     }

Результат:

 

    9. Составление программы с применением циклического оператора.

    В C# имеются четыре различных вида циклов (for, while, do...while и foreach), позволяющие выполнять блок кода повторно до тех пор, пока удовлетворяется определенное условие. Но мы рассмотрим циклы for и while.

 

    Цикл for

    Цикл for в C# предоставляет механизм итерации, в котором определенное условие проверяется перед выполнением каждой итерации. Синтаксис этого оператора показан ниже:

 

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

оператор (операторы)

Здесь:

 

    инициализатор

это выражение, вычисляемое перед первым выполнением тела цикла (обычно инициализация локальной переменной в качестве счетчика цикла). Инициализация, как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая выполняет роль счетчика и управляет циклом;

 

    условие

это выражение, проверяемое перед каждой новой итерацией цикла (должно возвращать true, чтобы была выполнена следующая итерация);

 

    итератор

выражение, вычисляемое после каждой итерации (обычно приращение значения счетчика цикла).

 

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

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

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{ class Program {   // Данный метод выводит таблицу умножения   // размерностью b x b   static void tab(byte b)   {       Console.WriteLine("Таблица умножения {0} x {0}\n", b);       // Этот цикл проходит по строкам       for (int i = 1; i <= b; i++)       {           // Этот цикл проходит по столбцам           for (int j = 1; j <= b; j++)               Console.Write("{0}\t", j * i);           Console.WriteLine();       }       Console.WriteLine();   }    static void Main(string[] args)   {       tab(8);        // Давайте разберем нестандартные возможности цикла for       // ************************************************* //        // Применение нескольких переменных управления циклом       for (byte i = 0, j = 20; i <= j; i += 5, j -= 5)           Console.WriteLine("i = {0}, j = {1}",i,j);       Console.WriteLine();        // Использование условного выражения в цикле       bool b = false;       for (byte i = 1, j = 100;!b; i++, j--)           if (i < Math.Sqrt(j))               Console.WriteLine("Число {0} меньше квадратного корня из {1}", i, j);           else b = true;        // Отсутствие части цикла       int k = 0;       for (; k < 10;)       {           k++;           Console.Write(k);       }       Console.WriteLine("\n");        // Цикл без тела       int sum = 0;       for (int i = 1; i <= 10; sum += ++i);       Console.WriteLine("Значение суммы: {0}",sum);       Console.ReadLine();   }     }}

 

Результат:

 

   

    Цикл while

    Подобно for, while также является циклом с предварительной проверкой. Синтаксис его аналогичен, но циклы while включают только одно выражение:

    1. hile(условие)

2. оператор (операторы);

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

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

    Пример:

using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplication1{ class Program {   static void Main(string[] args)   {       // Пример возведения числа в несколько степеней       byte l = 2, i = 0;       int result = 1;        while (i < 10)       {           i++;           result *= l;           Console.WriteLine("{0} в степени {1} равно {2}",l,i,result);       }        Console.ReadLine();   }     }}

результат:

 

    10. Составление программы с применением составных структур.     Работа со статическими и динамическими структуры данных.

    Как вам должно быть уже известно, классы относятся к ссылочным типам данных. Это означает, что объекты конкретного класса доступны по ссылке, в отличие от значений простых типов, доступных непосредственно. Но иногда прямой доступ к объектам как к значениям простых типов оказывается полезно иметь, например, ради повышения эффективности программы. Ведь каждый доступ к объектам (даже самым мелким) по ссылке связан с дополнительными издержками на расход вычислительных ресурсов и оперативной памяти.

 

    Для разрешения подобных затруднений в C# предусмотрена структура, которая подобна классу, но относится к типу значения, а не к ссылочному типу данных. Т.е. структуры отличаются от классов тем, как они сохраняются в памяти и как к ним осуществляется доступ (классы — это ссылочные типы, размещаемые в куче, структуры — типы значений, размещаемые в стеке), а также некоторыми свойствами (например, структуры не поддерживают наследование). Из соображений производительности вы будете использовать структуры для небольших типов данных. Однако в отношении синтаксиса структуры очень похожи на классы.

 

    Главное отличие состоит в том, что при их объявлении используется ключевое слово struct вместо class. Ниже приведена общая форма объявления структуры:

1. struct имя: интерфейсы {

2. // объявления членов

3. }

    где имя обозначает конкретное имя структуры.

Как и у классов, у каждой структуры имеются свои члены: методы, поля, индексаторы, свойства, операторные методы и события. В структурах допускается также определять конструкторы, но не деструкторы. В то же время для структуры нельзя определить конструктор, используемый по умолчанию (т.е. конструктор без параметров). Дело в том, что конструктор, вызываемый по умолчанию, определяется для всех структур автоматически и не подлежит изменению. Такой конструктор инициализирует поля структуры значениями, задаваемыми по умолчанию. А поскольку структуры не поддерживают наследование, то их члены нельзя указывать как abstract, virtual или protected.

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

 

Давайте рассмотрим пример использования структур:

using System; namespace ConsoleApplication1{ // Создадим структуру struct UserInfo {   public string Name;   public byte Age;    public UserInfo(string Name, byte Age)   {       this.Name = Name;       this.Age = Age;   }    public void WriteUserInfo()   {       Console.WriteLine("Имя: {0}, возраст: {1}",Name,Age);   } } class Program {   static void Main()   {       UserInfo user1 = new UserInfo("Alexandr", 26);       Console.Write("user1: ");       user1.WriteUserInfo();       UserInfo user2 = new UserInfo("Elena",22);       Console.Write("user2: ");       user2.WriteUserInfo();        // Показать главное отличие структур от классов       user1 = user2;       user2.Name = "Natalya";       user2.Age = 25;                   Console.Write("\nuser1: ");       user1.WriteUserInfo();       Console.Write("user2: ");       user2.WriteUserInfo();       Console.ReadLine();   } }}

 

Результат:

 

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

    Поэтому, если бы в предыдущем примере использовался класс UserInfo вместо структуры, получился бы следующий результат:

 

    Назначение структур

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

    Более того, работа со структурой не приводит к ухудшению производительности, столь характерному для обращения к объекту класса. Ведь доступ к структуре осуществляется непосредственно, а к объектам — по ссылке, поскольку классы относятся к данным ссылочного типа. Косвенный характер доступа к объектам подразумевает дополнительные издержки вычислительных ресурсов на каждый такой доступ, тогда как обращение к структурам не влечет за собой подобные издержки. И вообще, если нужно просто сохранить группу связанных вместе данных, не требующих наследования и обращения по ссылке, то с точки зрения производительности для них лучше выбрать структуру.

    Любопытно, что в С++ также имеются структуры и используется ключевое слово struct. Но эти структуры отличаются от тех, что имеются в C#. Так, в С++ структура относится к типу класса, а значит, структура и класс в этом языке практически равноценны и отличаются друг от друга лишь доступом по умолчанию к их членам, которые оказываются закрытыми для класса и открытыми для структуры. А в C# структура относится к типу значения, тогда как класс — к ссылочному типу.

 

    11. Составление программы с применением различных типов файлов

    Подобно паре Directory/DirectoryInfo для работы с файлами предназначена пара классов File и FileInfo. С их помощью мы можем создавать, удалять, перемещать файлы, получать их свойства и многое другое.

Некоторые полезные методы и свойства класса FileInfo:

· CopyTo(path): копирует файл в новое место по указанному пути path

· Create(): создает файл

· Delete(): удаляет файл

· MoveTo(destFileName): перемещает файл в новое место

· Свойство Directory: получает родительский каталог в виде объекта DirectoryInfo

· Свойство DirectoryName: получает полный путь к родительскому каталогу

· Свойство Exists: указывает, существует ли файл

· Свойство Length: получает размер файла

· Свойство Extension: получает расширение файла

· Свойство Name: получает имя файла

· Свойство FullName: получает полное имя файла

Класс File реализует похожую функциональность с помощью статических методов:

· Copy(): копирует файл в новое место

· Create(): создает файл

· Delete(): удаляет файл

· Move: перемещает файл в новое место

· Exists(file): определяет, существует ли файл

· Получение информации о файле

 


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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.053 с.