Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 37
1

Найти ошибку в цикле

07.09.2014, 10:59. Показов 542. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите найти ошибку в цикле.Не циклирует.

Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"Russian");
 
char quit;
do{    
      
       unsigned long int M(1),m(0);
       int p(0),k(0),n(0),l(0),s(0);
 
 
       for (int i=2;i<=31;++i)
        {
            for (int j=2;j<=31;++j)
                {
                    p=i%j;
                    p==0?k++:k==k;
                    if(j==31 && k==1)
                        {
                           for (int n(1);n<=i;n++)
                                {
                                    M*=2;
                                    n==i?M-=1:M==M;
                                }  
                           for (m=2;m<=M;m++)
                                {
                                    l=M%m; 
                                    l==0?s++:s==s;
                                }
                           if(s==1) cout << "   Число Мерсена(2^"<<i<<"-1) при значении "<< M <<" НЕ является простым числом. "<<endl;
                           else cout << "   Число Мерсена(2^"<<i<<"-1) при значении "<< M <<" является простым числом.  "<<endl;
                        }
                    else continue;
                }
          }
    cout << "Продолжить (y/n)?"<<endl;
    }while(cin>>quit && quit=='y');
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2014, 10:59
Ответы с готовыми решениями:

Найти ошибку в цикле
Программа находит слова из массива MS и заменяет их цифрами из cif, в данном случае MS это для...

Не могу понять ошибку в цикле for
#include &lt;iostream&gt; using namespace std; class object { public: int num_obj; int...

String::insert() в цикле выдает ошибку сегментации
Добрый вечер, есть такой вот кусок кода: string t = &quot;c-++a+--b&quot;; std::string::iterator itt;...

Найти ошибку в программе: в visual studio выдает ошибку
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() ...

9
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
07.09.2014, 11:17 2
Попрбуйте так
C++
1
 }while( (cin>>quit).get() && quit=='y');
Причина в том, что в потоке кроме символа y находится символ "конец строки".
Его надо пропустить. Используем для этого метод get().
0
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
07.09.2014, 11:18 3
Здравствуйте, Вы могли бы более подробно описать, какое поведение программы Вы ожидали, и что в реальном поведении не соответствует Вашим ожиданиям?
Запустив программу я получил вывод

Число Мерсена(2^2-1) при значении 3 НЕ является простым числом.
Продолжить (y/n)?

При нажатии y - повторяет сообщение, при n - выходит из программы.
Запускал из под терминала Ubuntu.
0
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 37
07.09.2014, 11:31  [ТС] 4
Задача звучит так : Числа вида 2^p-1,где p-простое число,называются числами М.Мерсенна. Являются ли числа Мерсенна при значении p равным 2,3,5,7,11,13,17,19,23,29,31,простыми?

Добавлено через 5 минут
Программа проверяет числа от 2 до 31 простое или нет,если простое то возводит 2 в степень простого числа и вычитается 1 и опять проверяет возведённое число на простоту

Добавлено через 1 минуту
Причина в том, что в потоке кроме символа y находится символ "конец строки".
Его надо пропустить. Используем для этого метод get().
Проблема не решилась
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
07.09.2014, 11:54 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
26
27
28
29
#include <iostream>
using namespace std;
 bool IsSimple(long long k)
 {
     if(k<=1)return true;
     for(long long i=2;i*i<=k;i++)
         if(k%i==0)return false;
     return true;
 }
 bool IsPow2Simple(long long  n)
 {
     long long S=1;
     for(long long i=1;i<=n;i++)
         S*=2;
     return IsSimple(S-1);
 }
int main()
{
    setlocale (LC_ALL,"Russian");
    for (long long i=2;i<=31;++i)
    {
           if( IsSimple(i) && IsPow2Simple(i) ) 
               cout << "   Число Мерсена(2^"<<i<<"-1) при значении "<< i;
           else 
               cout << "   Число Мерсена(2^"<<i<<"-1) при значении "<< i <<" НЕ";
           cout<<" является простым числом.  "<<endl;
    }
    system("pause");
}
long long понадобилось потому, что 2^31 не влезает в разрядную сетку.
1
Tulosba
07.09.2014, 12:04
  #6

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
long long понадобилось потому, что 2^31 не влезает в разрядную сетку.
В 32битный unsigned int ещё как влезает.

0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
07.09.2014, 12:56 7
Цитата Сообщение от Tulosba Посмотреть сообщение
ещё как влезает.
unsigned влезает, а знаковый нет, и программа на последнем значении циклится.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.09.2014, 14:23 8
zss, где циклится?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
07.09.2014, 15:16 9
Цитата Сообщение от Tulosba Посмотреть сообщение
где циклится?
Доходит до i=31 и в функции IsSimple() не выходит из цикла.
0
0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 37
07.09.2014, 23:44  [ТС] 10
Сложность данной задачи в том что она должна решаться только с помощью циклов.В той программе что я написал проходит только первая итерация

Добавлено через 3 часа 33 минуты
Сделал вот такой вариант с ручным вводом,почему то на степени 29 виснет..Подскажите почему?
Кликните здесь для просмотра всего текста
C++ (Qt)
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (LC_ALL,"Russian");
    cout << "\t\t\t *** Задача 5.58 ***\n";
    cout <<"===================================================================\n";
    cout << " Проверить числа М.Мерсенна.\n";
    cout <<"===================================================================\n";
 
char quit;
do{    
      
       unsigned long int M(1),m(0);
 
       int p;
           cout << "Введите значение p = "; cin >>p;
       
           for (int i=1;i<=p;i++)
            {
              M*=2;
              if (i==p)
               {
                   M-=1;
                   for (int j=2;j<=M;j++)
                    {
                       M%j==0?m++:m==m;
                    }
                        if (m==1)
                            {
                                 cout << "  Число Мерсена(2^"<<p<<"-1) при значении "<< M <<" НЕ является простым числом. "<<endl;
                            }
                        else
                            {
                                cout << "   Число Мерсена(2^"<<p<<"-1) при значении "<< M <<" является простым числом.  "<<endl;
                            }
               }
              else continue;
            }
    cout << "Продолжить (y/n)?"<<endl;
    }while((cin>>quit).get() && quit=='y');
}
0
07.09.2014, 23:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2014, 23:44
Помогаю со студенческими работами здесь

Найти в цикле значение ряда, большее заданного
Дано действительное число а. Среди чисел 1, 1 + 1/2, 1 + 1/2 + 1/3 ... найти первое, которое больше...

Замена слов в цикле. Найти недочеты в коде
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; using namespace std; int main(){...

Найти смещение точки координаты которой находятся в цикле
Товарищи помогите! Есть задача найти смещение точки координаты которой находятся в цикле for(int...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru