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

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

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

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

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

Помогите найти ошибку в цикле.Не циклирует.

Кликните здесь для просмотра всего текста
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2014, 10:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти ошибку в цикле (C++):

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

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

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

Найти ошибку в программе: в visual studio выдает ошибку - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { double x, E, ypred, y, S; ...

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

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

9
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,395
Завершенные тесты: 1
07.09.2014, 11:17 #2
Попрбуйте так
C++
1
 }while( (cin>>quit).get() && quit=='y');
Причина в том, что в потоке кроме символа y находится символ "конец строки".
Его надо пропустить. Используем для этого метод get().
0
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
07.09.2014, 11:18 #3
Здравствуйте, Вы могли бы более подробно описать, какое поведение программы Вы ожидали, и что в реальном поведении не соответствует Вашим ожиданиям?
Запустив программу я получил вывод

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

При нажатии y - повторяет сообщение, при n - выходит из программы.
Запускал из под терминала Ubuntu.
0
Georgg
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
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,395
Завершенные тесты: 1
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
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,395
Завершенные тесты: 1
07.09.2014, 12:56 #7
Цитата Сообщение от Tulosba Посмотреть сообщение
ещё как влезает.
unsigned влезает, а знаковый нет, и программа на последнем значении циклится.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.09.2014, 14:23 #8
zss, где циклится?
0
zss
Модератор
Эксперт С++
6404 / 5970 / 1945
Регистрация: 18.12.2011
Сообщений: 15,395
Завершенные тесты: 1
07.09.2014, 15:16 #9
Цитата Сообщение от Tulosba Посмотреть сообщение
где циклится?
Доходит до i=31 и в функции IsSimple() не выходит из цикла.
0
Georgg
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2014, 23:44
Привет! Вот еще темы с ответами:

Найти смещение точки координаты которой находятся в цикле - C++
Товарищи помогите! Есть задача найти смещение точки координаты которой находятся в цикле for(int i = 0; i &lt; faces.size(); i++) ...

Помогите найти ошибку: По двум сторонам и углу найти все остальное - C++
Доброго времени суток. В универе дали задание написать программу &quot;По двум сторонам и углу между ними в треугольнике АВС найти два остальных...

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

Найти сумму первых n-четных натуральных чисел (найти ошибку) - C++
Нужно найти сумму первых n-четных натуральных чисел. Ошибка вылетает на 13 строке, должно быть я не правильно код составил, алгоритм не тот...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
07.09.2014, 23:44
Ответ Создать тему
Опции темы

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