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

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

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

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

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

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

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

Сжать массив, удалив из него все элементы, модуль которых не превышает 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 #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
Миниатюры
Сжать массив, удалив из него все элементы, модуль которых не превышает 1.  
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
25.10.2012, 11:34 #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);
// ...
}
1
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
25.10.2012, 11:36 #4
вы уже создавали подобную тему 1 раз не вижу смысла создавать её еще раз
одномерный массив, состоящий из 20 вещественных элементов
у вас там был коментарий...
Цитата Сообщение от YaDenis03 Посмотреть сообщение
ошибок много выдаёт...(
действительно если вы тупо скопипастили мой код то будет куча ошибок потому что не инициализирован mas1, в который помещается урезанный массив mas. достаточно перед всем что я написал вставить
C++
1
int mas1[20];
и все заработает.
единственное у меня была помарка что четность номера я считал как i%2==0, но т.к. массив начинается с 0 то соответственно сума считалась нечетных номеров
0
zitxbit
Master C/C++
88 / 740 / 75
Регистрация: 11.04.2012
Сообщений: 971
25.10.2012, 12:20 #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
0
Миниатюры
Сжать массив, удалив из него все элементы, модуль которых не превышает 1.  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 12:20
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2012, 12:20
Ответ Создать тему
Опции темы

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