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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2010, 10:32   #1
iehf
Пользователь
 
Регистрация: 30.03.2010
Сообщений: 12
По умолчанию Программа на С++. Покритикуйте код, будьте добры))

Один человек, обозвал этот код ужастным. Чесно говоря, особого ужаса в нем я не вижу, хоть убейте.

Программа - однорукий бандит. Реализовано очередями, реализована имитация многопоточности. Все три барабана живут собственной жизнью, крутятся независимо друг от друга.

Если не жалко - покритикуйте пожалуйста. Укажите где именно проблемы с оптимизацией. Только просьба одна, давайте по делу.

Код:
#include<iostream.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<stdio.h>


class hand
{
	char **s1;
	char **s2;
	char **s3;
	int MaxLenght;
	int len;
	int two;
	int three;
public:
	hand();
	~hand();
	void baraban();
	void push(int q=1);
	char hand::extract_s1();
	char hand::extract_s2();
	char hand::extract_s3();
	void show(int z=0);
};

hand::hand()
{
	MaxLenght=7;
	s1=new char *[8];
	s2=new char *[8];
	s3=new char *[8];
	len=0;		
}

hand::~hand()
{
	delete []s1;
	delete []s2;
	delete []s3;
}
void hand::baraban()
{
	int i;
	for(i=0;i<8;i++)
	{
		s1[i]=new char[256];
	}
		s1[len]="  вишня   ";
		s1[len+1]="  слива   ";
		s1[len+2]=" виноград ";
		s1[len+3]="  арбуз   ";
		s1[len+4]="  лимон   ";
		s1[len+5]=" апельмон ";
		s1[len+6]="   семь   ";
		s1[len+7]="          ";


	for(i=0;i<8;i++)
	{
		s2[i]=new char[256];
	}
		strcpy(s2[len],s1[len]);
		strcpy(s2[len+1],s1[len+1]);
		strcpy(s2[len+2],s1[len]+2);
		strcpy(s2[len+3],s1[len+3]);
		strcpy(s2[len+4],s1[len+4]);
		strcpy(s2[len+5],s1[len+5]);
		strcpy(s2[len+6],s1[len+6]);
		strcpy(s2[len+7],s1[len+7]);

	for(i=0;i<8;i++)
	{
		s3[i]=new char[256];
	}
		strcpy(s3[len],s1[len]);
		strcpy(s3[len+1],s1[len+1]);
		strcpy(s3[len+2],s1[len]+2);
		strcpy(s3[len+3],s1[len+3]);
		strcpy(s3[len+4],s1[len+4]);
		strcpy(s3[len+5],s1[len+5]);
		strcpy(s3[len+6],s1[len+6]);
		strcpy(s3[len+7],s1[len+7]);

	
}
void hand::push(int q)
{
	two=0;
	three=0;
	int i,j,k,B,N,s_1,s_2,s_3,kk=0,z=0;
	int Z=q;
	while(z<Z)
	{
	N=rand()%7+6;
	B=7;
	s_1=rand()%7+1;
	s_2=rand()%7+1;
	s_3=rand()%7+1;
	printf("Z=%d\tz=%d",Z,z);
		for(i=0;i<N;i++)
		{
		
			for(j=0;j<B;j++)
			{
				if(s_1>i)
				{
					extract_s1();
				}
					else if(s_1==i)
					{
						B=s_1;
						extract_s1();
					}
				if(s_2>=i)
				{
					extract_s2();
		
				}
					else if(s_1==i)
					{
						B=s_2;
						extract_s1();
					}
				if(s_3>=i)
				{
					extract_s3();
				}
					else if(s_1==i)
					{
						B=s_3;
						extract_s1();
					}
				printf("\n\n\n\n\t\t%s\t%s\t%s\n",s1[0],s2[0],s3[0]);
					for(k=0;k<50000000;k++)
					{
						kk=kk+1;
					}
				system("cls");	
			}
		}
		printf("\n\n\n\n\t\t%s\t%s\t%s\n",s1[0],s2[0],s3[0]);
		if(!strcmp(s1[0],s2[0]))
		{
			if(!strcmp(s1[0],s3[0]))
			{
				printf("Три совпадения\n");
				three++;
			}
			else
			{
				printf("Два совпадения\n");
				two++;
			}
	
		}
			else if(!strcmp(s2[0],s3[0]))
			{
				if(!strcmp(s1[0],s3[0]))
				{
					printf("Три совпадения\n");
					three++;
				}
				else
				{
					printf("Два совпадения\n");
					two++;
				}
			}
				else if(!strcmp(s1[0],s3[0]))
				{
					if(!strcmp(s1[0],s2[0]))
					{
						printf("Три совпадения\n");
						three++;
					}
					else
					{
						printf("Два совпадения\n");
						two++;
					}
				}
				else
				{
					printf("Нету ни одного совпадения.\n");
				}
				z++;
	}
	printf("\nВ течении игры у Вас было \nтри совпадения: %d\nдва совпадения: %d\n\n", three, two);

}
char hand::extract_s1()
{
	char tmp[11];
	
	s1[7]=s1[0];
	for(int i=1;i<7;i++)
	{
		s1[i-1]=s1[i];
	}
	s1[6]=s1[7];

	return tmp[11];
}
char hand::extract_s2()
{
	char tmp[11];
	
	s2[7]=s2[0];
	for(int i=1;i<7;i++)
	{
		s2[i-1]=s2[i];

	}
	s2[6]=s2[7];

	return tmp[11];
}
char hand::extract_s3()
{
	char tmp[11];
	strcpy(tmp,s3[0]);
	//strcpy(s3[7],s3[0]);
	for(int i=1;i<7;i++)
	{
		strcpy(s3[i-1],s3[i]);

	}
	strcpy(s3[6],tmp);
//	strcpy(s3[6],s3[7]);

	return tmp[11];
}
void hand::show(int z)
{
	for(int i=0;i<7;i++)
	{
		printf("%s\n",s3[i]);
	}
	printf("\n\n");
}

