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

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

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

Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку - C++

12.11.2012, 19:22. Просмотров 679. Ответов 19
Метки нет (Все метки)

Здравствуйте.
Подскажите. что не так?

Задача: Вывести на экран ПРОСТЫЕ ЧИСЛА в указанном диапазоне.

Делала так:

прохожусь по всем числам и проверяют остаток от деления на числа меньше (i). Для этого добавила встроенный for. А внутри для исключения случаев типа "4" (нацело не делится на 3, а на 2 делится, т.е. остаток от деления =0 ) добавила if

Выводит все подряд.. подозреваю break не так как-то работает...
уже и через while делала.

Покажите, пожалуйста, в чем здесь ошибка?...
или может это вообще не так делается\?...

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream.h>
 
void main()
{
 
for (int i=2; i<10; i++)
{
 
   for (int j=2; j<i;j++)
   {
     if(i%j)
     {
       cout <<"i="<<i<<"\n";
       break; 
     }
   }
 
}
 
system ("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 19:22     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку
Посмотрите здесь:

ткните пальцем - C++
хочу написать метод класса для использования которого не было бы обязательным наличие хотя бы одного объекта этого класса. т.е. вместо...

Ткните, пожалуйста, носом в ошибку. я не могу понять где, что не так - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;RUSSIAN&quot;); cout &lt;&lt; &quot;Сколько чисел мы будем...

Ткните лицом в ошибку в коде - C++
В общем написал код для данного задания: &quot;Задать два массива целых чисел с помощью датчика случайных чисел. Создать третий массив из...

Ткните носом в ошибку сегментации. С++ - C++
Вроде все правильно,но тем не менее я слеп.Спасибо. #include &lt;iostream&gt; using namespace std; class qqq{ public: qqq(int...

Вывести все простые числа до заданного n (найти ошибку в коде) - C++
#include &lt;iostream&gt; using namespace std; int main() { int n, i, a; cout &lt;&lt; &quot;Input the number&quot;&lt;&lt;&quot;\n&quot;; cin &gt;&gt; n; for (i = 1;...

Ткните носом, почему не видит getline ? - C++
int sortirovka() { ofstream out(&quot;output.txt&quot;); list&lt;string&gt; lines; while(!feof(f)) { string s1; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mster-doc
14 / 14 / 4
Регистрация: 10.11.2012
Сообщений: 239
12.11.2012, 19:30     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #2
Вот)) надеюсь то что вы хотели) данные я не менял, просто поправил код чтобы работал)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
 
for (int i=2; i<10; i++)
{
 
   for (int j=2; j<i;j++)
   {
     if(i%j)
     {
       std::cout << "i=" << i <<"\n";
       break; 
     }
   }
 
}
 
system ("pause");
return 0;
}
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 19:33  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #3
mster-doc, СПАСИБО, но боюсь
std:: здесь на при чем...
в 5 Builder и так печать на экран выводится.

тут что-то другое...
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:34     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #4
Цитата Сообщение от YuTu Посмотреть сообщение
добавила if
if то здесь зачем? Перебери до двойки и всё.
mster-doc
14 / 14 / 4
Регистрация: 10.11.2012
Сообщений: 239
12.11.2012, 19:36     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #5
Просто вы не уточнили) \ под Dev-C++ корректировал
#include <iostreame.h> - #include <iostream>
может в этом дело было)
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 19:37  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #6
Цитата Сообщение от taras atavin Посмотреть сообщение
if то здесь зачем? Перебери до двойки и всё.
в смысле "до двойки" а 5, 10, и т.д. (задача стоит перебрать интервал до 1000)
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:38     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #7
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
void Isi(int start, int end)
{
 int i;
 int d;
 bool f;
 if (start<2)
 {
  ++start;
 }
 for (i=start; i<=end; ++i)
 {
  for (f=true, d=2; d<i; ++d)
  {
   if ((i%d)==0)
   {
    f=true;
    break;
   }
   if (f)
   {
    std::cout<<i<<" ";
   }
  }
 }
}
Добавлено через 1 минуту
Цитата Сообщение от YuTu Посмотреть сообщение
в смысле "до двойки" а 5, 10, и т.д. (задача стоит перебрать интервал до 1000)
До двойки. Вопрос, надо ли проверять от i-1. Делить по идее надо только на простые и только те, на которое оно предположительно может разделиться. Самое большое число, на что может разделиться чётное, это половина самого числа. Самое больше, на которое может разделиться не чётное, но кратное трём, это вообще треть самого числа. И так далее. А если делитель больше половины, то это уже не делитель. Для чётных всё, что больше трети, уже не делители. И так далее. Ну может не до двойки, а с двойки. Но двойка в одном пределе обязательна.
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 19:39  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #8
Цитата Сообщение от mster-doc Посмотреть сообщение
Просто вы не уточнили) \ под Dev-C++ корректировал
#include <iostreame.h> - #include <iostream>
может в этом дело было)
У меня проблема, как я поняла, с вычленением собственно простых чисел. так выводится весь указанный диапазон. от 2 до 9
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:43     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #9
Цитата Сообщение от taras atavin Посмотреть сообщение
f=true;
* * break;
f=false;. Тру - это только в заголовке.
mster-doc
14 / 14 / 4
Регистрация: 10.11.2012
Сообщений: 239
12.11.2012, 20:18     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #10
я как из вашего кода понял, то вам ножнобыло от 2 до 9
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
#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main()
{
     int flag=0;
     for(int i=2; i<10; i++)
     {
             for(int j=1; j<=i; j++)
             {
                     if(i==2)
                     {
                             continue;
                     }
                     if(i%j==0)
                     {
                               flag++;
                     }
                     if(j==i/2 && flag==1)
                     {
                               cout <<i<<endl;
                               flag=0;
                     }
                     if(flag>1)
                     {
                                flag=0;
                                break;
                     }
             }
     }
     system("pause");
     return 0;
}
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 20:35  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #11
taras atavin,
что-то я все равно не поняла...
Вы предлагаете разобрать числа на четные, нечетные, те, что без остатка делятся на определенное число и потом проверять остаток от деления на числа меньше половины, трети и т.д.

