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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Преобразование массива 
:(
    Опции темы
kolashik
  Дата 12.10.2009, 17:05 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Эксперты прошу у вас помощи, в С++ плохо понимаю что да как, не изучал ни когда, а на учебе задоли сделать лабу((
ПОМОГИТЕ ПОЖАЛУЙСТА=)))


ЗАДАНИЕ:

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

1. минимальный по модулю элемент массива;
2. сумму модулей элементов массива, расположенных после первого элемента,
   равного нулю.

 Преобразовать массив таким образом, чтобы в первой его половине
   располагались элементы, стоявшие в четных позициях, а во второй
   половине - элементы, стоявшие в нечетных позициях.

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


Опытный
**


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

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



Пары не надо прогуливать и учить предметы. А для домашних заданий существует центр помощи.


--------------------
user posted image
PM MAIL   Вверх
bsa
Дата 12.10.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
darkart
Дата 12.10.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kolashik @  12.10.2009,  17:05 Найти цитируемый пост)
1. минимальный по модулю элемент массива;
2. сумму модулей элементов массива, расположенных после первого элемента,
   равного нулю.

Код

#include <cmath>
#include <iostream>
#include <conio.h>

using namespace std;

const unsigned int N = 10;//константа - количество элементов в массиве
const float EPSILON = 1e-3;//константа - точность

//функция ввода массива array
void InputArray( float* array )
{
    for( unsigned int i = 0; i < N; i++ )
        cin >> array[ i ];
}

//функция печати массива array
void PrintArray( const float* array )
{
    for( unsigned int i = 0; i < N - 1; i++ )
        cout << array[ i ] << " ";
    cout << array[ N - 1 ] << endl;
}

//функция возвращает 1 или 2 минимальных по модулю элементов массива
void GetMinAbs( const float* array, float& min, float& min_add )
{
    //инициализация минимумов 0 элементом
    min = array[ 0 ];
    min_add = min;

    float min_abs = fabs( min );//вычисляем модуль минимального элемента

    for( unsigned int i = 1; i < N; i++ )//для последующих элементов
    {
        float elem_abs = fabs( array[ i ] );//вычисляем модуль текущего элемета

        if( elem_abs < min_abs )//если текущий модуль меньше минимального
        {
            min = array[ i ];//запоминаем новый минимум
            min_add = min;//заново инициализируем дополнительный минимум. равный первому
            min_abs = elem_abs;//запоминаем новый модуль минимума
        }
        else if( min != array[ i ] && fabs( elem_abs - min_abs ) < EPSILON )//если минимальный элемент не равен текущему и модуль текущего элемента примерно равен модулю минимального
            min_add = array[ i ];//запоминаем дополнительный элемент
    }
}

//функция возвращает сумму модулей элементов массива после первого нуля
float GetSum( const float* array )
{
    float sum = 0.0f;//инициализация результата - суммы
    unsigned long i = 0;//i - счетчик
    //ищем первый 0 элемент с точностью EPSILON
    while( i < N && fabs( array[ i ] ) >= EPSILON )
        i++;

    //суммируем модули последующих элементов массива
    while( ++i < N )
        sum += fabs( array[ i ] );


    return sum;//возвращаем результат

}

int main()
{
    float array[ N ];//массив из N элементов

    //печать сообщения - введите массив из N элементов
    cout << "Please enter array with " << N << " elements:" << endl;

    //ввод массива
    InputArray( array );

    //печать сообщения - исходный массив
    cout << "Source array:" << endl;

    //печать массива
    PrintArray( array );

    float min, min_add;

    //получаем минимумы
    GetMinAbs( array, min, min_add );

    //печать результата - минимум или минимумы по модулю
    cout << "Min abs element = " << min;
    ( min != min_add )? cout << " and " << min_add : cout << "";
    cout << endl;

    //печать суммы модулей элементов массиво после первого 0
    cout << "Sum of abs elements after 0 = " << GetSum( array ) << endl;

    getch();//ожидаем ввода

    return 0;//возвращаем код ошибки
}

PM MAIL WWW ICQ Skype GTalk   Вверх
ИванМ
Дата 12.10.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(kolashik @  12.10.2009,  17:05 Найти цитируемый пост)
1. минимальный по модулю элемент массива;2. сумму модулей элементов массива, расположенных после первого элемента,   равного нулю.

Код

#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <cmath>
#include <ctime>

const size_t n=10;
double array[n];

bool less_abs(double v1, double v2)
{
    return std::abs(v1)<std::abs(v2);
}

double sum=0;

void add_abs(double v1)
{
    sum+=std::abs(v1);
}

int main(int argc, char* argv[])
{
    srand((unsigned)std::time( NULL ));
    for(int i=0;i<n;i++)
        array[i]=rand()%20-10;

    std::cout<<"Source array:"<<std::endl;
    std::copy(array, array+n, std::ostream_iterator<double>(std::cout, "\n"));
    std::cout<<"Min element by module:"<<std::endl;
    std::cout<<*std::min_element(array, array+n, less_abs)<<std::endl;
    double* it=std::find(array, array+n, 0);
    std::for_each(it, array+n, add_abs);
    std::cout<<"Sum by module of elements greater 0 by index:\n"<<sum<<std::endl;
    system("pause");
    return 0;
}






Это сообщение отредактировал(а) ИванМ - 12.10.2009, 21:47
PM MAIL   Вверх
darkart
Дата 12.10.2009, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ИванМ,
не работает нахождение минимального по модулю элемента для массивов:
1 -1 2 -2 3 -3 4 -4 5 -5
1 1 1 1 1 -1 1 1 1 1

минимальных элементов может быть - 2, -число и +число
PM MAIL WWW ICQ Skype GTalk   Вверх
ИванМ
Дата 12.10.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



darkart, большое спасибо. Упустил этот момент
Код

#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <cmath>
#include <ctime>

const size_t n=10;
double array[n];

bool less_abs(double v1, double v2)
{
    return std::abs(v1)<std::abs(v2);
}

double sum=0;

void add_abs(double v1)
{
    sum+=std::abs(v1);
}

int main(int argc, char* argv[])
{
    srand((unsigned)std::time( NULL ));
    for(int i=0;i<n;i++)
        array[i]=rand()%20-10;

    std::cout<<"Source array:"<<std::endl;
    std::copy(array, array+n, std::ostream_iterator<double>(std::cout, "\n"));
    std::cout<<"Min element by module:"<<std::endl;
    double num=*std::min_element(array, array+n, less_abs);
    if(num==0) std::cout<<0;
    else
    {
        std::cout<<num;
        double *minus_num=std::find(array, array+n, -num);
        if(minus_num<array+n)
            std::cout<<", "<<-num;        
    }
    double* it=std::find(array, array+n, 0);
    std::for_each(it, array+n, add_abs);
    std::cout<<"\nSum by module of elements greater 0 by index:\n"<<sum<<std::endl;
    system("pause");
    return 0;
}




Это сообщение отредактировал(а) ИванМ - 12.10.2009, 22:56
PM MAIL   Вверх
kolashik
Дата 12.10.2009, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я не одной пары еще не прогулял, на лекциях операторы объясняют, и маленькие программки где они применяються=)))....А глобально ни кто не объясняет, а самому туговато, если не изучал С++ вобще=))
СПАСИБО ОГРОМНОЕ ВСЕМ КТО ПОМОГ!!!!!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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