Поля, Под Угрозой Ферзя

Тема в разделе "C/C++/C#", создана пользователем prettynetty, 6 июл 2012.

  1. prettynetty

    prettynetty Гость

    Visual C++
    Шахматную доску будем представлять символьной матрицей размера 8 x 8. Даны натуральные числа n и m (1< n <8; 1<m < 8) – номера вертикали и горизонтали, определяющие местоположение ферзя. Соответствующий элемент матрицы надо положить равным символу Ф. Поля, находящиеся под угрозой ферзя, надо положить равными символу *, а остальные поля – символу 0.

    Программа работает. но как то не правильно работает :)
    буду благодарна за помощь

    <!--shcode--><pre><code class='sql'>#include<stdio.h>
    #include<windows.h>


    main(){
    SetConsoleOutputCP(1251);
    const int k=8;
    int i, j, m, n;
    char a[k][k];
    for(i=0; i<k; i++)
    for(j=0; j<k; j++)
    a[j]='0';
    printf("Введите номер по вертикали и горизонтали(от 1 до 8)");
    scanf("%d%d", &n,&m);
    m--;
    n--;
    if (n>9 || n<0 || m>9 || m<0){printf("Неверный ввод");return 0;}
    a[m][n]='ф';
    for (i=0; i<k; i++)
    for (j=0; j<k; j++)
    if(i==m || j==n)
    a[j]='*';
    printf("n=%d; m=%d\n", n, m);

    if(m>=n)//ВЕРХНИЙ ЛЕВЫЙ
    if(m!=0 && n!=0)
    for (i=0; i<=n; i++)
    a[m-i][n-i]='*';
    if(n>m) if(m!=0 && n!=0)
    for (i=0; i<=m; i++)
    a[m-i][n-i]='*';

    if(m>=n)//НИЖНИЙ ЛЕВЫЙ//
    if(m!=7 && n!=0)
    for (i=0; i<m; i++)//i<=m
    a[m+i][n-i]='*';
    if(n>m)
    if(m!=7 && n!=0)
    for (i=0; i<n; i++)//i<=n
    a[m+i][n-i]='*';

    if(m>=n)//ВЕРХНИЙ ПРАВЫЙ
    if(m!=0 && n!=7)
    for (i=0; i<=m; i++)
    a[m-i][n+i]='*';
    if(n>m) if(m!=7 && n!=0)
    for (i=0; i<=8; i++)
    a[m-i][n+i]='*';

    if(m>=n)//НИЖНИЙ ПРАВЫЙ
    if(m!=7 && n!=7)
    for (i=0; i<(8-m); i++)
    a[m+i][n+i]='*';
    if(n>m) if(m!=7 && n!=7)
    for (i=0; i<(8-n); i++)
    a[m+i][n+i]='*';
    printf("\n");
    a[m][n]='ф';
    for (i=0; i<k; i++){
    for (j=0; j<k; j++)
    printf("%c", a[j]);
    printf("\n");
    }
    return 0;}[/CODE]
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
        for(i=0; i<N; i++) {
    a[n][i]='*';
    a[i][m]='*';
    if( (n - i) >= 0 ) {
    if( ( m - i ) >= 0 )
    a[n-i][m-i] = '*';
    if( ( m + i ) < N )
    a[n-i][m+i] = '*';
    }
    if( (n + i) < N ) {
    if( ( m - i ) >= 0 )
    a[n+i][m-i] = '*';
    if( ( m + i ) < N )
    a[n+i][m+i] = '*';
    }
    }
    a[n][m] = 'f';
     
  3. prettynetty

    prettynetty Гость

    Спасибо:)
     
Загрузка...

Поделиться этой страницей