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

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

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

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

24.02.2012, 23:29. Просмотров 1028. Ответов 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
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
25.02.2012, 11:32 #16
Просто уберите квалификатор const
C++
1
void mass_zip(const int *mas,int n)
0
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;
}
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 11:51  [ТС] #18
Ой, нашел ошибку=)
Вот результат выдает:
(В чем может быть ошибка?)
0
Миниатюры
Удаления из массива элементов меньше одного  
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;
}
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 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
0
leha-demi
0 / 0 / 0
Регистрация: 06.11.2010
Сообщений: 125
25.02.2012, 23:07  [ТС] #21
Разобрался уже=) Тема закрыта!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 23:07
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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