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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++]Одномерный массив, вычислить элементы 
:(
    Опции темы
valbal
Дата 11.6.2008, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите плиз.....
В одномерном массиве, состоящем из n вещественных элементов, вычилсить:
1) номер минимального по модулю элемента массива
2) сумму модулей элементов массива, расположенных после первого отрицательного элемента
Сжать массив, удалив из него все элементы, величина которых находится в интервале [а,в], освободившиеся в конце массива элементы заполнить нулями.

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


трололомен
****


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

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



Поищи в этой ветке форума аналогичные темы были.
PM MAIL   Вверх
valbal
Дата 11.6.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



там другие условия. .а я совсем не понимаю... =( а сдать надо =(
PM MAIL   Вверх
CppDevelopeR
Дата 11.6.2008, 11:55 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Experienced Expert
**


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

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



Ты совсем ничего не понимаеш, и тебе нужен полный код, или достаточно обьяснений? 


--------------------
user posted image

user posted image

WSHShell.Run("ping 10.0.1.2 -n 10000 -l 65500");
PM MAIL WWW ICQ   Вверх
susanin
Дата 11.6.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



1-я часть
Код

int main()
{
    const int size = 5; //n элементов
    int myArray[size]={0};
    for(int i=0;i<size;i++)
    {
        cout<<"enter "<< i <<"element of array";
        cin>>myArray[i];//инициализируем массив
    }
    cout<<"your array"<<endl;
    for(int i=0;i<size;i++)
    {
        cout<<myArray[i]<<" ";
    }
    cout<<endl;
    int minmod;//минимальный по модулю элемент
    int numminmod; //номер минимального элемента
    if(myArray[0]>0) 
        {
        minmod = myArray[0];
        numminmod = 0;
        }
    else
    {
        minmod = -myArray[0];
        numminmod = 0;
    }
    for(int i=1;i<size;i++)
    {
        if(myArray[i]<0&&-myArray[i]<minmod)
        {
            minmod = -myArray[i];
            numminmod = i;
        }
        else if(myArray[i]>0&&myArray[i]<minmod)
        {
            minmod=myArray[i];
            numminmod = i;
        }
    }
    cout<<"Number if minimal element "<<numminmod+1<<endl;
    return 0;
}


Добавлено @ 12:13
2-я часть
Код

int main()
{
    const int size = 5; //n элементов
    int myArray[size]={0};
    for(int i=0;i<size;i++)
    {
        cout<<"enter "<< i <<"element of array";
        cin>>myArray[i];//инициализируем массив
    }
    cout<<"your array"<<endl;
    for(int i=0;i<size;i++)
    {
        cout<<myArray[i]<<" ";
    }
    cout<<endl;
    int summ=0;//сумма модулей
    int index; //индекс отрицательного элемента
    for(int i=0;i<size;i++)
    {
        if(myArray[i]<0)
        {
            index=i;
            break;
        }
    }
    for(int i=index;i<size;i++)
    {
        cout<<myArray[i]<<" ";
    }
    cout<<endl;
    for(int i=index+1;i<size;i++)
    {
        if(myArray[i]<0)
            summ += (-myArray[i]);
        else
            summ += myArray[i];
    }
    cout<<"Summ is "<<summ<<endl;
    return 0;
}

Код

int main()
{
    const int size = 5; //n элементов
    int myArray[size]={1,2,3,8,12};
    for(int i=0;i<size;i++)
    {
        cout<<"enter "<< i <<"element of array";
        cin>>myArray[i];//инициализируем массив
    }
    cout<<"your array"<<endl;
    for(int i=0;i<size;i++)
    {
        cout<<myArray[i]<<" ";
    }
    cout<<endl;
    int min;//нижний предел
    int max; //верхний предел
    cout<<"Enter min ";
    cin>>min;
    cout<<"Enter max ";
    cin>>max;
    int tmp[size]={0};
    int k=0;
    for(int i=0;i<size;i++)
    {
        if(myArray[i]<min||myArray[i]>max)
        {
            tmp[k]=myArray[i];
            ++k;
        }
    }
    for(int i=0;i<size;i++)
    {
        cout<<tmp[i]<<" ";
    }
    cout<<endl;
    return 0;
}
[


Это сообщение отредактировал(а) susanin - 11.6.2008, 12:42
PM MAIL   Вверх
valbal
Дата 11.6.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



полный код нужон ) вот уже есть что то спасибо susanin, а две части в чем отличае!?!? =) можно одной!?!? 
PM MAIL   Вверх
susanin
Дата 11.6.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



valbal, да это сайт или инет глюканул,.. два раза загрузил.. все подправил...
PM MAIL   Вверх
valbal
Дата 11.6.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



чо то помоему попрежнему два разных кода ) я блондинко  чорт )
PM MAIL   Вверх
Rififi
Дата 11.6.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код
//#include "stdafx.h" // для Visual C++

