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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
#1

Помогите найти ошибки, пожалуйста - C++

19.08.2008, 11:39. Просмотров 1432. Ответов 18
Метки нет (Все метки)

почему код выдает ошибки?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#define N 20000
//алгоритм "решето Эвклида"
unsigned int a[N];
void main(){
   //заполним все ячейки числами по порядку: 0,1,2,3...
   for(int i=0; i<N; i++){
       a[i] = i;
   }
   //поскольку 1 не простое число, обнулим ячейку с этим числом
   a[1]=0;
   for(int s=2; s<N; s++){
       if(a[s]!=0){
       for(int j=s*2; j<N; j+=s){
           a[j]=0;
       }
       }
   }
   for(i=0; i<N; i++){
       if(a[i]!=0){
       printf("%d\n", a[i]);
       }
   }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2008, 11:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Помогите найти ошибки, пожалуйста (C++):

Помогите мне пожалуйста найти ошибки в алгоритме - C++
Здравствуйте, я новичок в сфере программирования, помогите мне пожалуйста найти ошибки в алгоритме: #include &lt;math.h&gt; #include...

Помогите, пожалуйста, исправить ошибки в коде - C++
const int n=20; int b; int i,j,c; for (i=1;i&gt;n,i++) { c=a; for(j=i-1;j&gt;=0&amp;&amp;a&gt;c;j--) a=a; a=c; }

Помогите найти ошибки - C++
Добрый день! Подскажите, в чем здесь ошибка? (прикрепляю скрин)

Помогите найти ошибки в программе. - C++
Не могу понять в чем тут ошибка. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;locale&gt; #include &lt;clocale&gt; #include &lt;math.h&gt; ...

Помогите найти ошибки.срочно - C++
срочно потому что уже надо высылать прогу. Задача: записать прогу с функцией,которая решает уравнение второго степени.(количество и само...

Помогите найти ошибки в программе - C++
я пока новичок, написал программу а она не компилируется, подскажите где здесь есть ошибки (подозреваю что их очень много:)) ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
19.08.2008, 11:52 #2
А что у тебя за компилятор? потому что у меня всё нормально работает...
urkovsky
6 / 6 / 0
Регистрация: 07.08.2008
Сообщений: 22
19.08.2008, 11:53 #3
Если пишешь на C то должен объявлять все локальные переменные в начале функции. В принципе все.
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
19.08.2008, 11:58  [ТС] #4
ой, простите за беспокойство, это с компилятором что-то неладное творилось

Добавлено через 1 минуту 49 секунд
urkovsky, Спасибо, так оно и надо было сделать, но все равно 3 ошибки выдавало, компилятор глючил
Somebody
2788 / 1602 / 145
Регистрация: 03.12.2007
Сообщений: 4,193
Завершенные тесты: 1
19.08.2008, 12:59 #5
Код
//алгоритм "решето Эвклида"
А не Эратосфена?
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
19.08.2008, 14:46  [ТС] #6
и так и так называют

Добавлено через 11 минут 23 секунды
А подскажите, как полученные этим кодом:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#define N 256
//алгоритм "решето Эвклида"
 
int main(){
 
    unsigned int a[256];
    int i, s, j;
   //заполним все ячейки числами по порядку: 0,1,2,3...
   for( i=0; i<N; i++){
       a[i] = i;
   }
   //поскольку 1 не простое число, обнулим ячейку с этим числом
   a[1]=0;
   
   for (s=2; s<N; s++){
       if(a[s]!=0){
       for(j=s*2; j<N; j+=s){
           a[j]=0;
       }
       }
   }
   for(i=0; i<N; i++){
       if(a[i]!=0){
       printf("%d\n", a[i]);
       }
   }
 
}
простые числа - т.е. последовательость a[i], передать в цикл....

Пробую так дописать - фигня получается:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
   for(i=0; i<N; i++){
       if(a[i]!=0 && n % a[i]==0){
       return 0;
       }
       return 1;
   }
  
       
}
 
main() 
 
{
      int n=0;
        printf( "Enter any number -> \n");
        scanf("%u", &n);
        printf("%s\n",
            (
                delimost (n) ?
                "It is possibly a prime number" :
                "It is composite number"
            )
        );
    return 0;
 
}

