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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2013, 01:52   #1
Sultanova
Пользователь
 
Аватар для Sultanova
 
Регистрация: 04.01.2013
Сообщений: 11
Подмигивание Задача на С++ . 3ий день ломаю голову

В общем задача такая:
Вычислить произведение первых N сомножителей
1/2*3/2*3/4*5/4*5/6*7/6* ...

Ломаю голову, не пойму по какому алгоритму решать. Ясное дело, что должны ввести число N.
Я пробовала сделать цикл,
for (k=1,l=2;k<=n;k++,l++) {

m*=k/l;

}

Но я не знаю, как сделать в алгоритме, чтобы он через один переворачивал дробь и умножал.
Еще вариант сделать условие:
Если остаток от деления k%2=0 тогда m*=l/k а если нет, то m*=k/l
Но я не знаю как это программно осуществить, т.к. в с++ разбираюсь буквально на базовом уровне. Помогите пожалуйста. Буду очень благодарна, если предложите еще идеи, как решить данную задачу. Надеюсь на Вашу помощь, надеюсь не сильно муторно написала
Sultanova вне форума Ответить с цитированием
Старый 08.01.2013, 04:45   #2
kventin_zhuk
БНТУ ФИТР
Форумчанин
 
Аватар для kventin_zhuk
 
Регистрация: 20.05.2012
Сообщений: 315
По умолчанию

мне кажется, что в вашем условии дробь каждый раз переворачивается. Перевернуть дробь - возвести ее в степень -1. А если нужно через один - проверку четности по к сделать. К сожалению , не у компа, так бы набросил.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты
kventin_zhuk@live.com
kventin_zhuk вне форума Ответить с цитированием
Старый 08.01.2013, 08:18   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Задача на С++ . 3ий день ломаю голову
"Ломал голову" примерно минут 15 с перерывом на перекур .
Вот решение:
Код:
float k = 1;
float l = 2;
float m = 0;
if(n != 0)
{
  m = k/l;// Первую дробь вычисляем отдельно, т.к. она выпадает из цикличности
  for (i=0; i<n; i++)
  {
    if(i%2 == 0) k+=2;// Проверяем чётность итерации и если она чётная, прибавляем 2 к числителю
    else l+=2;// Если нечётная, к знаменателю.
    m*=k/l;
  }
}
Цитата:
чтобы он через один переворачивал дробь и умножал.
В условии задачи, (1/2*3/2*3/4*5/4*5/6*7/6* ...) никакого переворота дроби не происходит. Может это две разные задачи?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 08.01.2013 в 10:00.
Smitt&Wesson вне форума Ответить с цитированием
Старый 08.01.2013, 19:18   #4
Sultanova
Пользователь
 
Аватар для Sultanova
 
Регистрация: 04.01.2013
Сообщений: 11
По умолчанию Спасибо

Спасибо за идею решения, за программу. Чуть-чуть подправила цикл, теперь все правильно работает. Бьюсь об заклад преподу не понравится способ решения, но это лучше чем вообще без программы. Еще раз благодарю
Код:
#include <iostream>
using namespace std;

int main() {
    float k=1,l=2,m=0;
    int n,i;
    cin>>n;
    if(n!=0) {
        m=k/l;
        for(i=0;i<n-1;i++){
          if(i%2==0) k+=2;
          else l+=2;
          m*=k/l;
        }
}
    cout<<m;
    return 0;
}
Sultanova вне форума Ответить с цитированием
Старый 08.01.2013, 19:19   #5
Sultanova
Пользователь
 
Аватар для Sultanova
 
Регистрация: 04.01.2013
Сообщений: 11
По умолчанию

Цитата:
мне кажется, что в вашем условии дробь каждый раз переворачивается. Перевернуть дробь - возвести ее в степень -1. А если нужно через один - проверку четности по к сделать. К сожалению , не у компа, так бы набросил.
Спасибо за идею)
Sultanova вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Купил д. имя, ломаю голову над сервером. hospes16 Свободное общение 22 02.04.2012 14:51
Две недели ломаю голову над задачей в C++ fixtera Помощь студентам 2 23.01.2012 22:24
invalid floating point operation, дня три голову ломаю=(((( Никита. Общие вопросы Delphi 1 19.07.2011 20:54
FASM. Цикл. Долго ломаю голову. Подскажите. Lamo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 12.02.2010 13:10
Задача с матрицей. Ломаю голову уже неделю Damokl Помощь студентам 6 19.12.2007 03:20