Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Простые числа на Си++ (http://forum.oszone.net/showthread.php?t=80736)

nemo555 11-03-2007 15:07 560239

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

nemo555 11-03-2007 17:37 560286

Компилятор ошибку выдаёт.Помогите найти.
#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 560288

Какую именно ошибку?

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

nemo555 11-03-2007 19:07 560310

[C++ Error] Unit1.cpp(12): E2451 Undefined symbol 'i'
[C++ Error] Unit1.cpp(14): E2376 While statement missing (

Coutty 11-03-2007 19:47 560321

Цитата:

Простым наз-ся число 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 560331

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 560341

Цитата:

[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 560353

Теперь вот:
#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 560393

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

Arrest 11-03-2007 23:09 560394

PHP код:

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


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

nemo555 11-03-2007 23:37 560406

XCodeR честно говоря уже запутался.Если можете то пожалуйста напиши рабочий вариант - очень надо к понедельнику днём. Будет большой респект

XCodeR 12-03-2007 09:51 560502

nemo555
см. выше, Вам уже помогли.

Coutty 12-03-2007 11:37 560538

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

suxxl 13-03-2007 21:24 561211

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


Время: 03:29.

Время: 03:29.
© OSzone.net 2001-