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

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

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

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

24.02.2012, 23:29. Просмотров 1026. Ответов 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;
}
Спасибо за ваши ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 23:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаления из массива элементов меньше одного (C++):

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

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

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

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

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

Вывести на экран элементы и индексы элементов, которые меньше среднего значения всех элементов массива - C++
Написать программу, в которой: 1. Задать массив целых чисел длиной согласно варианту. 2. Элементы массива задать случайным образом в...

20
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
24.02.2012, 23:33 #2
stl::stable_partition + std::replace_if
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
24.02.2012, 23:33 #3
leha-demi,
C++
1
2
#include <algorithm>
using  std::remove_if;
уберет то что укажешь в предикате, а именно условие с модулем. места от убранных значений будут заполнены нулями и помещены в конец
последовательности
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
24.02.2012, 23:55  [ТС] #4
Спасибо=) Только без библиотеки stl, а по такому типу как у меня можно?

Добавлено через 18 минут
И еще когда компилирую свой проект, выдает ошибку:
mas: невозможно присваивать значения переменной, которая объявлена как константа
0
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
25.02.2012, 00:00 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
#include <iterator>
#include <cmath>
#include <vector>
 
int main()
{
    std::vector <double> vec(std::istream_iterator <double> (std::cin), std::istream_iterator <double> ());
    std::fill(std::remove_if(vec.begin(), vec.end(), [] (double num) { return abs(num) < 1.0; }), vec.end(), 0.0);
    std::copy(vec.begin(), vec.end(), std::ostream_iterator <double> (std::cout, " "));
    std::cout<<std::endl;
    system("pause");
    return 0;
}
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 00:01  [ТС] #6
Цитата Сообщение от leha-demi Посмотреть сообщение
Спасибо=) Только без библиотеки stl, а по такому типу как у меня можно?

Добавлено через 18 минут
И еще когда компилирую свой проект, выдает ошибку:
mas: невозможно присваивать значения переменной, которая объявлена как константа
спасибо, но мне без stl, а примитивно совсем надо)
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.02.2012, 00:24 #7
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
template<typename T>T* module_sort(T* mass, int size)
{
 
    T* tmp = mass;
    int lent = size;
    int count = size-1;
    while(--lent)
    {
        if(abs(*tmp)<1)
        {           
            while(abs(*tmp)<1&&*tmp!=0)
            {
            *tmp=*(tmp+(count));
            *(tmp+(count)) = 0;
            --count;
            }           
        }
                --count;//уменьшать надо) а то мусор черпнет
        ++tmp;
    }
    return mass;
};
int main()
{
 
double mass2 [] = {-0.5,1,3,-6,0.2};
module_sort(mass2,5);
return 0;
}
вот тебе примитив примитив примитивович
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
25.02.2012, 00:32 #8
Вот реализация
C++
1
2
3
4
5
6
7
8
9
template < typename ForwardIterator, typename Predicate >
  ForwardIterator remove_if ( ForwardIterator first, ForwardIterator last,
                              Predicate pred )
{
  ForwardIterator result = first;
  for ( ; first != last; ++first)
    if (!pred(*first)) *result++ = *first;
  return result;
}
C++
1
2
3
4
5
template < typename ForwardIterator, typename T >
  void fill ( ForwardIterator first, ForwardIterator last, const T& value )
{
  while (first != last)  *first++ = value;
}
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 00:49  [ТС] #9
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0 ; i<n ; i++)
   
  if (abs(mas[i])<1) 
{
     for (int j=i ; j<n-1 ; j++)
         mas[j]=mas[j]+1;
      mas[n-1]=0;
      --n;
      --i;
  }
Вот нашел что то похожее, мне лучше такого типа) Когда компилирую выдает ошибку:
"mas: невозможно присваивать значения переменной, которая объявлена как константа"
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
25.02.2012, 01:37 #10
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
#include <iostream>
#include <cmath>
 
/*
 * 
 */
 
int main( int argc, char** argv ) {
 
    const int size = 10;
    double a[ size ] = { 3, -3, 0.1, -0.4, 0.5, 5, 4, 7, -0.2, 10 };
    int tmpSize = size;
    
    for ( int i = 0; i < size; i++ )
    std::cout << a[ i ] << ' ';
    std::cout << std::endl;
    
    for ( int i = 0; i < tmpSize; i++ ) {
    if ( std::abs( a[ i ] ) < 1 ) {
        for ( int j = i; j < tmpSize - 1; j++ )
        a[ j ] = a[ j + 1 ];
        
        a[ tmpSize-- ] = 0;
        i--;
    }
    }
    
    for ( int i = 0; i < size; i++ )
    std::cout << a[ i ] << ' ';
    std::cout << std::endl;
 
    return 0;
}
Вывод
1
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 11:19  [ТС] #11
Цитата Сообщение от Toshkarik Посмотреть сообщение
) {
Сделал по вашему примеру, опять пишет две ошибки.
mas: невозможно присваивать значения переменной, которая объявлена как константа.:
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
25.02.2012, 11:24 #12
Выкладывайте код
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 11:25  [ТС] #13
C++
1
2
3
4
5
6
7
8
9
10
11
void mass_zip(const int *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--;
         }
}
Вот функция
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
25.02.2012, 11:27 #14
Прям как сговорились В соседней теме такая же проблема, вы передаете указатель на константные данные, и хотите их модифицировать
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 11:30  [ТС] #15
Понятно, а можно как то разименовать, или же только использовать динамическую?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 11:30
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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