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

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

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

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

19.08.2008, 11:39. Просмотров 1420. Ответов 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]);
       }
   }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
2777 / 1591 / 142
Регистрация: 03.12.2007
Сообщений: 4,169
Завершенные тесты: 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
8 / 8 / 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.: Я девушка
Chaos_Optima
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 14:37     Помогите найти ошибки, пожалуйста #16
Зая у тебя там лишнее условие a[i]!=n
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 14:44  [ТС]     Помогите найти ошибки, пожалуйста #17
почему? ведь если я ввожу для проверки число 11 - а оно простое и на него будет происходить деление, которое даст остаток 0 - и ответ выдаст - составное, а это не так...
Chaos_Optima
0 / 0 / 0
Регистрация: 20.08.2008
Сообщений: 8
20.08.2008, 14:51     Помогите найти ошибки, пожалуйста #18
А ну если проверять ещё на сами просты то да всё верно кстати у тебя помоему ошибка в алгоритме одно из чисел которое он мне выдаёт 4 а это не простое число
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.08.2008, 16:08     Помогите найти ошибки, пожалуйста
Еще ссылки по теме:

C++ Помогите, пожалуйста, исправить ошибки в коде
C++ Помогите найти ошибки в сортировке List STL
C++ Быстрая сортировка. Помогите найти ошибки
Помогите найти ошибки C++
Помогите найти ошибки: проверить кратность чисел на 3 C++

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

Или воспользуйтесь поиском по форуму:
Splendid
0 / 0 / 1
Регистрация: 27.03.2008
Сообщений: 75
20.08.2008, 16:08  [ТС]     Помогите найти ошибки, пожалуйста #19
Ясно, исправлю

Спасибо всем за помощь!
Тему можно закрыть
Yandex
Объявления
20.08.2008, 16:08     Помогите найти ошибки, пожалуйста
Закрытая тема Создать тему
Опции темы

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