Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2012, 22:10   #1
prettynetty
Пользователь
 
Регистрация: 03.03.2012
Сообщений: 11
Вопрос ферзь. символьная матрица. некорректная работа

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

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



Код:
#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[i][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[i][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[i][j]);
      printf("\n");
   }
return 0;}
prettynetty вне форума Ответить с цитированием
Старый 06.07.2012, 22:56   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно просто в циклах по вертикалям и горизонталям пройтись
Код:
	if (n>9 || n<0 || m>9 || m<0)
	{
		printf("Неверный ввод");
		return 0;
	}

	i=m;for (j=n; j<8; j++)  if (i<8) a[i++][j]='*';
	i=m;for (j=n; j>=0; j--) if (i>=0) a[i--][j]='*';

	i=m;for (j=n; j<8; j++)  if (i>=0) a[i--][j]='*';
	i=m;for (j=n; j>=0; j--) if (i<8) a[i++][j]='*';

	for (i=0;i<8;i++) a[i][n]='*';
	for (i=0;i<8;i++) a[m][i]='*';

	a[m][n]='ф';

	for (i=0; i<k; i++)
	{
		for (j=0; j<k; j++)
		printf("%c", a[i][j]);
		printf("\n");
	}
eoln вне форума Ответить с цитированием
Старый 07.07.2012, 08:17   #3
prettynetty
Пользователь
 
Регистрация: 03.03.2012
Сообщений: 11
По умолчанию

огромное спасибо
prettynetty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
символьная матрица as1212 Помощь студентам 0 27.11.2011 15:39
символьная матрица as1212 Помощь студентам 3 12.11.2011 20:39
символьная матрица as1212 Помощь студентам 0 12.11.2011 17:33
Задана символьная матрица размером NxM Sergey Zhlobo Общие вопросы Delphi 5 21.06.2011 00:12