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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2009, 08:20   #1
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию Не могу найти две ошибки.

Здравствуйте!
Проблема в названии темы.Программа определения цвета шахматного поля.
Код:
Код:
#include <iostream.h>

class doska 
{
	private:
		int simvol;
		int number;  
		int polya [7] [7];
	public:
		int vvod ();
		int obrabotka (int q,int w);
		doska ();
		~doska ();
};

doska:: doska ()
{
	int pr_one=0;
	int pr_two=0;
	int cwet=0;
	int cvet [2];
	cvet [0]=1;
	cvet [1]=2;
	for (int x=0;x<63;x++)
	{
		polya [pr_one] [pr_two]= cvet [cwet];
		pr_two++,cvet [cwet++];
		if (cwet >=1)
		{
			cwet=0;	
		}
		if (pr_two>=7)
		{
			pr_one++;
			pr_two=0;
		}
		if (pr_one==7)
		{
			break;
		}
	}
	cout << "Ready!";
}
doska:: ~doska ()
{
 cout << "Delete"; 	   
}

int doska:: vvod ()
{
	cout << "Enter simvol and number:";
	cin >> simvol;
	cin >> number;
	return simvol,number;
}

int doska:: obrabotka (int q,int w)
{
	int color;
	color=polya [q] [w];
	return color;
}

void main ()
{
	doska ww;
	int s,n;
	cout << "Enter simvol and number:";
	cin >> s,n;
	ww.vvod();
	ww.obrabotka(s,n);
	cout << "";
}
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.

Последний раз редактировалось Stilet; 21.10.2009 в 11:40.
Lunex.08 вне форума Ответить с цитированием
Старый 16.10.2009, 08:29   #2
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Уже с ошибками разобрался)Хоть прога и не корректна.Буду исправлять.Спасибо за внимание!
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
Lunex.08 вне форума Ответить с цитированием
Старый 20.10.2009, 11:06   #3
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Код:
#include <iostream.h>

class doska 
{
	private:
		int simvol;	 
		int number; 
		int polya [7] [7];
	public:
		int vvod (int one,int two);
		int obrabotka ();
		doska ();
	
};

doska:: doska ()
{
	int pr_one=0;
	int pr_two=0;
	int cwet=0;
	int cvet [2];
	cvet [0]=1;
	cvet [1]=2;
	for (int x=0;x<63;x++)
	{
		polya [pr_one] [pr_two]= cvet [cwet];
		pr_two++,cvet [cwet++];
		if (cwet >=1)
		{
			cwet=0;	
		}
		if (pr_two>=7)
		{
			pr_one++;
			pr_two=0;
		}
		if (pr_one==7)
		{
			break;
		}
	}
	cout << "One second.....";
}

int doska:: vvod (int one,int two)
{
	simvol=one;
	number=two;
	return 0;
}

int doska:: obrabotka ()
{
	int color;
	color=polya [simvol] [number];
	return color;
}

void main ()
{
	doska ww;
	int s,n;
	cout << "Enter simvol and number:";
	cin >> s,n;
	ww.vvod (s,n);
	cout << ww.obrabotka ();
	cout << "";
}
Вот ошибок нет.Но так и не нашел причину некорректности работы программы.Помогите пожалста.
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.

Последний раз редактировалось Stilet; 20.10.2009 в 11:32.
Lunex.08 вне форума Ответить с цитированием
Старый 20.10.2009, 21:59   #4
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Это работает. но выводит код цвета 2 или 1, для поля 7х7
Код:
#include <iostream.h>
#include <conio.h>
class doska
{
	private:
		int simvol;
		int number;
		int polya [7] [7];
	public:
		int vvod (int one,int two);
		int obrabotka ();
		doska ();
	        void setdoska();
};

doska:: doska ()
{
	//int pr_one=0;
	//int pr_two=0;
	//int cwet=0;
	int cvet [2]={1,2};
       //	cvet [0]=1;
       //	cvet [1]=2;
	//for (int x=0;x<63;x++)
        for (int i=0;i<7;i++)
        for (int j=0;j<7;j++)
         {
         if(((i%2==0)&&(j%2==0))||((i%2!=0)&&(j%2!=0)))
          polya[i][j]= cvet[0];
         else
          polya[i][j]= cvet[1];
         }



	/*{
		polya [pr_one] [pr_two]= cvet [cwet];
		pr_two++,cvet [cwet++];
		if (cwet >=1)
		{
			cwet=0;
		}
		if (pr_two>=7)
		{
			pr_one++;
			pr_two=0;
		}
		if (pr_one==7)
		{
			break;
		}
	}
	cout << "One second....."; */
}

