Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> инициализация в цикле, объясните суть 
:(
    Опции темы
slutsker
Дата 30.7.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 24.5.2007

Репутация: нет
Всего: нет



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

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

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

как же реализовать инициализацию в цикле
--------------------
Compiling...project.cppLinking...Embedding manifest...========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
PM MAIL   Вверх
Daevaorn
Дата 30.7.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



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

сделать массив из 20 элементов
PM MAIL WWW   Вверх
OKaDO
  Дата 30.7.2007, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2005

Репутация: нет
Всего: нет



Очень интересный вопрос...
А массивами не пробовал пользоваться 

Код


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

PM MAIL   Вверх
slutsker
Дата 30.7.2007, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 24.5.2007

Репутация: нет
Всего: нет



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

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

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

Это сообщение отредактировал(а) slutsker - 30.7.2007, 09:15
--------------------
Compiling...project.cppLinking...Embedding manifest...========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
PM MAIL   Вверх
Daevaorn
Дата 30.7.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



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

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

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

какая разница? инициализируй чем хочешь, цифрами, символами, объектами - чем угодно.
PM MAIL WWW   Вверх
slutsker
Дата 30.7.2007, 09:25 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 24.5.2007

Репутация: нет
Всего: нет



OKaDO, спасибо за совет, но тоже самое я предложил в этом топикена 5 минут раньше!

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



--------------------
Compiling...project.cppLinking...Embedding manifest...========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
PM MAIL   Вверх
bsa
Дата 30.7.2007, 09:31 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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

PM   Вверх
OKaDO
Дата 30.7.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 28.6.2005

Репутация: нет
Всего: нет



Цитата(slutsker @ 30.7.2007,  09:25)
OKaDO, спасибо за совет, но тоже самое я предложил в этом топикена 5 минут раньше!

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

Не спорю... просто не совсем был понятен вопрос smile
PM MAIL   Вверх
slutsker
Дата 30.7.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 24.5.2007

Репутация: нет
Всего: нет



bsa, первое!!! но только с  оговорками...

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

--------------------
Compiling...project.cppLinking...Embedding manifest...========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
PM MAIL   Вверх
dizzy1984
Дата 30.7.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Инициализация переменых 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;
}


Если данные однородные, используй массив и цикл для работы с ним.
Если данные логически различаются, инициализируй каждую переменную отдельно.
PM MAIL   Вверх
Solomon
Дата 30.7.2007, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



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


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



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
akizelokro
Дата 30.7.2007, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 1
Всего: 5



Реально, но уж больно неоптимально. Выделяешь кусок памяти, достаточный чтобы уложить туда по порядку переменные от 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 



Это сообщение отредактировал(а) akizelokro - 30.7.2007, 13:31


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
slutsker
Дата 30.7.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 24.5.2007

Репутация: нет
Всего: нет



Цитата(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 
--------------------
Compiling...project.cppLinking...Embedding manifest...========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
PM MAIL   Вверх
dizzy1984
Дата 31.7.2007, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 3
Всего: 25



Цитата(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.
Что было бы с читаемостью и самодокументируемостью такого кода.
PM MAIL   Вверх
zkv
Дата 31.7.2007, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0670 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.