Для изучения приводимых в лабораторной работе примеров необходимо создать в Microsoft Visual Studio проект консольного приложения и описать классProgram, используя приводимый в примерах код.
1.Работа с массивами.
Следующие две программы демонстрируют, каким образом выполняется инициализация и работа с прямоугольными и ломаными массивами в C#.
1. Прямоугольный массив:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Прямоугольный многомерный массив
int[,]multMatr;
multMatr = new int[10,10];
// Заполнение массива 9 на 9:
for (int i = 1; i <= 9; i++)
for (int j = 1; j < 9; j++)
multMatr[i, j] = i * j;
// Вывод элементов многомерного массива
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
Console.Write(multMatr [i, j] + "\t");
}
Console.WriteLine();
}
}
}
}
В результат выполнения программы получим таблицу умножения следующего вида:
2. Ломаный массив.
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Ломаный многомерный массив из пяти внутренних массивов разного размера
int[][] JagArr = new int[10][];
// Инициализация генератора случайных чисел
Random rand = new Random();
// Динамическое создание ломаного массив
for (int i = 0; i < JagArr.Length; i++)
{
JagArr[i] = new int[i + rand.Next(10)];
}
// Вывод строк на консоль
// Каждый элемент по умолчанию имеет значение, равное
for (int i = 0; i < 10; i++)
{
// Свойство Length массива возвращает его размер
Console.Write("Length of row {0} is {1}:\t", i, JagArr[i].Length);
for (int j = 0; j < JagArr[i].Length; j++)
{
Console.Write(JagArr[i][j] + " ");
}
Console.WriteLine();
}
}
}
}
В результат выполнения программы получим таблицу следующего вида:
2.Свойства и методы классаArray.
Следующий пример демонстрирует использование некоторых из приведенных свойств и методов класса Array:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
// Массив символьных строк
string[] Brands = new string[]
{"Audi",
"BMW",
"Buick",
"Chevrolet",
"Citroen",
"Dodge",
"Ferrari",
"Fiat",
"Ford",
"Honda",
"Hyundai",
"Cherokee",
"Cherry",
"Lada",
"Lamborghini",
"Lincoln",
"Mazda",
"Mercedes",
"Mitsubishi",
"Nissan",
"Opel",
"Peugeot",
"Plymoth",
"Pontiac",
"Renault",
"Rover",
"Saab",
"Subaru",
"Suzuki",
"Toyota",
"Volkswagen",
"Volvo"};
// Вывод марок автомобилей в соответствии с порядком элементов в массиве
Console.WriteLine("Here is the array of car brands:");
for (int i = 0; i < Brands.Length; i++)
Console.Write(Brands[i] + "\t");
Console.Write("\n\n");
// Сортировка элементов в обратном порядке
Array.Reverse(Brands);
// Вывод автомарок
Console.WriteLine("Here is the list once reversed:");
for (int i = 0; i < Brands.Length; i++)
Console.Write(Brands[i] + "\t");
Console.Write("\n\n");
// Остаются только первый и последний
Console.WriteLine("Only two remain: ");
Array.Clear(Brands, 2, Brands.Length-2);
for (int i = 0; i < Brands.Length; i++)
{
Console.Write(Brands[i] + "\t\n");
}
}
}
}
Результат работы программы:
3. Использование классаStringBuilder:
using System;
using System.Collections.Generic;
using System.Text;
namespace HelloWorldDemo
{
class Program
{
static void Main(string[] args)
{
StringBuilder WordList = new StringBuilder("Каждый Охотник ");
WordList.Append("Желает Знать Где ");
Console.WriteLine(WordList);
WordList.Append("Сидит Фазан");
Console.WriteLine(WordList);
// Сделать все буквы прописными
string Spectrum = WordList.ToString().ToUpper();
Console.WriteLine(Spectrum);
}
}
}
Результат работы программы:
4. Использование класса ArrayList.
Использование класса ArrayList из пространства имен System.Collections позволяет эффективно реализовать работу с массивами объектов, поскольку многие возможности, необходимые для этого реализованы изначально, в частности методы вставки, удаления и нумерации элементов.
Для использования возможностей ArrayList используется не обычное наследование, а модель включения в виде делегирования вызовов на выполнение различных действий классу производному от ArrayList:
public class NBooks : IEnumerable
{
// nbList — внутренний класс, который будет делать всю работу
private ArrayList nbList;
// Создаем объект класса nbList при помощи конструктора NBooks
public NBooks() {nbList = new ArrayList();}
// Реализуем нужные нам методы для приема вызовов извне и передачи их nbList
// Метод для вставки объекта NBook
public void AddNBook(NBook nb)
{ nbList.Add(nb); }
// Метод для удаления объекта NBook
public void RemoveNBook(int nbToRemove)
{ nbList.RemoveAt(nbToRemove); }
// Свойство, возвращающее количество объектов NBook
public int NBookCount
{ get { return nbList.Count; } }
// Метод для очистки объекта — удаления всех объектов NBook
public void ClearAllNBooks()
{ nbList.Clear(); }
// Метод, который отвечает на вопрос — есть ли уже в наборе такой объект NBook
public bool NBookIsPresent(NBook c)
{ return nbList.Contains(c); }
// Все, что связано с реализацией IEnumerator, перенаправляется в nbList
public IEnumerator GetEnumerator()
{ return nbList.GetEnumerator(); }
}
Реализация класса NBook и код программы, использующей класс NBooks представлены ниже.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace NBooks
{
public class NBook
{
// Конструктор класса NBook
public string Model;
public string CPU_model;
public int CPU_clock;
public int RAM_size;
public NBook(string mname, string CPU, int Clock, int RAM)
{
Model = mname;
CPU_model = CPU;
CPU_clock = Clock;
RAM_size = RAM;
}
}
class Program
{
static void Main(string[] args)
{
NBooks nbLot = new NBooks();
// Создание списка объектов NBook
nbLot.AddNBook( new NBook("ASUS A7Sn","Intel Core 2 Duo T8300", 2400, 2048));