• Добро пожаловать на сайт - Forumteam.digital !

    Что бы просматривать темы форума необходимо зарегестрироваться или войти в свой аккаунт.

    Группа в телеграме (подпишитесь, что бы не потерять нас) - ForumTeam Chat [Подписатся]
    Связь с администратором - @ftmadmin

13. Ступенчатый массив и задание на дом.

Redman

<FORUMTEAM>
Команда форума
Регистрация
13.11.17
Сообщения
13.340
Реакции
8.377
Баллы
1.200
FTC
208¢
Практический пример. "Ступенчатый" массив.

Программа осуществляет циклический сдвиг строк "ступенчатого массива" вниз. Все элементы массива задаются случайным образом.
Код:
using System;

namespace CSharpApplication.ArraysExample
{
    class Arrays
    {
        // Циклический сдвиг строк матрицы вниз
        static void RotateDown(int [][] mtr)
        {
            /* Получаем размерность (число строк) */
            int M = mtr.GetLength(0);

            // Запоминаем нижнюю строку
            int [] temp = mtr[M - 1];
            for(int i = M - 1; i > 0; i--)
            {
                // Сдвиг (перемещаем адреса строк)
                mtr[i] = mtr[i - 1];
            }
            // Устанавливаем верхнюю строку
            mtr[0] = temp;
        }

        // Вывод матрицы
        static void Print(int [][] mtr)
        {
            // Определение числа строк
            int M = mtr.GetLength(0);

            for(int i = 0; i < M; i++)
            {
                /*
                 *    Обходимся без получения размерности
                 */
               
                // Перебор элементов строки
                foreach(int j in mtr[i])
                {
                    Console.Write("{0,8}", j);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }

        // Инициализация матрицы случайными значениями
        static void Init(int [][] mtr)
        {
            // Инициализация генератора случайных чисел
            Random rand = new Random();

            /* Получаем размерность (число строк) */
            int M = mtr.GetLength(0);

            for(int i = 0; i < M; i++)
            {
                /*
                     Другой способ получения размерности
                                (число столбцов)
                */
                int N = mtr[i].Length;
                for(int j = 0; j < N; j++)
                {
                    // Забиваем массив случайными числами
                    // от 0 до 99999
                    mtr[i][j] = rand.Next(100000);
                }
            }
        }

        static void Main()
        {
            // Число строк
            uint M = 0;

            Console.WriteLine("Введите количество строк: ");
            try
            {
                // Ввод числа строк с клавиатуры
                M = Convert.ToUInt32(Console.ReadLine());
            }
            catch(OverflowException ex)
            {   
                // В случае ошибочного ввода (переполнения)
                Console.WriteLine(ex.Message + " Use default size (=10)");
            }
            catch(FormatException ex)
            {   
                // В случае ошибочного ввода
                Console.WriteLine(ex.Message + " Use default size (=10)");
            }
           
            // Если все плохо, то создадим массив из 10 строк
            if(M == 0)
                M = 10;
           
            // Создание массива ("указателей")
            int [][] ar = new int[M][];
         
            // Число столбцов
            uint N = 0;

            for(int i = 0; i < M; i++)
            {
                Console.WriteLine("Введите количество столбцов: ");
                try
                {
                    // Ввод числа столбцов для каждой строки
                    N = Convert.ToUInt32(Console.ReadLine());
                }
                catch(OverflowException ex)
                {   
                    // В случае ошибочного ввода (переполнения)
                    Console.WriteLine(ex.Message + " Use default size (=10)");
                }
                catch(FormatException ex)
                {   
                    // В случае ошибочного ввода
                    Console.WriteLine(ex.Message + " Use default size (=10)");
                }   
                // Если все плохо, то создадим массив из 10 элементов
                if(N == 0)
                    N = 10;

                // Создание массива
                ar[i] = new int[N];
            }

            Console.WriteLine("\"Ступенчатая матрица\":");
            // Инициализация
            Init(ar);
            // Вывод
            Print(ar);

            Console.WriteLine("Та же матрица после серии циклических сдвигов:");

            for(int i = 0; i < M; i++)
            {
                // Циклический сдвиг
                RotateDown(ar);
                // Вывод
                Print(ar);
            }
       }
    }
}

Домашнее задание
  1. Проверить не является ли заданная строка палиндромом.
  2. Реализовать в заданном тексте поиск заданной подстроки и замены ее на заданную подстроку.
  3. Дан одномерный массив размерностью N. Необходимо заполнить его случайными числами в диапазоне от -500 до 500 и отсортировать.
  4. Дан двухмерный массив размерностью MxN. Необходимо заполнить его случайными числами в диапазоне от -500 до 500 и отсортировать столбцы матрицы по сумме элементов столбца.
 
Сверху Снизу