Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Console.WriteLine(''\n Массивы типа int






Массивы типа double '');

Console.WriteLine(''\n ------------------------------------------------------------------------'');

for (j = 0; j < 15; j++)

{

str = string.Format(''\n {0, 10: D} {1, 10: D} {2, 10: D} {3, 10: D} {4, 10: F2}

{S, 10: F2}'', j, iArray1[j], iArray2[j], j, dArray[j], dArray2[j]);

Console.WriteLine(str);

}

Console.WriteLine(''\n ------------------------------------------------------------------------'');

Console.WriteLine(''\n {0, 10} {1, 10} {2, 10} {3, 10} {4, 10: F2} {S, 10: F2}'', str1,

sum1, sum2, str2, sum3, sum4);

Console.WriteLine(''\n {0, 10} {1, 10: F2} {2, 10: F2} {3, 10} {4, 10: F2}

{S, 10: F2}'', str3, sum1/15, sum2/15, str4, sum3/15, sum4/15);

Console.WriteLine();

}

}

}

 

 

Массивы типа int iArray1, iArray2, а также типа double dArray1, dArray2 заполняются генератором случайных чисел. В первом цикле случайными числами инициализируется массивы це­лого типа и одновременно подсчитывается сумма элементов обоих массивов – sum1 и sum2. Переменная этого цикла одновременно является индексом массива. На каждом шаге цикла к сумме элеме­нтов каждого массива добавляется очередной элемент. По оконча­нии цикла переменные sum1 и sum2 будут содержать полную сумму всех элементов массивов iArray1, iArray2.

В втором цикле инициализируется массивы чисел с плавающей точкой и одновременно по аналогичной схеме подсчитывается сумма элементов массивов dArray1, dArray2 - sum3 і sum4.

Далее формируется заголовок таблицы вывода, которая запол­няется в третьем цикле. Для массивов типа int использован фор­мат D, а для массивов типа double - формат F (fixed point).

Пример 6.

 

// Вычислить сумму всех четных элементов

// одномерного массива, состоящих из 10 элементов

// Заполнение одномерного массива происходит при

// помощи генератора случайных чисел

using System;

namespace Example5

{

class Example5_6

{

static void Main()

{

int j, num, sum = 0;

Random rnd = new Random();

int[ ] iArray = new int[10];

for (j = 0; j < 10; j++)

{

iArray[j] = rnd.Next(1, 101);

}

for (j = 0; j < 10; j++)

{

num = Convert.ToInt32(iArray[j] % 2);

if (num == 0) sum += iArray[j];

}

foreach (int jj in iArray)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

Console.WriteLine(" \n Сумма четных элементов = " + sum);

Console.WriteLine();

Console.Write(" ");

}

}

}

 

Отличие данного примера от предыдущего заключается в том, что требуется подсчитать сумму не всех элементов массива, а толь­ко четных

num = Convert.ToInt32(iArray[j] % 2);

if (num == 0) sum += iArray[j];

Сначала определяется остаток отделения элемента массива на 2 с помощью выражения iArray[j] % 2, результат которого прео­бразуется к целому типу. Если выполняется условие num == 0, то значение элемента iArray[j] является величиной четной и происходит суммирование данного элемента с переменной sum.

 

 

Пример 7.

// Определить индексы второго положительного

// и третьего отрицательного элементов

// одномерного массива, состоящих из 20 элементов

// Заполнение массива происходит

// при помощи генератора случайных чисел

using System;

namespace Example5

