S
S
sashka_amelin322019-01-13 11:49:52
C++ / C#
sashka_amelin32, 2019-01-13 11:49:52

How to fix a C# program?

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();
        }
    }
}

The problem is this, I wrote a code that should output 0 if even and odd numbers alternate in the array, if they do not alternate, then display the index of the last member on which the pattern is violated, but in my code, if even and odd numbers alternate in the array, then nothing is displayed, but if on the turn, then the last term is displayed as it should
5c3afbaab9e78784248723.png

Answer the question

In order to leave comments, you need to log in

3 answer(s)
D
Denis Gaydak, 2019-01-13
@MrMureno

sashka_amelin32 , bro, if you're doing a lab on simple arrays and you "have been sitting for a long time and can't understand what the problem is"
then either you don't get enough sleep or you don't understand what you're doing at all.
and to scoff when they tell you that they don’t really want to solve this for you) all the more it’s not necessary))
but in fact look in the debugger for the order in which the commands are executed)

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

use the debugger to get to this point. look at what i and mas.Length are equal to
and, in principle, step by step with the debugger and see where it fails, does not enter the condition or jumps.
good luck with your studies)

P
pfemidi, 2019-01-13
@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();
        }
    }
}

M
Maxim Isaev, 2019-01-13
@MaximIs

if (mas[i] % 2 == 0 && mas[i - 1] % 2 != 0 || mas[i] % 2 != 0 && mas[i - 1] % 2 == 0) continue;

Here you say, if the current and previous values ​​\u200b\u200bare even and odd, then we check the next combination due to the fact that we wrote the continue command
I would even write this
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();
        }
    }
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question