1. Си / Говнокод #23350

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    #include<stdio.h>
    #include<math.h>
    
    int const n = 50, n1 = 40, m = n / n1;
    double f1(double t, double x, double y, double z);
    double f2(double t, double x, double y, double z);
    double f3(double t, double x, double y, double z);
    
    int main() {
    	int i, k, ll;
    	double k11, k12, k13, k21, k22, k23, k31, k32, k33, k14, k24, k34;
    	double x, y, z, max;
    	double res[12][n1 + 1], h, a, b, t, pi, xn, yn, zn;
    	max = 1000.0; x = 3.0;
    	y = -2.0; z = -3.0;
    	a = 0.0; b = 1.0;
    	h = (b - a) / double(n);
    
    	k = 0; t = a;
    	res[0][0] = t; res[1][0] = x;
    	res[2][0] = y;
    	res[3][0] = z;
    	for (i = 1; i <= n; i++) {
    		k11 = f1(t, x, y, z);
    		k21 = f2(t, x, y, z);
    		k31 = f3(t, x, y, z);
    		k12 = f1(t + h / 2.0, x + h*k11 / 2.0, y + h*k21 / 2.0, z + h*k31 / 2.0);
    		k22 = f2(t + h / 2.0, x + h*k11 / 2.0, y + h*k21 / 2.0, z + h*k31 / 2.0);
    		k32 = f3(t + h / 2.0, x + h*k11 / 2.0, y + h*k21 / 2.0, z + h*k31 / 2.0);
    		k13 = f1(t + h / 2.0, x + h*k12 / 2.0, y + h*k22 / 2.0, z + h*k32 / 2.0);
    		k23 = f2(t + h / 2.0, x + h*k12 / 2.0, y + h*k22 / 2.0, z + h*k32 / 2.0);
    		k33 = f3(t + h / 2.0, x + h*k12 / 2.0, y + h*k22 / 2.0, z + h*k32 / 2.0);
    		k14 = f1(t + h, x + h*k13, y + h*k23, z + h*k33);
    		k24 = f2(t + h, x + h*k13, y + h*k23, z + h*k33);
    		k34 = f3(t + h, x + h*k13, y + h*k23, z + h*k33);
    		x = x + h*(k11 + 2.0*(k12 + k13) + k14) / 6.0;
    		y = y + h*(k21 + 2.0*(k22 + k23) + k24) / 6.0;
    		z = z + h*(k31 + 2.0*(k32 + k33) + k34) / 6.0;
    		t = t + h;
    		if (i%m == 0) {
    			k = k + 1;
    			res[0][k] = t;
    			res[1][k] = x;
    			res[2][k] = y;
    			res[3][k] = z;
    			res[4][k] = exp(t) + exp(2.0*t) + exp(-t);
    			res[5][k] = exp(t) - 3.0*exp(-t);
    			res[6][k] = exp(t) + exp(2.0*t) - 5.0*exp(-t);
    			res[7][k] = res[4][k] - res[1][k];
    			res[8][k] = res[5][k] - res[2][k];
    			res[9][k] = res[6][k] - res[3][k];
    		} if (res[7][k] < 0.0) {
    			res[7][k] = -res[7][k];
    		}
    		else if (res[8][k] < 0.0) {
    			res[8][k] = -res[8][k];
    		}
    		else if (res[9][k] < 0.0) {
    			res[9][k] = -res[9][k];
    		}
    		res[10][k] = res[7][k] + res[8][k] + res[9][k];
    	}
    
    	ll = k;
    	printf("k=%d\n", ll);
    	for (i = 0; i <= ll; i++) {
    		if (res[10][i] < max) max = res[10][i];
    	} for (i = 0; i <= n1; i++) {
    		printf("t=%.16lf\n", res[0][i]);
    		printf("x=%.16lf x(exact)=%.16lf delta=%.16lf\n", res[1][k], res[4][k], res[1][k] - res[4][k]);
    		printf("y=%.16lf y(exact)=%.16lf delta=%.16lf \n", res[2][k], res[5][k], res[2][k] - res[5][k]);
    		printf("z=%.16lf z(exact)=%.16lf delta=%.16lf \n", res[3][k], res[6][k], res[3][k] - res[6][k]);
    	}
    	printf("result:\n");
    	printf("t=%.16lf\n", res[0][n1]);
    	printf("x=%.16lf x(exact)=%.16lf delta=%.16lf\n", res[1][n1], res[4][n1], res[1][n1] - res[4][n1]);
    	printf("y=%.16lf y(exact)=%.16lf delta=%.16lf \n", res[2][n1], res[5][n1], res[2][n1] - res[5][n1]);
    	printf("z=%.16lf z(exact)=%.16lf delta=%.16lf \n", res[3][n1], res[6][n1], res[3][n1] - res[6][n1]);
    	printf("max norma|x|1=%.16lf \n", max / 3.0);
    
    	system("pause");
    
    	return 0;
    }
    
    double f1(double t, double x, double y, double z)
    {
    	return x + z - y;
    }
    
    double f2(double t, double x, double y, double z)
    {
    	return x + y - z;
    }
    
    double f3(double t, double x, double y, double z)
    {
    	return 2.0*x - y;
    }

    Кандидат физико-математических наук сделал методичку по предмету "Моделирование систем". Это он так описал алгоритм решения системы ОДУ методом Рунге-Кутты.

    Запостил: mazazadah, 22 Сентября 2017

    Комментарии (58) RSS

    • double f1(double t, double x, double y, double z)
      {
      	return x + z - y;
      }
      
      double f2(double t, double x, double y, double z)
      {
      	return x + y - z;
      }
      
      double f3(double t, double x, double y, double z)
      {
      	return 2.0*x - y;
      }


      1. Зачем для подобной фигни делать какие-либо функции, если можно просто написать операции сложения, вычитания и проч.?
      2. Зачем в сигнатурах этих функций имеется double t? Эта переменная t ни разу (ни в одной из этих функций) не используется
      3. А например в функции f3 помимо этого еще и переменная z никак не используется, нахрена она там?
      Ответить
      • постоновка скорее всего решение сестемы диферециальных уровнений
        y1' = f1(r, t)
        y2' = f2(r, t)
        y3' = f3(r, t)
        найти y1, y2, y3

        автор кондидат физик ему надо решать в пространстве времени много всего и уровнение Шредингера
        он знает что код нужно делать уневерсальным не хардкодить и вынес f1, f2, f3 как входные данные для алгоритма Рунге-Кутта
        Ответить
        • Какая же ты умная.
          Ответить
        • > код нужно делать уневерсальным не хардкодить
          Но один фиг хардкодит ришенее сестемы дефур в строках 46-48.
          Ответить
          • > сестемы
            LOL
            Ответить
          • Какая же ты умная.
            Ответить
            • Да ну... Я же глупая лентяйка, которая играет в кружочки вместо того, чтобы заняться чем-то полезным.
              Ответить
              • что за кружочки-то?
                Ответить
                • Он недавно OSU упоминал, там, кажется, нужно катать кружочки.
                  Ответить
                  • Так точно.
                    Ответить
                    • Выглядит как какая-то тоскливая скукотень, даже корованы грабить нельзя. Неужели затягивает?
                      Ответить
                      • Это для совсем упоротых анимуёбов, которые уже все аниме отсмотрели, мангу прочитали, по ранобе прошлись для общего развития, тохо уже не цепляет, как раньше. Что еще остается? Только пердолиться в круги под музыку.
                        Интересная закономерность – многие люди, далекие от анимублядства, считают анимублядский контент скучной хуйней. Оно и не мудрено – чем может аниме заинтересовать человека, у которого есть личная жизнь.
                        Ответить
                        • > анимублядства
                          К слову, там попадаются люди, которые пытаются играть только не-анимешные карты, ставят себе нарочито не-анимешные аватарки и всячески открещиваются от аниме...

                          Но мы то знаем, что они обречены.
                          Ответить
                      • > неужели затягивает
                        Ну там все факторы для этого есть - запас челленджа на годы, куча карт, PP-ськомерка и довольно милое комьюнити.
                        Ответить
                        • Я недавно купил себе Wolfenstein: New Order на немецком для аутентичности. Довольно забавно смотреть, как агент Блацкович материт нацистов на их родном языке, но через пару вечеров стрелялок мне опять стало скучно.
                          Ответить
                          • У тебя лимит терпения хоть в днях измеряется, а не минутах. Я вот не могу в развлечения уже от слова совсем T__T.
                            Ответить
                            • > не могу в развлечения
                              Ты развлекаешься языками для доказательства корректности кода :3
                              Ответить
                            • > Я вот не могу в развлечения уже от слова совсем

                              А чем ты тогда занимаешься? Я на курсере довольно много торчу (комбинаторика, тервер, статистика, алгоритмы, вот это всё. сейчас идёт довольно интересный курс про Эрлангенскую программу Клейна) или какие-нибудь полуолимпиадные задачки на эзотерических (не по местным меркам, конечно) языках решаю.
                              Ответить
                              • А я дрочу для развлечения обычно
                                Ответить
                              • Ты прямо с выполнением всех упражнений это изучаешь, и добиваешься уровня владения? Похвально, если так.
                                Меня с таким уровнем детализации хватает только на медленное изучение Coq.
                                Ответить
                                • > Ты прямо с выполнением всех упражнений это изучаешь

                                  Ну да. Кмк, упражнения и дедлайны – основная фича курсеры. Я много разных курсов пробовал смотреть, без дедлайнов и задач расслабляешься и забиваешь довольно быстро.

                                  На курсере, конечно, не так хардкорно преподают, как в универе было (во многих курсах опускают доказательства, к примеру), но пользу вполне реально извлечь.

                                  > медленное изучение Coq
                                  Тоже всё хочу пройтись по Software Foundations, но как-то руки не доходят. Проблема как раз в том, что нужно себя организовать, чтобы делать это систематично. Большая часть свободного времени уходит на изучение Deutsche Sprache.
                                  Ответить
                                  • Меня от изучения новых разделов и повторения университетского курса математики пока отталкивает чортов перфекционизм. Пока качественно не научусь в доказательства, не хочу и приступать. Coq как ментальный костыль тут, конечно, не лучший выбор, но других альтернатив не вижу.
                                    После Software Foundations планирую высшую алгебру задрочить, курс в ниверситете был плох, в основном на уровне практических приложений, используемых в физике.
                                    Ответить
                              • > курсере
                                Кстати, а как там с качеством лекций/материалов/заданий?
                                Ответить
                                • Некоторые курсы довольно посредственны, но есть очень качественные. Мне больше всего нравятся курсы Stanford University (Cryptography, Algorithms [Tim Roughgarden шикарен], Mining Massive Datasets, который прикрыли) и МФТИ (те, что с Райгородским или Савватеевым).
                                  Ответить
                                  • Наверняка новый курс про питон от мейлру божественнен.
                                    Ответить
                                    • Так же рекомендую мой курс по брючному питону. Форма обучения – очная.
                                      Ответить
                                      • Мама Стертора его прошла, вроде понравилось
                                        Ответить
                                    • курс чего-либо от мейлру это как книга от Ольги Бузовой
                                      Ответить
                              • Кстати, а ты курсы в платном или бесплатном режиме проходишь?

                                Я правильно понимаю, что в бесплатном нет проверки заданий и нинужного серта, но всё остальное доступно?
                                Ответить
                                • Слышал там можно прикинуться малоимущим, или кем-то подобным, и получить доступ к платным курсам бесплатно. Они верят на слово. Сам не проверял, да и вообще на этот сайт не заходил, ибо он для анскилов.
                                  Ответить
                                • > ты курсы в платном или бесплатном режиме проходишь?

                                  В бесплатном, конечно. В бесплатном есть всё тоже самое, что в платном, только без заверенного сертификата (сертификат можно купить уже после завершения курса, сомневаюсь, что в "проплаченном" курсе что-то отличается). Проверка заданий в бесплатном моде тоже есть, она бывает двух видов:
                                  - полностью автоматическая, когда нужно ввести ответ в тесте (~95% всех заданий) или отправить сорцы, на которые натравливается куча автотестов;
                                  - задания, оцениваемые сокурсниками: сабмитишь код / картинку / текст, который ревьюят трое рандомных сокурсников.

                                  Я ещё не видел, чтобы преподы какие-то задания вручную проверяли, не скейлится этот подход на тысячи людей. На форумах разве что живые ассистенты отвечают, если у людей вопросы к заданиям возникают.
                                  Ответить
                                  • > Проверка заданий в бесплатном моде тоже есть
                                    Походу, мне курс попался неудачный - тесты внутри видео и в конце уроков работают, а вот в конце модуля предлагает только "upgrade to submit".
                                    Ответить
                                  • Бля, уже 2 ошибки в тестах зарепортил. Теперь точно обойдутся без бабла. Хотя сам курс няшный :(
                                    Ответить
                                    • > Хотя сам курс няшный :(

                                      Что за курс?
                                      Ответить
                                      • > Что за курс?
                                        А, да набор курсов по аналоговой электронике от института грузии джорджии.
                                        Ответить
                                        • зачем тебе аналоговая электроника?

                                          ты хочешь делать теплый ламповый звук или собирать аналоговые компьютеры?
                                          Ответить
                                          • > зачем тебе аналоговая электроника?
                                            Вай нот? Даже если не делать чисто аналоговые приёмнички/усилители, всё равно остаётся сопряжение с внешним миром, а он аналоговый.
                                            Ответить
                      • Минутка оффтопика: Медленные Лапки Борманда vs Тоскливая Скукотень:

                        https://yadi.sk/i/yTq03QuM3NYMoe

                        З.Ы. Клаву, к сожалению, не получилось в поле зрения камеры упихать.
                        Ответить
                        • Покажи рисуночки. Или планшет купил, чтобы в осу играть?
                          Ответить
                          • > Покажи рисуночки.
                            Няшко-наброски в mypaint'е просят, чтобы я их не показывал. Когда-нибудь потом.

                            > купил, чтобы в осу играть
                            Не, для оски я только клаву взял (просто повод подвернулся, так то механику давно хотелось).
                            Ответить
                        • Одному ученику-осузадроту я сломал жизнь, предложив пройти U.N Owen Was Her (в простонародье - тема Фландре Скарлет). У него где-то полгода ушло.
                          Ответить
                          • > ученику
                            > предложив пройти
                            За автомат на экзамене?

                            З.Ы. /np'шни мапку.
                            Ответить
                            • Да, почти. Трудно мешать восьмиклассникам гаматься на учебных компах, приходится изобретать грязные трюки.

                              Я не осуёб и не умею.
                              Ответить
                              • > Я не осуёб и не умею.
                                Ну ты же тогда её как-то нашёл, чтобы предложить ему пройти... Хотя бы версия с клоунами или одна из обычных? Какой год стоял на дворе?

                                З.Ы. Забей, я не пройду - походу все карты на эту песню пиздецовые, а я олдмаппинг очень слабо читаю.
                                Ответить
                                • Прошлый декабрь это был вроде. Он банально нашёл мапу по названию трека.
                                  Ответить
                          • Вспомнил про этот тред и пасснул версию этой песенки с клоунами. Мой мир никогда не будет прежним...
                            Ответить
                        • > Медленные Лапки Борманда
                          https://pikabu.ru/story/klassicheskiy_rozyigryish_49_283504
                          Ответить
                          • На этой карте надо всего 11 раз в секунду нажимать, но, как видишь, левая лапка даже с такой ерундой не справляется :(
                            Ответить
                  • # OSU

                    OS365 и U365 от Никиты Иванова творят чудеса
                    Ответить

    Добавить комментарий