#c #boolean #primes
#c #логическое значение #простые числа
Вопрос:
Моя цель состоит в том, что: программа возвращает список чисел в векторе, который я создал, которые являются простыми числами, код неверен,
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
vector < int > L;
bool mark[10];
void colador()
{
fill(mark,mark 10, false);
for(int i=2; i*i <=10; i )
{
if(!mark[i])
{
L.push_back(i);
for(int j=i*i; j<=10; j =i)
{
mark[j]=true;
}
}
}
for(int e=sqrt(10) 1; e<=10; e )
{
if(!mark[e])
{
L.push_back(e);
}
}
}
int main()
{
for( int i=0; i<=9; i )
{
cout << L[i] << endl ;
}
return 0;
}
Когда я его компилирую, программа мне ничего не показывает. Что не так?
Ответ №1:
Во-первых, общие функции не выполняются автоматически только путем определения. Вы должны вызвать их, чтобы выполнить их.
Во-вторых, цикл в main()
неверен. Он может считывать вне диапазона без проверки.
Также ваша colador()
функция неверна. Массив mark
содержит только 10 элементов ( mark[0]
to mark[9]
), но вы обращаетесь к выходу за пределы диапазона mark[10]
.
Попробуйте это:
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm> // for std::fill()
using namespace std;
vector < int > L;
bool mark[10];
void colador(){
fill(mark,mark 10, false);
for(int i=2; i*i <=10; i )
{
if(!mark[i]){
L.push_back(i);
for(int j=i*i; j<10; j =i){mark[j]=true;} // use j<10, not j<=10
}
}
for(int e=sqrt(10) 1; e<10; e ){ // use e<10, not e<=10
if(!mark[e]){L.push_back(e);}
}
}
int main(){
colador(); // call the function
#if 1
// for modern compiler (C 11 or later)
for( int e : L ){cout << e << endl ;}
#else
// for old compiler
for( size_t i=0; i<L.size(); i ){cout << L[i] << endl ;}
#endif
return 0;
}
Комментарии:
1. почему бы не заставить
colador
возвращать вектор или передавать его по ссылке
Ответ №2:
Пара проблем в вашем коде,
наиболее важным из них является то, что ваша функция void colador()
не будет вызываться сама по себе…
вам нужно вызвать это, ПРЕЖДЕ чем выполнять for( int i=0; i<=9; i )