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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.67
YaDenis03
0 / 0 / 0
Регистрация: 18.12.2011
Сообщений: 139
#1

Сжать массив, удалив из него все элементы, модуль которых не превышает 1. - C++

25.10.2012, 00:04. Просмотров 3166. Ответов 4
Метки нет (Все метки)

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

Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2012, 00:04     Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Посмотрите здесь:

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

Сжать массив, удалив из него все элементы, модуль которых не превышает единицу - C++
Задание: Сжать массив, удалив из него все элементы, модуль которых не превышает единицу. Освободившиеся в конце массива элементы...

Сжать массив, удалив из него все элементы. модуль которых не превышает, заданного числа. - C++
Дан одномерный массив. Сжать массив, удалив из него все элементы. модуль которых не превышает, заданно 20 числа а.

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

Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1 - C++
Помогите пожалуйста написать программу: Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не...

Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не превышает 1 - C++
Помогите пожалуйста написать программу. Дан целочисленный массив размера N. Сжать массив, удалив из него все элементы, модуль которых не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
25.10.2012, 09:36     Сжать массив, удалив из него все элементы, модуль которых не превышает 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
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
#define N 20
 
int main()
{
    int* A = new int[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = ((int)(rand() % (2 * N) - 0.5 * N));
        printf("%d ",A[i]);
    }
 
    int k1 = 0, k2 = N-1;
    while (A[k1] > 0 && k1 < N) k1++;
    while (A[k2] > 0 && k2 >= 0) k2--;
 
    int sum1 = 0, sum2 = 0;
    for (int t = 0; t < N; t++)
    {
        if ((t % 2) > 0) sum1+=A[t];
        if ((t >= k1) && (t <= k2)) sum2+=A[t];
    }
 
    printf("\nsum1 = %d sum2 = %d\n", sum1, sum2);
             
    _getch();
 
    return 0;
}
http://liveworkspace.org/code/8764df...75c64f364c459e
Миниатюры
Сжать массив, удалив из него все элементы, модуль которых не превышает 1.  
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
25.10.2012, 11:34     Сжать массив, удалив из него все элементы, модуль которых не превышает 1. #3
Цитата Сообщение от YaDenis03 Посмотреть сообщение
Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Для этого можно воспользоваться стандартной функцией remove_if
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
/*
В одномерном массиве, состоящем из 20 вещественных элементов, вычислить:
...
 Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
*/
 
#include <iostream>
#include <algorithm>
#include <functional>
 
const int N = 20;
double getRand(void) { return 0.2 * (rand() % (2 * N)); }
 
int main(void)
{
    setlocale(0, "rus");
    double Array[N];
    std::generate(Array, Array + N, getRand);
    std::cout << "Исходный массив: ";
    std::copy(Array, Array + N, std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
 
    double * M = std::remove_if(Array, Array + N, std::bind2nd(std::less<double>(), 1.0));
    int NewSize = std::distance(Array, M);
 
    std::cout << "Сжатый массив: ";
    std::copy(Array, Array + NewSize, std::ostream_iterator<double>(std::cout, " "));
    std::cout << std::endl;
 
    system("pause");
}
Правда, тут нет вычисления модуля числа. С модулем должно быть так:
C++
1
2
std::remove_if(Array, Array + N,
                std::compose1(std::bind2nd(std::less<double>(), 1.0), abs));
Но моя стандартная библиотека не содержит шаблона compose1 почему-то. Поэтому не могу проверить.

Добавлено через 27 минут
Можно написать свою функцию сравнения. Так будет даже нагляднее:
C++
1
2
3
4
5
6
7
8
9
10
11
bool IsLessThanOne(double X)
{
    return (abs(X) < 1.0);
}
 
int main(void)
{
// ...
    double * M = std::remove_if(Array, Array + N, IsLessThanOne);
// ...
}
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 11:36     Сжать массив, удалив из него все элементы, модуль которых не превышает 1. #4
вы уже создавали подобную тему 1 раз не вижу смысла создавать её еще раз
одномерный массив, состоящий из 20 вещественных элементов
у вас там был коментарий...
Цитата Сообщение от YaDenis03 Посмотреть сообщение
ошибок много выдаёт...(
действительно если вы тупо скопипастили мой код то будет куча ошибок потому что не инициализирован mas1, в который помещается урезанный массив mas. достаточно перед всем что я написал вставить
C++
1
int mas1[20];
и все заработает.
единственное у меня была помарка что четность номера я считал как i%2==0, но т.к. массив начинается с 0 то соответственно сума считалась нечетных номеров
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 12:20     Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Еще ссылки по теме:

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b]. - C++
| Исходные данные - n вещественных величин. || При написании программы используйте динамические массивы. 1. Найти...

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

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b] - C++
Сжать массив, удалив из него все элементы, модуль которых находится в интервале . Освободившиеся в конце массива элементы заполнить...

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b] - C++
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1.) максимальный элемент массива; 2.) сумму элементов массива,...

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

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b] - C++
Всем здравствуйте, нужна ваша помощь , написать программу на DEV C++ Очень буду благодарен ! В одномерном массиве, состоящем из n...


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

Или воспользуйтесь поиском по форуму:
zitxbit
Master C/C++
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
25.10.2012, 12:20     Сжать массив, удалив из него все элементы, модуль которых не превышает 1. #5
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <memory.h>
 
#define N 20
 
#define __countof(p) sizeof(p) / sizeof(p[0]) \
 
int main()
{
    double* A = new double[N+1];
    memset((void*)A, 0x00, sizeof(double) * (N + 1));
 
    for (int i = 0; i < N; i++)
    {
        A[i] = (rand() % (2 * N) - 0.5 * N  + 1) / 65535 * 10000;
        printf("%f ",A[i]);
    }
 
    int k1 = 0, k2 = N-1;
    while (A[k1] > 0 && k1 < N) k1++;
    while (A[k2] > 0 && k2 >= 0) k2--;
 
    double sum1 = 0, sum2 = 0;
    for (int t = 0; t < N; t++)
    {
        if ((t % 2) > 0) sum1+=A[t];
        if ((t >= k1) && (t <= k2)) sum2+=A[t];
    }
 
    printf("\n\nsum of odds = %lf sum between negatives = %lf\n\n", sum1, sum2);
 
    for (int q = 0; A[q] != 0.00 && q < N+1; q++)
    {
        double val = fabs(A[q]); if (val < 1) q--;
        for (int n = q+1; A[n] != 0.00 && val < 1 && n < N+1; n++)
             A[n] = A[n+1];
    }
 
    for (int m = 0; A[m] != 0.00 && m < N+1; m++)
        printf("%f ",A[m]);
    printf("\n");
 
    _getch();
 
    return 0;
}
http://liveworkspace.org/code/7f36db...bc88e04ee96d55
Миниатюры
Сжать массив, удалив из него все элементы, модуль которых не превышает 1.  
Yandex
Объявления
25.10.2012, 12:20     Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Ответ Создать тему
Опции темы

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