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

Нужно экспертное мнение! Что рациональнее!? почему так работают функции?! - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Устанавливаю Micosoft Visual C++ для Sp1))) http://www.cyberforum.ru/cpp-beginners/thread296086.html
Устанавливаю Micosoft Visual C++ для Sp1 на Sp3, пойдет ли она на Sp3?? Заранее спасибо!! Расскажите вообще об этой среде разработке плиз))) Я только планирую начать кодить на C++
C++ не могу правильно сделать роботу с файлами Скласти алгоритм і написати програму на алгоритмічній мові Борланд С, обробки двовимірного масиву. Створити інтерфейс користувача у вигляді двох вікон. Оформити обчислення в наступному порядку: 1)створити файл вихідних даних IDSnnn.INP, де nnn-три останні цифри залікової книжки 2)помістити вихідні дані в перше вікно 3)вихідний текст програми записати у файл з імям IDSnnn.CPP 4)результати... http://www.cyberforum.ru/cpp-beginners/thread296072.html
C++ сглаживание вещественного массива
Описать процедуру Smooth3(A, N), выполняющую сглаживание вещественного массива A размера N следующим образом: каждый элемент массива заменяется на его среднее арифметическое с соседними элементами (при вычислении среднего арифметического используются исходные значения соседних элементов). Массив A является входным и выходным параметром. С помощью этой процедуры выполнить пятикратное сглаживание...
Обьясните функцию C++
Обьяните пожалуйста кто сможет строчку где g = rand() / (float) RAND_MAX * groups; int g = peerGroup; while (g == peerGroup) g = rand() / (float) RAND_MAX * groups; int r = g * peersInGroup + (rand() / (float) RAND_MAX * peersInGroup); printf("New packet: %u --> %d\n", peer, r); return r;
C++ Составить программу преобразования натуральных чисел http://www.cyberforum.ru/cpp-beginners/thread296059.html
Помогите пожалуйста решить задачу. Составить программу преобразования натуральных чисел, записанных в римской нумерации, в десятичную систему счисления.
C++ разложение в цепную дробь ладно... подробнее

Показать сообщение отдельно
olleg90
 Аватар для olleg90
34 / 34 / 6
Регистрация: 06.01.2011
Сообщений: 90
16.05.2011, 17:33  [ТС]     Нужно экспертное мнение! Что рациональнее!? почему так работают функции?!
оцените
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <cmath>
#include <time.h>
 
typedef double (*ff) (double);
 
/*функия от которой необходимо взять интеграл */
double fun ( double x)
{
return cos(x)+1;
}
 
/*функция считает интеграл на промижутке от а,b с точностью eps*/
double integ_2 (double e,ff f, double a, double b)
{
        long n=2;//начальное число разбиений отрезка
        long double s1=0,s,h; //s1 - предыдущая площадь, s - текущая площадь, h - шаг
    do 
    { 
         h = (b-a) / n; //выбираем шаг в зависимотси от n
         s = f(a)+f(b); //начяльная площадь 
         for(long double i=1; i<=n/2-1; i++) 
                 s+=4 * f(a + (2 * i - 1) * h) + 2 * f(a + 2 * i * h); //находим сумму точек
         s+=4 * f(b-h); //по формуле симпсона 
         s*=h/3; //по формуле симпсона 
         if(fabs(s-s1)<e) return s;//возвращаем значение площади
         s1 = s; //текущей площади предыдущую
         n*= 2; //увиличиваем число разбиений вдвое
    } 
    while(true); //бесконечный цикл
}
 
 
double integ(double eps,ff f, double a, double b)
{
   double x, // координата по оси х
             h = (b-a)/2, // шаг
             s = f(a)+f(b)+2*f(a+h), //общая сумма значения точек для вычисления интеграла
             I2, // интеграл взятый с шагом h
             I1 = 0, // интеграл взятый с шагом h/2
             curr_sum; // текущая сумма
   do
   {
       I2 = I1; // присваиваем I2 знчение I1
       curr_sum = 0; // обнуляем текущую сумму
       x = a+h/2; // начальное значение по оси х
      while (x<b) // суммируем значения функции с шагом h
      {
          curr_sum += f(x); // прибавляем значение функции
          x += h; // двигаемся по [a,b] с шагом h.
      }
      s += 2*curr_sum; // до вычисляем общую сумму
      h /= 2; // шаг уменьшаем в два раза
      I1 = (s+2*curr_sum)*(h/3); // вычисляем интеграл по формуле симпсона
    
   }while ((fabs(I2-I1)/15) > eps); // проверка точности вычисления по правилу рунге
   return I1; // возвращаем значение интеграла
}
 
/*главная функция*/ 
void main ()
{
setlocale(LC_ALL,"");
time_t start,end;
int time1,time2;
start = time(NULL);
std::cout<<"Решение: "<<integ(0.00001,fun,0,5000000)<<std::endl;
end = time(NULL);
time1=difftime(end, start);
std::cout<<"время работы функуии integ: "<<time1<<" сек."<<std::endl;
start = time(NULL);
std::cout<<"Решение: "<<integ_2(0.00001,fun,0,5000000)<<std::endl;
end = time(NULL);
time2=difftime(end, start);
std::cout<<"время работы функуии integ_2: "<<time2<<" сек."<<std::endl;
std::cout<<"Функция integ работает быстрее integ_2 в "<<(float)time2/time1<<" раз."<<std::endl;
system ("pause");
 
}
Добавлено через 28 секунд
у меня в 4.2 раза быстрее
 
Текущее время: 09:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru