Неправильный вывод в массиве - C#
Формулировка задачи:
Не всегда правильно находит минимальный по модулю элемент одномерного массива. В чём я ошибся?
Так же не могу понять почему не выполняется нахождение первого отрицательного элемента?
Для нахождения использую следующий код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*Написать программу обработки одномерного массива. Значение элементов массива задавать с помощью генератора случайных чисел
В одномерном массиве, состоящем из N целых элементов,
1) вычислить минимальный по модулю элемент массива;
2) вычислить сумму элементов массива, расположенных между первым и последним отрицательными элементами;
3) упорядочить массив по убыванию модулей его элементов.
*/
namespace Kon2_Pab1
{
class Program
{
static void Main(string[] args)
{
int n = 0, N = 20, Nmin = 0, Mmin = 0, a = 0, b = 0; // Переменные типа int
Console.WriteLine();
Random r = new Random(); // Для случайных чисел
int[] M = new int[N]; // Массив типа int
Console.WriteLine("Создан массив M случайных целых чисел");
Console.WriteLine();
Console.Write("Номер n" + " Значение M[n]");
Console.WriteLine();
for (n = 0; n < N; n++)
{
int Mm = r.Next(-100, 100); // Генерация случайного числа
M[n] = Mm;
Mmin = M[0];
Nmin = 0;
if (Math.Abs(Mm) < Math.Abs(Mmin) ) // Обнаружение минимального по модулю
{
Mmin = Mm;
Nmin = n;
}
Console.WriteLine("{0} {1,20}", n, Mm);
}
Console.Write("a=");
Console.WriteLine(a.ToString());
Console.Write("b=");
Console.WriteLine(b.ToString());
Console.WriteLine("******************************************");
Console.WriteLine();
Console.Write("Nmin="); // Вывод Nmi
Console.WriteLine(Nmin.ToString());
Console.Write("Mmin="); // Вывод Mmin
Console.WriteLine(Mmin.ToString());
Console.WriteLine();
Console.WriteLine("******************************************");
Console.WriteLine();
Console.WriteLine("Отсортированный массив:");
M = M.OrderByDescending(x => Math.Abs(x)).ToArray(); // сортировка
for (int i = 0; i < Math.Abs(M.Length); i++) // вывод сортировки
{
Console.WriteLine(M[i]);
}
Console.WriteLine("******************************************");
Console.WriteLine();
Console.WriteLine("Нажмите любую клавишу");
Console.ReadKey(); // Пауза
}
}
} n = 0;
while (M[n] < 0)
{
n++;
}
a = n;Решение задачи: «Неправильный вывод в массиве»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int[] mass = CreateMassInitRandom(20);
int min = GetMinAbs(mass);
}
static int[] CreateMassInitRandom(int Count)
{
Random rnd = new Random();
int[] mass = new int[Count];
for (int i = 0; i < Count; i++)
mass[i] = rnd.Next(-100, 101);
return mass;
}
static int GetMinAbs(int[] mass)
{
int min = int.MaxValue;
for (int i = 0; i < mass.Length; i++)
{
int item = Math.Abs(mass[i]);
if (item < min)min = item;
}
return min;
}
}
}