int main()
{
	SetConsoleOutputCP(1251);
	SetConsoleCP(1251);

	srand(time(NULL));
	
	int w;
	hand A;
	hand B;


	do
	{
	printf("Выберите действие:\n");
	printf("1 - Запуск одной игры\n");
	printf("2 - Запуск серии из 100 игр\n");
	printf("3 - Ввод своих значений\n");
	printf("4 - Выход\n");
	scanf("%d",&w);
		switch(w)
		{
			case 1:	
				A.baraban();
				A.push();
				printf("\n\n");
				break;
			case 2:
				A.baraban();
				int y;
				A.push(100);
				printf("\n\n");
				break;
			case 3:
				printf("Эта опция доступна в платной версии программы\n\n");
				break;
		}
	}
	while(w!=4);
	printf("\nСпасибо, что пользуетесь нашим программным обеспечением.\n\n");

	


	return 0;
}
iehf вне форума Ответить с цитированием
Старый 30.03.2010, 12:10   #2
iehf
Пользователь
 
Регистрация: 30.03.2010
Сообщений: 12
По умолчанию

Вообщем, господа модераторы, так получилось, что одна и та же тема есть в разных ветках. Выуж не серчайте и удалите одну, если мешает сильно )
http://www.programmersforum.ru/showthread.php?t=90648
iehf вне форума Ответить с цитированием
Старый 30.03.2010, 12:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ту тему удалил. Эту оставляю.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2010, 13:05   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

вроде всё нормально, кроме этого:
Код:
for(k=0;k<50000000;k++)
{
     kk=kk+1;
}
потом эта kk нигде не используется

Цитата:
реализована имитация многопоточности
не вижу никакой многопоточности)
NiCola999 вне форума Ответить с цитированием
Старый 30.03.2010, 14:40   #5
iehf
Пользователь
 
Регистрация: 30.03.2010
Сообщений: 12
По умолчанию

Переменная kk у меня для того, чтоб цикл не пустовал )). В принципе она не нужна.

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

Вот такая вот она у меня получилась, может кривовато, конечно, но получилось

Код:
for(i=0;i<N;i++)
		{
		
			for(j=0;j<B;j++)
			{
				if(s_1>i)
				{
					extract_s1();
				}
					else if(s_1==i)
					{
						B=s_1;
						extract_s1();
					}
				if(s_2>=i)
				{
					extract_s2();
		
				}
					else if(s_1==i)
					{
						B=s_2;
						extract_s1();
					}
				if(s_3>=i)
				{
					extract_s3();
				}
					else if(s_1==i)
					{
						B=s_3;
						extract_s1();
					}
				printf("\n\n\n\n\t\t%s\t%s\t%s\n",s1[0],s2[0],s3[0]);
					for(k=0;k<50000000;k++)
					{
						kk=kk+1;
					}
				system("cls");	
			}
		}
iehf вне форума Ответить с цитированием
Старый 30.03.2010, 14:48   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Одно важнейшее замечание - полное отсутствие комментариев. Значит трудности с дальнейшим сопровождением. Код ужасный.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.03.2010, 14:51   #7
iehf
Пользователь
 
Регистрация: 30.03.2010
Сообщений: 12
По умолчанию

коменты не писал, так как это небольшая программа, которая в дальнейшем не будет использоватся и дорабатыватся. Да и нету сдесь кучи сложных функций, которые коментировать надо.

А то что код ужасный - это исключительно из-за коментариев?
iehf вне форума Ответить с цитированием
Старый 30.03.2010, 14:53   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Потому как нету ее в консоли.
Что за глупости? Никто не мешает тебе в консоли использовать много поточность:
http://www.programmersforum.ru/showthread.php?t=85876
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2010, 14:59   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от iehf Посмотреть сообщение
А то что код ужасный - это исключительно из-за коментариев?
Это вырабатывает привычку. Строгая самодисциплина и комментарии помогают:
а) сопровождать программу
б) работать в команде
в) проводить отладку программы
г) упрощают повторное использование кода

Соответственно:
Цитата:
это небольшая программа, которая в дальнейшем не будет использоватся и дорабатыватся
всего лишь отговорка, не написали здесь, пропустите в другом месте. Все это приводит к потере времени. Плюс расхлябанность (да мне быстро, я тут только две строчки) сильно расслабляет, что потом сказывается на качестве кода, возрастает число ошибок и т.д. Помните, что комментарии есть в подавляющем числе языков программирования. И нужны они там не из прихоти разработчиков.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 30.03.2010, 15:02   #10
iehf
Пользователь
 
Регистрация: 30.03.2010
Сообщений: 12
По умолчанию

согласен, я неправильно выразился. Без привлечения WinApi, которого я на момент написания этого еще не знал, я вот так вот придумал извратится и имитировать одновременную смену трех разных событий на экране.

согласен и указнием на отсутствие коментариев. Когда это писал - коментарии не использовал. А сейчас уже лень их сюда дописывать. Но если я их допишу, код перестанет быть ужасным?

Последний раз редактировалось iehf; 30.03.2010 в 15:05.
iehf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа (не код!) simple Помощь студентам 8 14.01.2008 23:36