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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2012, 07:16   #1
Bugdrill
Новичок
Джуниор
 
Регистрация: 19.12.2012
Сообщений: 4
По умолчанию Цикл индус

Народ! Научите не писать индусский код.
Есть код:
Код:
		double max_n;
                int p = 0;
                for (int i = 0, size = n.size(); i < size; i++)
		{
			if (max_n == n[i])
			{
				if (i == 0)
				{
					p = 1;
					break;
				}
				if (i == 1)
				{
					p = 2;
					break;
				}
				if (i == 2)
				{
					p = 5;
					break;
				}
			}	
		}
Как такой участок кода должен выглядеть с точки зрения профи?
т.е. {0, 1, 2} соответствует {1, 2, 5}.
Может матем. формулой (какой)?

Последний раз редактировалось Bugdrill; 19.12.2012 в 08:52.
Bugdrill вне форума Ответить с цитированием
Старый 19.12.2012, 07:47   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Примерно вот так:
Код:
double max_n;
int = p;
for (int i = 0, i = n.size(); i++)
{
	if (max_n == n[i])
	{
	      switch(i)
                {	
                     case 0:
                     {
                     		p = 1;
			break;
	          }
	          case 1:
	         {
			p = 2;
			break;
	         }
	         case 2: p = 5;
	}
       }	
}
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 19.12.2012 в 08:35.
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.12.2012, 07:55   #3
Bugdrill
Новичок
Джуниор
 
Регистрация: 19.12.2012
Сообщений: 4
По умолчанию

Smitt&Wesson
Имел ввиду switch?
По сути тоже самое.
Bugdrill вне форума Ответить с цитированием
Старый 19.12.2012, 08:32   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Bugdrill Посмотреть сообщение
Smitt&Wesson
Имел ввиду switch?
По сути тоже самое.
Да, да. Блин, ещё не проснулся как следует .
Исправил.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.12.2012, 08:40   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не знаю C, поэтому напишу только идею (в синтаксисе будут ошибки, но понять смысл вполне можно).

Код:
 int[] RecodeArray = new int[] {1,2,5};
 int p  = -1;
 for (int i = 0, size = n.size(); i < size; i++)
 {
  if (max_n == n[i]) {
     p =  RecodeArray[i];
     break
  }
p.s. в данном коде программист должен позаботится, чтобы таблица перекодирования покрывала полностью размер n.size, но, принципе, можно добавить проверку и выдачу сообщения, что не хватает значений для перекодирования (или использовать try .. except)


Хочу Вас так же предостеречь от сравнения вещественных чисел. Это не всегда будет работать так, как Вы ожидаете (подробности в темах о машинном представлении вещественных чисел).


К слову.
я поясните, что это за запись?!!!!!
Цитата:
Код:
int = p;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2012, 08:55   #6
Bugdrill
Новичок
Джуниор
 
Регистрация: 19.12.2012
Сообщений: 4
По умолчанию

Serge_Bliznykov
int = p; - я тоже не проснулся толком )) int p = 0;
Спасибо! Очень интересно!
Bugdrill вне форума Ответить с цитированием
Старый 19.12.2012, 09:09   #7
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,372
По умолчанию

С точки зрения профи не будет загадочных констант 0, 1, 5 и т.д. а все будет константных переменных или дефайнах - читабельно будет.
waleri вне форума Ответить с цитированием
Старый 19.12.2012, 09:12   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Bugdrill Посмотреть сообщение
Serge_Bliznykov
int = p; - я тоже не проснулся толком )) int p = 0;
Спасибо! Очень интересно!
Тоже это определение не заметил. А вообще, зачем переменной что-то присваивать? Ведь ей присваиваются значения в теле цикла и ренее нигде не используются в проверках.
Достаточно написать: int p;
Всё, въехал. Если max_n == n[i] нигде не совпадёт. Но можно записать и так:
Код:
if(max_n == n[i])
{
.........
}
else p = 0;
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 19.12.2012 в 09:19.
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.12.2012, 09:29   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
		double max_n;
 int p = 0;
 int a[3]={1,2,5}
 for (int i = 0, size = n.size(); i < size; i++) if (max_n == n[i]) p=a[i];
		}
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.12.2012, 09:43   #10
Bugdrill
Новичок
Джуниор
 
Регистрация: 19.12.2012
Сообщений: 4
По умолчанию

Stilet
Как раз Serge_Bliznykov это и имел ввиду. Только break наверно нужен, так как в результате нужно получить первое совпадение.
На счет сравнения вещественного с целым. Я округляю вверх до целого: double max_n, забыл добавить.
На счет констант, незнаю, я сетку осциллоскопа рисую, что бы были красивые числа 10, 20, 30 ... Нужен десятичный логарифм именно от этих чисел.

В итоге хочу побороть в себе индуса ))

Последний раз редактировалось Bugdrill; 19.12.2012 в 09:50.
Bugdrill вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? Anarki Общие вопросы C/C++ 3 13.11.2009 19:23
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) Mr.User Помощь студентам 9 23.11.2007 01:34