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

Решето Эратосфена - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Снежинка Коха http://www.cyberforum.ru/cpp-beginners/thread395316.html
Задание заключается в том, чтобы построить снежинку с помощью рекурсии. Есть замечательная программа на Паскале. Вот код program primer_8; {$S+} Uses graph,crt; label 1,2; var x,y,a,b,p,n:integer; t,l:real; g:char;
C++ Найти число в массиве Задан массив из k чисел. Найти число, наиболее часто встречающееся в этом массиве. (с++ код) http://www.cyberforum.ru/cpp-beginners/thread395314.html
C++ Перемножить матрицу и вектор
Перемножить матрицу А(nxm) и вектор, В(n), найти сумму элементов и максим. элемент результирующего столбца. Распечатать матрицу и вектор в естественном виде. Запрещено создавать темы с бессмысленными названиями вроде "Помогите!", "Вопрос" и т.п.читаем правила! Добавлено через 16 минут кто нибудь может решить?
C++ задача на математическую головоломку
Жители одного государства очень любят различные математические головоломки. Даже тот, кто желает получить въездную визу, должен решить задачу: отыскать ключевое слово. Условие задачи таково: На листке написано несколько длинных чисел. Если сложить все цифры в каждом числе, получатся новые числа. Далее, следует сложить все цифры в каждом из вновь полученных чисел. Процесс следует продолжать до...
C++ Найти в последовательности числа, которые являются квадратом числа m http://www.cyberforum.ru/cpp-beginners/thread395286.html
Даны целые положительные числа . Найти среди них те, которые являются квадратами некоторого числа m. помогите решить на "С" Добавлено через 21 минуту Даны целые положительные числа α₁,α₂,…..,₂αn. Найти среди них те, которые являются квадратами некоторого числа m. полное условие такое
C++ help me please Пожалуйста помогите, что знал то написал. создать класс двигатель с указанием мощности. Создать класс автомобиль, содержащий класс двигатель. Дополнительно указывается марка (указатель на строку) и цена. Определить конструктор инициализации, копирования, деструкторы и методы для изменения и чтения значений полей данных классов. Перегрузить операцию + + (метод класса) для наращивания мощности,... подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
30.11.2011, 02:22     Решето Эратосфена
Цитата Сообщение от vortexx1 Посмотреть сообщение
Здравствуйте. Реализовал алгоритм "Решето Эратосфена" в виде класса.
Взгляните, пожалуйста, и скажите, где я не прав. Спасибо.

C++
1
2
3
4
5
6
7
8
class EratosphenesSieve
{
public:
    EratosphenesSieve( int );
    ~EratosphenesSieve();
private:
    bool *sieve;
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cmath>
#include "EratosphenesSieve.h"
 
EratosphenesSieve::EratosphenesSieve( int n )
{
    n = abs( n );
    *sieve = new bool[ n + 1 ];
    
    for( int i = 0; i <= n; i++ )
        sieve[ i ] = true;
        
    for( int i = 2; i <= n; i++ )
        for( int k = i + 1; k <= n; k++ )
             if( k % i == 0 )
                 sieve[ k ] = false;                           
}
 
EratosphenesSieve::~EratosphenesSieve()
{
    delete [] sieve;
}
Сначала по определению самого класса. Если вы считаете, что вам должны указать неотрицательное число, то задавайте тип параметра как unsigned int. В вашем классе желательно хранить заданный размер последовательности целых чисел, чтобы знать, какая последовательность была рассмотрена.
Очевидно, что объект вашего класс не имеет смысла присваивать другому объекту вашего класса, так как не понятна семантика такого присваивания, а потому конструктор копирования и копирующий оператор присваивания лучше сделать закрытыми. Также желательно иметь два метода. первый возвращает размер вашей последовательности, а второй выводит на основе вашего логического массива те значения чисел, для которых вы получили значение true.

Поэтому я бы класс объявил следующим образом

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class EratosphenesSieve
{
public:
    EratosphenesSieve( unsigned int );
    ~EratosphenesSieve();
    unsigned int size() const;
    std::ostream & out( std::ostream & ) const;
private:
    bool *sieve;
    unsigned int n;
private:
    EratosphenesSieve( const EratosphenesSieve &  );
    EratosphenesSieve & operator =( const EratosphenesSieve & );
};
 
std::ostream & operator <<( std::ostream &os, const EratosphenesSieve &rhs )
{
   return ( rhs.out( os ) );
}
 
Текущее время: 15:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru