Форум программистов, компьютерный форум CyberForum.ru

Комбинаторика! Число сочитаний - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Цикл http://www.cyberforum.ru/cpp-beginners/thread634878.html
Начал изучать C++ неделю назад. Теперь начал решать некоторые задачи. И возникли у меня некоторые сложности с циклами... Требуется ваша помощь... Задача: Переведите натуральное число из двоичной системы в десятичную (в двоичном числе не более 10 цифр). Решение: #include <iostream> using namespace std;
C++ Работа с фс Всем привет, мне необходимо посчитать количество файлов в директории и в зависимости от их количества разделить их на 4 или 8 папок. Я слышала есть библиотеки fstream и boost, но как правильно это сделать я так и не поняла. http://www.cyberforum.ru/cpp-beginners/thread634869.html
Конструктор копирования C++
Всем привет. У меня такая проблема: есть некий класс, допустим Test: class Test { protected: int value; public : Test(int v)
Случайные(псевдослучайные) числа C++
Здравствуйте! Я знаю, что было много тем по поводу рандомных чисел в С++.Но всё же. Возникла у меня проблема с получением большого кол-ва случайных(точнее псвдослучайных) чисел, которые меньше 10.Я прекрасно знаю про функцию rand() % 10, и знаю то, что ПЕРЕД ней надо юзать функцию srand().Но вот в чём прикол.Я всегда юзал srand(time(NULL)) в паре с rand() % 10, но при генерации более 1 числа...
C++ Ошибка при вызове функции http://www.cyberforum.ru/cpp-beginners/thread634834.html
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту функцию,к тому же потом не выводится элементы объекта класса words и ID в программе на данный момент вызываются лишь 2 функции,которые я привёл #ifndef DICTIONARY_H #define DICTIONARY_H #include "StdAfx.h" class Dictionary { public:
C++ генерирую случайные числа srand(time(NULL)); rand()%10; Всем привет, генерирую случайные числа, подскажите, пожалуйста, почему при запуске приложения числа постоянно генерируются? Как можно сделать так, чтобы при каждом запуске приложение выводило только одно число? Спасибо большое! подробнее

Показать сообщение отдельно
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
13.08.2012, 16:01     Комбинаторика! Число сочитаний
Цитата Сообщение от mr_free Посмотреть сообщение
интересно а как насчет быстродействия даного метода? точность как я понял горантирована!
Не ну как- точность гарантирована настолько, насколько она вообще может быт гарантирована при работаешь с дробными числами (если работаешь с ними). Не более, но и не менее.

Насчёт скорости- чёрт его знает, откровеннно говоря. Тут надо хорошо разбираться в этом чтобы делать какие-то выводы. Вот подсчёт факориала рекурсией
C++
1
2
3
4
5
6
int fact(int n)  {
 if(n <= 1)
   return 1;
 else 
 return n * fact(n - 1);
}
А вот в цикле
C++
1
2
3
4
5
6
int fact(int n)  {
 int fact_= 1;
 for (int i= 1; i<= n; i++)
  fact_*= i;
 return fact_;
}
Явно тут нет выигрыша во времени ни в каком варианте. А вот неявно неплохой выигрыш, вот эта инструкция:
C++
1
return n * fact(n - 1);
Как ты знаешь, все переменные размещаются в ячейках памяти. И с ними происходят операции, задействуя регистры. А вот здесь можно предположить, что операции будут происходить СРАЗУ С РЕГИСТРОМ EAX (это много быстрее, нежели работать с памятью), ибо вот это значение fact(n - 1) будет всякий раз по окончании функции оказываться в регистре. И его сразу можно множить на n

Но это только предположения. Ничто не мешает компилятору задействовать ячейку памяти для данной задачи (под возвращаемое значение) и тогда скорость упадёт.
Ну и так далее.

+++++++++++++++++++++++++++++++++++++++++++++++++++

Уж лучше проверь руками. Наверное, есть какие-то специальные функции чтобы узнать, сколько времени длится та или иная программа. Но я парень простой, я бы сделал примерно так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main () {
 
 for (int i= 0; i< 100; i++)
  for (int i= 0; i< 100; i++)
   for (int i= 0; i< 100; i++)
    for (int i= 0; i< 100; i++)
     fact (5);
 
 system ("pause");
 
 
 for (int i= 0; i< 100; i++)
  for (int i= 0; i< 100; i++)
   for (int i= 0; i< 100; i++)
    for (int i= 0; i< 100; i++)
     fact_ (5);
 
 system ("pause");
 
 return 0;
}
Смысл понятен, я думаю. Время отслеживается на раз, знай фиксируй.
 
Текущее время: 15:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru