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

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

Войти
Регистрация
Восстановить пароль
 
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
#1

Из числовой последовательности найти удалить элементы - C++

15.11.2012, 16:58. Просмотров 614. Ответов 3
Метки нет (Все метки)

Вот такая ситуация... Дани лабораторную, решил её через индексы (нужно использовать STL Deque), прапад дал на защиту туже работу, толкьо написать на итераторах, не получается написать функцию удаления... Помогите плиз =)
Вот задача:
Из числовой последовательности найти удалить все элементы, меньшие, чем B*X, где X – среднее арифметическое трех наибольших элементов последовательности, B – задаваемый пользователем коэффициент.
Вот мой код:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <deque>
#include <conio.h>
#include <stdio.h>
#include <clocale>
#include <LIMITS.H>
using namespace std;
 
int main ()
{
    setlocale(LC_ALL,"rus");
    deque <int> a;
    deque <int>::iterator iter;
    int X=0, b;
    int max1, max2, max3;
    int size;
    int n;
    FILE *in;
    puts(" Считывание данных из файла.");
    if((in=fopen("input.txt","r"))==NULL)
    {
        puts(" Не удалось открыть файл");
        getch();
        return 0;
    }
    fscanf(in,"%d",&size);
    printf(" Размер дека : %d\n", size);
    for(int i=0; i<size ; i++)
    {
        fscanf(in, "%d", &n);
        a.push_back(n);
    }
    printf(" Исходный дек: ");
    for(iter = a.begin(); iter != a.end(); ++iter)
    {
        printf(" %d ", *iter);
    }
    max1=INT_MIN;;
    max2=INT_MIN;
    max3=INT_MIN;
    for(iter = a.begin(); iter != a.end(); ++iter)
    {
        if(*iter>max1)
        {
            max1=*iter;
        }
    }
    for(iter = a.begin(); iter != a.end(); ++iter)
    {
        if(*iter<max1 && *iter>max2)
            {
                max2=*iter;
            }
    }
    for(iter = a.begin(); iter != a.end(); ++iter)
    {
        if(*iter<max1 && *iter<max2 && *iter>max3)
        {
            max3=*iter;
        }
    }
    printf("\n Первый максимальный эллемент = %d\n Второй максимальный эллемент = %d\n Третий максимальный эллемент = %d\n ", max1, max2, max3);
    X=(max1+max2+max3)/3;
    printf("Среднее арифметическое = %d", X);
    printf("\n Введите b = ");
    scanf("%d", &b);э
             //Здесь начинается удаление
    for(iter = a.begin(); iter != a.end(); ++iter)
    {
        if(*iter<(b*X))
        {
            //Здесь надо как то удалять через функцию erase, как именно?
        }
    }
            // Сдесь удаление закончилось
    if(a.empty())
    {
        printf(" Весь дек удален! ");
    }
    printf(" Оставшиеся эллементы: ");
    for(iter = a.begin(); iter != a.end(); ++iter)
    {
        printf(" %d ", *iter);
    }
    getch ();
}
Функция удаления с индексами у меня выглядела так:
C++
1
2
3
4
5
6
7
8
for(int i=0; i<a.size();i++)
    {
        if(a[i]<(b*X))
        {
            a.erase(a.begin()+i);
            i--;
        }
    }
Помогите пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2012, 16:58     Из числовой последовательности найти удалить элементы
Посмотрите здесь:

Вывести элементы числовой последовательности и их количество - C++
The input contains a sequence of positive integers not exceeding 1000. The sequence ends with -1.Total amount of numbers is not more than...

Найти n-й член числовой последовательности, которая определяется рекуррентной формулой - C++
Найти n-й член числовой последовательности, которая определяется рекуррентной формулой: a1 = 1, a2 = 2, a3 = 3, an+1 = 3an + 2an–1 +...

Найти среднее арифметическое тех элементов введенной числовой последовательности, номера которых кратны 3 - C++
Пришёл из армии в универ и ужаснулся то чего от меня потребовали ,а именно на с++ Последовательно вводятся числа, количество которых...

В заданной последовательности удалить простые числа, расположив прочие элементы в порядке, обратном исходному - C++
Даны целые числа {a}_{1},...{a}_{n} где n - целое положительное число (n\leq 100). Если в последовательности простые и непростые числа...

Обработка числовой последовательности - C++
Только начали изучать С++ сразу влипили задачу на обработку числовой последовательности), давали понять что легкая но я как то с этим не...

