Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 25.12.2017
Сообщений: 40
1

Шахматная доска. Как убрать ошибки в коде?

28.09.2018, 11:56. Просмотров 1756. Ответов 11

Добрый день! Задача: Дана шахматная доска размером nn клеток. Верхняя левая клетка доски черная и имеет номер (1, 1). 1.для заданного значения n определить количество черных ячеек шахматной доски; 2.по номеру ячейки (k, m) определить ее цвет; 3.определить, являются ли ячейки с номерами (k1, m1) и (k2, m2) одного цвета; 4.определить, находится ли фигура, стоящая в ячейке с номером (k1, m1), под ударом второй фигуры, стоящей в ячейке с номером (k2, m2), при условии, что ход второй фигуры и ей является: a) пешка; b) слон; c) ладья; d) ферзь; e) конь.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Console.Write("Размерность доски: ");
            int n = int.Parse(Console.ReadLine());
            if (n % 2 == 0) Console.WriteLine("Черных: {0}", n / 2 * n);
            else Console.WriteLine("Черных: {0}", (n - 1) / 2 * (n-1) + n);
yach:       Console.Write("k = ");
            int k = int.Parse(Console.ReadLine());
            Console.Write("m = ");
            int m = int.Parse(Console.ReadLine());
            switch(colour(k,m,n)){
                case 0: Console.WriteLine("Ячейка {0}x{1} - черная", k, m); break;
                case 1: Console.WriteLine("Ячейка {0}x{1} - белая", k, m); break;
                case 2: Console.WriteLine("Такой ячейки нет, попробуйте ввести другую");
                    goto yach;
            }
            Console.WriteLine("k1 = ");
            int k1 = int.Parse(Console.ReadLine());
            Console.WriteLine("m1 = ");
            int m1 = int.Parse(Console.ReadLine());
yach2:      if !(k1 <= n && m1 <= n)
{
                Console.WriteLine("Такой ячейки нет, попробуйте ввести другую");
                goto yach2;
            }
            if (colour(k, m, n) == colour(k1, m1, n)) Console.WriteLine("Ячейки {0}x{1} и {2}x{3} одинаковые");
            else Console.WriteLine("Ячейки {0}x{1} и {2}x{3} разные");
        }
        static int colour(int k, int m, int n)
        {
            if (k <= n && m <= n)
            {
                if ((k + m) % 2 == 0) return 0;
                else return 1;
            }
            else return 2;
        }
    }
}
Как убрать ошибки в коде?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2018, 11:56
Ответы с готовыми решениями:

Шахматная доска, найти ошибки в коде
Здравствуйте, нужно вывести шахматную доску, у меня куча ошибок и я не могу никак сделать //...

Полосы, кубики (как шахматная доска) мелькают!
Здравствуйте......случилась проблема...после того как брат оставил ноутбук на кровати...

Описать тип «шахматная доска» как символьную матрицу.
Описать тип «шахматная доска» как символьную матрицу. Ввести положение ферзя и обозначить символом...

Дана шахматная доска NxN как поставить на ней N ферзей чтоб они не рубили друг друга
Дана шахматная доска NxN как поставить на ней N ферзей чтоб они не рубили друг друга? N задается...

11
Модератор
8603 / 5932 / 1690
Регистрация: 21.04.2018
Сообщений: 17,638
Записей в блоге: 2
28.09.2018, 13:25 2
Цитата Сообщение от Lidasag Посмотреть сообщение
Как убрать ошибки в коде?
Ошибки какие? Компиляции, исполнения, алгоритма? Конкретнее напишите какие ошибки, где и в каких случаях возникают.
0
1 / 1 / 0
Регистрация: 25.12.2017
Сообщений: 40
28.09.2018, 13:30  [ТС] 3
Все выводится , но консоль сразу закрывается. Пробовала уже и врайтлай и кей, ридлайн, ридкей...
0
799 / 548 / 237
Регистрация: 01.07.2018
Сообщений: 1,810
28.09.2018, 13:45 4
Lidasag, Это что у вас ?
C#
1
if !(k1 <= n && m1 <= n)
0
1405 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,321
Записей в блоге: 1
28.09.2018, 14:06 5
мне больше всего интересно что делает вот этот код
Цитата Сообщение от Lidasag Посмотреть сообщение
yach:
и вот этот
Цитата Сообщение от Lidasag Посмотреть сообщение
yach2:
это новая функция в C# или просто дичь от автора кода?
0
799 / 548 / 237
Регистрация: 01.07.2018
Сообщений: 1,810
28.09.2018, 14:10 6
V_Monomax, Это далеко не новая функция https://msdn.microsoft.com/ru-... (v=vs.120)
0
1405 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,321
Записей в блоге: 1
28.09.2018, 14:22 7
я конечно понимаю что ":" - это наследование, либо в литералах его можно встретить, но такое его применение здесь и не оправдано, да и код засоряет, так что это здесь лишнее.

