@sashka_amelin32

Как исправить программу на языку C#?

namespace Lab_3_Amel
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] mas = { 1, 2, 3, 4 };
            int[] mas1 = { 1, 2, 3, 5 };
            for (int i = 1; i < mas.Length; i++) // Проверка первого массива
            {
                if (mas[i] % 2 == 0 && mas[i - 1] % 2 != 0 || mas[i] % 2 != 0 && mas[i - 1] % 2 == 0) continue;
                
                    if (i == mas.Length)
                        Console.WriteLine("Массив №1 прошёл проверку. 0");
                    else
                        Console.WriteLine("Массив №1 не прошёл проверку. Индекс-" + i);
                
            }
            Console.WriteLine("======================");
            for (int i = 1; i < mas1.Length; i++) // Проверка второго массива
            {
                if (mas1[i] % 2 == 0 && mas1[i - 1] % 2 != 0 || mas1[i] % 2 != 0 && mas1[i - 1] % 2 == 0) continue;
                if (i == mas1.Length)
                    Console.WriteLine("Массив №2 прошёл проверку. 0");
                else
                    Console.WriteLine("Массив №2 не прошёл проверку. Индекс-" + i);
            }
            Console.WriteLine("======================");
                Console.Read();
        }
    }
}


Проблема такая, написал код, который должен выводить 0 если в массиве чередуются чётные и нечетные числа, если не чередуются то вывести индекс последнего члена на котором нарушается закономерность, но в моём коде если в массиве четные и нечетные числа чередуются то ничего не выводится, а если на оборот то выводится последний член как и должно
5c3afbaab9e78784248723.png
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 3
MrMureno
@MrMureno
VR for all
sashka_amelin32, бро если делая лабораторку по простеишим массивам и ты "долго уже сижу и не могу понять в чём проблема"

то или плохо высыпаешься или плохо понимаешь что вообще делаешь.

а уж ерничать когда тебе говорят что решать такое за тебя не особо хотят) тем более не надо))

а по факту смотрите в отладчике очередность выполнения команд)

if (i == mas.Length)
                        Console.WriteLine("Массив №1 прошёл проверку. 0");

отладчиком дойдите до этого места . посмотрите чему равно i и mas.Length
да и в принципе, пошагово отладчиком и увидете, где сбоит, не заходит в условие или перескакивает.

удачи в обучении)
Ответ написан
@pfemidi
Тут могло бы быть краткое описание меня
using System;

namespace Lab_3_Amel
{
    class Program
    {
        // Проверяет входящий массив на чередование чётности элементов.
        // Возвращает -1 если закономерность порядка элементов "чётный, нечётный"
        // или "нечётный, чётный" не нарушена, иначе индекс элемента на котором 
        // нарушается закономерность
        static int Alternation(int[] array)
        {
            // если массив пустой то возвращаем "проверка пройдена"
            if (array.Length == 0)
                return -1;
            // если массив состоит меньше чем из двух элементов сразу возвращаем индекс первого
            if (array.Length < 2)
                return 0;

            // чётен ли первый элемент? и заодно признак чётности предыдущего элемента
            bool even = array[0] % 2 == 0;

            // идём по всем элементам массива кроме первого
            for (int i = 1; i < array.Length; i++)
            {
                // чётность текущего элемента
                bool parity = array[i] % 2 == 0;

                // если чётность текущего элемента такая же как чётность предыдущего элемента
                // то возвращаем индекс предыдущего, на нём как раз и нарушается закономерность
                if (parity == even)
                {
                    return i - 1;
                }
                // иначе запоминаем чётность текущего элемента на будущее
                else
                {
                    even = parity;
                }
            }
            // массив пройдён полностью, закономерность не нарушена
            return -1;
        }

        static void Main(string[] args)
        {
            int[] mas = { 1, 2, 3, 4 };
            int[] mas1 = { 1, 2, 3, 5 };

            // Проверка первого массива
            int idx = Alternation(mas); 
            if (idx == -1)
                Console.WriteLine("Массив №1 прошёл проверку. 0");
            else
                Console.WriteLine("Массив №1 не прошёл проверку. Индекс: {0}", idx);

            Console.WriteLine("======================");

            // Проверка второго массива
            idx = Alternation(mas1);
            if (idx == -1)
                Console.WriteLine("Массив №1 прошёл проверку. 0");
            else
                Console.WriteLine("Массив №1 не прошёл проверку. Индекс: {0}", idx);

            Console.WriteLine("======================");

            Console.Read();
        }
    }
}
Ответ написан
@MaximIs
if (mas[i] % 2 == 0 && mas[i - 1] % 2 != 0 || mas[i] % 2 != 0 && mas[i - 1] % 2 == 0) continue;

Здесь вы говорите, если текущее и предыдущие значения четное и нечетное, то проверяем следующую комбинацию за счет того, что написали команду continue
Я бы даже так написал
namespace Test
{
    class Program
    {

        public static void checkArray(int[] mas)
        {
            int check = 0;
            for (int i = 1; i < mas.Length; i++)
            {
                
                if (mas[i] % 2 == 0 && mas[i - 1] % 2 != 0 || mas[i] % 2 != 0 && mas[i - 1] % 2 == 0)
                {
                    check++;
                    if (check == (mas.Length - 1))
                        Console.WriteLine("Массив №1 прошёл проверку. 0");
                }
                else
                    Console.WriteLine("Массив №1 не прошёл проверку. Индекс-" + i);
            }
        }
        static void Main(string[] args)
        {
            int[] mas = { 1, 2, 3, 4 };
            int[] mas1 = { 1, 2, 3, 5 };
            checkArray(mas);
            checkArray(mas1);
            Console.Read();
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ИММА Москва
До 120 000 руб.
PHYGITALISM Москва
от 70 000 руб.
Кнопка Екатеринбург
До 150 000 руб.
20 марта 2019, в 01:07
1000 руб./за проект
20 марта 2019, в 00:27
2000 руб./за проект
19 марта 2019, в 23:14
6000 руб./за проект