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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Владислав94
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 25
#1

Рекурсивное нахождение простых чисел - C++

14.05.2012, 00:00. Просмотров 2198. Ответов 4
Метки нет (Все метки)

Дано число Х, определить количество простых чисел меньших Х. С использованием рекурсивных методов.
Задача пустяковая, учу С#, а задание надо написать на С++....

Написал на С# все работает хорошо. С++ ниразу в глаза не видел....начал переписывать и у меня возникли проблемы, всегда выводит 0. Буду благодарен если исправите мой неработающий говно код на работающий))

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
#include "stdafx.h"
 
int count = 0;
 
        void SearchSimpleNumber(bool pr[], int i, int j)
        {
            if (i < sizeof(pr))
            {
                if (pr[i] == true)
                {
                    if (i + i * j < sizeof(pr))
                    {
                        pr[i + i * j] = false;
                        SearchSimpleNumber(pr, i, j + 1);
                    }
                }
                SearchSimpleNumber(pr, i + 1, 1);
            }
        }
 
 
        void CountResult(bool pr[], int i, int C)
        {
            if (i < sizeof(pr))
            {
                if (pr[i] == true)
                {
                    C++;
                    CountResult(pr, i + 1, C);
                }
                else
                {
                    CountResult(pr, i + 1, C);
                }
            }
        }
 
int _tmain(int argc, _TCHAR* argv[])
{
    bool *m = new bool[30];
    SearchSimpleNumber(m,2,1);
    CountResult(m,2,count);
    printf("%d", count);
    return 0;
}
Может быть информация нужная: пишу на Visual Studio 2010, алгоритм для нахождения простых чисел я выбрал "решето Эратосфена".
http://ru.wikipedia.org/wiki/Решето_Эратосфена

Вот собственно код на С#, может поможет(работает).
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
using System;
 
namespace qwerty
{
    class Program
    {
        static void SearchSimpleNumber(ref bool[] pr, int i, int j)
        {
            if (i < pr.Length)
            {
                if (pr[i] == false)
                {
                    if (i + i * j < pr.Length)
                    {
                        pr[i + i * j] = true;
                        SearchSimpleNumber(ref pr, i, j + 1);
                    }
                }
                SearchSimpleNumber(ref pr, i + 1, 1);
            }
        }
 
        static void CountResult(bool[] pr, int i, ref int C)
        {
            if (i < pr.Length)
            {
                if (pr[i] == false)
                {
                    C++;
                    CountResult(pr, i + 1, ref C);
                }
                else
                {
                    CountResult(pr, i + 1, ref C);
                }
            }
        }
 
        static void Main(string[] args)
        {
            bool[] m = new bool[30];
            int count = 0;
            SearchSimpleNumber(ref m, 2, 1);
            CountResult(m, 2, ref count);
            Console.WriteLine(count);
        }
    }
}
Срочно надо) заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2012, 00:00     Рекурсивное нахождение простых чисел
Посмотрите здесь:

C++ Нахождение простых чисел в массиве
C++ Функции: нахождение факториалов простых чисел в диапазоне
Вложенный цикл. Нахождение простых чисел C++
C++ Нахождение простых чисел до заданого числа n
Нахождение простых чисел.( C++
C++ Нахождение парных простых чисел с++
Написать программу по теме нахождение простых чисел в Visual C++ C++
Нахождение количества простых чисел в матрице C++
C++ Нахождение простых чисел в С++
C++ Нахождение простых чисел в интервале от 1 до 100
Нахождение простых чисел C++
Нахождение простых чисел на промежутке C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.05.2012, 00:14     Рекурсивное нахождение простых чисел #2
Цитата Сообщение от Владислав94 Посмотреть сообщение
i < sizeof(pr)
Я так понимаю это попытка сравнить i с размером массива, но так делать нельзя. В функцию передается указатель в качестве массива и sizeof вернет размер указателя, а не массива, т.е. в большинстве случаев 4. Тут только передавать размер отдельным параметром.
Владислав94
0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 25
14.05.2012, 00:35  [ТС]     Рекурсивное нахождение простых чисел #3
угу спасибо. С этим ясно. Тут такое дело либо массив несоздается, либо он непередается в функцию, потому что по отладке массив в функции даже не имеет 0 элемента...(я про массив pr)
kazak
3031 / 2352 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.05.2012, 11:54     Рекурсивное нахождение простых чисел #4
Вариант С#
Цитата Сообщение от Владислав94 Посмотреть сообщение
if (pr[i] == false)
{
if (i + i * j < pr.Length)
{
pr[i + i * j] = true;
Вариант С++
Цитата Сообщение от Владислав94 Посмотреть сообщение
if (pr[i] == true)
{
if (i + i * j < sizeof(pr))
{
pr[i + i * j] = false;
Что-то как-то не похоже.

Цитата Сообщение от Владислав94 Посмотреть сообщение
static void CountResult(bool[] pr, int i, ref int C)
Раз последний аргумент передается по ссылке, то в С++ это нужно обозначать так
void CountResult(bool pr[], int i, int &C)

Цитата Сообщение от Владислав94 Посмотреть сообщение
что по отладке массив в функции даже не имеет 0 элемента
Это Вы как смотрели?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
14.05.2012, 13:50     Рекурсивное нахождение простых чисел #5
Собственно без решета.

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
#include <iostream>
 
bool is_simple(const int value)
{
   for (int i = 2; i <= value / 2; ++i)
   {
      if (!(value % 2)) return false;
   }
   return true;
}
 
int count_simple_impl(const int current, const int max, int count)
{
   return current + 1 == max ? count : count_simple_impl(current + 1, max, is_simple(current) ? count + 1 : count);
}
 
int count_simple(const int max)
{
   return count_simple_impl(2, max, 0);
}
 
int main()
{
   std::cout << count_simple(50) << std::endl;
}
http://liveworkspace.org/code/026dbf...f090fe8af1b4e5
Yandex
Объявления
14.05.2012, 13:50     Рекурсивное нахождение простых чисел
Ответ Создать тему
Опции темы

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