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

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

Восстановить пароль Регистрация
 
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
09.05.2011, 21:27     Обработка одномерных элементов #1
есть код для задачи:
Преобразовать заданный массив целых положительных чисел 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());
помогите кто может, что эта за ошибка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2011, 21:27     Обработка одномерных элементов
Посмотрите здесь:

C++ Обработка одномерных массивов.
Обработка одномерных массивов. C++
Обработка одномерных массивов C++
Обработка одномерных массивов C++
C++ Обработка одномерных массивов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
09.05.2011, 21:38     Обработка одномерных элементов #2
В глобальное пространство видимости вынеси struct func{ ... };. Черт его знает, почему компилятор такой брезгливый.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
09.05.2011, 21:41     Обработка одномерных элементов #3
Какая ошибка-то конкретно, вы напишите, чего гадать.
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
09.05.2011, 21:49  [ТС]     Обработка одномерных элементов #4
Цитата Сообщение от Aye Aye Посмотреть сообщение
В глобальное пространство видимости вынеси struct func{ ... };. Черт его знает, почему компилятор такой брезгливый.
а как именно его вынесть?
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
10.05.2011, 12:35     Обработка одномерных элементов #5
prostoMaks, не в теле main, а перед ним написать.
Ma3a, я не гадалка.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
10.05.2011, 14:27     Обработка одномерных элементов #6
Aye Aye, пожелание было адресовано ТСу , если что.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
10.05.2011, 14:38     Обработка одномерных элементов #7
Ma3a, извиняюсь!
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
10.05.2011, 15:40  [ТС]     Обработка одномерных элементов #8
Цитата Сообщение от Aye Aye Посмотреть сообщение
prostoMaks, не в теле main, а перед ним написать.
выносил, возникает ошибка в самом блоке main
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
10.05.2011, 15:44     Обработка одномерных элементов #9
Цитата Сообщение от prostoMaks Посмотреть сообщение
выносил, возникает ошибка в самом блоке main
в transform надо бы написать func без скобочек
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.05.2011, 15:50     Обработка одномерных элементов #10
Цитата Сообщение от fasked Посмотреть сообщение
в transform надо бы написать func без скобочек
Эмм, для чего тогда перегружать этот самый оператор, раз мы его не используем ?
Aye Aye
 Аватар для 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 
$
правильный или нет результат сам думай, твоя программа.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
10.05.2011, 16:25     Обработка одномерных элементов #12

Не по теме:

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

А так-то да, просто в глобал вынести.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
10.05.2011, 16:28     Обработка одномерных элементов #13
А зачем его туда выносить ? У меня он и в локальном виде работает.(mingw 4.6.0)
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
10.05.2011, 16:36     Обработка одномерных элементов #14
Цитата Сообщение от asics Посмотреть сообщение
А зачем его туда выносить ? У меня он и в локальном виде работает.(mingw 4.6.0)
gcc version 4.4.0 (GCC) отказывается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2011, 16:53     Обработка одномерных элементов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
prostoMaks
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 11
10.05.2011, 16:53  [ТС]     Обработка одномерных элементов #15
Aye Aye спасибо все правельно
Yandex
Объявления
10.05.2011, 16:53     Обработка одномерных элементов
Ответ Создать тему
Опции темы

Текущее время: 19:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru