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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Задание с факториалами 
V
    Опции темы
WinterEP
Дата 28.2.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009

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



Привет! Нужна помощь в решении задания. ^^
Цитата
Написать функцию "Факториал" и программу, которая использует эту функцию для вывода таблицы факториалов.

Есть некоторые наработки, возможно пригодятся при написании кода:
Код

 void main (void)
  {
    float number, rez;
    puts ("Input number");
    scanf ("%f", & number);
    rez=factorial (number);
  printf ("%f", rez);
    getch ();
  }

Код

 float factorial (float R)
  {
    if (R<=1) return 1;
    else
    { return (R*factorial (R-1)); }
  }

Не лишним была бы совместимость программы с Turbo C++ 3.0. Спасибо )
PM   Вверх
Dmi3ev
Дата 28.2.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



че-то не очень у тебя наработки)))
Цитата

 float factorial (float R)
  {
    if (R<=1) return 1;
    else
    { return (R*factorial (R-1)); }
  }

зачем тут плавающая точка, факториал вроде целый...
Цитата

 void main (void)
  {
    float number, rez;
    puts ("Input number");
    scanf ("%f", & number);
    rez=factorial (number);
  printf ("%f", rez);
    getch ();
  }

это тоже чудоштука
вот тебе подарок от меня
Код


int fact (int n)
{
    if(n==1)
        return 1;
    else
        return (n*fact(n-1));
}

int main()
{
    int start;
    int finish;
    printf("Enter start number: ");
    scanf("%d", &start);
    printf("Enter finish number: ");
    scanf("%d", &finish);
    printf("=========================================\n");
    printf("|        Number     |    Factorial      |\n");
    printf("=========================================\n");
    for (int i=start; i<=finish; i++)
    {
        printf("|");
        printf("%19d",i);
        printf("|");
        printf("%19d",fact(i));
        printf("|\n");
        
    }
    printf("=========================================\n");
    system("pause");
    return 0;
}

таблица строится от числа start до finish

Это сообщение отредактировал(а) Dmi3ev - 28.2.2009, 23:59


--------------------

PM MAIL   Вверх
Dmi3ev
Дата 1.3.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



исправил ошибочку


--------------------

PM MAIL   Вверх
IoganeGambaPuti
Дата 1.3.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.1.2009

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



Код


#include <iostream>
#include <vector>
unsigned long int fact(unsigned int _entr_num)
{
  if (_entr_num==0) return 1;
  else return _entr_num*fact(_entr_num-1);
}

using namespace std;

int main(void)
{
  vector<unsigned int> mass_nums;
  unsigned int entr_num;
  long int fact_entr_num;
  bool more=true; 
  
  ios_base::iostate old_state=cin.exceptions();
  cin.exceptions(ios_base::badbit|ios_base::failbit);

  std::cout<<"Please enters massive of numbers for creation a table of their factorials(any negative number or symbol for end of massive):";
    while(more){
      try
    {
      cin>>entr_num;
      mass_nums.push_back(entr_num);
    }  
      catch(ios_base::failure)
    {
      more=false;
      cin.clear();
      cin.ignore(1000,'\n');
    }
    }
  vector<unsigned int>::iterator it;
  for(it=mass_nums.begin();it!=mass_nums.end();it++)
    {
      cout<<"-------------------------------------------------------"<<endl;
      cout<<"Number="<<*it<<endl;
      try
    {
      fact_entr_num=fact(*it);
      cout<<"Factorial of number="<<fact_entr_num<<endl; 
      cout<<"-------------------------------------------------------"<<endl;
    }
      catch(...)
    {
      cerr<<"Bad number"<<endl; 
      cerr<<"-------------------------------------------------------"<<endl;
    }
    }
  cin.exceptions(old_state);
  return 0;
}



Вот ещё 
P. S. только защиты от дурака нет(для больших чисел)
PM MAIL   Вверх
WinterEP
Дата 1.3.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009

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



Dmi3ev, поначалу я сам подправил cout, а cin не менял - все работало, но получалось что без последнего исправления расчет факториалов смещался на один элемент. Сейчас все вычисляется и выводится правильно. Только была заминка с задержкой экрана, вроде бы сам исправил. В итоге:
Код

# include <conio.h>
# include <stdio.h>
# include <iostream.h>
# include <math.h>
int fact (int n)
{
    if(n==1)
        return 1;
    else
        return (n*fact(n-1));
}
int main()
{
    int start;
    int finish;
    printf("Enter start number: ");
    scanf("%d", &start);
    printf("Enter finish number: ");
    scanf("%d", &finish);
    printf("=========================================\n");
    printf("|        Number     |    Factorial      |\n");
    printf("=========================================\n");
    for (int i=start; i<=finish; i++)
    {
        printf("|");
        printf("%19d",i);
        printf("|");
        printf("%19d",fact(i));
        printf("|\n");

    }
    printf("=========================================\n");
    // return 0;
    getch ();
}

Может только библиотека какая лишняя, а так все супер. Благодарю!
P.S. Наработки не мои, хотя сам лучше не придумал бы... ))

IoganeGambaPuti, моему компилятору код не понравился, может много специфики. Но все равно спасибо! )
PM   Вверх
Dmi3ev
Дата 1.3.2009, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

int fact (int n)
{
    if(n==1)
        return 1;
    else
        return (n*fact(n-1));
}

и, конечно же, ты просто смутил меня своими наработками надо 
Код

int fact (int n)
{
    if(n==0)
        return 1;
    else
        return (n*fact(n-1));
}

 у IoganeGambaPuti правильно, потому что факториал 0=1, а так получится, что не будет у 0 факториала, это нехорошо

Добавлено через 1 минуту и 7 секунд
и в конце пиши
Код

 getch ();
 return 0;
}

так оно вернее


--------------------

PM MAIL   Вверх
WinterEP
Дата 1.3.2009, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2009

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



Dmi3ev,  smile 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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