Задать вопрос
@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
  • Вопрос задан
  • 203 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 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();
        }
    }
}
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы