Что писать если отсутствует аргумент требуемый формальному параметру?
Как правильно вводить данные в аргумент Метода Func в массив numbers что бы метод выполнялся?
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
void Func(int[] numbers,int L, int R)
{
int middle, I, J, F, Z;
I = L; J = R;
middle = (L + R) / 2;
do
{
do
{
F = 0;
if (numbers[I] < numbers[middle]) F = -1;
if (numbers[I] > numbers[middle]) F = 1;
if (F > 0) I = I + 1;
Console.WriteLine(I);
}
while
(F < 0);
do
{
F = 0;
if (numbers[J] < numbers[middle]) F = -1;
if (numbers[J] > numbers[middle]) F = 1;
if (F > 0) J = J + 1;
Console.WriteLine(J);
}
while
(F < 0);
if (I <= J)
{
Z = numbers[I]; numbers[I] = numbers[J]; numbers[J] = Z;
}
}
while
(I <= J);
if (L < J) Func(numbers, L, J);
else if (I < R) Func(numbers, I, R);
}
Func(numbers,15, 10);
}
}
}
Ответы (1 шт):
Автор решения: Yaroslav
→ Ссылка
Ошибки в ideone.com сыпятся потому что у тебя метод Func внутри метода Main.
Банальная проверка аргументов с выдачей в консоль все показывает.
namespace ConsoleApp1 {
class Program {
private static void Main (string[] args) {
Func(new[] { 1, 2, 3 }, 5, 2);
}
private static void Func (int[] numbers, int l, int r) {
if (l < 0 || l >= numbers.Length) {
Console.WriteLine("Fail. L["+l+"] is out of numbers array lenght["+numbers.Length+"]");
return;
}
if (r < 0 || r >= numbers.Length) {
Console.WriteLine("Fail. R["+r+"] is out of numbers array lenght["+numbers.Length+"]");
return;
}
// Нет смысла их объявлять через запятую без значений, если в следующей же строчке ты присваиваешь им всем значения.
int Middle = (l+r)/2;
int I = l;
int J = r;
// в do-whilr (I <= J) нет смысла.
// в конце этого цикла if с тем-же условием которое меняет их местами и оно на 1 раз, не подразумевающее цикличность.
// А если они ровны цикл безконечен.
// в do-whilr (F < 0) для I нет смысла.
// if numbers[I] < numbers[Middle] или если ==(не обрабатывается), ничего не меняет и происходит бесконечный цикла.
// только (numbers[I] > numbers[Middle]) увеличива I на 1 и выходит из цикла.
if (numbers[I] > numbers[Middle])
I++;
// c J тоже самое.
if (numbers[J] > numbers[Middle])
J++;
// какой смыл менять их местами если I == J?
// это один и то-же индекс. только <.
if (I < J) {
int Temp = numbers[I];
numbers[I] = numbers[J];
numbers[J] = Temp;
}
if (l < J)
Func(numbers, l, J);
else if (I < r)
Func(numbers, I, r);
}
}
}
Output:
Fail. L[5] is out of numbers array lenght[3]
Это не все ошибки. Обратил внимание только на поверхностное безумие. Вряд ли эта рекурсивная сортировка работает.