{

class Example5_7

{

static void Main()

{

int j, jnum = 0;

Random rnd = new Random();

int[ ] iArray = new int[20];

for (j = 0; j < 20; j++)

{

iArray[j] = 50 - rnd.Next(1, 101);

}

for (j = 0; j < 20; j++)

{

if (iArray[j] > 0) jnum += 1;

if (jnum == 2) break;

}

foreach (int jj in iArray)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

Console.WriteLine(" \n индекс второго положительного

элемента = " + j);

Console.WriteLine(" \n iArray[" + j + " ] = " + iArray[j]);

jnum = 0;

for (j = 0; j < 20; j++)

{

if (iArray[j] < 0) jnum += 1;

if (jnum == 3) break;

}

Console.WriteLine(" \n индекс третьего отрицательного

элемента = " + j);

Console.WriteLine(" \n iArray[" + j + " ] = " + iArray[j]);

Console.WriteLine();

Console.Write(" ");

}

 

 

Поиск второго положительного элемента массива iArray происходит в цикле. Переменная jnum определяет количество по­ложительных элементов, которые встретились при выполнении цикла. Как только значение выражения jnum == 2 будет равно true оператор break прерывает выполнение цикла.

Аналогичный алгоритм используется при нахождении третье­го отрицательного элемента.

Пример 8.

// Задан одномерный массив размером N.

// Сформировать два массива, включив

// в первый - четные элементы исходного

// массива, а во второй - нечетные элементы.

// Отсортировать массивы в порядке возрастания.

// Заполнение массива происходит при помощи

// генератора случайных чисел

using System;

namespace Example5

{

class Example5_8

{

static void Main()

{

int jnum = 0, N = 20;

int jAA = 0, jBB = 0;

int j, k, temp;

Random rnd = new Random();

int[ ] iArray = new int[N];

int[ ] jA = new int[N];

int[ ] jB = new int[N];

for (j = 0; j < N; j++)

{

iArray[j] = rnd.Next(1, 101);

}

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

foreach (int jj in iArray)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

for (j = 0; j < N; j++)

{

jnum = iArray[j] / 2;

iArray[j] = Convert.ToInt32(iArray[j]);

if (iArray[j] == jnum * 2)

{

jA[jAA] = iArray[j];

jAA += 1;

}

else

{

jB[jBB] = iArray[j];

jBB += 1;

}

}

Console.WriteLine(" \n массив A[ ] \n\n");

foreach (int jj in jA)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

Console.WriteLine(" \n массив B[ ] \n\n");

foreach (int jj in jB)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

// Сортировка массива А

jAA - = 1;

for (k = 0; k < jAA; k++)

{

for (j = 0; j < jAA; j++)

{

if (jA[j + 1] < jA[j])

{

temp = jA[j];

jA[j] = jA[j + 1];

jA[j + 1] = temp;

}

}

}

// Сортировка массива B jBB -= 1;

for (k = 0; k < jBB; k++)

{

for (j = 0; j < jBB; j++)

{

if (jB[j + 1] < jB[j])

{

temp = jB[j];

jB[j] = jB[j + 1];

jB[j + 1] = temp;

}

}

Console.WriteLine(" \n отсортированный массив A[ ] \n\n");

foreach (int jj in jA)

{ Console.Write(" " + jj); }

Console.WriteLine(" n\n");

Console.WriteLine(" \n отсортированный массив B[ ] \n\n");

foreach (int jj in jB)

{ Console.Write(" " + jj); }

Console.WriteLine(" \n\n");

}

}

}

 

Для определения четности или нечетности очередного элемен­та массива. Если результат данного преобразования равен исход­ному значению, то данный элемент массива содержит четное число, в противном случае - число нечетное. По окончании данной про­цедуры значения всех элементов массива jA - четные числа, мас­сива jA - нечетные числа.

Далее происходит сортировка элементов массивов jA и jВ по возрастанию. Процесс сортировки происходит следующим обра­зом: если элемент с индексом j больше элемента с индексом j+1, то выполняется процедура перестановки

temp = jB[j];

jB[j] = jB[j + 1];

jB[j + 1] = temp;

 

и завершении цикла массивы jA и jB будут отсортированы по возрастанию.

 

 

2. Практическая часть

Задание к лабораторной работе

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

1. Задан одномерный массив размером N. Определить количество отрицательных чисел, количество положительных чисел и сре­днее арифметическое всех чисел.

2. Задан одномерный массив размером N. Сформировать два массива размером N/2, включая в первый элементы исходного массива с четными индексами, а во второй - с нечетными. Вы­числить суммы элементов каждого из массивов.

3. Определить среднее арифметическое значение первого отри­цательного и последнего положительного элементов одномер­ного массива, размер которого равен М.

4. Определить число отрицательных элементов, расположенных перед наибольшим положительным элементом одномерного массива, размер которого равен М.

5. В заданном одномерном массиве размером N поменять места­ми первый и последний положительные элементы.

6. Написать программу для вычисления суммы и среднего ариф­метического значения всех элементов заданного одномерного массива А, состоящего из 10 -ти элементов.

7. Написать программу для вычисления суммы положительных элементов, заданного массива А, состоящего из 20 -ти элемен­тов.

8. Написать программу для вычисления суммы четных элементов заданного массива А, состоящего из 20 -ти элементов.

9. Написать программу для определения количества положите­льных элементов, заданного массива А, состоящего из 20 -ти элементов.

10. Написать программу для определения индексов положительных элементов, заданного массива А, состоящего из 20 -ти эле­ментов.

11. Написать программу для вычисления среднего арифметического значения всех элементов заданного массива D. Для отри­цательных элементов использовать их абсолютные значения.

12. Написать программу для поиска в заданном массиве В, состоящем из 10 -ти элементов, третьего положительного элемента и его индекса. Известно, что хотя бы один положительный элемент в массиве В имеется.

13. Написать программу поиска в заданном массиве В, состоящем из 20 -ти элементов, третьего положительного элемента и его индекса.

14. Написать программу для поиска в заданном массиве А(15) наибольшего значения элемента и его индекса.

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

16. Для заданного массива А, состоящего не более чем из 50 -ти элементов, найти наименьший элемент и переставить его со вторым по порядку отрицательным элементом массива.

17. Написать программу по упорядочению элементов заданного массива В в следующем порядке: сначала идут положительные числа, потом - нули и в конце - отрицательные.

18. Написать программу сортировки по возрастанию заданного массива В, состоящего из 10 -ти элементов.

19. Написать программу. Для заданного массива В, состоящего из 10 -ти элементов, изменить порядок следования его элементов на обратный.

20. Написать программу, в которой для заданного массива В, сос­тоящего из 10 -ти элементов, его элементы перемещались бы например на 7 позиций вправо. При этом 7 элементов из конца массива перемещаются в начало.

21. Задан массив А. Поместить положительные элементы этого массива в массив В, а отрицательные элементы - в массив С.

22. В заданном векторе (одномерном массиве) найти сумму первого и последнего отрицательного элемента

23. В заданном векторе (одномерном массиве) найти: разность первого и последнего нечетного элементов

24. В заданном векторе (одномерном массиве) найти: индексы наименьшего и наибольшего из элементов

25. В заданном векторе (одномерном массиве) найти: произведение трех наименьших элементов вектора

26. В заданном векторе (одномерном массиве) найти: сумму элементов вектора с четными индексами

27. В заданном векторе (одномерном массиве) найти: разность первого положительного и последнего отрицательного элемента

28. В заданном векторе (одномерном массиве) найти: число отрицательных элементов с нечетными индексами

29. В заданном векторе (одномерном массиве) найти: число элементов, расположенных после его наибольшего отрицательного элемента.

30. В заданном векторе (одномерном массиве) найти: наибольший отрицательный и наименьший положительные элементы.


 

ЛАБОРАТОРНАЯ РАБОТА № 6

Многомерные массивы

Краткие теоретические сведения

В языке С++ все массивы являются статическими; более того, все массивы являются 0-базируемыми. Это означает, что нижняя граница всех индексов массива фиксирована и равна нулю.

В языке С# снято существенное ограничение языка C++ на ста­тичность массивов. Массивы в языке С# являются настоящими ди­намическими массивами. Они относятся к ссылочным типам и па­мять им отводится динамически в " куче". Однако, не снято ограничение 0-базируемости, хотя во многих задачах гораздо удобнее работать с массивами, у которых нижняя граница не равна нулю.

В языке C++ " классических" многомерных массивов нет. Вме­сто них введены одномерные массивы и массивы массивов, кото­рые являются более общей структурой данных и позволяют задать не только многомерный куб, но и изрезанную, ступенчатую структуру.

В языке С#, соблюдая преемственность, сохранены одномерные массивы и массивы массивов. В дополнение к ним в язык до­бавлены многомерные массивы.

Простейшей формой многомерного массива является двумерный массив. Местоположение любого элемента в двумерном массиве обозначается двумя индексами. Такой массив можно предста­вить в виде таблицы, первый индекс которого указывает на строки данной таблицы, а второй - на ее столбцы.

В следующей строке кода объявляется двумерный массив integer размерами 10x15:

int[, ] table = new int[10, 15];

При объявлении этого массива оба его размера разделяются запятой. В первой части этого объявления синтаксическое обозна­чение означает, что создается переменная типа ссылки на двумер­ный массив. Если же память распределяется для массива с помощью оператора new, то используется следующее синтаксическое обозначение:

int[10, 15]

Данное объявлении создает массив размерами 10x15. Для доступа к элементу двумерного массива следует указывать оба индек­са, разделив их запятой.

В следующей строке кода элементу массива myArray с координатами положения, т. е. индексами (3, 5) присваивается значение 10:

myArray [3, 5] = 10;

В С# допускаются массивы трех и более измерений.

Общая форма объявления многомерного массива.

тип [, •••, ] имя_массива = new тип[размер13 размер23 ... размеры ];

Например, в приведенном ниже объявлении создается трехмер­ный целочисленный массив размерами 4x10x3.

int [,, ] multiArray = new int[4, 10, 3];

А в следующем операторе элементу массива multiArray, по­ложение которого определяется индексами (2, 4, 1) присваивается значение 100:

multidim[2, 4, 1] = 100;

Ниже приведен пример программы, в которой сначала органи­зуется трехмерный массив, содержащий матрицу значении 3x3x3, а затем вычисляется сумма значений диагональных элементов этого массива.

// Суммировать значения по одной из диагоналей

// матрицы 3x3x3.

using System;

class Example

{

static void Main()

{

int [,, ] m = new int[3, -3, 3];

int sum = 0;

int n = 1;

for (int i = 0; i < 3; i++)

for (int j = 0; j < 3; j++)

for (int k = 0; k < 3; k++)

m[i, j, k] = n++;

sum = m[0, 0, 0] + m[l, 1, 1] + m[2, 2, 2];

Console.WriteLine(" Cyммa значений по диагонали: " + sum);

}

}

 

Результат выполнения этой программы:

Сумма значений по диагонали: 42

 

Инициализация многомерных массивов

Для инициализации многомерного массива достаточно заклю­чить в фигурные скобки список инициализаторов каждого его раз­мера. Общая форма инициализации двумерного массива имеет следующий вид:

тип[, ] имя_массива =

{

{vaL, vaL, vaL,..., val},

{val, vaL, vaL,..., vaL},

{vaL, vaL, vaL,..., vaL} };

где vaL обозначает инициализирующее значение, а каждый внут­ренний блок - отдельный ряд. Первое значение в каждом ряду сох­раняется на первой позиции в массиве, второе значение - на второй позиции и т. д. Блоки инициализаторов разделяются запятыми, а после завершающей эти блоки закрывающей фигурной скобки ста­вится точка с запятой.

Следующие два примера иллюстрируют возможность инициа­лизации массива непосредственным вводом с клавиатуры и считы­ванием информации из текстового файла.

Пример 1.

// Заполнить двумерный массив

// непосредственно вводом с клавиатуры

using System;

namespace Example6

{

class Example6_1

{

static void Main()

{

int i, j;

string strValue;

int[, ] iArray = new int[3, 4];

int[, ] jArray = new int[3, 4];

for (i = 0; i < 3; ++i)

{

for (j = 0; j < 4; ++j)

{

// ввод и присваивание значений

strValue = Console.ReadLine();

iArray[i, j] = Convert.ToInt32(strValue);

}

}

// вывод значений массива iArray на экран

for (i = 0; i < 3; ++i)

{

for (j = 0; j < 4; ++j)

{

Console.Write(" iArray[" + i + " + j + " ] = " + iArray[i, j]);

}

Console.WriteLine();

}

Console.WriteLine();

// вывод значений массива jArray на экран

for (i = 0; i < 3; ++i)

{

for (j = 0; j < 4; ++j)

{

jArray[i, j] = iArray[i, j] * 10;

Console.Write(" jArray[" + i + ", " + j + " ] = " + jArray[i, j]);

}

Console.WriteLine();

}

Console.WriteLine();

}

}

}

 

 

Основным методом, используемым для чтения данных с кон­соли, является метод ReadLine. Он читает с консоли строку текста, завершаемую признаком конца строки. Эта строка и является резу­льтатом, возвращаемым методом ReadLine. Введенная строка с по­мощью метода ToInt32 конвертируется в значение типа int и это значение присваивается элементу iArray[i, j]. Далее в двой­ном цикле заполняется массив

jArray jArray[i, j] = iArray[i, j] * 10;

и затем оба массива выводятся на экран.

Для ввода данных из файла используется конструктор класса StreamReader. В классе StreamReader определено несколько ко­нструкторов. Наиболее часто используемый

StreamReader(string имя_файла),

где имя_файла - это имя открываемого файла, включая полный путь к нему. Здесь необходимо отметить, что в имени файла присутствует служебный символ \, который обычно на экран не выво­дится. Если все же необходимо использовать служебные символы в выводимом тексте, следует перед таким символом поставить допол­нительный символ \ (обратный слеш).

Пример 2.

// Двухмерный массив

// Ввод массива в файл и

// вывод массива из файла

using System;

using System.IO;

namespace Example6

{

class Example6_2

{

static void Main()

{

int i, j;

string strValue;

int[, ] iArray1 = new int[3, 4];

int[, ] iArray2 = new int[3, 4];

StreamReader sRead = new StreamReader(''С: \\C#\\dat.txt'');

StreamWriter sWrite = new StreamWriter(''С: \\C#\\res.txt'');

for (i = О; i < З; i++)

{

for (j = О; j < 4; j++)

{

strValue = sRead.ReadLine();

iArray1[i, j] = Convert.ToInt32(strValue);

iArray2[i, j] = iArray1[i, j] * 100;

strValue = string.Format(''\n {0, 4: D} {1, 4: D} {2, 6: D} {З, 6: D}'',

i, j, iArray1[i, j], iArray2[i, j]);

Console.WriteLine(strValue); Console.WriteLine();

}

}

for (i = 0; i < 3; i++)

{

for (j = 0; j < 4; j++)

{

sWrite.WriteLine(iArray2[i, j]);

}

}

sWrite.Close();

}

}

}

 

Смысл этого примера достаточно прозрачен и отличается то­лько тем, что вместо класса Console (Example6_1) используются классы StreamReader и StreamWriter (Example6_2).

Следующая программа содержит пример ввода и вывода мас­сива из файла. Массив iArray1 содержит три столбца, первый из которых заполнен случайными числами типа int, второй - слу­чайными числами типа double и третий значениями функции Sin(x). Далее формируется строковая переменная strValue, ко­торая форматируется и используется для вывода массива iArrayl на экран. Следующий оператор

iArray2[i, j] = iArray1[i, j] * 100;

инициализирует массив iArray2 и производит запись символьно­го потока в текстовой файл res3.txt.

Класс Array - это класс, обслуживающий массивы в прост­ранстве имен System. Его свойства и методы можно использовать для массивов любого из встроенных типов.

Свойство Length доступно только для чтения, имеет тип int и содержит количество элементов массива.

 

Метод Copy (Array source, Array dest, count) ко­пирует число элементов, задаваемых параметром count, из исход­ного массива source в целевой массив dest, начиная с первого элемента массива. Далее происходит вывод массива iArray 1 на экран.

Пример 3.

// Заполнить двухмерный массив

// и организовать вывод на экран.

// Ввод массива в файл и

// вывод массива из файла

using System;

using System.IO;

namespace Example6

{

class Example6_3

{

static void Main()

{

int i, j, num;

double x = 0;

string strValue;

double[, ] iArray1 = new double[10, 3];

double[, ] iArray2 = new double[10, 3];

Random rnd = new Random();

StreamWriter sWrite = new StreamWriter(" C: \\C#\\res3.txt");

Console.WriteLine(" \n --------------------------------------------------------------------- ---");

for (i = 0; i < 10; i++)

{

num = rnd.Next(1, 51);

iArray1[i, 0] = Convert.ToDouble(num);

num = (rnd.Next(1, 101) - 50) / 10;

iArray1[i, 1] = Convert.ToDouble(num);

iArray1[i, 2] = Math.Sin(x);

x = x + 0.314159;

strValue = string.Format(" \n {0, 4: D} {1, 10: F0} {2, 10: F2} {3, 10: F2}",

i, iArray1[i, 0], iArray1[i, 1], iArray1[i, 2]);

Console.WriteLine(strValue);

}

Console.WriteLine(" \n --------------------------------------------------------------------");

for (i = 0; i < 10; i++)

{

for (j = 0; j < 3; j++)

{

iArray2[i, j] = iArray1[i, j] * 100;

sWrite.WriteLine(iArray2[i, j]);

}

}

num = iArray2.Length;

Array.Copy(iArray2, iArray1, num);

for (i = 0; i < 10; i++)

{

strValue = string.Format(" \n {0, 4: D} {1, 10: F0} {2, 10: F2} {3, 10: F2}",

i, iArray2[i, 0], iArray2[i, 1], iArray2[i, 2]);

Console.WriteLine(strValue);

sWrite.WriteLine(iArray2[i, j]);

}

Console.WriteLine(" \n --------------------------------------------------------------------");


sWrite.Close();

}

}

}

 


 

 

Пример Example6_4 демонстрирует метод вычисления сум­мы и среднеарифметического всех элементов массива, который за­полняется случайными числами. Эти вычисления аналогичны тем, которые проводились для одномерного массива. Разница лишь в том, что в случае одномерного массива использовался одинарный цикл, а для двумерного массива - двойной.

Пример 4.

// Заполнить двухмерный массив случайными числами.

// Вычислить сумму и среднеарифметическое всех

// элементов

using System;

using System.IO;

namespace Example6

{

class Example6_4

{

static void Main()

{

int i, j;

int num, sum = 0;

int[, ] iArray = new int[5, 6];

int[ ] iA = new int[6];

Random rnd = new Random();

string strValue = " \n -------------------------------------------------------------------------------- ";

Console.Write(" \n ");

// номера столбцов

for (j = 0; j < 6; j++)

Console.Write(" {0, 5}", j);

Console.WriteLine(strValue);

// заполнение массива; сумма и

// среднеарифметическое всех элементов

for (i = 0; i < 5; i++)

{

for (j = 0; j < 6; j++)

{

num = rnd.Next(1, 101);

iArray[i, j] = Convert.ToInt32(num);

iA[j] = iArray[i, j];

sum = sum + iArray[i, j];

}

}

// вывод массива

for (i = 0; i < 5; i++)

{

// номер строки

Console.Write(" \n " + i);

for (j = 0; j < 6; j++)

{

// элементы строки

Console.Write(" {0, 5}", iArray[i, j]);

}

Console.WriteLine(strValue);

Console.WriteLine();

Console.WriteLine(" Сумма элементов массива: " + sum);

Console.WriteLine(" Среднеарифметическое: " + sum / 30);

Console.WriteLine();

}

}

}

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

Пример 5.

// Заполнить двухмерный массив A(M, N)

// случайными числами.

// Переставить в этом массиве строки 2 иМ - 2

using System;

namespace Example6

{

class Example6_5

{

static void Main()

{

int M = 6, N = 8;

int i, j, temp;

int[, ] iArray1 = new int[M, N];

int[, ] iArray2 = new int[M, N];

int[ ] iArray3 = new int[N];

Random rnd = new Random();

string strValue = " \n ------------------------------------------------------------------------- ";

Console.Write(" \n ");

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

Console.WriteLine(strValue);

// заполнение массива

for (i = 0; i < M; i++)

{

for (j = 0; j < N; j++)

{

temp = rnd.Next(1, 101);

iArray1[i, j] = Convert.ToInt32(temp);

iArray2[i, j] = Convert.ToInt32(temp);

iArray3[j] = iArray1[i, j];

}

foreach (int jj in iArray3)

{

Console.Write(" {0, 5}", jj);

}

Console.Write(" \n");

}

Console.WriteLine(strValue);

Console.WriteLine(" \n Массив после перестановки: ");

Console.WriteLine(strValue);

for (j = 0; j < N; j++)

{

temp = iArray2[2, j];

iArray2[2, j] = iArray2[M - 2, j];

iArray2[M - 1, j] = temp;

}

for (i = 0; i < M; i++)

{

for (j = 0; j < N; j++)

{

iArray3[ j] = iArray2[i, j]

}

foneach (int jj іn iArray3)

{

Console.Write(" {0, 5}", jj');

}

Console.Write(" \n");

}

Console.WriteLine(strValue);

Console.WriteLine();

Console.WriteLine();

}

}

}

 

Пример 6.

// Заполнить двухмерный массив A(5, 6) случайными числами.

// Найти в этом массиве строку, сумма элементов которой

// является максимальной, а в ней минимальный по величине элемент

using System;

namespace Example6

{

class Example6_6

{

static void Main()

{

int im = 0, jm = 0, i, j;

int num, sum = 0;

int max = -100, min = 100;

int[, ] iArray = new int[5, 6];

int[ ] iA = new int[6];

Random rnd = new Random();

string strValue = " \n ------------------------------------------------------------------------------";

Console.Write(" \n ");

// номера столбцов

for (j = 0; j < 6; j++)

Console.Write(" {0, 5}", j);

Console.WriteLine(strValue);

// заполнение массива; сумма строк

for (i = 0; i < 5; i++)

{

sum = 0;

for (j = 0; j < 6; j++)

{

num = rnd.Next(1, 101);

iArray[i, j] = Convert.ToInt32(num);

iA[j] = iArray[i, j];

sum = sum + iArray[i, j];

}

if (sum > max)

{

max = sum;

im = i;

}

}

for (j = 0; j < 5; j++)

{

if (iArray[im, j] < min)

{

min = iArray[im, j];

jm = j;

}

}

// вывод массива

for (i = 0; i < 5; i++)

{

// номер строки

Console.Write(" \n " + i);

for (j = 0; j < 6; j++)

{

// элементы строки

Console.Write(" {0, 5}", iArray[i, j]);

}

}

Console.WriteLine(strValue);

Console.WriteLine();

Console.WriteLine(" \n i = " + im);

Console.WriteLine(" \n j = " + jm);

Console.WriteLine();

}

}

}

 

Сумма элементов строки вычисляется во внутреннем цикле по j. На каждом шаге цикла к сумме элементов строки i добавляется очередной элемент. По окончании цикла переменная sum будет со­держать полную сумму всех элементов данной строки. Максималь­ная сумма определяется во внешнем цикле. Для этого используется следующая группа операторов

if (sum > max)

{

max = sum;

im = i;

}

которая определяет максимальную сумму и номер строки im. Дру­гая группа операторов

if (iArray[im, j] < min)

{

min = iArray[im, j];

jm = j;

}

используется для поиска минимального элемента и его номера jm в найденной строке.

 

 

Генерация таблицы умножения достаточно тривиальная зада­ча. Каждый элемент таблицы определяется произведением номера строки на номер столбца k = i * j. Единственная трудность зак­лючается в организации вывода таблицы на экран.

Конструкция выбора

if (k < 10) Console.Write(" ");

else Console.Write(" ");

вставляет перед числом k < 10 два пробела, а во всех остальных случаях - один пробел. На нижеследующем рисунке представлен результат вывода, полученный при выполнении данной программы.

Пример 7.

// Рассчитать и вывести на экран таблицу умножения.

// Подсчитать общее количество чисел в данной таблице

using System;

namespace Example6

{

class Example6_7

{

static void Main()

{

int i, j, k, m = 0;

for (i = 1; i < 10; i++)

{

Console.WriteLine(" \n");

for (j = 1; j < 10; j++)

{

k = i * j;

m++;

if (к < 10) Console.Write(" ");

else Console.Write(" ");

Console.Write(k);

}

}

Console.WriteLine(" \n\n всего чисел: " + m);

Console. WriteLine (" \n" , );

}

}

}

 

 

 

 

Программа данного примера выводит на экран верхнюю и ниж­нюю треугольные матрицы. Для управления выводом использу­ются операторы break и continue. Оператор break прерывает выполнение цикла при выполнении заданного условия. Оператор continue также при выполнении заданного условия приводит к пропуску следующих за ним операторов блока, но без выхода из блока.

Пример 8.

// Рассчитать таблицу (матрицу) умножения.

// Вывести на экран верхнюю треугольную и нижнюю

// треугольную матрицы. Подсчитать общее

// количество чисел (элементов) в каждой из матриц.

using System;

namespace Example6

{

class Example6_8

{

static void Main()

{

// верхняя треугольная матрица

int i, j, k, m = 0;

for (i = 1; i < 10; i++)

{

Console.WriteLine(" \n");

for (j = 1; j < 10; j++)

{

k = i *j;

if (j > 10 - i) break;

m++;

if (k < 10) Console.Write(" ");

else Console.Write(" ");

Console.Write(k);

}

}

Console.WriteLine(" \n\n всего чисел: " + m);

Console.WriteLine(" \n");

m = 0;

for (i = 1; i < 10; i++)

{

Console.WriteLine(" \n");

for (j = 1; j < 10; j++)

{

k = i * j;

if (k < i * (10 - i))

Console.Write(" ");

else

{

if (k < 10) Console.Write (" " + k);

else Console.Write(" " + k);

m++;

}

}

}

Console.WriteLine(" \n\n всего чисел: " + m);

Console.Write(" \n");

}

}

}

 

 

В приведенных выше примерах применения двумерного мас­сива, по существу создавался так называемый прямоугольный мас­сив. Двумерный массив можно представить в виде таблицы, в которой длина каждой строки остается неизменной по всему массиву. Но в С# можно также создавать специальный тип двумерного мас­сива, называемый ступенчатым массивом. Ступенчатый массив представляет собой массив массивов, в котором длина каждого мас­сива может быть разной. Следовательно, ступенчатый массив мож­но использовать для составления таблицы из строк разной длины.

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

тип [ ][ ] имя_массива = new тип[размер][];

где размер обозначает число строк в массиве. Память для самих строк распределяется индивидуально, и поэтому длина строк может быть разной. Память сначала распределяется для его первого изме­рения автоматически, а затем для второго измерения вручную. После создания ступенчатого массива доступ к его элементам осу­ществляется по индексу, указываемому в отдельных квадратных скобках. Например, в следующей строке кода элементу массива jagged, находящемуся на позиции с координатами (2, 1), присва­ивается значение 10:

jagged[2][1] = 10;

Обратите внимание на синтаксические отличия в доступе к элементу ступенчатого и прямоугольного массива.

В приведенном ниже примере программы демонстрируется соз­дание двумерного ступенчатого массива. Здесь следует обратить внимание, что язык C# позволяет использовать в качестве имен пе­ременных и массивов русские имена.

Пример 9.

// Инициализировать и вывести на экран

// ступенчатый массив.

using System;

namespace Example6

{

class Example6_9

{

static void Main()

{

int j, max = 0;

int[ ] Массив = new int[5];

for (j = 0; j < 5; j++)

{

Массив[j] = j + 2;

if (Массив[j] > max) max = Массив[j];

}

// вспомогательный массив, определяющий

// границы каждой из строк ступенчатого массива

int размер0 = 5;

int размер1 = max;

int размер2 = Convert.ToInt32((4 * max - 1) / 3);

int[ ] размер = { размер0, размер1, размер2 };

int[ ][ ] стМассив = new int[3][ ];

стМассив[0] = new int[paзмep[0]];

стМассив[1] = new int[pa3Mep[1]];

стМассив[2] = new int[pa3Mep[2]];

Console.WriteLine();

Console.Write(" ");

for (j = 0; j < размер2; j++)

Console.Write(" {0, 5}", j);

Console.WriteLine(" \n\t\t ------------------------------------------------------------------ ");

Console.Write(" стМассив[0][5]");

for (j = 0; j < размер0; j++)

стМассив[0][ j] = j + 1;

foreach (int jj in стМассив[0])

Console.Write(" {0, 5}", jj);

Console.WriteLine();

Console.Write(" cтМассив [1][6] ");

for (j = 0; j < размер1; j++)

стМассив [1][ j] = j + 11;

foreach (int jj in стМассив[1])

Console.Write(" {0, 5}", jj);

Console.WriteLine();

Console.Write(" стМассив[2][7]");

for (j = 0; j < размер2; j++)

стМассив[2][ j] = j + 111;

foreach (int jj in стМассив[2])

Console.Write(" {0, 5}", jj);

Console.WriteLine(" \n\t\t -------------------------------------------------------------- ");

Console.WriteLine();

}

}

}

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

Следует отметить, что ступенчатые массивы представляют со­бой массивы массивов, и поэтому они не обязательно должны состоять из одномерных массивов. Так в приведенной ниже строке кода создается массив двумерных массивов.

int[ ][, ] jArray = new int[5][, ];

 

2. Практическая часть

Задания к лабораторной работе

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

1. Написать процедуру вычисления суммы всех элементов для за­данного двумерного массива А состоящего из 5-ти строк и 6-ти столбцов.

2. Написать процедуру вычисления для заданного массива А(5, 6) среднего арифметического элементов значения его по­ложительных элементов. Известно, что хотя бы один элемент массива имеет положительное значение

3. Для заданного массива А(4, 6) вычислить среднее арифмети­ческое значение положительных элементов каждой строки. Результаты поместить в одномерный массив В (4). Известно, что в каждой строке массива хотя бы один элемент имеет положительное значение.

4. Вычислить для заданного массива В(20, 30) наибольший элемент каждого столбца. Результаты поместить в одномерный массив ВМ(30).

5. Написать процедуру поиска для заданного массива А(4, 5), строки с наибольшим средним арифметическим значением по­ложительных элементов. Результат поместить в одномерный массив D(5). Считаем, что хотя бы один положительный эле­мент в каждой строке имеется.

6. Написать процедуру. Для двумерного массива А(6, 4), пере­ставить местами 2-ю и 4-ю строки.

7. Написать процедуру. Для заданного массива В (4, 5), переста­вить местами столбец с наибольшим количеством нулевых эле­ментов и столбец последний по порядку следования в массиве В.

8. Написать процедуру для подсчета в заданном массиве А (5, 5) количества элементов превышающих заданное число В и лежа­щих на главной диагонали и выше нее.

9. Написать процедуру для вывода на печать отрицательных эле­ментов, лежащих на главной диагонали заданного массива А(4, 4).

10. Написать процедуру перестановки элементов заданного масс- сива В(4, 4), лежащих на главной и побочной главной диаго­нали.

11. Написать процедуру пересылки двумерного массива А (5, 6) в одномерный массив В (30) того же размера, по строкам с со­хранением порядка следования элементов.

12. Написать процедуру по транспонированию заданной квадрат­ной матрицы А максимальная размерность которой 100.

13. Написать процедуру перемножения матрицы А на вектор В.

14. Написать процедуру перемножения матрицы А(5, 10) на мат­рицу В(10, 4).

15. Задан массив размером МхМ. Разделить элементы каждого столбца на элемент главной диагонали расположенный в соот­ветствующем столбце.

16. Задан двумерный массив размером МхМ. Сформировать из его диагональных элементов одномерный массив.

17. Задан массив размером МхМ. Определить максимальный и ми­нимальный элементы главной диагонали и переставить мес­тами столбцы в которых лежат эти элементы.

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

19. Для заданного двумерного массива размером МхМ просумми­ровать элементы, расположенные на диагоналях, параллельных главной. Результаты поместить в одномерный массив.

20. В заданном двумерном массиве размером МхМ поменять местами элементы первого и второго столбца, третьего и четвер­того и т. д.

21. Задан массив размером 16. Сформировать из него массив размером 4х4 по строкам.

22. В заданном двумерном массиве размером МхМ переместить нулевые элементы каждого столбца в конец столбца.

23. Задан двумерный массив размером МхМ. Максимальный эле­мент каждой строки поменять местами с диагональным элемен­том соответствующей строки.

24. Поместить в одномерный массив элементы, расположенные по периметру заданного двумерного массива размером МхМ Испо­льзовать один цикл.

25. Заданный двумерный массив размером МхМ повернуть вправо на 90°, без использования вспомогательных массивов.

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

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

28. Написать процедуру, задающую треугольную матрицу произ­вольного размера. Число, определяющее размер матрицы вво­дится с клавиатуры во время выполнения процедуры

29. Сформировать двумерный массив, у которого элементы равны произведению своих индексов

30. Найти сумму элементов главной и произведение элементов побочной диагоналей квадратной матрицы.


 

ЛАБОРАТОРНАЯ РАБОТА № 7

Классы и методы

1. Краткие теоретические сведения

 

Класс является обобщенным понятием, определяющим харак­теристики и поведение некоторого множества конкретных объектов этого класса, называемых экземплярами, или объектами, класса.

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

«Классический» класс содержит данные, задающие свойства объектов класса, и функции, определяющие их поведение. В последнее время в класс часто добавляется третья составляющая - события, на которые может реагировать объект класса. Это оправдано для классов, использующихся в программах, построенных на основе событийно-управляемой модели, например, при программировании для Windows.

Процедура объявления и создания экземпляров пользователь­ского типа не отличается от таковой для предопределенных типов за исключением необходимости использования Спецификатора New (new) для создания экземпляров пользовательских типов значений и ссылочных типов.

 

Спецификаторы классов:

 

1. new - используется для вложенных классов. Задает новое описание класса взамен унаследованного от предка. Приме­няется в иерархиях объектов.

2. public - доступ не ограничен

3. protected - используется для вложенных классов. Доступ только из элементов данного и производных классов

4. internal - доступ только из данной программы (сборки)

5. protected internal - доступ только из данного и производных классов или из данной программы (сборки)

6. private - используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс

7. abstract - абстрактный класс. Применяется в иерархиях объектов.

8. sealed - бесплодный класс. Применяется в иерархиях объектов.

9. static - статический класс. Введен в версию языка 2.0.

 

Спецификаторы 2 - 6 называются спецификаторами доступа. Они определяют, откуда можно непосредственно обращаться к данному классу. Спецификаторы доступа могут присутствовать в описании только в вариантах, приведенных в таблице, а также могут комбинироваться с остальными спецификаторами.

 

Методы

Методы делают всю работу, для исполнения которой предназ­начены классы и структуры: вычисляют значения, изменяют дан­ные, получают вводимую информацию - в общем, выполняют все действия, составляющие поведение объекта

 

Объявление методов

Один из видов членов, которые добавляются к классам, - это методы, определяющие действия, которые должен выполнять класс. Есть две разновидности методов: те, что возвращают зна­чения, и те, которые никаких значений не возвращают. Следующий пример иллюстрирует обе разновидности методов:

 

  Рис. 7.1. Класс

 

// Этот метод возвращает целые (int) значения

public int Add (int first, int second)

{

int Result;

Result = first + second;

Return result;

}

public void myVoidMethod ()

// void - не возвращает значений

{

MessageBox.Show (" Этот метод не возвращает значения ");

}

Метод является самостоятельной частью кода, которая имеет имя и может содержать аргументы, выполнять последовательность инструкций (операторов) и изменять значения своих аргументов.

 

Вызов методов.

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

// Так вызывают метод Rotate с двумя параметрами Rotate (45, " Degrees");

Метод Main - особый, он вызывается сразу после начала ис­полнения программы. К особым методам также относятся деструк­торы, которые вызывают во время выполнения непосредственно перед уничтожением объекта. Третий вид особых методов - конструкторы; они исполняются во время инициализации объектов.

Метод может иметь один или несколько параметров. Параметр - это аргумент, передаваемый методу вызывающим его методом. При объявлении метода список параметров указывают после его имени в круглых скобках, при этом для каждого параметра необходимо указать его тип.

public void DisplayName (string name, byte age)

{

Console.WriteLine (" Hello " + name + ". You are " +

age.ToString () +" years old.");

}

Внимание. У этого метода два параметра: один типа String, с локальным именем name, а второй, age, - типа Byte. Их область видимости ограничена методом, вне которого переменные не доступны.

Составим фрагмент программы вычисления следующих функций:

 

 

 

Метод fnc типа double

 

public double fnc(a as double, x as double, z double)

{

return (a*exp(x) + z * sin(x));

}

 

Использование метода

c = fnc (a, x*x, 0.) / fnc (1., x, 8.5)

b = -1.

d = 1/(fnc (8., x^4, b) + x^3)

 

Метод с именем fnc и формальными параметрами а, х, z используется при вычислении си d.

Пример 1. Задан вектор D(5). Создать класс vect осущест­вляющий ввод данных с клавиатуры, вывод элементов вектора на консоль, и перестановку первого по порядку элемента со k-тым отрицательным элементом вектора. Ограничение доступа в класс (снаружи можно вызывать только public части класса)

using System;

namespace ConsoleApplication1

{

class Program

{

class vect // класс векторов vect

{

double[ ] a; // объявление массива int n;

int n; // размер массива

public vect(int n)

// конструктор создаёт вектор

{

this.a = new double[n];

this.n = n;

}

public int vv()

// заполнение вектора целиком,

// клавиатурный ввод

{

for (int i = 0; i < n; i++)

{

string buf;

// строка символов

buf = Console.ReadLine();

// заполнение строки

a[i] = Convert.ToDouble(buf);

// преобразование строки в число

}

return (0);

}

public int vyv()

// вывод на консоль

// элементов вектора

{

for (int i = 0; i < n; i++)

Console.WriteLine(" a[" + i + " ] = " + a[i]);

return (0);

}

public int perest(int k)

// переставить 1 и k-ое отрицательное число

{

// ключ: 0 – если порядок

// - 1 – если нет

int k1=0;

// k больше размера вектора

if (k > = n) k1= -1;

else

{

// счетчик отрицательных чисел

int cnt = 0;

// указатель на позицию в массиве

int pos = -1;

// подсчёт отрицательных чисел

while (cnt < k)

{

pos++;

if (a[pos] < 0) cnt++;

} // подсчёт

tmp = a[pos]; //перестановка

a[pos] = a[0];

a[0] = tmp;

k1=0;

}

return k1;

}

//главная программа

static void Main()

{

// создали

vect d = new vect (5);

d.vv (); // заполнили

d.vyv (); // вывели на консоль

d.perest (); // переставили

d.vyv (); // вывели на консоль

}

}

}

}

 

Пример 2. Задана матрица D(3; 3). Написать метод транспонирования матрицы и метод перемножения квадратных матриц. Получить результат перемножения транспонированной матрицы на соответствующую ей исходную. Отдельный класс для матриц не создаем. Работаем в классе myprog. Поэтому все содержимое класса доступно.

using System;

// моё пространство имён

namespace ConsoleApplication3

{

class myprog

{

static void Main()

{

// объявление матриц

double[, ] d = new double[3, 3];

double[, ] dt = new double[3, 3];

double[, ] ddt = new double[3, 3];

// заполнение d c клавиатуры

int i; int j; // строки, колонки

for (i = 0; i < 3; i++)

{

for (j = 0; j < 3; j++)

d[i, j] = Convert.ToDouble(Console.ReadLine());

}

// траспонирование матрицы

transp(d, 3, dt);

// умножение транпонированной

// матрицы dt на исходную d

mt_q_mult(dt, d, ddt, 3);

}

// транпонирование

static void transp(double[, ] mtr, int p, double[, ] mtrt)

// double[, ] mtr - так определяют матрицу в формальных параметрах

{

int i; int j;

for (i = 0; i < p; i++)

{

for (j = 0; j < p; j++)

mtrt[j, i] = mtr[i, j];

}

}

// умножение квадратных матриц

static void mt_q_mult(double[, ] m_a, double[, ] m_b, double[, ] m_r, int p)

// m_r=m_a * m_b, int p размер матриц

{

int i; int j; int k; double mel;

for (i = 0; i < p; i++) // строки m_a

{

// столбцы m_b

for (j = 0; j < p; j++)

{

mel=0;

// столбцы m_a и строки m_b

for (k = 0; k < p; k++)

mel=mel+m_a[i, k]*m_b[k, j];

m_r[i, j]=mel;

}

}

}


 

 

2. Практическая часть

Задание к лабораторной работе

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

1. Заданы две матрицы А (4, 4) и В (4, 4). Написать программу суммирования двух векторов X и Y, где X - вектор, в котором размещены элементы столбца матрицы А с минимальным средним арифметическим значением, Y - то же для матрицы В.

2. Заданы две матрицы А (4, 4) и В (4, 4). Написать программу вычисления вектора Z = X + Y, где X - строка матрицы А, включающая минимальный элемент ее главной диагонали, Y - то же для матрицы В.

3. Заданы две матрицы А(4, 4) и В(3, 3) и два вектора С(4) и D(3). Написать программу вычисления произведений матриц на соответствующие им вектора. Определить минимальное сре­днее арифметическое значение для полученных векторов.

4. Заданы две матрицы В(4, 4) и D(3, 3). Написать программу транспонирования каждой из заданных матриц с последующим перемножением транспортированной матрицы на соответству­ющую ей исходную.

5. Заданы две матрицы А(3, 3) и В(3, 3). Написать программу проверки - является ли произведение этих матриц перестановочным, т.е. проверить равенство AB = ВА.

6. Заданы две матрицы С (4, 4) и D(3, 3). Написать программу определения количества симметричных матриц. Матрица называется симметричной, если транспонированная матрица равна исходной. Для каждой симметричной матрицы вычислить сумму элементов, лежащих вне главной диагонали.

7. Заданы два массива С(6) и D(10). Для каждого из них осуществить перестановку первого по порядку элемента со вторым отрицательным элементом массива.

8. Заданы три квадратных уравнения АХ + BX + С = 0; DX2 + FX + E = 0 и ZX2 + YX + S = 0. Написать программу нахождения максимального значения корня среди действительных корней этих уравнений.

9. Заданы два вектора А(0.052; 0.9; 0.15; 0.84; 0.67) и В(0.948; 0.1; 0.33; 0.16; 0.85). Написать программу, позволяющую расположить элементы одного вектора по возрастанию, а другого - по убыванию. Вычислить сумму полученных векторов.

10. Заданы два двумерных массива A(4, 4) и B(3, 3). Для каждого из них переставить столбцы с максимальным и минимальными элементами.

11. Заданы координаты четырёх точек A, B, C, D на плоскости. Определить наибольший из периметров треугольников ABC, ABD, ACD.

12. Три треугольника заданы координатами своих вершин. Написать программу вычисления площадей треугольников и определения минимальной площади.

13. Заданы два двумерных массива А (4, 4) и В(3, 3). Для каждого из них переставить последнюю строку со строкой с максимальным средним арифметическим значением.

14. Заданы две матрицы А(4, 4) и В(4, 4). Написать программу вычисления вектора Z = X - Y, где X - столбец матрицы А, включающий минимальный элемент матрицы; Y - то же для матрицы В.

15. Заданы три вектора X, Y, Z. Написать программу вычисления соответственно равны С = X + У; D = X - Z

16. Заданы матрицы С(4, 4) и D(3, 3). Определить индексы максимального элемента каждой из матриц среди элементов, расположенных выше главной диагонали.

17. Заданы вектора А(5), В(10), D(15). Дли каждого из них определить максимальный и минимальный элементы и их индексы.

18. Заданы координаты вершин трех треугольников. Определить сколько треугольников лежит внутри окружности радиуса R с центром в начале координат.

19. Заданы координаты десяти точек плоскости и координаты точки-полюса. Найти точку, максимально удалённую от полюса, среди первых четырёх заданных точек и такую же точку - среди последних шести. Определить также расстояние между найденными точками.

20. Заданы массивы Y (4, 4) и Z(8, 8). Для каждого из них вычислить среднее арифметическое значение положительных элементов, расположенных выше главной диагонали.

21. Заданы координаты вершин трех треугольников. Определить треугольник с максимальным периметром.

22. Заданы три матрицы размерами 2x2, 3x3, 4x4. Для каждой из матриц определить среднее арифметическое значение положительных элементов главной диагонали.

23. Заданы три одномерных массива разной размерности. Для каждого из массивов определить повторяющиеся элементы.

24. Заданы координаты четырех точек на плоскости. Определить номера точек, расстояние между которыми минимальное.

25. Заданы две окружности (х - а)2 + (у - b)2 = r2 и (х - с)2 + (у –d)2 = R2 и координаты четырех точек. Определить количество точек, лежащих внутри каждой окружности.

26. Заданы три одномерных массива А(5), В(10), С(15). Написать программу решения уравнения рх2 + dx + r = 0, где р - минимальный элемент матрицы А, d - минимальный элемент матрицы В, r - минимальный элемент матрицы С.

27. Заданы одномерные массивы Х(5) и Y(7). Для каждого из них определить количество и сумму элементов, которые без остатка делятся на заданное число В.

28. Составить программу заполнения массивов А(5) и В(10) факториалами значений индексов их элементов. Вычисление факториала выполнить в подпрограмме.

29. Заданы матрицы А(4, 4), В(6, 6). Для каждой матрицы определить среднее арифметическое значение положительных элементов, расположенных не выше главной диагонали.

30. Матрицами Р(2, 2) и Е(2, 2) в декартовой системе координат заданы две окружности положением своего центра и точки на дуге. Вычислить параметры окружностей.


31.

ЛИТЕРАТУРА

1. Архипов В. Н., Калядин В. И., Любин А. Н., Макаров А. И. Программирование на Фортране: методические указания к лабораторным работам. - М.; МГТУ «МАМИ», 2007, - 144 с.

2. Калядин В. И., Макаров А. И. Основы работы на персональ­ном компьютере: сборник лабораторных работ. - М.; МГТУ «МАМИ», 2010, - 85 с.

3. Лобанов А. С., Туманова М. Б. Решение задач на языке Visual Basic for Application: учебное пособие. - М.; МГТУ «МАМИ», 2009, - 90 с.

4. Павловская Т. A. C# Программирование на языке высокого уровня. ПИТЕР, 2007, - 432 с.

5. Герберт Шмидт. Полное руководство C# 3.0. М.; Изд. дом «Вильяме», 2010, - 992.

 

 

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ......................................................................................................................... 1

ПРАВИЛА ВЫПОЛНЕНИЯ РАБОТ............................................................................. 11

ЛАБОРАТОРНАЯ РАБОТА № 1.................................................................................... 13

ЛАБОРАТОРНАЯ РАБОТА № 2.................................................................................... 26

ЛАБОРАТОРНАЯ РАБОТА № 3.................................................................................... 39

ЛАБОРАТОРНАЯ РАБОТА № 4.................................................................................... 61

ЛАБОРАТОРНАЯ РАБОТА № 5.................................................................................... 75

ЛАБОРАТОРНАЯ РАБ






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.