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

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

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2013, 12:49   #1
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию ответьте пожалуйста

Скажите пожалуйста в чем моя ошибка и как ее исправить? Когда я начинаю программировать СВОЕ,я лезу всегда только в процедурное программирование(С++) и у меня в итоге получается огромное кол-во переменных,циклов и из-за этого очень трудно понимать и редактировать весь составленный код.Мне кажется я столкнулся с такой же проблемой как и мой одногруппник . Он писал огромные коды, Но когда я его спрашиваю - "объясни мне хотя бы вкратце какую роль выполняют циклы в твоей написанной программе и за что отвечают все переменные",он в ответ столбенеет, тупеет и пересматривает по 100 раз свои же написанные циклы! как-будто они чужие. Проиcходит как бы нагромождение,мешанина,каша и как раз ООП раскладывает куски кода по полочкам для удобства понимания и редактирование кода.Мне надо пытаться писать на опп и тогда мне будет удобней и легче составлять программы ?
или просто я недостаточно внимательно составляю код?слишком тороплюсь?в чем моя ошибка?мала занимаюсь программированием?

Пример - писал реализацию карточной игры девятка - итог - куча переменных и циклов и много туплю когда пересматриваю свой код.И сложно редактировать его очень.Надо было его в стиле ООП написать?или не в этом проблема? а в чем тогда? скажите пожалуйста
alekopoko вне форума Ответить с цитированием
Старый 24.12.2013, 13:38   #2
iDima
Пользователь
 
Регистрация: 30.12.2012
Сообщений: 19
По умолчанию

Скорее всего твоя проблема в опыте программирования. Как рекомендации скажу следующее:
  1. Оставляй комментарии к коду
  2. ООП
  3. Используй функции для реолизации отдельного алгоритма
  4. Практика, много
iDima вне форума Ответить с цитированием
Старый 24.12.2013, 13:45   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Капец... Если автор не понимает зачем он пишет тот или иной блок кода то ему нет смысла программировать.
Не знаю чего тебе не хватает, но по-любому ты либо из мухи слона делаешь либо не представляешь в принципе что хочешь получить и как.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2013, 13:53   #4
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

да есть понимание!
я перечитывал по 100 раз основы Си++ (разные книги харви дейтел керниган липман страуструп)
Но когда этих блоков становится много - голова пухнет
может от непривычки - больше практики и меньше будет голова болеть
"из мухи слона делаю" - может быть и так.Скорей всего ты прав
alekopoko вне форума Ответить с цитированием
Старый 24.12.2013, 13:57   #5
alekopoko
Форумчанин
 
Регистрация: 03.04.2013
Сообщений: 167
По умолчанию

