0 / 0 / 0
Регистрация: 04.01.2011
Сообщений: 8
|
||||||
1 | ||||||
Задание с синусами и косинусами07.02.2011, 05:53. Показов 2981. Ответов 13
Метки нет (Все метки)
Две недели назад я выкладывал эту задачу на форуме. Мне помогли в ее решении, но решили неправильно. Сама задача такова:
Вычислить S=cos1/sin1+(cos1+cos2/sin2+sin3)+...+(cos1+cos2+...+cosN)/(sinN+sin(n+1)+...+sin(2N-1). Вот что у меня получилось:
Сумму она считает неправильно. В чем моя ошибка?
0
|
07.02.2011, 05:53 | |
Ответы с готовыми решениями:
13
C++ ошибка в программе с косинусами и синусами Как в С++ работать с синусами, косинусами? Работа с углами, синусами и косинусами в 1с Интеграл с синусами и косинусами четвёртой степени |
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
||||||
07.02.2011, 08:12 | 2 | |||||
Есть вопрос по Вашему коду. По идее какой участок кода исполняется циклом по i и циклами по j?
1
|
0 / 0 / 0
Регистрация: 04.01.2011
Сообщений: 8
|
|
07.02.2011, 08:54 [ТС] | 3 |
Я пытался перевести задачу с Паскаля на С++. В Паскале там это работает.
Добавлено через 25 минут Спасибо за помощь в решении задачи! Все работает!
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||||||
07.02.2011, 16:01 | 4 | |||||
Вот так работает на несколько порядков быстрее:
1
|
0 / 0 / 0
Регистрация: 04.01.2011
Сообщений: 8
|
|
08.02.2011, 07:43 [ТС] | 5 |
В чем "прелесть" вашей программы?
Предыдущий код меньше по объему и компилируемая программа получается меньше.
0
|
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|
08.02.2011, 07:45 | 6 |
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
08.02.2011, 12:34 | 7 |
Ну, в C++ нет цели иметь программу покороче или исполняемый файл поменьше во что бы то ни стало.
Основное достоинство C++ - это высокий уровень абстракции, позволяющий оперировать в программе не битами и байтами, а понятиями из предметной области задачи. В моей программе, например, мы работаем непосредственно с объектами числителя и знаменателя дроби. Также в моей программе всего один цикл, имеющий понятные границы. В общем, с первого взгляда на программу понятно что и с чем она делает. Ну и алгоритм использован более эффективный. Согласно современным концепциям, лучшей считается та программа, которая понятнее читателю, даже если она проигрывает другой в быстродействии, объему используемой памяти, размеру кода и исполняемого файла.
0
|
0 / 0 / 0
Регистрация: 04.01.2011
Сообщений: 8
|
|
10.02.2011, 12:57 [ТС] | 8 |
Как то я с вами не очень согласен. Код предыдущей программы мне более понятен. Там все логично и понятно, что она делает!
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|||||||||||
10.02.2011, 15:41 | 9 | ||||||||||
Ну Вам-то может и понятно, а со стороны немного пугает, если честно...
Это Вы где про такие концепции услышали? По моему скромному мнению программа в первую очередь должна поставленную задачу решать. А задача может быть как "запихнуть в пару сотен байт", или "выполнить со скоростью пули", так и "написать так, чтобы новичкам понятно было, забыв при этом о компактности и скорости"... А по поводу скорости: вот из Вашей программы для чистоты эксперимента ввод убрал
Код
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 $
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
10.02.2011, 17:33 | 10 |
В книжках прочитал. Они мотивируют это тем, что компьютерные время и память непрерывно и быстро дешевеют, а время программиста не меняется в цене, т.е. непрерывно и быстро дорожает по отношению к компьютерным времени и памяти. Поэтому стоит экономить не то, что сейчас стоит дешево, а завтра будет стоить очень дешево, а то, что сейчас стоит дорого, а завтра будет стоить очень дорого, т.е. время программиста, сопровождающего программу, делая ее максимально ему понятной.
А вы не могли бы по-русски сформулировать цель вашего эксперимента и его результаты?
0
|
Модератор
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,755
|
|
10.02.2011, 18:34 | 11 |
Ну в принципе звучит разумно, если бы не одна мелочь... Вместе с ростом мощности компьютеров растут и запросы пользователей. При чём не просто "вместе", а зачастую значительно опережая. А соответственно и процессор никогда не будет достаточно быстрым, и памяти в компе никогда не будет много. Хуже того! Чем примитивнее и неповоротливее будет работать программа, тем выше будут запросы к железу. Это я к тому, что какие бы навороченные железяки ни придумали, писать программы по принципу "лишь бы было всем понятно" как-то всё-таки не правильно. Ну а сопровождение программ - это отдельная песня. Есть документация, комментарии, стиль кода, снимающий большинство вопросов при внимательном ознакомлении, стандарты именования функций/переменных и прочее, прочее... В любом случае, писать программу так, чтобы каждый, кому не лень, мог в ней что-нибудь "поправить" не особо вникая в суть написанного, я бы не стал. Всё-таки в первую очередь программа должна хорошо работать, а не легко и ненапряжно сопровождаться...
Пытался для себя понять - стоит ли городить такой огород, если програмка в три раза короче делает точно то же самое, да ещё и почти в два раза быстрее, как оказалось...
0
|
3224 / 1751 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
|
10.02.2011, 20:27 | 12 |
Ну, трудно и напряженно сопровождаемая программа даже плохо долго не проработает.
Добавлено через 18 минут easybudda, на моем компьютере ваша экспериментальная программа для n = 40000 считает 68 секунд, а моя мгновенно.
0
|
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
|
|||||||||||
11.02.2011, 08:56 | 13 | ||||||||||
Давайте закончим беседовать насчет быстродействия, простоты, крутизны и т.п.
Вот переделаная программа из сообщения №2 этой темы.
А вообще идея с синусами такая: просто находим чем знаменатель от n-ого слагаемого отличается от знаменателя (n-1)-ого слагаемого. Потом проверям для первых слагаемых (обязательно) и делаем соответсвующие выводы.
0
|
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
|
|
11.02.2011, 09:13 | 14 |
Евгений М., int i лишнее
0
|
11.02.2011, 09:13 | |
11.02.2011, 09:13 | |
Помогаю со студенческими работами здесь
14
Работа с косинусами в php Выражение с косинусами и корнями Фаза между 2 синусами Дифференциальное уравнение со страшными синусами Доказать справедливость равенства с косинусами Как выразить коэффициенты системы с синусами? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |