Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите написать цикл, пожалуйста! 
V
    Опции темы
Splendid
Дата 27.6.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



Очень нужна помощь. Есть цикл:

Код

 for (g; (g = Euclid (m, b)) != 1; ++b)
                if (m > g)
                        return 0;


здесь Euclid (m, b) - это

Код

    //Алгоритм Евклида (для нахождения НОД)
ulong Euclid(ulong a, ulong b)
{
    ulong c;
    while (b)
    {
        c = a % b;
        a = b;
        b = c;
    }
    return a;
}



Нужно переписать этот цикл, используя следующую библиотеку:

Код





Я попробовала переписать и получилось вот что:

Код





 
Но это не правильно, не работает....
В чем моя ошибка, подскажите, пожалуйста? smile 

Это сообщение отредактировал(а) Splendid - 28.6.2008, 14:54
PM MAIL   Вверх
JackYF
Дата 27.6.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(Splendid @  27.6.2008,  14:13 Найти цитируемый пост)
Я попробовала так, но что-то здесь не то:

Как это было определено? Где конкретика?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Splendid
Дата 27.6.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



что как было определено? какая конкретика нужна?

Добавлено через 1 минуту и 56 секунд
вроде все, что использовалось описано...
PM MAIL   Вверх
bsa
Дата 27.6.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Код
while(1) {
   big_GCD(m, b, &g);
   if ( big_compare(g, big_one) == 0)
      break;
   if (big_compare(m, g) > 0)
       return 0;
   big_add_int(b, 1, &b); //возможно придется сделать через временную переменную, так как неизвестна допустимость данной операции
}
b, m, g, big_one - переменные типа big_number, big_one - константа равная 1.
PM   Вверх
Alek86
Дата 27.6.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



примерно так?

Код

big_number g = 0;
big_number m = 10;
big_number b = 30;

for (g; // было g
big_GCD(m, b, &g), big_compare(g, 1) != 0 // было (g = Euclid (m, b)) != 1;
big_add_int(b, 1, &b)      // было ++b
)
                if (big_compare(m, g) == 1)
                        return 0;



--------------------
user posted image    user posted image
PM MAIL   Вверх
Splendid
Дата 27.6.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



bsa, спасибо!

Вот программка, которой я пытаюсь проверить, что возвращает этот цикл...но она мне ничего не выводит - может в ней ошибка?

Код

#include <stdio.h>
#include <iostream>
#include "big_number.h"
using namespace std;
typedef unsigned long ulong;


ulong algorithm_miller_rabin (big_number m, ulong b)
{

    ulong i = 0, g=0;
    big_number tmp1, bb, gg;
            
    big_create( &tmp1 );
    big_create( &bb );
    big_create( &m );
    big_create( &gg );
    
    big_add_int( tmp1, 1, &tmp1 );
    big_add_int( bb, b, &bb );
    big_add_int( gg, g, &gg );

    while(1) 
    
{
   big_GCD(m, bb, &gg);
   if ( big_compare(gg, tmp1) == 0)
      break;
   if (big_compare(m, gg) > 0)
       return 0;
   big_add_int(bb, 1, &bb); 
}

}

int main()
{
   
        big_number m;
        char i[20]={0x44,0x44};
        big_input(i,1,2,&m);        
    
        switch(algorithm_miller_rabin (m, 2))

  {    case 0: printf("It is composite number\n"); 
            break;
        case 1: printf("It is possibly a prime number\n"); 
            break;
        case 2: printf("It is neigher prime nor composite number!\n"); 
            break; 
  }
    
    return 0;
}


Добавлено @ 15:41
а вот аналог для обычных чисел возвращает значения...

Код

#include <stdio.h>
#include <iostream>
//#include "big_number.h"
using namespace std;
typedef unsigned long ulong;

//Алгоритм Евклида (для нахождения НОД)
ulong Euclid(ulong a, ulong b)
{
    ulong c;
    while (b)
    {
        c = a % b;
        a = b;
        b = c;
    }
    return a;
}

 ulong algorithm_miller_rabin (ulong m, ulong b)
{ 
   
     ulong g;
     for (g; (g = Euclid (m, b)) != 1; ++b)
                if (m > g)
                        return 0;

}

ulong main ()
{

ulong m;
printf( "Enter any number -> \n");
scanf("%u", &m);


switch(algorithm_miller_rabin (m, 2))
  {  
        case 0: printf("It is composite number\n"); break;
        case 1: printf("It is possibly a prime number\n"); break;
        case 2: printf("It is neigher prime nor composite number!\n"); break; 
  }
    
    return 0;



}



Это сообщение отредактировал(а) Splendid - 27.6.2008, 16:39
PM MAIL   Вверх
Splendid
Дата 27.6.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



Alek86, спасибо!

Но с Вашим кодом то же самое, ничего цикл не возвращает...или я где-то ошиблась...
PM MAIL   Вверх
bsa
Дата 27.6.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



функция ulong algorithm_miller_rabin (big_number m, ulong b) должна что-то возвращать, а у тебя она ничего не возвращает (return должен быть в конце ее).

Это сообщение отредактировал(а) bsa - 27.6.2008, 16:16
PM   Вверх
Splendid
Дата 27.6.2008, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



bsa, но в обоих вариантах return нету, но на обычных числах возвращает и работает. 

Пробовала добавить return 0; (а так же return 2; ) - ниче не изменилось.
PM MAIL   Вверх
Alek86
Дата 27.6.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Splendid, возьми дебаггер и проверь
намного быстрее будет


--------------------
user posted image    user posted image
PM MAIL   Вверх
Splendid
Дата 27.6.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



дебаггер ниче не выдает, никаких ошибок...
PM MAIL   Вверх
Alek86
Дата 27.6.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



он и не должен выдавать ошибки
дебаггер - эта такая штука, спомощью которой ты можешь пошагово прогнать свою прогу, видеть значения всех переменных на каждом шаге...
в общем, как раз то, что тебе сейчас необходимо


--------------------
user posted image    user posted image
PM MAIL   Вверх
Splendid
Дата 27.6.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



а это нужна какая-то дополнительная прога, или в Вижуал С++ 6-ом он встроенный есть?
PM MAIL   Вверх
Alek86
Дата 27.6.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



встроенный
по идее даже менюка есть Debug
F10 - начать дебаг


--------------------
user posted image    user posted image
PM MAIL   Вверх
Splendid
Дата 27.6.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 1.8.2007
Где: Беларусь, Минск

Репутация: нет
Всего: нет



ну и он мне пишет 

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'F:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.

и указывает на открывающуюся скобку...

int main()
{

шой та значит?smile

Добавлено через 4 минуты и 15 секунд
еще я попыталась в разных местах выводить на печать m, выводит только непосредственно после ее ввода, т.е. после строк:

Код

char i[20]={0x44,0x44};
        big_input(i,1,2,&m); 


а во всех остальных местах - пустую строку....почему это может быть?

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.