int doska:: vvod (int one,int two)
{
	simvol=one;
	number=two;
	return 0;
}

int doska:: obrabotka ()
{
	int color;
	color=polya [simvol] [number];
	return color;
}

void main ()
{
	doska ww;
	int s,n;
	cout << "Enter simvol and number:";
	cin >> s>>n;
	ww.vvod (s,n);
	cout << ww.obrabotka ();
        getch();
}
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Старый 21.10.2009, 11:31   #5
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Объясните пожалста как работает следующий блок кода:
Цитата:
for (int i=0;i<7;i++)
for (int j=0;j<7;j++)
{
if(((i%2==0)&&(j%2==0))||((i%2!=0)& &(j%2!=0)))
polya[i][j]= cvet[0];
else
polya[i][j]= cvet[1];
}
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
Lunex.08 вне форума Ответить с цитированием
Старый 21.10.2009, 11:50   #6
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Код:
for (int i=0;i<7;i++)
-задаем перебор полей по строкам (0, 1 ..6)
т.е сначала установили строку 0
далее
Код:
for (int j=0;j<7;j++)
--задаем перебор полей по столбцам данной строки, т.е просматриваем 0, 1 ..6-ю клетку в 0-й строке, при этом анализируем
Код:
if(((i%2==0)&&(j%2==0))||((i%2!=0)& &(j%2!=0)))
, т.е если индекс клетки (строка-i делится без остатка на 2 и столбец j делится без остатка на 2), т.е в четных строках выбираем четные клетки, или для нечетных строк выбираем нечетные клетки(строка-i не делится без остатка на 2 и столбец j не делится без остатка на 2), цвету присваиваем значение 1, иначе присваиваем значение 2.
После этого значение i увеличивается на 1, т.е. устанавливается 1-я строка и все повторяется сначала и так будет продолжаться пока i не станет равным 7.
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось Sweta; 21.10.2009 в 12:19.
Sweta вне форума Ответить с цитированием
Старый 21.10.2009, 13:02   #7
Chea
 
Регистрация: 28.09.2009
Сообщений: 4
По умолчанию

Как то сложновато.

По поводу кода lunex

Ошибка скорей всего в том что вы массив объявляли 7*7=49
а в цикле обрабатывали 64 значения - переполнение ведет к ошибкам


По поводу заполнения поля
Код:
h=1;
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
polya[i][j]= cvet[h];
h=1-h;
}
h=1-h;
}
при условии что массив 8х8

Последний раз редактировалось Sazary; 21.10.2009 в 22:53.
Chea вне форума Ответить с цитированием
Старый 21.10.2009, 13:25   #8
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
Смех

Цитата:
Как то сложновато.

По поводу кода lunex

Ошибка скорей всего в том что вы массив объявляли 7*7=49
а в цикле обрабатывали 64 значения - переполнение ведет к ошибкам


По поводу заполнения поля
h=1;
for (i=0;i<8;i++)
{
for (j=0;j<8;j++)
{
polya[i][j]= cvet[h];
h=1-h;
}
h=1-h;
}

при условии что массив 8х8
Как раз с индексом все правильно.Если бы инициализация начиналась с 1,тогда вы были бы правы.Но щас инициализация идет с 0,включая его самого.В итоге получаем 8.Все элементарно ватцен
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.
Lunex.08 вне форума Ответить с цитированием
Старый 21.10.2009, 13:27   #9
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Sweta,спасибо за помощь и дохотчивость.Все понятно и кратко)+ к репутации
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.

Последний раз редактировалось Lunex.08; 22.10.2009 в 13:02.
Lunex.08 вне форума Ответить с цитированием
Старый 21.10.2009, 17:58   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от Lunex.08 Посмотреть сообщение
Как раз с индексом все правильно.Если бы инициализация начиналась с 1,тогда вы были бы правы.Но щас инициализация идет с 0,включая его самого.В итоге получаем 8.Все элементарно ватцен
Между прочим Chea дал верное замечание ) У Вас двумерный массив размерностью 7х7, то есть в сумме 49 ячеек. Единственная причина, по которой не происходит переполнение - это break при pr_one == 7. Счётчик в цикле никогда не достигнет значения 63, более того, если хотите заполнять массив 8х8, то счётчик должен быть ограничен не как x < 63, а как x < 64 или x <= 63.
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибки в задачах Кипятилка Помощь студентам 4 01.07.2009 17:58
Помогите, пожалуйста, не могу исправить ошибки bunya Общие вопросы C/C++ 7 14.01.2009 22:28
Две ошибки Crivel Помощь студентам 10 31.07.2008 12:18
Не могу добавить две серии в Chart snake-as Общие вопросы Delphi 2 19.05.2008 09:04