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

Задание с синусами и косинусами - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ помогите сделать пожалуйста, http://www.cyberforum.ru/cpp-beginners/thread239257.html
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от X нач до Xконеч с шагом dX с точностью e" . r^(-x) = (сума с низу n=0 сверху ,бесконечность) ((-1)^n*x^n)/(n!) я незнаю как обозначается значок сумvы....
C++ Нужны комментарии к коду что делает каждая строка? код: Tip.h #pragmaonce #include<iostream> #include<string> http://www.cyberforum.ru/cpp-beginners/thread239253.html
C++ Операции с массивами (есть логическая ошибка, не пойму где)
Программа компилируется нормально. Спрашивает кол-во элементов массива. Вводятся элементы массива Считает сумму от первого до последнего нулевого(если его нет- сумму всех элементов) И должна считать произведение чётных элементов, НО не считает ( всегда результат единица) Насколько могу понять, ошибка где-то в 42-52 строке, но я не пойму где. #include <iostream> using namespace std; int...
C++ вызов функции overload
Что я делаю не так, где ошибка? . #include "stdafx.h" #include<iostream> #include<conio.h> using namespace std; int max_element(int n,int array) { int hold;
C++ Прога с++ http://www.cyberforum.ru/cpp-beginners/thread239203.html
Помогите плиз создать прогу: Двоичный файл содержит данные о студентах, фамилия, группа, оценка по программированию. Создать на его основе текстовый файл с записями такого же вида, помещенных в него только тех студентов, у которых оценка по программированию выше среднего в группе.
C++ Программа на описание классов Помогите плиз создать прогу: Описать класс, содержащий строковое поле, целочисленное поле и указатель на массив вещественных чисел. Реализовать два произвольных конструктора, инициализировать все поля. подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
10.02.2011, 15:41     Задание с синусами и косинусами
Цитата Сообщение от Mr.X Посмотреть сообщение
В общем, с первого взгляда на программу понятно что и с чем она делает.
Ну Вам-то может и понятно, а со стороны немного пугает, если честно...

Цитата Сообщение от Mr.X Посмотреть сообщение
Согласно современным концепциям, лучшей считается та программа, которая понятнее читателю, даже если она проигрывает другой в быстродействии, объему используемой памяти, размеру кода и исполняемого файла.
Это Вы где про такие концепции услышали? По моему скромному мнению программа в первую очередь должна поставленную задачу решать. А задача может быть как "запихнуть в пару сотен байт", или "выполнить со скоростью пули", так и "написать так, чтобы новичкам понятно было, забыв при этом о компактности и скорости"...
А по поводу скорости: вот из Вашей программы для чистоты эксперимента
ввод убрал
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cmath>
#include <functional>
#include <iostream>
#include <numeric>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef double       T_real_num;
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_numerator
{    
    T_real_num  arg_val_;
    T_real_num  sum_;
    //-----------------------------------------------------------------------------------
    T_numerator() : arg_val_(1)          
    {
        sum_ = cos(arg_val_);
    }
    //-----------------------------------------------------------------------------------
    T_real_num  operator++(int)
    {
        T_real_num  sum_old(sum_);
        sum_ += cos(++arg_val_);
        return  sum_old;
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_denominator
{    
    T_real_num  arg_val_;
    T_real_num  sum_;
    //-----------------------------------------------------------------------------------
    T_denominator() : arg_val_(1)          
    {
        sum_ = sin(arg_val_);
    }
    //-----------------------------------------------------------------------------------
    T_real_num  operator++(int)
    {
        T_real_num  sum_old(sum_);
        sum_ += -sin(arg_val_) + sin(arg_val_ * 2) + sin(arg_val_ * 2 + 1); 
        ++arg_val_;
        return  sum_old;
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
T_real_num  get_arr_sum(int  n)
{
    T_numerator    numerator_cur;
    T_denominator  denominator_cur;
    T_real_num     sum_res = 0;
    for(int  i = 0; i < n; ++i)
    {
        sum_res += numerator_cur++ / denominator_cur++;        
    }
    return  sum_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    /*for(;;)
    {*/
        //std::cout << "N = ";
        /*
        T_str  s;
        getline(std::cin, s);
        std::istringstream  ssin(s);
        */
        int  n = 180;
        /*
        if(!(ssin >> n))
        {
            break;
        }
        */
        std::cout << "N = " << n << std::endl;
        std::cout << std::endl
                  << "  cos1/sin1"
                  << std::endl
                  << "+ (cos1+cos2)/(sin2+sin3)"
                  << std::endl
                  << "+..."
                  << std::endl
                  << "+ (cos1+cos2+...+cosN)/(sinN+sin(N+1)+...+sin(2N-1)) "
                  << std::endl
                  << "= "
                  << get_arr_sum(n)
                  << std::endl;    
    /*}*/
}
и свою сделал
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
#include <stdio.h>
#include <math.h>
    
double cos_sum(int startVal, int endVal){
    double sum = 0.0;
    while ( startVal <= endVal )
        sum += cos((double)startVal++);
    return sum;
}
 
double sin_sum(int startVal, int endVal){
    double sum = 0.0;
    while ( startVal <= endVal )
        sum += sin((double)startVal++);
    return sum;
}
 
int main(void){
    int n, i;
    double s;
    
    n = 180;
    printf("N = %d\n", n);
    
    s = 0.0;
    for ( i = 1; i <= n; ++i )
        s += cos_sum(1, i)/sin_sum(i, 2 * i - 1);
    
    printf("Result: %f\n", s);
    
    return 0;
}
а в результате:
Код
andrew@rd-andrew ~/cpp/numbers
$ g++ -o mr_x_cos_div_sin_sum mr_x_cos_div_sin_sum.cpp

andrew@rd-andrew ~/cpp/numbers
$ gcc -o cos_div_sin_sum cos_div_sin_sum.c

andrew@rd-andrew ~/cpp/numbers
$ time ./mr_x_cos_div_sin_sum
N = 180

  cos1/sin1
+ (cos1+cos2)/(sin2+sin3)
+...
+ (cos1+cos2+...+cosN)/(sinN+sin(N+1)+...+sin(2N-1))
= 197.563

real    0m0.154s
user    0m0.030s
sys     0m0.031s

andrew@rd-andrew ~/cpp/numbers
$ time ./cos_div_sin_sum
N = 180
Result: 197.562778

real    0m0.081s
user    0m0.030s
sys     0m0.031s

andrew@rd-andrew ~/cpp/numbers
$
по-моему наглядно...
 
Текущее время: 17:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru