Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
timaberezhnov
14 / 14 / 6
Регистрация: 10.09.2013
Сообщений: 67
#1

В чём ошибка? - C++

20.11.2013, 19:23. Просмотров 291. Ответов 8
Метки нет (Все метки)

Доброго времени суток!
Есть задачка, есть кривое решение.
Суть задачки такова: найти все простые числа до 1000 и вывести их на экран.
Помогите, пожалуйста, новичку, подправьте код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int main()
{
    int i,j;
    for (i=2; i<1000; i++) {
        for (j=2; j<i; j++) if (!(i%j)) break;
        cout<<j<<" простое число.\n";
        }
          
    system ("pause");
    return 0;
}
Извиняюсь за размножение идентичных тем
http://www.cyberforum.ru/cpp-beginners/thread1157441.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 19:23
Я подобрал для вас темы с готовыми решениями и ответами на вопрос В чём ошибка? (C++):

В чём ошибка?
//#include &lt;stdafx.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

В чём ошибка?
В двумерном массиве удалить все строки, в которых среднее арифметическое...

В чём ошибка?
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main (){...

в чём ошибка?
Не могу разобраться в этом. Нужно составить программу вычисляющую в зависимости...

в чём ошибка
void load_file (queue *q) { char path; int count=0; ...

8
Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
20.11.2013, 19:53 #2
В твоей программе break; выводит только из внутреннего цикла. Поэтому j у тебя будет печататься на каждой итерации.
Одно из решений этой проблемы завести флажочек, который контролирует простое это число или нет. Например, если выполняется if, то флаг делаешь false, а j выводить в том случае, если flag==true.

Добавлено через 9 минут
Например вот так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include<iomanip>
 
using namespace std;
 
int main()
{
    bool flag;
    for(int i=2; i<1000; i++){
        flag=true;
      for(int j=2; j<=i/2; j++)
           if(i%j==0) { flag=false; break;}
 
       if(flag==true) cout<<setw(4)<<i;
    }
    return 0;
}
1
timaberezhnov
14 / 14 / 6
Регистрация: 10.09.2013
Сообщений: 67
20.11.2013, 20:55  [ТС] #3
Only_Loko, спасибо!

Не по теме:


Тут ещё вопрос есть
Не могу разобраться почему не выполняется цикл for

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
 
using namespace std;
 
int main()
{
    for (;;) {
        cout<<"10 random numbers (1..100): "<<endl;
        srand(time(NULL));
        for (int i=0;i<10;i++) cout<<rand() % 100 + 1<<" ";
        cin.get();
        cout<<endl;
        if (!kbhit()) break;
        }
        
    system ("pause");
    return 0;
}

0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
20.11.2013, 21:14 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ctime>
#include <conio.h>
using namespace std;
int main()
{
    for (;;) 
    {
        cout<<"10 random numbers (1..100): "<<endl;
        srand(time(NULL));
        for (int i=0;i<10;i++) cout<<rand() % 100 + 1<<" ";
        cout<<endl<<"exit?";
        if (_getch()=='y') break;
    }
    return 0;
}
0
timaberezhnov
14 / 14 / 6
Регистрация: 10.09.2013
Сообщений: 67
20.11.2013, 21:36  [ТС] #5
zss, спасибо)
Работоспособность кода была не очень важна, просто не понятно где ошибка: в коде что-то не так или с логикой не очень хорошо. И как должно быть?
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
20.11.2013, 21:41 #6
if (!kbhit()) break; означает, что, если клавиша не нажата, то выйти из цикла.
Не думаю, что Вы успеете так быстро нажать клавишу,
что цикл повториться.
0
timaberezhnov
14 / 14 / 6
Регистрация: 10.09.2013
Сообщений: 67
20.11.2013, 22:08  [ТС] #7
zss, извините, был не внимателен)
Действительно, должно быть так:
C++
1
if (kbhit()) break;
Кликните здесь для просмотра всего текста
Если я не ошибаюсь Функция kbhit() возвращает 0 до тех пор пока не будет нажата клавиша, т.е. как только клавиша будет нажата выполнится выход из цикла.

Но цикл for всё равно не работает.
0
zss
Модератор
Эксперт С++
6953 / 6515 / 4136
Регистрация: 18.12.2011
Сообщений: 17,184
Завершенные тесты: 1
21.11.2013, 19:31 #8
Может быть kbhit() срабатывает учитывая предыдущее нажатие клавиш.
Перед опросом их надо как-то сбросить.
0
timaberezhnov
14 / 14 / 6
Регистрация: 10.09.2013
Сообщений: 67
24.11.2013, 20:51  [ТС] #9
zss, думаю это может быть связано с привязкой ко времени, т.к. никакой инф-ции по сбросу kbhit() не нашёл.
Хотя мне сложно судить о первопричинах данной проблемы
0
24.11.2013, 20:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 20:51
Привет! Вот еще темы с решениями:

В чём ошибка?
#include &lt;std_lib_facilities.h&gt; int main() { setlocale(0, &quot;&quot;); cout &lt;&lt;...

В чём ошибка
собственно вот. программа должна вывести логин, но не выводит его. по каким...

C++ в чём ошибка
//---------------------------------------------------------------------------...

В чём ошибка?
Здравствуйте, у меня проблемы... В консоли пишу 2, &quot;Для продолжения нажмите...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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