так? а зачем сложный переключатель f?
Ведь по сути у меня в коде так и написано, или не так?
а что это за функция Isi?
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
12.11.2012, 20:43     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #12
Вот же! В соседней теме отвечал:
C++
1
2
3
4
5
6
7
8
9
int isPrime(const int N){
    int divisor=3;
    if (!(N&1)) return 0;
    while(divisor*divisor<=N){
                             if (N%divisor) return 0;
                             divisor+=2;
                             }
    return 1;   
    }
Возвращает 1 если простое и 0 наоборот
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 20:43  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #13
Цитата Сообщение от mster-doc Посмотреть сообщение
я как из вашего кода понял, то вам ножнобыло от 2 до 9
Я думала это не критично. Так для отладки проще.

Спасибо.
А в строке 19 переменная flag увеличивается каждый раз когда чило делится нацело на едииницу, а в строке 23 выводится на экран число, в случае перебора "меньшей половины" и успешного деления нацело. так это не будет простое число... или я не права?...
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 20:47     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #14
YuTu,
Кликните здесь для просмотра всего текста
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
#include <cmath>
#include <iostream>
 
bool is_prime(int value)
{
    if (!value)return false;
        
    for (int i = 2, end = sqrt((double)value); i <= end; i += 2)
    {
        if (value % i == 0)
        {
            return false;
        }
    }
    return true;
}
 
int main()
{ 
    for (int i = 2; i < 10; ++i)
    {
        if (is_prime(i))
        {
            std::cout << "i = " << i << std::endl;
        }
    }    
    system ("pause");
    return 0;
}


Добавлено через 43 секунды

Не по теме:

Никто не в курсе, почему http://liveworkspace.org/ не грузится?

Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.11.2012, 21:05     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #15
I.M., а зачем перебирать только четные числа?
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 21:25  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #16
Цитата Сообщение от I.M. Посмотреть сообщение
YuTu,
Кликните здесь для просмотра всего текста
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
#include <cmath>
#include <iostream>
 
bool is_prime(int value)
{
    if (!value)return false;
        
    for (int i = 2, end = sqrt((double)value); i <= end; i += 2)
    {
        if (value % i == 0)
        {
            return false;
        }
    }
    return true;
}
 
int main()
{ 
    for (int i = 2; i < 10; ++i)
    {
        if (is_prime(i))
        {
            std::cout << "i = " << i << std::endl;
        }
    }    
    system ("pause");
    return 0;
}

Спасибо большое! , все ок. Только если диапазон до 10, а если расширить его до 100 уже выводятся и непростые числа...
1. Строка 6 зачем нужна? (защита "от дураков") если value 0. так она изначально может быть только от 2
2. for (int i = 2, end = sqrt((double)value); i <= end; i += 2)
(double)value - если я ничего не путаю, то это приведение пита данных к double ? почему имеено до квадратного корня из числа происходит перебор? почему итератор увеличивается на 2?

В принципе ответы уже додумала себе, но на будующее хочется оригинал узнать.
Thinker
Эксперт C++
4221 / 2195 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.11.2012, 21:31     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #17
YuTu,
Быстрая проверка натурального числа на простоту
там есть функции проверки чисел на простоту и генерирование простых чисел в заданном диапазоне.
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 21:56  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #18
Цитата Сообщение от Thinker Посмотреть сообщение
YuTu,
Быстрая проверка натурального числа на простоту
там есть функции проверки чисел на простоту и генерирование простых чисел в заданном диапазоне.
+1000 Спасибо большое!!!! я знала, что где-то здесь математический момент есть...
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
12.11.2012, 22:24     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #19
Цитата Сообщение от Thinker Посмотреть сообщение
I.M., а зачем перебирать только четные числа?
Перепутал) не туда и не так += 2 вписал.
Я имел в виду, что на простоту надо проверять только нечетные числа. Но мои руки записали это вот так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2012, 00:08     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку
Еще ссылки по теме:

Правила перегрузки функций. Ткните в стандарт - C++
int func(int a) { return 1; } //ALL OK int func(int a, int b) { return 1; } //ALL OK double func(int a, int b, float c) { return 1.0; }...

Простые числа. - C++
Доброй ночи. Есть вот такое задание Исходные данные В первой строке находится ровно одно целое число k, задающее количество чисел в...

простые числа - C++
дана задача: вывести простые числа в диапазоне от 0 до 100000

Простые числа - C++
ПОМОГИТЕ ПОЖАЛУЙСТА РЕШИТЬ ЗАДАЧУ - &quot;Вводится последовательность из N целых чисел. Сформировать новую последовательность, каждый элемент...


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

Или воспользуйтесь поиском по форуму:
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
14.11.2012, 00:08  [ТС]     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку #20
БОЛЬШОЕ СПАСИбО ВСЕМ УЧАСТНИКАМ!!!
Yandex
Объявления
14.11.2012, 00:08     Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку
Ответ Создать тему
Опции темы

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