Лаба 2
.docxЛаба 2
Задание 1
Дан массив из N элементов (вещественные числа). Вычислить: 1) максимальный элемент массива; 2) сумму элементов массива, расположенных до последнего положительного элемента. Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a, b]. Освободившиеся в конце массива элементы заполнить нулями.
using System;
class Program
{
static void Main(string[] args)
{
double[] arr = { 1, 4.31, -7, -21.47, 31.123, 2.89, -143.191, 7.77, 8.04 };
// Нахождение макс. элемента
double max_elem = arr[0]; // мб, что первый эл. окажется макс.
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] > max_elem)
{
max_elem = arr[i];
}
}
Console.WriteLine("Максимальный элемент в массиве: " + max_elem);
// Нахождение суммы элементов массива, расположенных до последнего "+" элемента
double sum_before_last_positive = 0;
int last_positive_index = -1; // индекс последнего положительного элемента (-1), если такого элемента нет)
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] > 0)
{
last_positive_index = i;
}
if (last_positive_index == -1)
{
continue; // если положительный элемент еще не встретился - пропускаем
}
if (i < last_positive_index)
{
sum_before_last_positive += arr[i]; // берем в сумму все числа до последнего положительного
}
}
Console.WriteLine("Сумма элементов до последнего положительного элемента: " + sum_before_last_positive);
// Удаление элементов в интервале [a, b], освобождение конечных ячеек и заполнение их нулями
double a = -7.0; // задаем левую границу интервала
double b = 3.0; // задаем правую границу интервала
int shift = 0; // переменная для подсчета удаленных элементов
for (int i = 0; i < arr.Length; i++)
{
if (Math.Abs(arr[i]) >= a && Math.Abs(arr[i]) <= b)
{ // если элемент попадает в интервал, SKIP
shift++; //побитовый сдвиг
}
else
{ // если элемент не попал в интервал
if (shift > 0)
{
arr[i - shift] = arr[i]; // сдвигаем элементы на количество удаленных элементов
}
}
}
// ставим нули свободных ячеек
for (int i = arr.Length - shift; i < arr.Length; i++)
{
arr[i] = 0;
}
Console.WriteLine("Измененный массив:");
for (int i = 0; i < arr.Length; i++)
{
Console.Write(arr[i] + " ");
}
}
}
Задание 2
Дана матрица 5Х5. Построить одномерный массив В(5), состоящий из средних арифметических элементов строк.
int[][] matrix = new int[5][];
Random random = new Random();
for (int i = 0; i < 5; i++)
{
matrix[i] = new int[5];
for (int j = 0; j < 5; j++)
{
matrix[i][j] = random.Next(1, 101);
}
}
int[] B = new int[5];
for (int i = 0; i < 5; i++)
{
int sum = 0;
B[i] = (int)matrix[i].Average();
}
Console.WriteLine("Исходная матрица:");
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
Console.Write(matrix[i][j] + " ");
}
Console.WriteLine();
}
Console.WriteLine("\nМассив В:");
for (int i = 0; i < 5; i++)
{
Console.Write(B[i] + " ");
}