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

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

Войти
Регистрация
Восстановить пароль
 
 
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
#1

Удаления из массива элементов меньше одного - C++

24.02.2012, 23:29. Просмотров 1014. Ответов 20
Метки нет (Все метки)

Добрый вечер, помогите пож. вот с такой задачкой..
Удалить элементы из массива, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями. Например:
(2, 0.5, 3, -0.5, -4)  (2, 3, -4, 0, 0)
Вот пытался сделать, только не уверен что правильно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int mass_zip(const int *mas,int n)
{   
    int temp; 
    for(int i=0;i<n;i++)
        temp = abs(mas[i]);
        for(int i=0;i<n;i++)
    if(temp < 1)
        {
            mas[i]=0;
            mass=mas[i];
        }
return mass;
}
Спасибо за ваши ответы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 23:29     Удаления из массива элементов меньше одного
Посмотрите здесь:

Определить количество элементов массива, которые меньше предыдущего и меньше последующего - C++
В целочисленном,одномерном массиве определить кол-во элементов, которые меньше предыдущего и меньше последующего

Переписать из одного массива в другой все элементы, значения которых больше -1.8 и меньше 2.7 - C++
Сформировать вещественный массив A,элементами которого являются случайные числа из диапазона .Переслать из него в массив A2 все элементы ,...

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

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

Вычислить Среднее арифм. значение элементов массива и число пар элементов которых сосед слева (т.е. индекс которого на 1 меньше) больше по величине - C++
Разработать функцию, обрабатывающую массив и вычисляющую две величины. Кроме того, разработать две функции, которые вычисляют те же самые...

Написать функцию удаления из заданного массива отрицательных элементов - C++
Написать функцию удаления из заданного массива отрицательных элементов, использовать ее для массива целых и вещественных чисел.

Найти количество элементов массива, меньше 50 - C++
дан двумерный массив целых чисел .Определить 1) сумму чётных элементов 2)количество элементов массива , меньше 50 3)среднее...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
25.02.2012, 11:32     Удаления из массива элементов меньше одного #16
Просто уберите квалификатор const
C++
1
void mass_zip(const int *mas,int n)
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 11:41  [ТС]     Удаления из массива элементов меньше одного #17
Теперь выдает такие ошибки:

error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl summ_otr_element(double const *,int)" (?summ_otr_element@@YAHPBNH@Z) в функции _main

ссылка на неразрешенный внешний символ "int __cdecl summ_perv_pol(double const *,int)" (?summ_perv_pol@@YAHPBNH@Z) в функции _main

fatal error LNK1120: 2 неразрешенных внешних элементов

Вот полный код:

C++
1
2
3
4
header.h
int summ_perv_pol(const double *mas,int n);
int summ_otr_element(const double *mas,int n);
void mass_zip(double *mas,int n);
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
header.cpp
#include "stdafx.h"
#include <math.h>
 
double summ_perv_pol(const double *mas,int n)
{
    double sum=0;
    for(int i=0; i<(n/2); i++)
    {
        sum +=mas[i];
    }
return sum;
}
 
double summ_otr_element(const double *mas,int n)
{   double sum_otr = 0;
    int i1=0;
    int i2=0;
    
    for(int i=0;i<n;i++)
        if (mas[i]<0)
        {
            i1=i+1;
            break;
        }
    for(int i=n-1;i>=0;i--)
        if (mas[i]<0)
        {
            i2=i-1;
            break;
        }
    for(int i=i1;i<=i2;i++)
    {
        sum_otr += mas[i];
    }
     
return sum_otr;
}
 
void mass_zip(double *mas,int n)
{   
    int temp = n;
     for(int i=0;i<temp;i++)
         if (abs(mas[i]) < 1 )
         {
             for (int j = i; j < temp - 1; j++)
              mas[j] = mas[j+1];
              mas[temp] = 0;
            i--;
         }
}
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
main.cpp
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include "leha.h"
using namespace std;
 
int main()
{   const int n=6;
    double sum;
    double sum_otr;
    double mas[n]={1.6,0,-3.3,-0.5,5,-3}; 
    printf("Ishod:\n"); 
    for (int i = 0; i < n; i++) 
    {
        printf("%d ",mas[i]);
    }
    
    sum = summ_perv_pol(mas,n);
    printf("\n\nSumma pervoi polovinu: %d",sum);
    
    sum_otr = summ_otr_element(mas,n);
    printf("\n\nSumma megdy otrizatel elementamy: %d",sum_otr);
 
    mass_zip(mas,n);
    for(int i=0;i<n;i++)
    printf("\n\nSumma megdy otrizatel elementamy: %d",mas[i]);
 
    _getch();
    return 0;
}
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 11:51  [ТС]     Удаления из массива элементов меньше одного #18
Ой, нашел ошибку=)
Вот результат выдает:
(В чем может быть ошибка?)
Миниатюры
Удаления из массива элементов меньше одного  
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.02.2012, 13:10     Удаления из массива элементов меньше одного #19
leha-demi, тебе уже дали рабочий вариант от Toshkarik.
единственное если у него встретится 0, то вывод обрезается на 1 символ.
у меня нули вообще не перемещал. Я поправил.

то что у тебя мусор в массиве - проверяй циклы.

код
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
template<typename T>T* module_sort(T* mass, int size)
{
 
    T* tmp = mass;
    int lent = size;
    int count = size-1;
    T* Zero =0;
    while(--lent)
    {
        if(*tmp==0)
        {
            int val = lent;
            T* t2 = tmp;
            while(*(t2)==0&&val>0){
                ++t2;--val;}
 
            *tmp = *t2;
            *t2 = 0;
        }
 
        if(abs(*tmp)<1)
        {
 
            while(abs(*tmp)<1&&*tmp!=0)
            {
            *tmp=*(tmp+(count));
            *(tmp+(count)) = 0;
          --count; 
        
            }           
        }
        if(count>0)
        --count;
        ++tmp;
    }
    return mass;
}
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
25.02.2012, 13:34     Удаления из массива элементов меньше одного #20
Да нет, у меня вроде ничего не урезается, единственное заметил, что последняя цифра дублируется. Это из за смещения на 1 >< Можно или tmpSize инициализировать как
C++
1
tmpSize = size - 1;
или просто поменять постинкремент на преинкремент вот тут
C++
1
a[ tmpSize-- ] = 0;
C++
1
a[ --tmpSize ] = 0;
Добавлено через 6 минут
В printf указан у вас целочисленный тип, когда выводите с точкой. Поменяйте %d на %f
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 23:07     Удаления из массива элементов меньше одного
Еще ссылки по теме:

Из массива A удалить те цепочки нечетных элементов, в которых нет ни одного элемента из массива B - C++
Пожалуйста помогите! Из массива A удалить те цепочки нечетных элементов, в которых нет ни одного элемента из массива B. Пример: ...

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

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

Найти сумму элементов массива, превышающих -10 и меньше 10 - C++
в одномерном массиве состоящем из N целых элементов найти сумму превышающих -10 и меньше 10

Число элементов массива, не больше максимального, но и не меньше минимального - C++
Число элементов массива Х,которые не превосходят максимального элемента масива Y,и в тоже время не меньше его минимального элемента.


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

Или воспользуйтесь поиском по форуму:
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 23:07  [ТС]     Удаления из массива элементов меньше одного #21
Разобрался уже=) Тема закрыта!
Yandex
Объявления
25.02.2012, 23:07     Удаления из массива элементов меньше одного
Ответ Создать тему
Опции темы

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