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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перечесление из массивов. Перечесление из массивов.  
:(
    Опции темы
ATAMAN200
Дата 18.11.2010, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем доброе время суток.
Вот не могу не как докумекать над таким действием.
Имеется два двух мерных массива содержащие по три целых числа напимер
3,2,9
и
5,6,7
нужно с помощью операторов цикла for,while,switch перемножить каждое из трёх чисел по очереди то есть
3х5
3х6
3х7
далее
2х5
2х6
2х7
далее
9х5
9Х6
9х7

сразу говорю это не для учёбы.
Пишу ГМ для SA MP мультиплеер. 
PM MAIL   Вверх
baldina
Дата 18.11.2010, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



я тут вижу ток 2 одномерных массива
Код

int array1[] = {3,2,9};
int array2[] = {5,6,7};

for (int i=0; i < sizeof array1 /sizeof array1[0]; ++i)
  for (int j=0; j < sizeof array2 /sizeof array2[0]; ++j)
  {
     std::cout << array1[i] << '*' << array2[j] << '=' << (array1[i]*array2[j]) << std::endl;
  }


Это сообщение отредактировал(а) baldina - 18.11.2010, 19:08
PM MAIL   Вверх
baldina
Дата 18.11.2010, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



или так:

Код

int array1[] = {3,2,9};
int array2[] = {5,6,7};
const int n = sizeof array1 / sizeof array1[0];
const int m = sizeof array2 / sizeof array2[0];

std::for_each (array1, array1+n, [&](int x) {
    std::for_each (array2, array2+m, [=](int y) {
        std::cout << x << '*' << y << '=' << x*y << std::endl;
    });
});

PM MAIL   Вверх
sQu1rr
Дата 18.11.2010, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(baldina @  18.11.2010,  19:25 Найти цитируемый пост)
или так:


Цитата(ATAMAN200 @  18.11.2010,  18:18 Найти цитируемый пост)
нужно с помощью операторов цикла for,while,switch перемножить каждое из трёх чисел по очереди то есть


Цитата(ATAMAN200 @  18.11.2010,  18:18 Найти цитируемый пост)
Пишу ГМ для SA MP мультиплеер.  

C++0x не пойдет  smile 
PM MAIL Skype GTalk   Вверх
mes
Дата 19.11.2010, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



или так  (если неохота двойные циклы создавать)
Код

for (size_t i=0; i<9; ++i)
{
     int a = array1[i/3];
     int b = array2[i%3];
     
     std::cout << a <<'*' << b << '=' << a*b << std::endl;
}

где 9 = n1*n2, а n1 , n2 - размеры массивов и == 3;

Это сообщение отредактировал(а) mes - 19.11.2010, 01:09


--------------------
PM MAIL WWW   Вверх
baldina
Дата 19.11.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(sQu1rr @  18.11.2010,  21:59 Найти цитируемый пост)
C++0x не пойдет

можно функциональным объектом заменить

Цитата(mes @  19.11.2010,  01:07 Найти цитируемый пост)
или так  (если неохота двойные циклы создавать)

mes, красиво. но лучше так не делать: 
Цитата
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
 (С) Стив Макконнелл
 smile 
PM MAIL   Вверх
mes
Дата 19.11.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(baldina @  19.11.2010,  10:03 Найти цитируемый пост)
но лучше так не делать: 

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



--------------------
PM MAIL WWW   Вверх
baldina
Дата 19.11.2010, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(mes @  19.11.2010,  11:29 Найти цитируемый пост)
2. для перемножения неопределенного кол-ва массивов классические циклы не подойдут.. придеться пользоваться подобным..

 smile 

есть мнение, что перемножение неопределенного кол-ва дает неопределенный результат

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


любитель
****


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

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



Цитата(baldina @  19.11.2010,  10:40 Найти цитируемый пост)
есть мнение, что перемножение неопределенного кол-ва дает неопределенный результат

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

Цитата

 smile 


вот пример из недавней форумской темы..

Это сообщение отредактировал(а) mes - 19.11.2010, 15:36


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


любитель
****


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

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



вот применительно к текущей теме :
http://liveworkspace.org/code/8d9b3b88bc00...4d6259509ae0013
естественно вместо 4 рядов может быть 10 или 100..  (главное чтоб итератор подходящий был)
ну  и m вводиться пользователем..


Это сообщение отредактировал(а) mes - 19.11.2010, 15:49


--------------------
PM MAIL WWW   Вверх
baldina
Дата 19.11.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



понял. хотя таки не вижу почему тут не быть классическим циклам... если итератор подходящий))
PM MAIL   Вверх
mes
Дата 19.11.2010, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(baldina @  19.11.2010,  16:24 Найти цитируемый пост)
. хотя таки не вижу почему тут не быть классическим циклам..

потому что с увелечением кол-ва циклов сложность возрастает, и код становится не поддерживаем.. 
относительно сравнимы только до 5-7 рядов.. дальше подход с классическими циклами начинает геометрически проигрывать ..

Добавлено через 1 минуту и 47 секунд
представте напримере хотя бы 20 классических циклов против все тех же двух циклов альтернативного подхода.. 
smile


--------------------
PM MAIL WWW   Вверх
baldina
Дата 19.11.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



а почему не заменить 20 циклов на
Код

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

?

Добавлено @ 17:42
это же и есть "альтернативный подход", ток без плясок с остатком от деления

Добавлено @ 17:43
вот это: 
Цитата

Код

bool next_iterate ()



Добавлено @ 17:44
Цитата(baldina @  19.11.2010,  17:24 Найти цитируемый пост)
если итератор подходящий

внешний цикл вполне получается в виде
Код

for (i=begin(); i!=end(); ++i)

чем не классический цикл?

Это сообщение отредактировал(а) baldina - 19.11.2010, 17:45
PM MAIL   Вверх
mes
Дата 19.11.2010, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(baldina @  19.11.2010,  16:41 Найти цитируемый пост)
, ток без плясок с остатком от деления

суть не в остатке от деления.. это я для экономии писанины написал.. 
суть в динамическом кол-ве рядов вместо статического..

пример из соседний темы(приведенный выше),  тоже является динамическим многорядным циклом, но никаких плясок с делениями не имеет..

Добавлено @ 18:21
Цитата(baldina @  19.11.2010,  16:41 Найти цитируемый пост)
чем не классический цикл?

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

Добавлено @ 18:24
Цитата(baldina @  19.11.2010,  16:41 Найти цитируемый пост)
это же и есть "альтернативный подход", ток без плясок с остатком от деления

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


Это сообщение отредактировал(а) mes - 19.11.2010, 18:27


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


Эксперт
****


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

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



Цитата(mes @  19.11.2010,  18:16 Найти цитируемый пост)
судя по всему мы об одном и том же говорим.. 

 smile

Добавлено через 5 минут и 47 секунд
 smile говорят, больше всего строк написано на Кобол. не потому ли, что в нем нет циклов (хотя есть рекурсия), и для инициализации массива из 100 элементов нужно написать 100 строк  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.0743 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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