Хелпикс

Главная

Контакты

Случайная статья





Пример 2.. Пример 3.



Пример 2.

using System;

namespace ConsoleApplication1{

class Class1{

  static void Main(){       

       const int m = 3, n = 4;

       int[,] a = new int[m, n] {{ 2, -2, 8, 9 }, {-4, -5, 6,-2 },{ 7, 0, 1, 1 } };            

       Console.WriteLine( "Исходный массив:" );

       for ( int i = 0; i < m; ++i ) {

           for ( int j = 0; j < n; ++j ) Console.Write( "\t" + a[i, j] );

           Console.WriteLine();

       }

       double sum = 0;

       int nPosEl;

       for ( int i = 0; i < m; ++i ) {

           nPosEl = 0;

           for ( int j = 0; j < n; ++j ) {

               sum += a[i, j];

               if ( a[i, j] > 0 ) ++nPosEl;

           }

           Console.WriteLine( "В строке {0} {1} положит-х элементов", i, nPosEl );

       }

       Console.WriteLine( "Среднее арифметическое всех элементов: " + sum / m / n );

   }

}

}

В данном примере элемент массива a [0,0] будет иметь значение 2, элемент массива a [0,1] — значение -2, элемент массива a [0,2] — значение 8 и т.д.

А значение элемента массива a [2,3] окажется равным 1.

Любой массив в C# является объектом класса, производным от System.Array. Как и любой другой класс, System.Array имеет свои методы и свойства.

Пример 3.

using System;

namespace ConsoleApplication1{

class Class1{

  static void Main(){

        int ch = 0, b;         

        int[] a = new int [10];

        string s;

        for ( ; ; ) {

             do { // Вывод пунктов меню

                      Console.Clear();   // очистка экрана

                      Console.WriteLine( "1. Ввод данных");                            Console.WriteLine( "2. Поиск элемента в массиве");                            Console.WriteLine( "3. Выход");                      Console.WriteLine( "Выберите пункт меню");

                       s = Console.ReadLine();

                       if (s != "") ch = Convert.ToInt32(s); /* Номер пункта меню */

                       else ch = 0;           

                  } while(ch != 1 && ch != 2 && ch != 3);

                  switch(ch) {

                       case 1: // Реализация первого пункта меню

                               Random rnd = new Random();

                                for (int i = 0; i < a.Length; ++i ) a[i] = rnd.Next(-54, 99);

                                Console.WriteLine("Исходный массив:");

                                for (int i = 0; i < a.Length; ++i ) Console.Write(a[i] + "\t");

                                Console.ReadKey(); // остановка экрана

                                break;

                      case 2:

                               Console.WriteLine("Введите целое число для поиска - ");

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

                               Console.WriteLine("Поиск первого вхождения элемента " + b + ": индекс = " + Array.IndexOf(a, b)); // IndexOf возвращающий индекс первого значения в одномерном массиве

                              Array.Sort(a); // сортировка массива

                              Console.WriteLine("Упорядоченный массив:");

                                for (int i = 0; i < a.Length; ++i ) Console.Write(a[i] + "\t");

                              Console.WriteLine("Двоичный поиск в отсортированном массиве элемента " + b + ": индекс = " + Array.BinarySearch(a, b));

                             Console.ReadKey(); // остановка экрана

                              break;

                      case 3: Environment.Exit(0); /* Возврат в операционную систему */

                                   break;

              } // end switch(ch)

        } // end for ( ; ; )

   }

}

}

Методы Sort, IndexOf и BinarySearch являются статическими, поэтому к ним обращаются через имя класса, а не экземпляра, и передают в них имя массива.

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

 

ЗАДАНИЕ 3: Результатом выполнения задания 3 является действующая программа на языке С# и отчет по выполнению задания, в котором следует отразить: номер задания, содержание задания, листинг программы с подробным комментарием, краткие выводы.

 

Оборудование и программное обеспечение:

Персональный компьютер IBM PC/AT.

Среда программирования Visual Studio.

 

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

Между структурами и классами существует много различий. 

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

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

Для предоставления вызывающему структуру коду возможности получать доступ к ее данным-членам на месте <уровень_доступа> помещается ключевое слово public.

Например:

struct route {

public orientation direction;

public double distance;

}

После определения типа структуры начинать пользоваться ее можно, определив переменные нового типа: route myRoute;

Помимо этого, можно обращаться к данным-членам этой сложной переменной с помощью символа точки: myRoute.distance = 2.5;

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

 

Пример 1. // Копирование структуры.

using System;

struct MyStruct {

public int x;

}

class StructAssignment {

  static void Main() {

        MyStruct a; // создание переменной типа структура

        MyStruct b;

        a.x = 10;

        b.x = 20;

        Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x); // а.х 10, b.x 20

        a = b; // копирование структуры

        b.x = 30;

       Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x); // a.x 20, b.x 30

}

}

Как показывает приведенный выше результат, после присваивания

а = b;

переменные структуры а и b по-прежнему остаются совершенно обособленными, т.е. переменная а не указывает на переменную b и никак не связана с ней, помимо того, что она содержит копию значения переменной b. Ситуация была бы совсем иной, если бы переменные а и b были ссылочного типа, указывая на объекты определенного класса.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.