а нужно, чтобы цикл брал все ненулевые a[i] по порядку и делил n на каждое из них, и если все остатки не равны нулю - то выводил бы - It is possibly a prime number
qwone
9 / 9 / 1
Регистрация: 18.08.2008
Сообщений: 129
19.08.2008, 20:53 #7
Код
int n=0;
У тебя это число целое а должно быть с float . целые делятся без остатка.
машина отсекает.
Chaos_Optima
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 00:20 #8
Ошибка тут
C++
1
2
3
4
5
6
7
 for (s=2; s<N; s++){
       if(a[s]!=0){
       for(j=s*2; j<N; j+=s){
           a[j]=0;
       }
       }
   }
у тебя тут явный выход за пределы масива
попробуй лучше так
C++
1
2
3
4
5
6
7
8
 for (s=2; s<N; s++){
       if(a[s]!=0){
       for(j=s*2; j<N;j=j){
           a[j]=0;
            j+=s;
       }
       }
   }
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 12:04  [ТС] #9
qwone - с типом float
error C2296: '%' : illegal, left operand has type 'float'

Добавлено через 1 час 29 минут 6 секунд
Chaos_Optima - тоже не помогло...может здесь в логике ошибка? Помогите разобраться, пожалуйста!!!
Chaos_Optima
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 13:25 #10
Вот такой код у меня работает без проблем
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#define N 20
unsigned int a[N];
 
void main(){
    int i;
    for(i=0; i<N; i++,a[i]=i);
    a[1]=0;
    for(int s=2; s<N; s++)
        if(a[s]!=0)for(int j=s*2; j<N; j+=s,a[j]=0);
    for(i=0; i<N; i++)
        if(a[i]!=0)printf("%d\n", a[i]);
    scanf("%i",&i);
}
Добавлено через 6 минут 55 секунд

у тебя проблема в верхнем цыкле он на первом уже выходит из тела функции
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 13:31  [ТС] #11
вот вопрос в том, как организовать цикл, чтобы он брал все ненулевые a[i] по порядку (т.е. все простые числа) и делил n на каждое из них, и если все остатки не равны нулю - то выводил бы - It is possibly a prime number, или, что то же самое - если хотя бы один остаток равен нулю - то It is composite number.

Я сделала так, правильно?:


C++
1
2
3
4
5
6
7
8
 for(i=0; i<N; i++){
 
        if(a[i]!=0 && a[i]!=n && n % a[i]==0)
        
        {
            //printf("%d\n", a[i]);
            return 0;
        }
Chaos_Optima
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 13:34 #12
Вот полностью рабочий код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#define N 20
unsigned int a[N];
 
bool  delimost(int n)
{
    int i;
    for(i=0; i<N; i++)
        if(a[i]!=0)
            if((n % a[i])==0)
                return false;
    return true;
}
 
void main(){
    int i;
    for(i=0; i<N; i++,a[i]=i);
    a[1]=0;
    for(int s=2; s<N; s++)
        if(a[s]!=0)for(int j=s*2; j<N; j+=s,a[j]=0);
    for(i=0; i<N; i++)
        if(a[i]!=0)printf("%d\n", a[i]);
    printf( "Enter any number -> \n");
    scanf("%i", &i);
    printf("%s\n",delimost(i)?
                "It is possibly a prime number" :
                "It is composite number");
    scanf("%i", &i);
}
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 14:21  [ТС] #13
Спасибо!!! А мой цикл неверен?
Chaos_Optima
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 14:28 #14
да неверен дело в том что return выкидывает тебя из тела функции и по твоему коду видно что он тебя выкинет при первомже успешном выполнении функции такчто скорее всего функция тебе буде всегда возвращать 0 (я рассматриваю последний код который ты оставил)
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 14:31  [ТС] #15
так если функция выполнилась успешно - т.е. остаток от деления равен нулю - так меня и должно выкинуть - ибо число уже явно составное...

P.S.: Я девушка
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2008, 14:31
Привет! Вот еще темы с ответами:

Помогите найти ошибки. С++. ООП - C++
Собственно Задание: 1. В соответствии с вариантом заданий 1 создать класс, в котором определяются закрытые свойства и открытые методы...

Помогите, пожалуйста найти ошибку - C++
Uvx и Uvix считает правильно, а вот с t, какие-то проблемы))) вообще по нулям не понимаю почему. За ранее спасибо! Вот программа: ...

Быстрая сортировка. Помогите найти ошибки - C++
Совсем мало знакома с с++, посмотрите пожалуйста код, какие есть ошибки? using namespace std; void quickSort(vector&lt;int&gt; a, int l,...

Помогите найти ошибки в сортировке List STL - C++
Ситуация такая. С помощью одного из пользователей форума дописал свой не рабочий код. И вроде бы всё хорошо. Но появилась ошибка с кейсом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.08.2008, 14:31
Закрытая тема Создать тему
Опции темы

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