Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > инициализация в цикле


Автор: slutsker 30.7.2007, 08:52
вот к примеру хочу проиничциализировать перем а1 до а20, если к примеру написать
 
Код

for(int i=0;i<20;i++)
int ai;

то 20 раз проиниц перем ai...

как же реализовать инициализацию в цикле

Автор: Daevaorn 30.7.2007, 09:12
Цитата(slutsker @  30.7.2007,  09:52 Найти цитируемый пост)
как же реализовать инициализацию в цикле 

сделать массив из 20 элементов

Автор: OKaDO 30.7.2007, 09:14
Очень интересный вопрос...
А массивами не пробовал пользоваться 

Код


int N=20;
int *a = new int[N];
for( int i=0; i<N; i++ )
     a[i]=i;

Автор: slutsker 30.7.2007, 09:15
Daevaorn, будешь смеяться но я это спрашивал, чтобы применить к массивам

только не предлогайте двумерные массивы))))

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

Автор: Daevaorn 30.7.2007, 09:19
Цитата(slutsker @  30.7.2007,  10:15 Найти цитируемый пост)
будешь смеяться но я это спрашивал, чтобы применить к массивам

тогда в чем проблема?
Цитата(slutsker @  30.7.2007,  10:15 Найти цитируемый пост)

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

какая разница? инициализируй чем хочешь, цифрами, символами, объектами - чем угодно.

Автор: slutsker 30.7.2007, 09:25
OKaDO, спасибо за совет, но тоже самое я предложил в этом http://forum.vingrad.ru/forum/topic-165637.htmlна 5 минут раньше!

наверно я в курсе как создать массив!))))



Автор: bsa 30.7.2007, 09:31
slutsker, я вот читаю все твои здесь сообщения и у меня возникает ощущение, что телепатических способностей мне явно не хватает, чтобы тебя понять. В частности, ты хочешь проинициализировать переменные a, b, c, ... z в цикле или хочешь присвоить элементам массива значения 'a', 'b', 'c', ... 'z'? Если первое, то это нереально. Если второе, то:
Код
for(char c = 'a'; c <= 'z'; ++c)
     ac[c - 'a'] = c;

Автор: OKaDO 30.7.2007, 09:44
Цитата(slutsker @ 30.7.2007,  09:25)
OKaDO, спасибо за совет, но тоже самое я предложил в этом http://forum.vingrad.ru/forum/topic-165637.htmlна 5 минут раньше!

наверно я в курсе как создать массив!))))

Не спорю... просто не совсем был понятен вопрос smile

Автор: slutsker 30.7.2007, 09:50
bsa, первое!!! но только с  оговорками...

вот я и хотел узнать реально это или нет! smile 

Автор: dizzy1984 30.7.2007, 12:46
Инициализация переменых a1-a20
Код

int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20;
a1=1;
a2=2;
a3=3;
a4=4;
a5=5;
a6=6;
a7=7;
a8=8;
a9=9;
a10=10;
a11=11;
a12=12;
a13=13;
a14=14;
a15=15;
a16=16;
a17=17;
a18=18;
a19=19;
a20=20;


Инициализация массива из 20-ти элементов
Код

int a[20];
for (int i = 0; i < 20; i++) 
{
       a[i] = i;
}


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

Автор: Solomon 30.7.2007, 12:59
Цитата(dizzy1984 @  30.7.2007,  11:46 Найти цитируемый пост)
Если данные логически различаются, инициализируй каждую переменную отдельно.


Зачем??? можеш привести пример где a1...a20 удобнее использовать чем a[20]????

Автор: akizelokro 30.7.2007, 13:18
Реально, но уж больно неоптимально. Выделяешь кусок памяти, достаточный чтобы уложить туда по порядку переменные от a до z, а потом в цикле делаешь инкремент указателя. Сами а-z в цикле не фигурируют, обращаещься к ним потом. Вроде так, но я давно не писал. Могу ошибиться. Хотя и этот способ похож на работу с массивом.

Типа хезы
E t1[N];
E *a = &t1[0];
E *b = &t1[1];
.....
E *z = &t1[N-1];

for(int i=0;i<N;i++) t1[i]=(T)i;

а вот прокатит ли

E *ai=&t1[0];
for(int i=0;i<N;i++) *ai++=i;  ...ыхгм.

В принципе, можно и оператор отоверлоадить, чтобы он в цикле жучил ai=i; а на самом деле инициализировал a-z по порядку. Что-то из этого сработает... только зачем? smile 


Автор: slutsker 30.7.2007, 13:44
Цитата(dizzy1984 @ 30.7.2007,  12:46)
Инициализация переменых a1-a20
Код

int a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20;
a1=1;
a2=2;
a3=3;
a4=4;
a5=5;
a6=6;
a7=7;
a8=8;
a9=9;
a10=10;
a11=11;
a12=12;
a13=13;
a14=14;
a15=15;
a16=16;
a17=17;
a18=18;
a19=19;
a20=20;



это мне подходит)))))  smile  smile  smile  smile 

Автор: dizzy1984 31.7.2007, 05:02
Цитата(Solomon @  30.7.2007,  14:59 Найти цитируемый пост)
Зачем??? можеш привести пример где a1...a20 удобнее использовать чем a[20]????

Часть 3d-движка, основная процедура занимается трассировкой лучей для определения расстояния до ближаешего препятствия относительно позиции игрока. Среди определений к типу long int относится 20 переменных.
Код

long Ang,
  N_Y_Cell, N_X_Cell, X_Bound, Y_Bound,
  X_Delta, Y_Delta, Xi, Yi,
  Cur_Cell_X, Cur_Cell_Y, Dist_X, Dist_Y,
  Tan, CTan, Sc, Csc,
  Xd, Yd,
  Height;

Места использования выглядят примерно так
Код

If (!Y_Ray)
{
    Cur_Cell_Y = (Y_bound + N_Y_Cell) >> 6;
}    
...
If (a_0 <= View_Ang) && (View_Ang < a_180) 
{
      Y_Bound = 64 + (Y & $FFFFFFC0);
      Y_Delta = 64;
      N_Y_Cell= 0
}
...
Tan= *PTan[View_Ang];
CTan= *PCTan[View_Ang];
Sc = *PSc[View_Ang];
Csc= *PCsc[View_Ang];

А теперь представь что было бы, если бы мы записали их как массив из 20-ти переменных long int.
Что было бы с читаемостью и самодокументируемостью такого кода.

Автор: zkv 31.7.2007, 05:16
Цитата(dizzy1984 @  31.7.2007,  05:02 Найти цитируемый пост)
А теперь представь что было бы, если бы мы записали их как массив из 20-ти переменных long int.

а так:
Код

enum
{
  Ang = 0,
  N_Y_Cell, N_X_Cell, X_Bound, Y_Bound,
  X_Delta, Y_Delta, Xi, Yi,
  Cur_Cell_X, Cur_Cell_Y, Dist_X, Dist_Y,
  Tan, CTan, Sc, Csc,
  Xd, Yd,
  Height,
  Num_Values
};

long lValues[Num_Values];

не утверждаю, что так лучше, как альтернативу привел smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)