Добавлено через 8 минут
Это я к чему, использование иди туда, ну вообще не оправдано, только код засоряет, это конечно привет бейсикам, и до свидания ООП. Зачем вам нужен C# с его подходом ООП, если вы его не используете? Зачем вам нужен тогда C#, если из бейсика вырасти не можете? Конечно применять все средства заложенные в языке хорошо, но только в тех случаях когда это оправдано. А при вашем подходе, очень похоже, существует проблема зацикливания (вываливаетесь по переполнению стека, либо подобная ей проблема). Так что ваш код надо рефакторить, что-бы в первую очередь вы могли перечитывать его). Не говорю уж о других (хотя другим вы будете тогда когда через более чем месяц будете сидеть и читать свой же код, и не понимать что к чему).
0
1 / 1 / 0
Регистрация: 25.12.2017
Сообщений: 40
28.09.2018, 14:47  [ТС] 8
Код не мой. Мне без разницы что там написано, мне надо чтоб окно не уходило, после окончания программы
0
Модератор
8603 / 5932 / 1690
Регистрация: 21.04.2018
Сообщений: 17,638
Записей в блоге: 2
28.09.2018, 14:58 9
Цитата Сообщение от Lidasag Посмотреть сообщение
Все выводится , но консоль сразу закрывается. Пробовала уже и врайтлай и кей, ридлайн, ридкей...
То есть сам участок с этим кодом работает? Нет только ожидания перед закрытием окна консоли. Но в этом участке кода нет ни каких ожиданий. Вы пишите пробовали "врайтлай и кей, ридлайн". А как Вы пробовали?
Если вставить в конец Вашего кода после всех команд
C#
1
2
            Console.Write("  Для выхода нажмите любую клавишу ..... ");
            Console.ReadKey();
будет работать или нет?
Вы проверяли в Debug до Ваших команд ожидания доходит исполнение или происходит аварийное закрытие окна? Но при аварийном должно выдать исключение.
0
799 / 548 / 237
Регистрация: 01.07.2018
Сообщений: 1,810
28.09.2018, 15:10 10
Элд Хасп, Да конечно он не будет работать. там синтаксические ошибки. Тут
C#
1
!(k1 <= n && m1 <= n)
тут
C#
1
Console.WriteLine("Ячейки {0}x{1} и {2}x{3} разные");
тут вообще зацикливание
C#
1
2
3
4
yach2:      if !(k1 <= n && m1 <= n)
{
                Console.WriteLine("Такой ячейки нет, попробуйте ввести другую");
                goto yach2;
0
177 / 151 / 31
Регистрация: 28.09.2018
Сообщений: 204
28.09.2018, 15:16 11
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
            Console.Write("Размерность доски: ");
            int n = int.Parse(Console.ReadLine());
            if (n % 2 == 0)
            {
                Console.WriteLine("Черных: {0}", n / 2 * n);
            }
            else
            {
                Console.WriteLine("Черных: {0}", (n - 1) / 2 * (n - 1) + n);
            }
      yach: Console.Write("k = ");
            int k = int.Parse(Console.ReadLine());
            Console.Write("m = ");
            int m = int.Parse(Console.ReadLine());
            switch (colour(k, m, n))
            {
                case 0:
                {
                    Console.WriteLine("Ячейка {0}x{1} - черная", k, m);
                    break;
                }
                case 1:
                {
                    Console.WriteLine("Ячейка {0}x{1} - белая", k, m);
                    break;
                }
                case 2:
                {
                    Console.WriteLine("Такой ячейки нет, попробуйте ввести другую");
                    goto yach;
                }
            }
     yach2: Console.WriteLine("k1 = ");
            int k1 = int.Parse(Console.ReadLine());
            Console.WriteLine("m1 = ");
            int m1 = int.Parse(Console.ReadLine());
            if (!(k1 <= n && m1 <= n))
            {
                Console.WriteLine("Такой ячейки нет, попробуйте ввести другую");
                goto yach2;
            }
 
            if (colour(k, m, n) == colour(k1, m1, n))
            {
                Console.WriteLine("Ячейки {0}x{1} и {2}x{3} одинаковые", k, m, k1, m1);
            }
            else
            {
                Console.WriteLine("Ячейки {0}x{1} и {2}x{3} разные", k, m, k1, m1);
 
            }
            Console.ReadKey();
        }
        static int colour(int k, int m, int n)
        {
            if (k <= n && m <= n)
            {
                if ((k + m) % 2 == 0)
                {
                    return 0;
                }
                return 1;
            }
            return 2;
        }
Вроде всё работает
1
Модератор
8603 / 5932 / 1690
Регистрация: 21.04.2018
Сообщений: 17,638
Записей в блоге: 2
28.09.2018, 15:18 12
Цитата Сообщение от PoPsa85 Посмотреть сообщение
Да конечно он не будет работать. там синтаксические ошибки. Тут
Я не смотрел код. Так как автор Lidasag утверждаете, что всё работает как ему надо.
Только проблема с ожиданием перед закрытием окна.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2018, 15:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Шахматная доска
Пусть на шахматной доске заданы два поля: p1 и p2. Определите, какая из шахматных фигур при...

Шахматная доска
Как можно создать шахматную доску с помощью кода? Какие лучше использовать элементы? Как...

Шахматная доска
Ребята, помогите! Есть код на С++, выводящий на экран шахматную доску, нужно его дополнить...

Шахматная доска
На шахматной доске стоят слон и конь,причём так,что слон не нападает на коня. На вход программы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.