PDA

Показать полную графическую версию : Простые числа на Си++


nemo555
11-03-2007, 15:07
Мне уже помагогали на этом замечательном форуме. Пожалуйста помогите ещё раз. Надо Составить программу на Си++ как консольное приложение, выводящую на экран n первых простых чисел. Сделать проверку n ≥0.
Простым наз-ся число p,большее 1 и не имеющее положительных целых делителей,кроме 1 и p

nemo555
11-03-2007, 17:37
Компилятор ошибку выдаёт.Помогите найти.
#include <math.h>
#include <conio.h>
#include <iostream.h>
int main(int argc, char *argv[])
{
using namespace std;
double dn,di,dj;
bool dest;
clrscr;
cout << "\nVvedite konechnoe chislo n= ";
cin >> dn;
i=1;
while
i<=n-2 do {
i=i+2;
est:=false;
for j=3 to round(sqrt(i)) do {
if i mod j = 0 then begin
est:=true;
break;
}
}
if not est then
cout << "Result: i=" << di;
}

XCodeR
11-03-2007, 17:51
Какую именно ошибку?

Вместо := используйте =, не в Паскале пишите все таки)

nemo555
11-03-2007, 19:07
[C++ Error] Unit1.cpp(12): E2451 Undefined symbol 'i'
[C++ Error] Unit1.cpp(14): E2376 While statement missing (

Coutty
11-03-2007, 19:47
Простым наз-ся число p,большее 1 и не имеющее положительных целых делителей,кроме 1 и p
Полагаю, что программисты знают об этом...
Мне лениво исправлять всё, но кое что:
1. По поводу "Неопределённый символ i": нужно объявить переменную. Видимо, при объявлении double dn,di,dj; лучше написать double n, i, j; Всё же эти переменные используются в дальнейшем.
2. while i<=n-2 do { ... }
Лучше писать while (i<=n-2) { ... }. Это ж не паскаль, как говорит XCodeR.
3. for j=3 to round(sqrt(i)) do { ... }
Пишем: for (j=3; j<round(sqrt(i)); j++) { ... }
Я не уверен насчёт round(sqrt(i)), но сначала исправьте то, что предлагается.
4. if not est then
Так: if (!est) { ... }
5. cout << "Result: i=" << di;
Раз переменные переименовали и разпереименовывали, нужно писать в конце i;

nemo555
11-03-2007, 20:25
CouttyXCodeR спасибо вам.Дело пошло.Мне просто непривычен синтаксис си++ - только начал изучать.Вот что вышло:
#include <math.h>
#include <conio.h>
#include <iostream.h>
int main(int argc, char *argv[])
{
using namespace std;
double n,i,j;
bool est;
clrscr;
cout << "\nVvedite konechnoe chislo n= ";
cin >> n;
i=1;
while (i<=n-2) do {
i=i+2;
est=false;
for (j=3; j<round(sqrt(i)); j++) //тут я не уверен - что то наворочено
if i mod j = 0 then begin
est:=true;
break;
}
}
if (!est)
cout << "Result: i=" << i;
getch();
return 0;
}
Вот список ошибок:
[C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'round'
[C++ Error] Unit1.cpp(17): E2376 If statement missing (
[C++ Error] Unit1.cpp(21): E2308 do statement must have while
[C++ Warning] Unit1.cpp(21): W8004 'est' is assigned a value that is never used
[C++ Error] Unit1.cpp(22): E2040 Declaration terminated incorrectly
[C++ Error] Unit1.cpp(25): E2040 Declaration terminated incorrectly
[C++ Error] Unit1.cpp(26): E2190 Unexpected }

XCodeR
11-03-2007, 20:54
[C++ Error] Unit1.cpp(17): E2376 If statement missing (
if i mod j = 0 then begin
условие заключаем в скобки...
и...кхм... синтакиси вообще такой:

if(условие)
{
}
никаких begin...end & then
[C++ Error] Unit1.cpp(21): E2308 do statement must have while
while (i<=n-2) do {
уберите do
[C++ Warning] Unit1.cpp(21): W8004 'est' is assigned a value that is never used
est объявлена, но нигде не используется.
[C++ Error] Unit1.cpp(26): E2190 Unexpected }
лишний } где-то.

имхо, лучше используйте Pascal, кажется он вам "роднее"...
а то что делаете вы, это тоже самое что приехать во Францию и в магазине попросить "La 2 СОСИСКИ, please!".

nemo555
11-03-2007, 21:10
Теперь вот:
#include <math.h>
#include <conio.h>
#include <iostream.h>
int main(int argc, char *argv[])
{
using namespace std;
double n,i,j;
bool est;
clrscr;
cout << "\nVvedite konechnoe chislo n= ";
cin >> n;
i=1;
while (i<=n-2) {
i=i+2;
est=false;
for (j=3; j<round(sqrt(i)); j++)
if (i mod j = 0) {
est:=true;
break;
}
}
if (!est)
cout << "Result: i=" << i;
getch();
return 0;
}
------------------------------------------------------------------------
[C++ Error] Unit1.cpp(16): E2268 Call to undefined function 'round'
[C++ Error] Unit1.cpp(17): E2377 If statement missing )
Вобщем надо что-то с round делать и 2-я ошибка указывает на if (i mod...

XCodeR
11-03-2007, 23:06
nemo555
используй
double ceil(double x); в меньшую сторону
или
double floor(double x); в большую сторону
или
RoundTo(const double AValue, int ADigit); округление до знака ADigit после запятой.

Arrest
11-03-2007, 23:09
#include <math> //может так? если уж using namespace std;
#include <conio>
#include <iostream>
int main(int argc, char *argv[])
{
using namespace std;
double n, i, j;
bool est;
clrscr;
cout << "\nVvedite konechnoe chislo n= ";
cin >> n;
i = 1;
while (i <= n - 2)
{
i = i + 2;
est = false;
for (j = 3; j < round(sqrt(i)); j++)
{
if (i % j == 0) //mod кажется меняется на % (если я что-то помню), а = на ==, если это конечно не присваивание :)
{
est == true;
break;
}
}
}
if (!est) //насчет этого куска кода у меня сомнения: он наверное должен быть после каждой проверки числа, в whil'е.
cout << "Result: i=" << i;
getch();
return 0;
}

P.S. Отступы нужны коду - без них он превращается в нечитабельное месиво.

nemo555
11-03-2007, 23:37
XCodeR честно говоря уже запутался.Если можете то пожалуйста напиши рабочий вариант - очень надо к понедельнику днём. Будет большой респект

XCodeR
12-03-2007, 09:51
nemo555
см. выше, Вам уже помогли.

Coutty
12-03-2007, 11:37
Лишь одна поправка: est=true; Там присвоение должно быть (на мой взгляд).
И проверка if (!est), как заметил Arrest - внутри цикла for.

suxxl
13-03-2007, 21:24
я б еще est = false; в конец цикла while передвинул, для наглядности :-)




© OSzone.net 2001-2012