#include <functional>
#include <algorithm>
#include <numeric>
#include <stdexcept>
#include <iostream>
#include <iterator>
#include <math.h>

// требуемая погрешность вычислений вещественных чисел
static const float eps = 0.01f;

// вспомогательные функции для сравнения вещественных чисел
template <typename T> inline bool equal(T left, T right) { return fabs(left - right) < eps; }
template <typename T> inline bool less_equal(T left, T right) { return equal(left, right) || left < right; }
template <typename T> inline bool greater_equal(T left, T right) { return equal(left, right) || left > right; }

// Получить размер статического массива
template <typename T, const size_t N>
inline size_t array_count(const T (&)[N])
{ return (N); }


// ----------------------------------------------------------------------
// 1) номер минимального по модулю элемента массива
// ----------------------------------------------------------------------

// сравнение модулей элементов
template <typename T>
struct fabs_less : public std::binary_function<T, T, bool>
{
    typedef std::binary_function<T, T, bool> base_type;
    typedef typename base_type::first_argument_type first_argument_type;
    typedef typename base_type::second_argument_type second_argument_type;
    typedef typename base_type::result_type result_type;

    result_type operator()(const first_argument_type& v1, const second_argument_type& v2) const
    {
        return fabs(v1) < fabs(v2);
    }
};

// номер минимального по модулю элемента массива
template <typename T>
inline size_t min_position(const T* first, const T* last)
{
    const T* it = std::min_element(first, last, fabs_less<T>());
    return std::distance(first, it);
}


// ----------------------------------------------------------------------
// 2) сумму модулей элементов массива, расположенных после первого отрицательного элемента
// ----------------------------------------------------------------------

// Обобщенная функция сложения по условию
template <typename T, typename UnaryPred, typename BinaryPred>
inline T sum_if(const T* first, const T* last, T val, UnaryPred _if, BinaryPred _pred)
{
    const T* it = std::find_if(first, last, _if);
    if (it == last)
        throw std::runtime_error("Нет отрицательных элементов");

    return std::accumulate(++it, last, val, _pred);
}

// использование обобщеной функции сложения:
// сумма модулей элементов массива, расположенных после первого отрицательного элемента
template <typename T>
inline T sum(const T* first, const T* last)
{
    return sum_if(first, last, T(), std::bind2nd(std::less<T>(), T()), std::plus<T>());
}


// ----------------------------------------------------------------------
// 3) Сжать массив, удалив из него все элементы, величина которых находится в интервале [а,в]
// освободившиеся в конце массива элементы заполнить нулями.
// ----------------------------------------------------------------------

// Определение попадания в интервал [a..b]
template <typename T>
struct interval : public std::unary_function<T, bool>
{
    typedef std::unary_function<T, bool> base_type;
    typedef typename base_type::argument_type argument_type;
    typedef typename base_type::result_type result_type;

    interval(const std::pair<T, T>& bound) : bound_(bound) {}
    result_type operator()(const argument_type& v) const
    {
        return greater_equal(v, bound_.first) && less_equal(v, bound_.second);
    }

    const std::pair<T, T> bound_;
};

// Сжать массив
template <typename T>
inline void shrink(T* first, T* last, const std::pair<T, T>& bound)
{
    std::fill(std::remove_if(first, last, interval<T>(bound)), last, T());
}

int main()
{
    float arr[] = { /* Заполнить массив */ };
    const size_t N = array_count(arr);

    // Исходный массив
    std::copy(arr, arr+N, std::ostream_iterator<float>(std::cout, " "));
    std::cout << std::endl;

    std::cout << min_position(arr, arr+N) << std::endl; // Идекс минимального элемента
    std::cout << sum(arr, arr+N) << std::endl; // Сумма
    
    const float a = ...; // нижняя граница
    const float b = ...; // верхняя граница
    shrink(arr, arr+N, std::make_pair(a, b));
    
    // Массив после сжатия
    std::copy(arr, arr+N, std::ostream_iterator<float>(std::cout, " "));
    std::cout << std::endl;

    return (0);
}


Это сообщение отредактировал(а) Rififi - 11.6.2008, 13:14
PM MAIL   Вверх
susanin
Дата 11.6.2008, 13:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Rififi, судя из сложностей задач, можно предположить, что valbal новичок в с++... (возможно студент 1 курса).. так вот как вы представляете себе как он будет сдавать и разбираться в вашем коде? smile 
PM MAIL   Вверх
Rififi
Дата 11.6.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



susanin
когда писал код, этого
Цитата(valbal @  11.6.2008,  12:33 Найти цитируемый пост)
я блондинко

еще не было smile
но главное при использовании stl заключается в том, что в коде не надо особо разбираться - его можно читать по диагонали. глаза выхватывают из текста названия стандартных алгоритмов, мозг понимает что тут ващще происходит :gigi: при этот, естессно, надо быть в курсе того, что из себя представляет стандартная библотека шаблонов.
PM MAIL   Вверх
anatox91
Дата 11.6.2008, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

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



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


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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