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

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

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

Обработка одномерных элементов - C++

09.05.2011, 21:27. Просмотров 540. Ответов 14
Метки нет (Все метки)

есть код для задачи:
Преобразовать заданный массив целых положительных чисел F(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
#include <iostream>
#include <algorithm>
#include <vector>
 
bool is_prime(const int n){
  for(int i = 2; i <= n / 2; i++)
    if( !(n % i) )
      return false;
  return true;
}
 
void print_arr(std::vector<int> &_a){
  for(std::vector<int>::value_type i = 0; i < _a.size(); ++i)
    std::cout << _a[i] << ' ';
}
 
int main(){
  size_t n = 0, cnt_before, cnt_after;
  std::cout << "\nKolichestvo elementov = ";
  std::cin >> n;
  std::vector<int> arr(n);
  for(std::vector<int>::value_type i = 0; i < n; ++i){
    std::cout << "\n" << i + 1 << " element = ";
    std::cin >> arr[i];
  }
  cnt_before = std::count_if(arr.begin(), arr.end(), is_prime);
  struct func{
    int operator() (int _n){
      int __n = _n;
      _n = 0;
      while(__n){
        _n = _n * 10 + __n % 10;
        __n /= 10;
      }
      return _n;
    }
  };
  std::transform(arr.begin(), arr.end(), arr.begin(), func());
  cnt_after = std::count_if(arr.begin(), arr.end(), is_prime);
  std::cout << "\n\nMassiv posle transformacii: ";
  print_arr(arr);
  std::cout << "\n\nProstie elementi do preobrazovaniy = " << cnt_before
            << "\nProstie elementi posle prebrazovaniy = " << cnt_after;
  arr.erase(std::remove(arr.begin(), arr.end(), *std::max_element(arr.begin(), arr.end())), arr.end());
  std::cout << "\n\nMassiv bez max elememta: ";
  print_arr(arr);
  return 0;
}
вроде все написано правильно но у меня он выдает ошибку в этой строчке
C++
1
std::transform(arr.begin(), arr.end(), arr.begin(), func());
помогите кто может, что эта за ошибка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка одномерных элементов (C++):

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

Обработка одномерных массивов - C++
При заданных XT,YT, абциссах X1,X2,..,Xn и ординатах Y1,Y2,..,Yn n точек плоскости XOY определить,в каком числе случаев расстояние...

Обработка одномерных масивов. - C++
1) Найти максимальный элемент массива A. 2) Найти среднее арифметическое элементов массива В. A (25), B (30) Метод сортировки...

Обработка одномерных массивов - C++
1. a) Одномерный массив из 5 элементов целого типа в диапазоне ; b) Дополнить исходный массив, начиная с третьего номера, пятью...

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

Обработка одномерных массивов - C++

14
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
09.05.2011, 21:38 #2
В глобальное пространство видимости вынеси struct func{ ... };. Черт его знает, почему компилятор такой брезгливый.
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 21:41 #3
Какая ошибка-то конкретно, вы напишите, чего гадать.
0
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
09.05.2011, 21:49  [ТС] #4
Цитата Сообщение от Aye Aye Посмотреть сообщение
В глобальное пространство видимости вынеси struct func{ ... };. Черт его знает, почему компилятор такой брезгливый.
а как именно его вынесть?
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
10.05.2011, 12:35 #5
prostoMaks, не в теле main, а перед ним написать.
Ma3a, я не гадалка.
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
10.05.2011, 14:27 #6
Aye Aye, пожелание было адресовано ТСу , если что.
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
10.05.2011, 14:38 #7
Ma3a, извиняюсь!
0
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
10.05.2011, 15:40  [ТС] #8
Цитата Сообщение от Aye Aye Посмотреть сообщение
prostoMaks, не в теле main, а перед ним написать.
выносил, возникает ошибка в самом блоке main
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.05.2011, 15:44 #9
Цитата Сообщение от prostoMaks Посмотреть сообщение
выносил, возникает ошибка в самом блоке main
в transform надо бы написать func без скобочек
0
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
10.05.2011, 15:50 #10
Цитата Сообщение от fasked Посмотреть сообщение
в transform надо бы написать func без скобочек
Эмм, для чего тогда перегружать этот самый оператор, раз мы его не используем ?
0
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
10.05.2011, 16:24 #11
господи боже... титанический труд!
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
#include <iostream>
#include <algorithm>
#include <vector>
 
