Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.95
Fish24
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 46
#1

Вычислить сумму элементов массива с нечетными номерами - C++

03.12.2013, 21:17. Просмотров 2795. Ответов 3
Метки нет (Все метки)

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
— сумму элементов массива с нечетными номерами;
— сумму элементов массива, расположенных между первым и последним отрицательными элементами.
Сжать массив, удалив из него все элементы, модуль которых не превышает единицу. Освободившиеся в конце массива элементы заполнить нулями.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2013, 21:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить сумму элементов массива с нечетными номерами (C++):

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

Вычислить сумму элементов массива с нечетными номерами - C++
Вычислить: 1)сумму элементов массива с нечетными номерами 2)сумму элементов массива, расположенных между первым и последним...

Вычислить сумму элементов массива с нечетными номерами - C++
Есть условие задачи: В одномерном массиве, состоящем из 20 вещественных элементов, вычислить: 1) сумму элементов массива с нечетными...

Вычислить сумму элементов массива с нечетными номерами - C++
Составить схему и разработать программу на языке С++ для обработки одномерного массива, состоящего из n элементов, в соответствии с...

Вычислить сумму элементов массива с нечетными номерами - C++
Народ, помогите пожалуйста. Программировать не умею, препод не объясняет, только требует результатов, гразиться, поставить не зачет мне и...

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

3
newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 555
04.12.2013, 06:39 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Fish24,
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <ctime>
using namespace std;
int main () {
    srand(time(0));
    int n,i,j,last;
    double sum_odd=0,sum_mid=0;
    //создание массива размера n и инициализация
    cout<<"enter size:\n";
    cin>>n;
    double* arr=new double[n];
    for (i=0;i<n;i++) {
        arr[i]=(rand()%100)/10.-5;
        cout<<arr[i]<<" ";
    }
    //вычисление суммы элементов с нечетными номерами
    for (i=0;i<n;i++) 
        if (i%2)
            sum_odd+=arr[i];
    cout<<"\nSumm of odd positions: "<<sum_odd<<endl;
    //поиск последнего отрицательного элемента
    for (i=last=n-1;i!=0;i--)
        if (arr[i]<0) {
            last=i;
            break;
        }
    //вычисление суммы между первым и последним отрицательным
    for (i=0;i<last;i++){
        if (arr[i]<0) {
            for (j=i+1;j<last;j++)
                    sum_mid+=arr[j];
            break;
        }   
    }
    cout<<"Summ between first and last negative: "<<sum_mid<<endl;
    //сжимание массива
    cout<<"Squeezed array:\n";
    for (i=0;i<n;i++)
        if ( (abs(arr[i]))<=1 ) {
            for (j=i;j<n;j++) 
                arr[j]=arr[j+1];
            arr[n-1]=0;
        }
    //вывод результата
    for (i=0;i<n;i++) 
        cout<<arr[i]<<" ";
    cout<<endl;
 
    system ("pause");
    return (0);
}
2
Fish24
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 46
04.12.2013, 19:31  [ТС] #3
Спасибо большое.
0
olichka86
2 / 2 / 1
Регистрация: 29.10.2013
Сообщений: 80
01.07.2015, 16:46 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от newb_programmer Посмотреть сообщение
for (i=0;i<n;i++)
* * * * if ( (abs(arr[i]))<=1 ) {
* * * * * * for (j=i;j<n;j++)
* * * * * * * * arr[j]=arr[j+1];
* * * * * * arr[n-1]=0;
* * * * }
По-моему, Ваш код валится на массиве, где все элементы <=1. Сделала похожим образом, дала на тест 1 1 1 1 - результат 1 1 0 0. Надо думать дальше самой) Или я чего-то недосмотрела...

Добавлено через 12 минут
Или не все, а просто n первых элементов, которые автоматом "загоняются" в начало массива, и больше не перепроверяются на валидность...

Добавлено через 23 минуты
У меня работает такой вариант кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < m; m--) {
        for (int k = 0; k < m; k++) {
            if (*(resultArray + k) <= 1) {
                for (int j = k; j < n - 1; j++) {
                    int tmp = *(resultArray + j);
                    *(resultArray + j) = *(resultArray + j + 1);
                    *(resultArray + j + 1) = tmp;
                }
                *(resultArray + n - 1) = 0;
            }
        }
    }
Но меня тошнит от "простоты и эффективности" этого алгоритма (((((
Пожалуйста, может кто-нибудь посоветует что-нибудь более изящное?

Добавлено через 22 минуты
Последний вариант, который мне удалось придумать. Всего 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
25
26
int* sortArray(int *arr, int n) {
    int *resultArray = new int[n];
    int *mask = new int[n];
 
    for (int i = 0; i < n; i++){
        if (*(arr + i) <= 1) {
            *(mask + i) = 1;
        }
    }
 
    int maskCounter = 0;
    int arrCounter = 0;
    for (int i = 0; i < n, maskCounter < n; i++, maskCounter++){
        if (*(mask + i) != 1) {
            *(resultArray + arrCounter) = *(arr + i);
            arrCounter++;
        }       
    }
 
    for (int i = arrCounter; i < n; i++) {
        *(resultArray + i) = 0;
    }
    
 
    return resultArray;
}
Добавлено через 1 минуту
Последний вариант, который мне удалось придумать. Всего 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
25
26
int* sortArray(int *arr, int n) {
    int *resultArray = new int[n];
    int *mask = new int[n];
 
    for (int i = 0; i < n; i++){
        if (*(arr + i) <= 1) {
            *(mask + i) = 1;
        }
    }
 
    int maskCounter = 0;
    int arrCounter = 0;
    for (int i = 0; i < n, maskCounter < n; i++, maskCounter++){
        if (*(mask + i) != 1) {
            *(resultArray + arrCounter) = *(arr + i);
            arrCounter++;
        }       
    }
 
    for (int i = arrCounter; i < n; i++) {
        *(resultArray + i) = 0;
    }
    
        delete []mask;
    return resultArray;
}
Кстати, было бы интересно узнать, как мне освободить память из-под resultArray. Ведь удалить его я не могу, мне вернуть его надо, а после returna уже ничего не напишешь?
0
01.07.2015, 16:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2015, 16:46
Привет! Вот еще темы с ответами:

В одномерном массиве вычислить сумму элементов с нечетными номерами - C++
В одномерном массиве, состоящем из 20 вещественных элементов, вычислить: 1) сумму элементов массива с нечетными номерами; 2) сумму...

Найти сумму элементов массива с нечетными номерами - C++
помогите пожалуйста с задачей! В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) сумму элементов массива с...

Найти сумму элементов массива с нечетными номерами - C++
Помогите пожалуйста!1 задание сделала,2 не знаю как В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) Сумму...

Посчитать сумму элементов массива с нечетными номерами - C++
Создать массив из 10 целых чисел. Заполнить массив случайным образом. Пользуясь указателем на массив целых чисел, посчитать сумму элементов...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru