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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2010, 19:05   #1
JayJay
 
Регистрация: 21.09.2010
Сообщений: 3
Радость

Задача 1
Возвести 2 в n-степень. Не использовать функцию pow.
Пример:
Вводим: 5
Выводит: 32

не могу решить, помогите пожалуйста =)

Последний раз редактировалось Stilet; 22.09.2010 в 08:43.
JayJay вне форума Ответить с цитированием
Старый 21.09.2010, 19:09   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
for(i=0,p=1;i<n;i++) p*=2;
rrrFer вне форума Ответить с цитированием
Старый 21.09.2010, 19:11   #3
JayJay
 
Регистрация: 21.09.2010
Сообщений: 3
По умолчанию

Задача 2
Вести натуральное число n. Вычислить n!.
n! = 1*2*3*...*n.
Заметка: 0! = 1.
Пример:
Вводим:4
Выводит:24
JayJay вне форума Ответить с цитированием
Старый 21.09.2010, 19:14   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

JayJay
если много задач то вам в раздел заказа программ, а вообще пользуйтесь поиском, вчера я в этом разделе писал поиск факториала на С++ и прологе, кто-то на паскале еще написал, ищите
rrrFer вне форума Ответить с цитированием
Старый 21.09.2010, 19:20   #5
JayJay
 
Регистрация: 21.09.2010
Сообщений: 3
По умолчанию

хорошо
спасибо =)
JayJay вне форума Ответить с цитированием
Старый 21.09.2010, 19:29   #6
sergey.d
Пользователь
 
Регистрация: 23.08.2010
Сообщений: 98
По умолчанию

Код:
int pow2n(int n) 
{
    return 1 << n;
}
Код:
int fact(int n)
{
    return n == 0 ? 1 : n * fact(n-1);
}

Последний раз редактировалось Stilet; 22.09.2010 в 08:44.
sergey.d вне форума Ответить с цитированием
Старый 21.09.2010, 19:49   #7
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Задача 2 полагаю будет решаться так:
Код:
#include <iostream>

using namespace std;

int myfact(int n); //рекурсивная функция для вычисления факториала

int main()
{
    int n;

    cout << "Vvedite Polojitelnoe 4islo n" << endl;
    cin >> n;
    cout << "Factorial 4isla n = " << myfact(n) << endl;

    return 0;
}

int myfact(int n)
{
    if(n==1 || n==0) return 1; //если число равно 0 или 1 получаем 1
    return n* myfact (n-1);
}
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 21.09.2010, 19:53   #8
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Roof
а вдруг пользователь попросит факториал отрицательно числа, однако, ошибка
rrrFer вне форума Ответить с цитированием
Старый 21.09.2010, 20:41   #9
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

2 rrrFer нну да, согласен. А еще может ввести буквенные символы.
Думаю, реализация будет такой:
Код:
#include <iostream>

using namespace std;

int myfact(int n); //рекурсивная функция для вычисления факториала

int main()
{
    int n;


    while (true)
    {
       cout << "Vvedite Polojitelnoe naturalnoe 4islo n" << endl;
       cin >> n;  //1

        if ((cin.peek() == '\n') && ( n >= 0))  //2
        {
           cin.get();  //3
           break;
        }
        else{
                cin.clear();  //4
                while (cin.get() != '\n'){} //5
            }
    }

    cout << "Factorial 4isla n = " << myfact(n) << endl;

    return 0;
}

int myfact(int n)
{
    if(n==1 || n==0)
       return 1; //если число равно 0 или 1 получаем 1
    return n* myfact (n-1);
}
Цитата:
//1 и //2 - Если в буфере находится целое число, завершаемое символом перевода строки '\n', то по завершении операции в буфере останется только символ '\n'. В //2 это условие проверяется. Если проверка завершена успешно, то оператор //3 очищает входной буфер от символа '\n'. Если введенная информация некорректна, то оператор //4 сбрасывает флаги ошибок, а с помощью оператора //5 извлекаются все символы, вплоть до '\n'.
Хотя я считаю, что если человек спрашивает подобные задания, то ему скорее всего нужно только сдать преподавателю и мое первое решение было бы достаточным. ННу это только субъективное предположение.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 21.09.2010 в 20:48.
Roof вне форума Ответить с цитированием
Старый 21.09.2010, 20:58   #10
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Roof
строку в функцию передать бы все равно не получилось, компилятор бы сообщил об ошибке, кроме случая когда в функцию был бы передан код одного символа из строки. В любом случае я не имел ввиду обработку ошибок ввода, а:
Код:
 if(n==1 || n==0)
заменить на n<2, но это тоже не совсем верно, т.к. для отрицательных чисел он все-таки будет посчитан, а не должен поидее.
а строчку эту стоит все-таки поправить до n==0 потому что у вас выполняется лишняя проверка "n" раз
rrrFer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи artemavd JavaScript, Ajax 1 16.10.2008 09:00
Задачи... Раймир Фриланс 2 15.08.2008 17:13
Задачи vitalik007 Помощь студентам 1 13.10.2007 23:09