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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена одного массива другим 
:(
    Опции темы
Winterlord
Дата 1.12.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте уважаемые программисты. Как заменить значения элементов исходного массива a1, a2,...an на новые значения a`1,a`2,...a`n, используя правило, что a`i равно сумме n членов аj-х при i=j.?
Тоесть 1-й элемент нового массива будет равен сумме всех элементов кроме первого, второй: сумме элементов кроме первого и второго и так далее....
Если можете, помогите плз. Заранее благодарен

Это сообщение отредактировал(а) Winterlord - 1.12.2008, 21:51
PM MAIL ICQ   Вверх
Dov
Дата 1.12.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



А последний чему равен?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Winterlord
Дата 1.12.2008, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну весь массив вводится произвольно, следовательно и последний элемент произвольный...
PM MAIL ICQ   Вверх
Dov
Дата 1.12.2008, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Я имею ввиду, чему будет равен последний элемент нового массива?

Добавлено через 26 секунд
чему он должен быть равен?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Rififi
Дата 1.12.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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

... ну или при помощи лямбда-выражений из библиотеки boost примерно так... smile 

Код
#include <algorithm>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/numeric.hpp>
#include <boost/lambda/bind.hpp>

int main()
{
    namespace lm = boost::lambda;
    namespace ll = lm::ll;

    const size_t N = 5;
    int arr[N] = { 1, 2, 3, 4, 5 };
    int check[] = { 2+3+4+5, 3+4+5, 4+5, 5, 0 };

    size_t idx = 0;
    std::transform(arr, arr + N, arr, 
        lm::bind(
            lm::protect(
                lm::bind(
                    ll::accumulate(),
                    lm::_1,
                    lm::_2,
                    0)),
        arr + ++lm::var(idx), arr+N));

    bool bEqual = memcmp(arr, check, sizeof(int) * N) == 0;

    return (0);
}

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


Шустрый
*


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

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



Dov, Хороший вопрос... Скорее всего 0.

Rififi, если не сложно, распиши плз как ты это сделал, ато не совсем понятно)Да и лучше с помощью обычного двойного цикла) ато с лямбда-выражениями пока проблемы^^

Вообще мб я ошибся в написании формулы, так что вот скрин на всякий случай:
user posted image



Это сообщение отредактировал(а) Winterlord - 1.12.2008, 23:19
PM MAIL ICQ   Вверх
Dov
Дата 1.12.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Winterlord @  1.12.2008,  22:15 Найти цитируемый пост)
Скорее всего 0.


Winterlord, тогда так:
Код
int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int i, sum = 0;
    int N = sizeof arr / sizeof(int); 

    for(i = 0; i < N; i++)
        sum += arr[i];

    for(i = 0; i < N; i++)
    {
        sum -= arr[i];
        arr[i] = sum;        
    }

    return 0;
}


Добавлено через 2 минуты и 31 секунду
Цитата(Winterlord @  1.12.2008,  22:15 Найти цитируемый пост)
Вообще мб я ошибся в написании формулы, так что вот скрин на всякий случай:

Как это по-русски читается?  Намекни...  smile 


Это сообщение отредактировал(а) Dov - 1.12.2008, 23:21


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Winterlord
Дата 1.12.2008, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Dov @ 1.12.2008,  23:20)
Как это по-русски читается?  Намекни...  smile

Ну может я ошибся в написании корявым языком формулы) я написал "a`i равно сумме n членов аj-х при i=j", а может на самом деле это по другому читается)

Добавлено @ 23:38
Dov, Всё-таки не совсем прально. Должны получаться значения: 14,12,9,5,0 (если последний исходный массив был 1,2,3,4,5), а получается 12,9,5,0,0

Это сообщение отредактировал(а) Winterlord - 1.12.2008, 23:39
PM MAIL ICQ   Вверх
Dov
Дата 1.12.2008, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Winterlord, смешной ты хлопец.  smile    Ты пойми, если ты спрашиваешь, то ты и должен объяснить народу чего ты хочешь, а не наоборот. Как же ты хочешь, что бы тебе помогли, если сам не знаешь, что тебе нужно?  smile

Добавлено через 2 минуты и 36 секунд
я, например, не понимаю, что значит i = j. и что такое j вобще?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Winterlord
Дата 1.12.2008, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dov, что я не верно сказал?) Посмотри плз что ты не так написал.
Повторюсь, нужно заменить элементы исходного массива а1,а2,...аn на новые значения а`1,a`2,...a`n, используя правило:
user posted image

Это сообщение отредактировал(а) Winterlord - 1.12.2008, 23:47
PM MAIL ICQ   Вверх
Dov
Дата 1.12.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Winterlord @  1.12.2008,  22:29 Найти цитируемый пост)
Должны получаться значения: 14,12,9,5,0 (если последний исходный массив был 1,2,3,4,5)


Winterlord, так у меня так и получается. А как ты выводишь?


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Winterlord
Дата 1.12.2008, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Dov @  1.12.2008,  23:40 Найти цитируемый пост)
я, например, не понимаю, что значит i = j. и что такое j вобще? 

говоря простым языком, первое число нового массива должно быть суммой всех чисел первого массива, кроме первого числа. Второе число нового массива будет суммой всех чисел первого массива кроме первого и второго, и так далее
PM MAIL ICQ   Вверх
Dov
Дата 1.12.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Winterlord @  1.12.2008,  22:52 Найти цитируемый пост)
говоря простым языком, первое число нового массива должно быть суммой всех чисел первого массива, кроме первого числа. Второе число нового массива будет суммой всех чисел первого массива кроме первого и второго, и так далее


Так, вроде бы, так и работает.  smile  



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Winterlord
Дата 2.12.2008, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Dov @  1.12.2008,  23:51 Найти цитируемый пост)
Winterlord, так у меня так и получается. А как ты выводишь? 


аааааа, точно)) Да, я непрально выводил. Теперь всё получается, Спасибо тебе огромное, а так же спс Rififi.

Dov, Но на всякий случай, как ты выводишь?

Добавлено через 4 минуты и 13 секунд
и ещё напиши плз что именно ты делаешь вот тут:
Код

 for(i = 0; i < N; i++)
        sum += arr[i];
    for(i = 0; i < N; i++)
    {
        sum -= arr[i];
        arr[i] = sum;        
    }


Добавлено через 7 минут и 15 секунд
просто хочу до конца разобраться...
PM MAIL ICQ   Вверх
Dov
Дата 2.12.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Код
int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int i, sum = 0;

    // вычисляем размер массива 
    int N = sizeof arr / sizeof(int);

    // подсчитываем сумму всех элементов массива
    for(i = 0; i < N; i++)
        sum += arr[i];
    
    for(i = 0; i < N; i++)
    {
        // вычитаем из суммы текущий элемент, получая сумму оставшихся элементов
        sum -= arr[i];

        // присваиваем текущему элементу новое значение суммы
        arr[i] = sum;

        // выводим на экран
        cout << arr[i] << ' ';
    }

    cout << endl;
    
    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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