Минимум и максимум числовой последовательности - C++
Добрый вечер,нужна помощь в написании следующий программы: дано натуральное чисто n и мы вводи числовую последовательность нужно написать...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
15.11.2012, 17:28     Из числовой последовательности найти удалить элементы #2
C++
1
2
3
4
5
    std::array<int, 6> adata = {{4, 5, 6, 4, 7, 4}};
    std::vector<int> vdata(adata.cbegin(), adata.cend());
    
    auto it = std::remove(vdata.begin(), vdata.end(), 4);
    vdata.erase(it, vdata.end());
или так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    std::array<int, 6> adata = {{4, 5, 6, 4, 7, 4}};
    std::vector<int> vdata(adata.cbegin(), adata.cend());
    
    for(auto it = vdata.begin(); it != vdata.end(); )
    {
        if(*it == 4)
        {
            it = vdata.erase(it);
        }
        else
        {
            ++it;
        }
    }
Apelsin199
11 / 11 / 1
Регистрация: 04.11.2012
Сообщений: 127
15.11.2012, 17:31  [ТС]     Из числовой последовательности найти удалить элементы #3
Спасибо I.M.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.11.2012, 18:20     Из числовой последовательности найти удалить элементы
Еще ссылки по теме:

Вывод определенной цифры в числовой последовательности - C++
Доброе утро форумчане, решал задачки для бегинеров на c++ и столкнулся с задачей, до которой никак не могу допереть. Пользователь...

Найти элементы последовательности у которых остаток от деления на М равен N - C++
Дана последовательность, состоящая из N чисел. Найти и вывести полученные результаты: 1. элементы, у которых остаток от деления на М...

Значение минимального положительного члена числовой последовательности заданной соотношением - C++
Используя оператор цикла, составить программу, в которой находится значение минимального положительного члена числовой последовательности...

Найти номера строк, элементы которых образуют симметричные последовательности - C++
Дана целочисленная квадратная матрица порядка n. Найти номера строк: элементы которых образуют симметричные последовательности , а так...

Найти номера строк,элементы каждой из которых симметричные последовательности - C++
Дан квадратный массив порядка n(n&lt;=10).Найти номера строк,элементы каждой из которых симметричные последовательности(полиндромы).

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


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

Или воспользуйтесь поиском по форуму:
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
15.11.2012, 18:20     Из числовой последовательности найти удалить элементы #4
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <deque>
#include <algorithm>
#include <iterator>
 
// генератор случайных целых чисел
class RandomIntegerGenerator {
 private:
  int min, max;
 public:
  RandomIntegerGenerator(int min, int max) : min(min), max(max) {}
  int operator()() { return rand() % (max - min) + min; }
};
 
// вывод deque в поток
template <class T>
std::ostream &operator<<(std::ostream &stream, const std::deque<T> &deque) {
  for (typename std::deque<T>::const_iterator i = deque.begin(); i != deque.end(); ++i)
    stream << *i << ((i < deque.end() - 1) ? ", " : "");
  return stream;
}
 
// возвращает среднее арифметическое значений
template<class InputIterator>
double getAverage ( InputIterator first, InputIterator last) {
  double result;
  int counter = 0;
  while (first!=last) {
    result += *first++;
    ++counter;
  }
  return result / counter;
}
 
int main(int argc, char *argv[]) {
  setlocale(LC_ALL,"rus");
  srand(time(0));
  
  // коэфициент
  double rate = 0.5;
 
  // исходный набор данных  
  std::deque<int> deque;
  // случайное заполнение
  std::generate_n(inserter(deque, deque.begin()), 10, RandomIntegerGenerator(0, 10));
 
  // отсортированый набор данных
  std::deque<int> sortedDeque(deque);
  // сортировка
  std::sort(sortedDeque.begin(), sortedDeque.end());
  
  // среднее значение трех самых больших величин
  double average = getAverage(sortedDeque.end() - 3, sortedDeque.end());
 
  // результирующая последовательность
  std::deque<int> result(deque);
 
  // элементы меньше этого значения будут удалены
  double threshold = rate * average;
 
  // удаление элементов
  result.erase(
    std::remove_if(result.begin(), result.end(), std::bind2nd(std::less<double>(), threshold)),
    result.end()
  );
  
  std::cout << "Исходная последовательность: " << deque << std::endl;
  std::cout << "Значения меньше этого будут удалены: " << threshold << std::endl;
  std::cout << "Результат: " << result << std::endl;
  
  std::cin.get();
  return EXIT_SUCCESS;
}
Yandex
Объявления
15.11.2012, 18:20     Из числовой последовательности найти удалить элементы
Ответ Создать тему
Опции темы

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