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

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

Войти
Регистрация
Восстановить пароль
 
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
#1

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

20.11.2013, 19:23. Просмотров 258. Ответов 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;
}
Извиняюсь за размножение идентичных тем
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 19:23     В чём ошибка?
Посмотрите здесь:

В чём ошибка???((( C++
C++ В чём ошибка?
в чём ошибка C++
в чём ошибка 3 C++
C++ в чём ошибка C++
В чём ошибка? C++
C++ В чём ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Only_Loko
 Аватар для 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;
}
timaberezhnov
14 / 14 / 4
Регистрация: 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;
}

zss
Модератор
Эксперт С++
 Аватар для zss
6112 / 5715 / 1849
Регистрация: 18.12.2011
Сообщений: 14,600
Завершенные тесты: 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;
}
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
20.11.2013, 21:36  [ТС]     В чём ошибка? #5
zss, спасибо)
Работоспособность кода была не очень важна, просто не понятно где ошибка: в коде что-то не так или с логикой не очень хорошо. И как должно быть?
zss
Модератор
Эксперт С++
 Аватар для zss
6112 / 5715 / 1849
Регистрация: 18.12.2011
Сообщений: 14,600
Завершенные тесты: 1
20.11.2013, 21:41     В чём ошибка? #6
if (!kbhit()) break; означает, что, если клавиша не нажата, то выйти из цикла.
Не думаю, что Вы успеете так быстро нажать клавишу,
что цикл повториться.
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
20.11.2013, 22:08  [ТС]     В чём ошибка? #7
zss, извините, был не внимателен)
Действительно, должно быть так:
C++
1
if (kbhit()) break;
Кликните здесь для просмотра всего текста
Если я не ошибаюсь Функция kbhit() возвращает 0 до тех пор пока не будет нажата клавиша, т.е. как только клавиша будет нажата выполнится выход из цикла.

Но цикл for всё равно не работает.
zss
Модератор
Эксперт С++
 Аватар для zss
6112 / 5715 / 1849
Регистрация: 18.12.2011
Сообщений: 14,600
Завершенные тесты: 1
21.11.2013, 19:31     В чём ошибка? #8
Может быть kbhit() срабатывает учитывая предыдущее нажатие клавиш.
Перед опросом их надо как-то сбросить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 20:51     В чём ошибка?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
timaberezhnov
14 / 14 / 4
Регистрация: 10.09.2013
Сообщений: 67
24.11.2013, 20:51  [ТС]     В чём ошибка? #9
zss, думаю это может быть связано с привязкой ко времени, т.к. никакой инф-ции по сбросу kbhit() не нашёл.
Хотя мне сложно судить о первопричинах данной проблемы
Yandex
Объявления
24.11.2013, 20:51     В чём ошибка?
Ответ Создать тему
Опции темы

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