Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
1

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

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

Author24 — интернет-сервис помощи студентам
почему код выдает ошибки?

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]);
       }
   }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2008, 11:39
Ответы с готовыми решениями:

Помогите мне пожалуйста найти ошибки в алгоритме
Здравствуйте, я новичок в сфере программирования, помогите мне пожалуйста найти ошибки в алгоритме:...

Помогите, пожалуйста, исправить ошибки в коде
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; ...

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

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

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

Добавлено через 1 минуту 49 секунд
urkovsky, Спасибо, так оно и надо было сделать, но все равно 3 ошибки выдавало, компилятор глючил
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
19.08.2008, 12:59 5
Код
//алгоритм "решето Эвклида"
А не Эратосфена?
0
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
0
10 / 10 / 2
Регистрация: 18.08.2008
Сообщений: 127
19.08.2008, 20:53 7
Код
int n=0;
У тебя это число целое а должно быть с float . целые делятся без остатка.
машина отсекает.
0
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;
       }
       }
   }
0
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 - тоже не помогло...может здесь в логике ошибка? Помогите разобраться, пожалуйста!!!
0
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 секунд

у тебя проблема в верхнем цыкле он на первом уже выходит из тела функции
0
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;
        }
0
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);
}
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 14:21  [ТС] 13
Спасибо!!! А мой цикл неверен?
0
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 14:28 14
да неверен дело в том что return выкидывает тебя из тела функции и по твоему коду видно что он тебя выкинет при первомже успешном выполнении функции такчто скорее всего функция тебе буде всегда возвращать 0 (я рассматриваю последний код который ты оставил)
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 14:31  [ТС] 15
так если функция выполнилась успешно - т.е. остаток от деления равен нулю - так меня и должно выкинуть - ибо число уже явно составное...

P.S.: Я девушка
0
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 14:37 16
Зая у тебя там лишнее условие a[i]!=n
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 14:44  [ТС] 17
почему? ведь если я ввожу для проверки число 11 - а оно простое и на него будет происходить деление, которое даст остаток 0 - и ответ выдаст - составное, а это не так...
0
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 14:51 18
А ну если проверять ещё на сами просты то да всё верно кстати у тебя помоему ошибка в алгоритме одно из чисел которое он мне выдаёт 4 а это не простое число
0
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 16:08  [ТС] 19
Ясно, исправлю

Спасибо всем за помощь!
Тему можно закрыть
0
20.08.2008, 16:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2008, 16:08
Помогаю со студенческими работами здесь

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

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

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

Помогите найти ошибки в программе
я пока новичок, написал программу а она не компилируется, подскажите где здесь есть ошибки...


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

Или воспользуйтесь поиском по форуму:
19
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru