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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Одномерный массив, задача! Помогите! 
:(
    Опции темы
discomanz
Дата 19.4.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите решить задачу! Наработки есть, но...
В одномерном массиве, состоящем из n целых элементом, вычислить:
1. Минимальный по модулю элемент массива;
2. Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоящие в чётных позициях, а во второй половине – элементы, стоящие в нечётных позициях.
1.Написать функцию для вычисления минимального по модулю элемента массива.
2.Написать функцию для вычисления суммы модулей элементов массива, расположенных после первого элемента, равного нулю.
3.Написать функцию для преобразования массива.
4.Написать главную функцию.
Заранее бесконечно благодарен.
PM MAIL   Вверх
bsa
Дата 19.4.2008, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



discomanz, а что за проблема с наработками?
PM   Вверх
discomanz
Дата 19.4.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Первая функция написана:
void beat(double x[], int n, double& p, int& k);
{//объявляем переменные//
 int i;   
 p=fabs(x[0]);
 k=0;
 for(i=1;i>n;i++);
     {if(p>fabs(x[i]) {p=fabs(x[i]);
                                 k=i;
                               }
     }
}

Третья почти написана. С главной думаю разберусь. Ко второй есть блок-схема, используется оператор break. С программой запарил...
PM MAIL   Вверх
bsa
Дата 19.4.2008, 16:56 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



первая функция у тебя считай не написана. она хоть и скомпилируется, но не заработает. smile
Код
int beat(const double array[], int n)
{
    double p = fabs( array[0] );
    int k = 0;
    for(int i = 1; i < n; ++i) {
        const double t = fabs( array[i] );
        if (t < p) {
           k = i;
           p = t;
        }
    }
    return k;
}


для выполнения второго пункта, тебе нужно написать:
1. функцию поиска нулевого элемента, которая возвращает его позицию в массиве или -1, если он отсутствует
2. Функцию суммирования модулей элементов начиная с указанной позиции.
3. Воспользоваться ими.
PM   Вверх
discomanz
Дата 19.4.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо! Но мы array не проходили. Обязательно разберусь. Может черкнёшь вторую функцию, а то мне в нашей деревне не с кем проконсультироваться.  Блок-схема во вложении.


Это сообщение отредактировал(а) discomanz - 15.5.2008, 16:46
PM MAIL   Вверх
Rififi
Дата 19.4.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Гы. прямо какой-то наплыв студней Ж)))

Код
#include <algorithm>
#include <functional>
#include <numeric>

// Минимальный по модулю элемент массива;
int min_mod(int* arr, size_t N)
{
    struct abs_comparer : public std::binary_function<int, int, bool>
    {
        result_type operator()(const first_argument_type val1, const second_argument_type val2) const
        {
            return std::abs(val1) < std::abs(val2);
        }
    };

    return *std::min_element(arr, arr+N, abs_comparer());
}

// Сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
int sum(int* arr, size_t N)
{
    typedef int* iterator;
    
    iterator first_zero = std::find(arr, arr+N, 0);
    if (first_zero == arr+N)
        throw std::exception("Отсутствует нулевой элемент");

    struct abs_summer : public std::binary_function<int, int, int>
    {
        result_type operator()(const first_argument_type res, const second_argument_type val) const
        {
            return std::abs(res) + std::abs(val);
        }
    };

    return std::accumulate(first_zero+1, arr+N, 0, abs_summer());
}

// Преобразовать массив таким образом, чтобы в первой его половине
// располагались элементы, стоящие в чётных позициях, а во второй половине – элементы, стоящие в нечётных позициях.
void relocate(int* arr, size_t N)
{
    struct position : std::unary_function<int, bool>
    {
        typedef argument_type* iterator;
        position(iterator arr, const size_t N) : arr_(arr), N_(N) {};
        result_type operator()(const argument_type val)
        {
            iterator it = std::find(arr_, arr_ + N_, val);
            return std::distance(arr_, it) & 1;
        }
        iterator arr_;
        const size_t N_;
    };

    std::partition(arr, arr+N, position(arr, N));
}


Использование:

Код
int arr[] = { ... };
const size_t N = sizeof(arr0) / sizeof(arr[0]);
int min1 = min_mod(arr, N);
sum(arr, N);
relocate(arr, N);


последнюю функцию особо не проверял... вроде перераспределяет ...  уже просто почти убегаю кататься на велосипеде :grin:
PM MAIL   Вверх
bsa
Дата 19.4.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



discomanz, array в моем случае - это название переменной. Ее можно было хоть "mySuperPuperVariable" обозвать smile
PM   Вверх
discomanz
Дата 19.4.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Люди добрые! Посмотрите блок-схему во вложении... Мне попроще как-нибудь, а?

Это сообщение отредактировал(а) discomanz - 19.4.2008, 19:33
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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