Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семинар5 по C#.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
222.72 Кб
Скачать

Ступенчатый массив в языке c#.

   

( п. 4.2.7. )

В С# есть еще один вид многомерных массивов, их называют ступенчатыми. Еще их можно назвать «массивами массивов», например, двумерный ступенчатый массив – это одномерный массив из одномерных же массивов.  Как показано на рисунке.

Как видите, массивы-элементы могут быть разного размера, но они должны быть одного типа.

Объявляется двумерный неровный массив так:

            int[][] mj;

  Создается такой массив (также как в С++) в два этапа. Сначала в памяти размещается массив ссылок (по рисунку):

      mj = new int[4][];

  А потом по-одному создаются массивы-элементы (на рисунке они горизонтальные).

      mj[0] = new int[3];

      mj[1] = new int[4];

      mj[2] = new int[2];

      mj[3] = new int[3];

  Теперь к ним можно обращаться:

      mj[0][0] = 1;       mj[3][3] = 33;

 

Если программист промахнется и обратится к элементу, которого не существует, например, mj[2][2], произойдет ошибка времени выполнения (компилятор такие ошибки не замечает).

Неровные массивы могут сэкономить память.

Рассмотрим несколько примеров.

Вот так можно объявить, создать и заполнить одномерный массив из трех целых чисел: 

          int[] m1 = { 10, 20, 30 };

То же самое для двумерного массива:

       int[,] m2 = { { 10, 20, 30, }, { 11, 21, 31 }, { 12, 22, 32 } };

 

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

        static void F(int[] m) {}

  Вызвать метод можно так

           int[] m = new int[] { 1, 2, 3, };

         F(m);

  А можно и короче, не объвляя массив с именем m.

           F(new int[] { 1, 2, 3, });

 

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

 

         int[][] mj = { new int[] { 1, 2, 3 },

                        new int[] { 1, 2, 3, 4 },

                        new int[] { 1, 2 },

                        new int[] { 1, 2, 3 } };

Пример: Составить программу нахождения произведения отрицательных (положительных) элементов массива (с использованием foreach).

sing System;

using System.Collections.Generic;

using System.Text;

namespace ConsoleApplication1

{ class Program

{ static void Main(string[] args)

{ const int n = 6;

int[] a = { 4, -6, 2, 5, -3, -6 };

Console.WriteLine("Isxodnii massiv:");

foreach (int x in a) Console.Write("\t" + x);

Console.WriteLine();

int p = 1;foreach (int x in a)if (x < 0) { p *= x; }

int p2 = 1;foreach (int x in a)if (x > 0) { p2 *= x; }

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

Console.WriteLine("Proizvedenie polozhitelnix = " + p2);

Console.ReadLine();

}

}

}

Результат работы програмы:

11