Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2010, 11:38   #1
Memfis_nya
Пользователь
 
Аватар для Memfis_nya
 
Регистрация: 04.11.2008
Сообщений: 29
Печаль Остаток от деления

Здравствуйте. Я совсем новичок в С++, поэтому прошу вашей помощи наверное в очень легкой задаче)
Есть формула: B(k+1)=l*Bk(mod N). То есть мне нужно, чтобы каждое следующее число было остатком от деления произведения предыдущего на l.

Есть код:

Код:
int main()
{   cout<<"viberite metod:\n 1.metod vichetov \n";
    int metod, N, L;
    double res;
    cin>>metod;
    switch (metod) {
        case 1:
        cout<<"vvedite N \n";
        cin>>N;
        cout<<"vvedite L \n";
        cin>>L;
        cout<<"vvedite B \n";
        cin>>res;
        for (int i=0; i<10; i++)
        {cout<<(L*res)%N<<" ";
        res=(L*res)%N;
        }
        break;
    }

    return 0;
}
Но вместо последовательности нужных чисел выдаются нули. Помогите, пожалуйста, где я ошиблась?
Memfis_nya вне форума Ответить с цитированием
Старый 26.09.2010, 12:16   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Memfis_nya
Цитата:
чтобы каждое следующее число было остатком от деления произведения предыдущего на l.
Код:
{res=res%l;
cout<<res;
}
rrrFer вне форума Ответить с цитированием
Старый 26.09.2010, 12:17   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

зачем N вообще не понял
rrrFer вне форума Ответить с цитированием
Старый 26.09.2010, 12:23   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Поскольку N, у Вас int, то остаток от деления будет равен нулю. Умножая на 0, получаем 0.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.09.2010, 12:23   #5
Memfis_nya
Пользователь
 
Аватар для Memfis_nya
 
Регистрация: 04.11.2008
Сообщений: 29
По умолчанию

Нет, N там нужно. Вы наверное не так поняли. Мы умножаем L на предыдущее число. Затем это произведение делим на N. И вот остаток от этого деления нам как раз и нужен.
Memfis_nya вне форума Ответить с цитированием
Старый 26.09.2010, 12:27   #6
Memfis_nya
Пользователь
 
Аватар для Memfis_nya
 
Регистрация: 04.11.2008
Сообщений: 29
По умолчанию

А если тот же код проделать, но объявить N и L типом float, то вообще выдается ошибка. Говорит, % - бинарный оператор и не может работать с float, как я поняла.
Memfis_nya вне форума Ответить с цитированием
Старый 26.09.2010, 12:33   #7
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Memfis_nya Посмотреть сообщение
А если тот же код проделать, но объявить N и L типом float, то вообще выдается ошибка. Говорит, % - бинарный оператор и не может работать с float, как я поняла.
А зачем нам вообще этот %?
Попробуйте так:
fmod(L * res, N);
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.09.2010, 12:42   #8
Memfis_nya
Пользователь
 
Аватар для Memfis_nya
 
Регистрация: 04.11.2008
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
А зачем нам вообще этот %?
Попробуйте так:
fmod(L * res, N);
Мм, а эта функция из какой библиотеки?
Memfis_nya вне форума Ответить с цитированием
Старый 26.09.2010, 12:49   #9
Memfis_nya
Пользователь
 
Аватар для Memfis_nya
 
Регистрация: 04.11.2008
Сообщений: 29
По умолчанию

Нашла. Написала вот так:

Код:
switch (metod) {
        case 1:
        cout<<"vvedite N \n";
        cin>>N;
        cout<<"vvedite L \n";
        cin>>L;
        cout<<"vvedite B \n";
        cin>>res;
        for (int i=0; i<10; i++)
       { 
      res=fmod(L * res, N);
      cout<<res<<"   ";}
Считает неправильно, хоть и компилирует без ошибок. Например, если ввести N=2, L=3, B=4, выдает в ответе ноль.
Memfis_nya вне форума Ответить с цитированием
Старый 26.09.2010, 12:53   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
			for (i=0; i<10; i++){
				res*=L;
				res=res-((int)res/N)*N+(int)res%N;
				cout<<res<<" ";
			}
угадал, это вам надо?
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что при нажатии на кнопку, выдало остаток от деления в Edit1 prikolist Общие вопросы C/C++ 4 03.04.2009 18:57
Получить остаток от деления Cpluser Общие вопросы C/C++ 18 26.02.2009 18:05
остаток от деления % Division Общие вопросы C/C++ 5 25.12.2008 14:08
Создать массив только из тех элементов, у которых остаток от деления на М равен L (0<=L<=M-1) Айвенго Microsoft Office Excel 2 12.01.2008 16:28