bool is_prime(const int n){
  for(int i = 2; i <= n / 2; i++)
    if( !(n % i) )
      return false;
  return true;
}
 
void print_arr(std::vector<int> &_a){
  for(std::vector<int>::value_type i = 0; i < _a.size(); ++i)
    std::cout << _a[i] << ' ';
}
struct func{
  int operator() (int _n){
    int __n = _n;
    _n = 0;
    while(__n){
      _n = _n * 10 + __n % 10;
      __n /= 10;
    }
    return _n;
  }
};
int main(){
  size_t n = 0, cnt_before, cnt_after;
  std::cout << "\nKolichestvo elementov = ";
  std::cin >> n;
  std::vector<int> arr(n);
  for(std::vector<int>::value_type i = 0; i < n; ++i){
    std::cout << "\n" << i + 1 << " element = ";
    std::cin >> arr[i];
  }
  cnt_before = std::count_if(arr.begin(), arr.end(), is_prime);
  std::transform(arr.begin(), arr.end(), arr.begin(), func());
  cnt_after = std::count_if(arr.begin(), arr.end(), is_prime);
  std::cout << "\n\nMassiv posle transformacii: ";
  print_arr(arr);
  std::cout << "\n\nProstie elementi do preobrazovaniy = " << cnt_before
        << "\nProstie elementi posle prebrazovaniy = " << cnt_after;
  arr.erase(std::remove(arr.begin(), arr.end(), *std::max_element(arr.begin(), arr.end())), arr.end());
  std::cout << "\n\nMassiv bez max elememta: ";
  print_arr(arr);
  return 0;
}
это все у меня в файле prg.cpp
Код
$ g++ prg.cpp
$ ./a.out 

Kolichestvo elementov = 5

1 element = 1

2 element = 2

3 element = 3

4 element = 4

5 element = 5


Massiv posle transformacii: 1 2 3 4 5 

Prostie elementi do preobrazovaniy = 4
Prostie elementi posle prebrazovaniy = 4

Massiv bez max elememta: 1 2 3 4 
$
правильный или нет результат сам думай, твоя программа.
1
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.05.2011, 16:25 #12

Не по теме:

Цитата Сообщение от asics Посмотреть сообщение
Эмм, для чего тогда перегружать этот самый оператор, раз мы его не используем ?
Ой да, простите, глупость ляпнул не посмотрел толком на код то. Подумал это просто функция, а не функтор

А так-то да, просто в глобал вынести.
0
asics
Freelance
Эксперт С++
2847 / 1782 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
10.05.2011, 16:28 #13
А зачем его туда выносить ? У меня он и в локальном виде работает.(mingw 4.6.0)
0
fasked
Эксперт С++
4945 / 2525 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
10.05.2011, 16:36 #14
Цитата Сообщение от asics Посмотреть сообщение
А зачем его туда выносить ? У меня он и в локальном виде работает.(mingw 4.6.0)
gcc version 4.4.0 (GCC) отказывается.
0
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
10.05.2011, 16:53  [ТС] #15
Aye Aye спасибо все правельно
0
10.05.2011, 16:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 16:53
Привет! Вот еще темы с ответами:

Обработка одномерных динамических массивов - C++
1. Удалить из массива положительный элемент. 2. Вставить число 99 после второго элемента массива. 3. Удалить все элементы,...

Обработка одномерных динамических массивов - C++
Помогите написать программу (Динамические массивы) Написать программу, которая создает динамический массив ar на N элементов, заполняет...

Обработка одномерных динамических массивов - C++
Помогите написать программу (Динамические массивы) Написать программу, которая создает динамический массив на N элементов, заполняет его...

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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