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

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

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

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

12.11.2012, 19:22. Просмотров 694. Ответов 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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2012, 19:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выводим ПРОСТЫЕ числа. Ткните, пожалуйста, пальцем в ошибку (C++):

ткните пальцем - 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;...

Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа - C++
Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа. Простые числа это когда они делятся только...

19
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;
}
0
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 19:33  [ТС] #3
mster-doc, СПАСИБО, но боюсь
std:: здесь на при чем...
в 5 Builder и так печать на экран выводится.

тут что-то другое...
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:34 #4
Цитата Сообщение от YuTu Посмотреть сообщение
добавила if
if то здесь зачем? Перебери до двойки и всё.
0
mster-doc
14 / 14 / 4
Регистрация: 10.11.2012
Сообщений: 239
12.11.2012, 19:36 #5
Просто вы не уточнили) \ под Dev-C++ корректировал
#include <iostreame.h> - #include <iostream>
может в этом дело было)
1
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 19:37  [ТС] #6
Цитата Сообщение от taras atavin Посмотреть сообщение
if то здесь зачем? Перебери до двойки и всё.
в смысле "до двойки" а 5, 10, и т.д. (задача стоит перебрать интервал до 1000)
0
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. Делить по идее надо только на простые и только те, на которое оно предположительно может разделиться. Самое большое число, на что может разделиться чётное, это половина самого числа. Самое больше, на которое может разделиться не чётное, но кратное трём, это вообще треть самого числа. И так далее. А если делитель больше половины, то это уже не делитель. Для чётных всё, что больше трети, уже не делители. И так далее. Ну может не до двойки, а с двойки. Но двойка в одном пределе обязательна.
0
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
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.11.2012, 19:43 #9
Цитата Сообщение от taras atavin Посмотреть сообщение
f=true;
* * break;
f=false;. Тру - это только в заголовке.
0
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;
}
1
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 20:35  [ТС] #11
taras atavin,
что-то я все равно не поняла...
Вы предлагаете разобрать числа на четные, нечетные, те, что без остатка делятся на определенное число и потом проверять остаток от деления на числа меньше половины, трети и т.д.

так? а зачем сложный переключатель f?
Ведь по сути у меня в коде так и написано, или не так?
а что это за функция Isi?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 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 наоборот
0
YuTu
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 18
12.11.2012, 20:43  [ТС] #13
Цитата Сообщение от mster-doc Посмотреть сообщение
я как из вашего кода понял, то вам ножнобыло от 2 до 9
Я думала это не критично. Так для отладки проще.

Спасибо.
А в строке 19 переменная flag увеличивается каждый раз когда чило делится нацело на едииницу, а в строке 23 выводится на экран число, в случае перебора "меньшей половины" и успешного деления нацело. так это не будет простое число... или я не права?...
0
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/ не грузится?

1
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
12.11.2012, 21:05 #15
I.M., а зачем перебирать только четные числа?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 21:05
Привет! Вот еще темы с ответами:

Задача про простые числа. Выпишите все простые числа, находящиеся в интервале между а и б - C++
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using std::cout; using std::cin; using...

Даны натуральные числа a,b(a<= Ь). Получить все простые числа р, удовлетворяющие неравенствам a<= р<= b. - C++
Даны натуральные числа a,b(a&lt;= Ь). Получить все простые числа р, удовлетворяющие неравенствам a&lt;= р&lt;= b. Решите на С++. Буду очень...

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. - C++
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p. - C++
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p.


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
12.11.2012, 21:05
Ответ Создать тему
Опции темы

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