ну вот мой код карточной игры(компьютер против компьютера)
оцените пожалуйста
(скопировал тасавание карт из харви дейтела а остольное все сам написал)
Код:
#include <iostream>
#include <iomanip>
#include <cstdlib> 
#include <ctime> 
#include<stdio.h>
using namespace std;
int ses=29;
int deck[ 4 ][ 13 ]; 
int coo=0;
static const char*suit[4]={".B",".C",".T",".P"};
static const char*face[13]={"2","3","4","5","6","7","8","9","10","V","D","K","T"};
int hod_igroka(int mast,int naminal,int i)
{
	if(i&1)
	{
		for ( int card = 1; card <= 26; card++ )
		   {
			  for ( int row = 0; row <= 3; row++ )
			  {
				 for ( int column = 0; column <= 12; column++ )
				 {
					if (deck[mast][naminal]==card) 
					{
						coo=1;
						deck[mast][naminal]=0;
					}
				}
			  }
		   }
		if(coo==1) {coo=0; return 1;}
		else return 0;
	}
	else
	{
		for ( int card = 27; card <= 52; card++ )
		   {
			  for ( int row = 0; row <= 3; row++ )
			  {
				 for ( int column = 0; column <= 12; column++ )
				 {
					if (deck[mast][naminal]==card) 
					{
						coo=1;
						deck[mast][naminal]=0;
					}
				}
			  }
		   }
		if(coo==1) {coo=0; return 1;}
		else return 0;
	}
}
static int hod=1;
void stol(int column)
{
	for(int row=0;row<=3;row++)
	{
		int s=0;
		if(row==0) { ses=29;cout<<"\n"; cout<<setw(ses);}
		if(row==1) { ses=29;cout<<"\n"; cout<<setw(ses);}
		if(row==2) { ses=29;cout<<"\n"; cout<<setw(ses);}
		if(row==3) { ses=29;cout<<"\n"; cout<<setw(ses);}
			 for (column=0 ; column <= 12; column++ )
			 {
				if (deck[row][column]==0) 
				{
					if(column==5) ses-=4;
					if(column==4) ses-=8;
					if(column==3) ses-=12;
					if(column==2) ses-=16;
					if(column==1) ses-=20;
					if(column==0) ses-=24;
					if(column<=6){ses-=4; if(s==0) {s=1;cout<<setw(ses);} }
					cout<<face[column]<<suit[row]<<"|";

				}
			}
	}
}
int main()
{
for ( int row = 0; row <= 3; row++ )
{
      for ( int column = 0; column <= 12; column++ )
      {
         deck[ row ][ column ] = 0; 
      } 
}
srand( time( 0 ) ); 
int row; // строки(масти)
int column; // столбцы(тринадцать карточных номиналов)
for ( int card = 1; card <= 52; card++ ) 
   {
	   if(card==1) {deck[ 0 ][ 7 ]= card ;continue;} // чтобы игра начиналась с девятки бубны 
      do 
      {
         row = rand() % 4; // диапозон случайных чисел от 0 до 3
         column = rand() % 13; // диапозон случайных чисел от 0 до 12
      } 
	  while( deck[ row ][ column ] != 0 ); 
   deck[ row ][ column ] = card;
   } 
int n=7;//начальная точка игры - 9 бубны
int x=1;
int t=1;
int cor=0;
for(int i=1;i<=30;i++)
{
for(int ff=0;ff<=3;ff++)
   {
	   for(int dd=0;dd<=12;dd++) // цикл пробегает по всем номиналам одной масти
	   {
		   if(n==7) ses=29;
		   cout<<setw(ses);
		   if(n>=8) 
		   {
			   x=hod_igroka(ff,n,t); 
			   if(x==0&&deck[ff][n]!=0) {n=7;continue;}// не нашли карту правее девятки
			   if(n<=11) n++;// if для того чтобы небыло n =13,в слачае n=13 мы залезаем за границу строчки массива на нижнюю строчку массива а именно,на ее начало т.е. после туза не на девятку попадаем а на двойку(получается что вместо девятки выводится двойка)
		   }
		   if(n<=7) 
		   {
			   x=hod_igroka(ff,n,t);
			   if(x==0&&n==7&&deck[ff][n]!=0) {break;}// не нашли девятку выходим из цикла который пробегает по всем номиналам одной масти
			   if(x==0&&deck[ff][n]!=0) {n=8;ses=29; continue;} // не нашли карту левее девятки
			   if(n==0) // дошли до двойки  
			   {
				   ses-=4;
				   if(x==1) {printf("\n");printf("hod = ");printf("%d",hod);printf("\n");hod++;t++;}
				   if(x==1){stol(n);cor=1;}
				   n=8;
				   //hod++;
				   continue; 
			   }
			   ses-=4;
			   n--;
		   }
		   if(x==1) {printf("\n");printf("hod = ");printf("%d",hod);printf("\n");hod++;t++;}
		   if(x==1){stol(n);cor=1;}
		   //hod++;
	   }
	   n=7; // если игрок расставил все карты одной масти(левее и правее девятки)
	}
if(cor==0)t++;//играет второй игрок если первый не попал не разу не нашел карту при прокрутки обоих циклов и наборот
cor=0;
}
}

Последний раз редактировалось Stilet; 24.12.2013 в 14:11.
alekopoko вне форума Ответить с цитированием
Старый 24.12.2013, 14:13   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну и че оценивать? Код как код. Если примерно представлять задачу то его легко прочитать. Можешь конечно укоротить, повыносив в процедуры и функции повторяющиеся блоки.
Не пойму че париться?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.12.2013, 14:27   #7
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
Сообщение от alekopoko Посмотреть сообщение
да есть понимание!
я перечитывал по 100 раз основы Си++ (разные книги харви дейтел керниган липман страуструп)
Но когда этих блоков становится много - голова пухнет
может от непривычки - больше практики и меньше будет голова болеть
С.Макконнел "Совершенный код".
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 24.12.2013, 14:40   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

alekopoko

отложить в сторону клавиатуру, если неймется, связать себе руки
начать читать классику

Гради Буч "Объектно-ориентированный анализ и проектирование"
Стив Макконнелл "Совершенный код"

и др.
Rififi вне форума Ответить с цитированием
Старый 24.12.2013, 15:09   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

alekopoko. Что можно сказать? У Вас несколько ошибок в оформлении кода.
1. Старайтесь использовать как можно меньше глобальных переменных. Если-уж есть такая необходимость, сосредоточьте их в одном месте и снабдите каждую комментарием.
2. Каждую функцию, оформляйте в отдельном файле с соответствующим комментарием. Лучще пользоваться классами.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.12.2013, 15:29   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Каждую функцию, оформляйте в отдельном файле
+100500 функций = 100500 файлов?О_о
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ответьте на вопрос! Катя21 Помощь студентам 2 28.12.2011 11:16
Ответьте на вопрос Arei15 Помощь студентам 0 01.11.2009 10:50
помогите пожалуйста срочно, ответьте на 1вопрос barbossa Общие вопросы C/C++ 1 21.09.2009 19:52
Ответьте мне пожалуйста! Хост Помощь студентам 3 06.06.2009 14:59
[C++] Ответьте на возникшие вопросы... Padre Помощь студентам 2 09.05.2008 23:21