Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2015, 23:12   #1
Liori
 
Регистрация: 30.11.2014
Сообщений: 5
По умолчанию Найти в массиве простые числа и добавить в новый массив

Помогите, не работает код
Пользователь вводит элементы массива, нужно узнать, есть ли простые числа среди них, если есть - добавить в другой массив (простых чисел), отсортировать и вывести. Не работает именно фрагмент с поиском простых чисел и добавлением в новый массив

Код:
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
void Input_Array(vector<int> &massive, int N);
void Output_Array(vector<int> &massive, int N);
void IsPrime(vector<int> &massive, vector<int> &prime, int N, int p);

int main(int argc, char* argv[])
{
	setlocale(LC_ALL, "Russian");
	int N;
	int p = 0;
	cout << "Введите количество элементов массива: ";
	cin >> N;
	vector<int> massive(N);
	vector<int> prime(N);
	Input_Array(massive, N);
	Output_Array(massive, N);
	IsPrime(massive, prime, N, p);
	system("pause");
	return 0;
}

void Input_Array(vector<int> &massive, int N)
{
	cout << "Введите элементы массива: ";
	for (int i = 0; i<N; i++)
	{
		cin >> massive[i];
	}
}


void Output_Array(vector<int> &massive, int N)
{
	cout << "\nВы ввели такой массив: \n";
	for (int i = 0; i<N; i++)
	{
		cout << massive[i] << " ";
	}

}

void IsPrime(vector<int> &massive, vector<int> &prime, int N, int p)
{

	for (int i = 0; i<N; i++)
	{
		if (massive[i] <= 1) break;
		for (int k = 2; k*k <= massive[i]; k++)
		{
			if (massive[i] % k == 0) break;

			prime.push_back(i);

		}
	}

	int swapCount = 1;
	while (swapCount)
	{
		swapCount = 0;
		for (int i = 0; i < p - 1; ++i)
		{
			if (prime[i] > prime[i + 1])
			{
				swap(prime[i], prime[i + 1]);
				swapCount++;
			}
		}
	}

	cout << "\n\nПростые числа, отсортированные по возрастанию: ";
	for (int i = 0; i < p; i++)
	{
		cout << prime[i] << " ";
	}
	cout << "\n";

}
Liori вне форума Ответить с цитированием
Старый 27.02.2015, 09:16   #2
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Код:
#include <vector>
#include <algorithm>
#include <iterator>

template<typename Iter>
std::vector<int> get_primes(Iter begin, Iter end) {
    std::vector<int> result;
    
    auto is_prime = [](int a) -> bool {
        if(!a) {
            return false;
        }
        for(int i = 2; i < a; i++) {
            if(a % i == 0) {
                return false;
            }
        }
        return true;
    };

    std::copy_if( begin, end, std::back_insert_iterator<std::vector<int>>(result), is_prime );

    return result;
}
Использовать так:
Код:
int main() {
// ...
     std::vector<int> primes = get_primes( numbers.begin(), numbers.end() );
     std::sort(primes.begin(), primes.end());

}
halcyon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В массиве А(100) найти простые числа. olegk95 Помощь студентам 2 10.12.2013 09:56
Задан массив AX (N). Добавить массив С(К). Выполнить сортировку разделением. В полученном массиве, найти наименьший элемент из пол Шархан Паскаль, Turbo Pascal, PascalABC.NET 0 05.04.2013 13:16
Найти парные простые числа в массиве JAVA KATKAT Помощь студентам 1 01.04.2013 23:19
Задачи в ТурбоПаскаль: найти числа Армстронга и просуммировать числа в последовательности номера которых простые числа Lena1808 Помощь студентам 1 17.05.2012 08:00