0 / 0 / 0
Регистрация: 02.02.2018
Сообщений: 1
1

Программирование на Си. Прошу найти ошибку в коде. 8 Ферзей

02.02.2018, 13:36. Показов 526. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пользователь вводит координаты первого ферзя, а по итогам программы получает напечатанную таблицу где:
2- Ферзи
1- Точки которым ферзи угрожают ферзи
0 - Девственные нули.

Программа по каким-то не понятным причинам не хочет работать, помогите прошу, пока код проверял все глаза стер, а ошибку
все равно не могу найти. Сделал кучу пометок, чтобы было легче разобраться, заранее спасибо за помощь.

Сама задача для которой написан этот код https://ru.wikipedia.org/wiki/... ьми_ферзях


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
#include <stdio.h>
#define SIZE 8 //константа для дальнейшей работы
int Ar[SIZE][SIZE] = { 0 }; //создание матрицы-шахматной доски и инициализация всех ячеек нулями
int S[1] = { 1 };   //создание счетчика
void Qf(int, int, int); 
main() {
    int r = -1, n = -1;
    while (r < 0 || r >= SIZE) {   //прием от пользователя координат первого ферзя
        printf("Row: ");             // и проверка на вменяемость полученных данных
        scanf_s("%d", &r);
    }
    while (n < 0 || n >= SIZE) {
        printf("Column: ");
        scanf_s("%d", &n);
    }
    Ar[r][n] = 2;    //занимаем ячейку ферзем т.е. 2
    Qf(r, n, 1);   //вызываем основную ф-цию
    system("pause");
    return 0;
}
void Qf(int r, int n, int move) {
    if (move == SIZE) { //проверка на то стоят ли 8 ферзей на доске уже, если да то:
        for (int i = 0; i < SIZE; i++) { //вывод матрицы
            printf("\n");
            for (int j = 0; j < SIZE; j++)
                printf("%d ", Ar[i][j]);
        }
        S[0]++;  //изменить счетчик выведенных матриц на 1
        printf("\n\n"); 
        
    
    }
    else { //иначе:
        
        int a, b;
        for (a = r + 1, b = n + 1; a < SIZE && b < SIZE; a++, b++) Ar[a][b] = 1; //заполнение диагоналей 1-ми для  
        for (a = r - 1, b = n - 1; a >= 0 && b >= 0; a--, b--) Ar[a][b] = 1; //блокировки ячеек которым угрожает
        for (a = r - 1, b = n + 1; a >= 0 && b < SIZE; a--, b++) Ar[a][b] = 1; // текущий ферзь
        for (a = r + 1, b = n - 1; a < SIZE && b >= 0; a++, b--) Ar[a][b] = 1;
 
        for (a = r + 1; a < SIZE; a++) Ar[a][n] = 1;  //аналогичная блокировка вертикали и горизонтали 1-ми
        for (a = r - 1; a >= 0; a--) Ar[a][n] = 1;
        for (b = n + 1; b < SIZE; b++) Ar[r][b] = 1;
        for (b = n - 1; b >= 0; b--) Ar[r][b] = 1;
 
 
        for (int i = 0; i < SIZE && S[0] == 1; i++)  //проверка счетчика выведенных матриц и
            for (int j = 0; j < SIZE && S[0] == 1; j++) //если ячейка не является ферзем или не один из уже
                if (Ar[i][j] == 0) { //поставленных ферзей не угрожает ей, то поставить след. ферзя на ее место
                    Ar[i][j] = 2;
                    Qf(i, j, move + 1); //вызов рекурс. ф-ции с новыми данными для работы
                    Ar[i][j] = 0; //когда вызв. ф-ция закончит свою работу обнулить ячейку, т.к. след ячейка в цике ни 
                } //как не сможет иметь такие же координаты... (Освобождение ячейки)
 
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2018, 13:36
Ответы с готовыми решениями:

Прошу найти ошибку в коде
Помогите найти ошибку.Программа запускается, но выдаёт ошибку: »*&quot;Ошибка: Слишком много вложенных...

Прошу найти ошибку в коде.
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void f1(float *a,int n,float *c, int t) {int i; float...

Прошу найти ошибку в данном коде
#include &quot;stdafx.h&quot; #include&lt;fstream&gt; #include&lt;string&gt; #include&lt;cmath&gt; #include&lt;stdlib.h&gt; ...

не могу найти ошибку в коде. прошу помощи
накрылся сенсорный кран в ванной,используя его клапан(управляется подачей импульса прямой и...

1
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
07.02.2018, 02:34 2
Цитата Сообщение от fungusorg Посмотреть сообщение
#define SIZE 8 //константа для дальнейшей работы
В Си давно уже ввели константы

C
1
const int SIZE = 8;
Если кому интерессно, отформатированный код

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
66
67
68
69
70
71
72
#include <stdio.h>
 
const int SIZE = 8;
 
int Ar[SIZE][SIZE] = {0}; //создание матрицы-шахматной доски и инициализация всех ячеек нулями
int S[1] = {1};           //создание счетчика
 
void Qf(int, int, int);
 
int main()
{
    int r = -1, n = -1;
    while (r < 0 || r >= SIZE)
    {                    //прием от пользователя координат первого ферзя
        printf("Row: "); // и проверка на вменяемость полученных данных
        scanf("%d", &r);
    }
    while (n < 0 || n >= SIZE)
    {
        printf("Column: ");
        scanf("%d", &n);
    }
    Ar[r][n] = 2; //занимаем ячейку ферзем т.е. 2
    Qf(r, n, 1);  //вызываем основную ф-цию
    return 0;
}
 
void Qf(int r, int n, int move)
{
    if (move == SIZE)
    { //проверка на то стоят ли 8 ферзей на доске уже, если да то:
        for (int i = 0; i < SIZE; i++)
        { //вывод матрицы
            printf("\n");
            for (int j = 0; j < SIZE; j++)
                printf("%d ", Ar[i][j]);
        }
        S[0]++; //изменить счетчик выведенных матриц на 1
        printf("\n\n");
    }
    else
    { //иначе:
 
        int a, b;
        for (a = r + 1, b = n + 1; a < SIZE && b < SIZE; a++, b++)
            Ar[a][b] = 1; //заполнение диагоналей 1-ми для
        for (a = r - 1, b = n - 1; a >= 0 && b >= 0; a--, b--)
            Ar[a][b] = 1; //блокировки ячеек которым угрожает
        for (a = r - 1, b = n + 1; a >= 0 && b < SIZE; a--, b++)
            Ar[a][b] = 1; // текущий ферзь
        for (a = r + 1, b = n - 1; a < SIZE && b >= 0; a++, b--)
            Ar[a][b] = 1;
 
        for (a = r + 1; a < SIZE; a++)
            Ar[a][n] = 1; //аналогичная блокировка вертикали и горизонтали 1-ми
        for (a = r - 1; a >= 0; a--)
            Ar[a][n] = 1;
        for (b = n + 1; b < SIZE; b++)
            Ar[r][b] = 1;
        for (b = n - 1; b >= 0; b--)
            Ar[r][b] = 1;
 
        for (int i = 0; i < SIZE && S[0] == 1; i++)     //проверка счетчика выведенных матриц и
            for (int j = 0; j < SIZE && S[0] == 1; j++) //если ячейка не является ферзем или не один из уже
                if (Ar[i][j] == 0)
                { //поставленных ферзей не угрожает ей, то поставить след. ферзя на ее место
                    Ar[i][j] = 2;
                    Qf(i, j, move + 1); //вызов рекурс. ф-ции с новыми данными для работы
                    Ar[i][j] = 0;       //когда вызв. ф-ция закончит свою работу обнулить ячейку, т.к. след ячейка в цике ни
                }                       //как не сможет иметь такие же координаты... (Освобождение ячейки)
    }
}
0
07.02.2018, 02:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2018, 02:34
Помогаю со студенческими работами здесь

Двумерный массив. Поиск нулей.Не могу найти ошибку ошибку в коде
Вот,например массив 5 5 0 1 0 1 0 1 1 1 1 1 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 считываются два...

Прошу найти ошибку
Почему не выводить хэш? &lt;html&gt; &lt;head&gt; &lt;title&gt;123&lt;/title&gt; &lt;SCRIPT...

Прошу найти ошибку...
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; int main(void) { const int n=5; int a, i, j, b;...

прошу знатаков найти ошибку
вот текст задания для понимания что я понаписал ЛАБОРАТОРНАЯ РАБОТА № 2 РЕАЛИЗАЦИЯ РЕГУЛЯРНЫХ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru