Форум программистов, компьютерный форум CyberForum.ru

В одномерном массиве, состоящем из N вещественных элементов, вычислить - C++

Восстановить пароль Регистрация
 
akimlegend
0 / 0 / 0
Регистрация: 19.08.2013
Сообщений: 15
20.08.2013, 14:25     В одномерном массиве, состоящем из N вещественных элементов, вычислить #1
В одномерном массиве, состоящем из N вещественных элементов, вычислить:
1) номер минимального элемента массива;
2) сумму элементов массива, расположенных между первым и вторым отрицатель¬ными элементами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.08.2013, 14:25     В одномерном массиве, состоящем из N вещественных элементов, вычислить
Посмотрите здесь:

[C++] В одномерном массиве,состоящем из n вещественных элементов ,вычислить... C++
C++ В одномерном массиве, состоящем из n вещественных элементов, вычислить
C++ [C++]в одномерном массиве, состоящем из 10 вещественных элементов, вычислить:
В одномерном массиве, состоящем из вещественных элементов, вычислить: C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Maxak
0 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 47
20.08.2013, 14:40     В одномерном массиве, состоящем из N вещественных элементов, вычислить #2
Цитата Сообщение от akimlegend Посмотреть сообщение
В одномерном массиве, состоящем из N вещественных элементов, вычислить:
1) номер минимального элемента массива;
2) сумму элементов массива, расположенных между первым и вторым отрицатель¬ными элементами.
1) Сортировка пузырьком например, на 0 месте будет стоять минимальный элемент.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template< class T >
void bubbleSort(T* arr, int size)
{
    T tmp;
 
    for(int i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (arr[j + 1] < arr[j]) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}


2) Ну просто перебираешь по массиву и сравниваешь с нулем, например так:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
double SumBetwenTwo(T* arr, int size)
{
double sum = 0;
int i=0;
int flag=0;
do
{
i++;
 
if(T[i]<0){ 
while(T[i+1]>0)
{
sum+=T[i+1];
i++;
}
flag = 1;
}
else{
sum=0;
}
}while(!flag&&(i<(size-1));
 
return sum;
}
fatalis
8 / 8 / 1
Регистрация: 09.08.2013
Сообщений: 68
20.08.2013, 15:32     В одномерном массиве, состоящем из N вещественных элементов, вычислить #3
Искать минимальный елемент массива за O(n^2) это все же моветон )
C++
1
2
3
4
min=A[0]
for (i=0;i<n;i++)
 if(A[i]<min)
  min=A[i]
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
20.08.2013, 16:02     В одномерном массиве, состоящем из N вещественных элементов, вычислить #4
Цитата Сообщение от Maxak Посмотреть сообщение
Сортировка пузырьком например, на 0 месте будет стоять минимальный элемент.
- применять для этого сортировку КРАЙНЕ НЕРАЦИОНАЛЬНО! Найти номер минимального элемента нужно делать простым перебором (за время O(n)), а пузырьковая сортировка - это O(n2). Но самое главное - сортировка здесь - вообще "не в дугу" - ведь при сортировке нумерация элементов нарушается. Минимальный будет первым (или последним), а нужно найти его номер в исходном массиве.

Добавлено через 20 минут
Вот полное решение:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
 
int main(int argc, char* argv[])
{
    int Arr[]={5,6,-7,8,9,-5,5,-9,0};
    int i,k=-1,imin=0,s=0;
    for (i=0; i<sizeof(Arr)/sizeof(int); i++)
    {
        if (Arr[i] < 0)
            if (k < 0) 
                k=-k;
            else
                k=0;
        if ((k > 0) && (Arr[i] >= 0))  s+=Arr[i];
        if (Arr[i] < Arr[imin]) imin=i;
    }
    cout << "sum =" << s << endl;
    cout << "imin=" << imin << endl;
    return 0;
}
Вывод:

sum=17
imin=7
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
20.08.2013, 16:17     В одномерном массиве, состоящем из N вещественных элементов, вычислить #5
C++
1
2
3
4
5
6
7
const size_t N = 6;
double a[N] = {1, -2, 3, -6, 5, 8};
double min = *std::min_element(std::begin(a), std::end(a));
auto predicate = [](double x){ return x < 0; };
auto firstNegative = std::find_if(std::begin(a), std::end(a), predicate);
auto secondNegative = std::find_if(firstNegative + 1, std::end(a), predicate);
double sum = std::accumulate(firstNegative + 1, secondNegative, 0);
Catstail
Модератор
 Аватар для Catstail
21436 / 10221 / 1666
Регистрация: 12.02.2012
Сообщений: 17,096
20.08.2013, 16:28     В одномерном массиве, состоящем из N вещественных элементов, вычислить #6
Somebody, твое решение короче, но работать будет дольше... (два вызова find_if). К тому же, нужно было найти не минимальный элемент, а его номер.

Но и я не без греха: сделал для массива типа int, а нужно было выбрать double. Впрочем, это легко исправить.
MickeyBlueEyes
Студент
 Аватар для MickeyBlueEyes
120 / 131 / 12
Регистрация: 07.04.2011
Сообщений: 503
20.08.2013, 16:32     В одномерном массиве, состоящем из N вещественных элементов, вычислить #7
Только у меня когда вижу ключевое слово "auto" происходит что-то неимоверное внутри ?)
Croessmah
20.08.2013, 16:35
  #8

Не по теме:

Цитата Сообщение от MickeyBlueEyes Посмотреть сообщение
Только у меня когда вижу ключевое слово "auto" происходит что-то неимоверное внутри ?)
А что в нем неимоверного?

Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
20.08.2013, 16:42     В одномерном массиве, состоящем из N вещественных элементов, вычислить #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <algorithm>
#include <numeric>
#include <functional>
#include <iostream>
#include <array>
 
int main()
{
    const int N = 10;
    std::array<double, N> arr = { 1, -1, 3, 4, -5, 6, -7, 8, 9, 10 };
    
    std::function<bool(double)> pred = [](double elem) { return (elem < 0) ? true : false; };
    
    auto fneg = std::find_if(arr.begin(), arr.end(), pred)+1;
    auto sneg = std::find_if(fneg, arr.end(), pred);
    
    std::cout << "Min Pos: " << std::distance(arr.begin(), std::min_element(arr.begin(), arr.end()));
    std::cout << "\nNeg Sum: " << std::accumulate(fneg, sneg, 0) << std::endl;
 
    return 0;
}
Добавлено через 44 секунды

Не по теме:

опоздал.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2013, 16:45     В одномерном массиве, состоящем из N вещественных элементов, вычислить
Еще ссылки по теме:

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
20.08.2013, 16:45     В одномерном массиве, состоящем из N вещественных элементов, вычислить #10
Цитата Сообщение от Catstail Посмотреть сообщение
но работать будет дольше... (два вызова find_if)
Второй find_if ищет, начиная с firstNegative + 1.
Цитата Сообщение от Catstail Посмотреть сообщение
нужно было найти не минимальный элемент, а его номер
OK
C++
1
std::size_t minElementIndex = std::min_element(std::begin(a), std::end(a)) - std::begin(a);
Цитата Сообщение от Catstail Посмотреть сообщение
твое решение короче, но работать будет дольше
Тут сложно сказать. Если массив огромный, то он, конечно, ко второму проходу может из кеша вылететь. Но ведь неизвестно, какие оптимизации используются. Например, простые циклы без лишних if'ов векторизовать легче.
Yandex
Объявления
20.08.2013, 16:45     В одномерном массиве, состоящем из N вещественных элементов, вычислить
Ответ Создать тему
Опции темы

Текущее время: 22:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru