Форум программистов, компьютерный форум, киберфорум
Наши страницы
Математика
Войти
Регистрация
Восстановить пароль
Результаты опроса: Применяли ли Вы математику в программировании?
Применял 265 72.80%
Не применял 36 9.89%
Еще не понял 63 17.31%
Голосовавшие: 364. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.55/194: Рейтинг темы: голосов - 194, средняя оценка - 4.55
leviaphan
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
1

Применяли ли Вы математику в программировании?

09.12.2009, 21:41. Просмотров 36623. Ответов 88
Метки нет (Все метки)

Я говорю о математике, выходящей за пределы школьной программы, например, графы, мат. логика и т. п.
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2009, 21:41
Ответы с готовыми решениями:

Учить математику
Всем привет, Хочу восстановить школьные знания по математике(и геометрии) и, по возможности,...

Не решает математику
Цель - решать примеры всего лишь используя только TextBox1 и кнопку "равно"(назовём ее button1)....

Учим математику
Всем привет...Возникла проблема, которую я не могу объяснить, и прошу помощи у вас... дело вот в...

Задача на финансовую математику
Помогите вычислить, готовлюсь к сессии. Если можно формулу по которой можно решить эту задачу:...

Нужно выучить математику
Здравствуйте, уважаемые! В общем понадобилось выучить математику, желательно с 1 по 11 классы. Дело...

88
cristaloleg
148 / 49 / 3
Регистрация: 21.12.2008
Сообщений: 961
09.12.2009, 22:08 2
очень многа!
1
leviaphan
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
09.12.2009, 22:15  [ТС] 3
А как именно? Не могли бы ли Вы привести примеры?
1
cristaloleg
148 / 49 / 3
Регистрация: 21.12.2008
Сообщений: 961
09.12.2009, 22:18 4
графы...подвид: бинарное дерево...много очень пришлось использовать...
Полярные координаты, мат индукцию...

Я не все названия помню...
1
09.12.2009, 22:18
leviaphan
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
09.12.2009, 22:31  [ТС] 5
Можно поконкретней? В какого рода программах вы использовали эти понятия?
1
Nazz
WEB-developer
897 / 728 / 80
Регистрация: 12.03.2009
Сообщений: 2,804
Записей в блоге: 2
09.12.2009, 22:33 6
она очень шыроко применяется пр написании сложных игр, и при написании разных научных програм, которые должны моделировать процессы...
2
darkAngel
Технофашист
222 / 207 / 11
Регистрация: 11.03.2009
Сообщений: 886
10.12.2009, 00:08 7
1)При написании прог типа распределения ресурсов, поиска оптимального расписания и т.п. просто не обойтись без мат.программирования (транспортные задачи, симплекс-методы)

2)При программировании лингвистичиских программ просто не обойтись без мат.логики.
При написание собственного компилятора также нельзя без неё.

3)Теория алгоритмов (машины Тьюринга, алгоритмы Маркова) помогают при написании различных функции обработки данных.

5)Мат.анализ. Естественно вся графика, анализаторы, CADы.

4)Ещё шифрование, архиваторы. Ну не обойтись просто без дискретки. Дискретка это вообще мега математика для программирования. В неё входят и теория графом, алгоритмов, вычмат, матлогика, теория множеств и т.п.


Понятие NP-полноты очень помогает строить алгоритмы. Ибо существует огромное количество задач, для которых единственный метод - это метод перебора, а оптимального алгоритма вообще не существует.
Не зная этого, ты можешь возиться месяц с поиском алгоритма для задачи заказчика, а она будет неразрешимая.




И Я тебе отвечаю (на собственных наблюдениях): прогеры не математики строят алгоритмы в разы дольше, чем их коллеги с мат. базой






Добавлено через 15 минут
==============
а вот тебе пример на элементарную математику:
Я нашёл решение за 5 минут. Знакомы прогер (с плохой матбазой) попросил помочь. Долго думал, были идеи у него, но без результатно.

вот она:
есть n чисел. Нужно определить наибольшее количество идущих подряд нулей в этих числах.
пусть входные данные такие: 754021, 18009200, 779390032, 27652, 20800045, 1035605030, 232002200
Реши её без использования строк. Переменные и массивы только int.
1
HIMen
4287 / 1455 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
10.12.2009, 00:46 8
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
int[] input = { 754021, 18009200, 779390032, 27652, 20800045, 1035605030, 232002200 };
int[] zeros = new int[input.Length];
for (int i = 0; i < input.Length; i++)
{
    int count = 0;
    int temp = input[i];
    while (temp > 0)
    {
        if (temp % 10 == 0) count = 1 > count ? 1 : count;
        if (temp % 100 == 0) count = 2 > count ? 2 : count;
        if (temp % 1000 == 0) count = 3 > count ? 3 : count;
        if (temp % 10000 == 0) count = 4 > count ? 4 : count;
        if (temp % 100000 == 0) count = 5 > count ? 5 : count;
        if (temp % 1000000 == 0) count = 6 > count ? 6 : count;
        if (temp % 10000000 == 0) count = 7 > count ? 7 : count;
        if (temp % 100000000 == 0) count = 8 > count ? 8 : count;
        if (temp % 1000000000 == 0) count = 9 > count ? 9 : count;
        temp = temp / 10;
    }
    zeros[i] = count;
}
int indexmax = 0;
for (int i = 0; i < zeros.Length; i++)
{
    if (zeros[i] > zeros[indexmax]) indexmax = i;
}
Console.WriteLine("{0} - {1} подряд нулей", input[indexmax], zeros[indexmax]);
И математика мне не потребовалась, если только не называть математикой остаток от деления.
В программировании требуется только дискретная математика, основные операции с матрицами и основы тригонометрии.
3
darkAngel
Технофашист
222 / 207 / 11
Регистрация: 11.03.2009
Сообщений: 886
10.12.2009, 08:48 9
ТЫ leviaphan? Я ему дал. Зачем лезишь?
кстати это не только остаток от деления. ты делишь на 10, 100, 1000 и т.д. тем самым переходя к новому разряду числа. Я же написал "элементарная математика", которую ты применил на подсознательном уровне.

дискретная математика
уууу... дискретка понятие очень растяжимое:
Математическая логика
Комбинаторика
Теория графов
Теория алгоритмов
Теория автоматов
Теория множеств
Теория формальных грамматик
Булевая алгебра
Логическое программирование
Функциональное программирование
λ-исчисление
Теория искусственного интеллекта

Это и есть спец набор для программиста.









=====================
Добавлено через 16 минут
Ладно, вот задачка посложнее. На одну мат.функцию. (правда она элементарна для своего класса задач):
Группа студентов состоит из 2*n студентов.
Препод для выполнения л/р должен разбить группу на пары.
Каждый студент предложил преподу 3 кандидатуры, с кем бы он хотел быть в паре.
Написать алгоритм, который позволяет разбивать группу на пары так, чтобы в каждой паре студенты хотели бы выполнять л/р друг с другом (оба).


входные данные (для проверки):
студент №0: хочет с 1 или 2 или 4
№1) 2, 4, 0,
№2) 3, 5, 4,
№3) 2, 4, 1,
№4) 0, 5, 3,
№5) 1, 2, 0
0
Phantom
Эксперт С++
3177 / 858 / 39
Регистрация: 29.12.2008
Сообщений: 952
10.12.2009, 10:33 10
В высшей математике много разных областей. И всегда программирование и математика идут рука об руку, потому что логика программирования строгая и формализованная, на ней очень легко применять выведенные в математике правила и законы.

Для программирования самой часто используемой областью математики является дискретная математика, которая работает с дискретными структурами. Такие структуры очень схожи с программными объектами (с состояниями, например). Из нее в программирование пришли графы, деревья, комбинаторика и многое другое. Например, деревья и связанные с ним алгоритмы удобно использовать для работы с файловой системой компьютера. Кажется - простая рекурсия, а на самом деле дерево, формализованое в математике. Комбинаторика используется сплошь и рядом в программах любого уровня для организации перебора вариантов (например, лотерея или подбор паролей). Примеров много.

В дискретной математике есть разделы, ещё более связанные с программированием. Теория алгоритмов, теория искусственного интеллекта и ещё некоторые. А ещё дискретная математика формально объясняет работу функционального и логического программирования.

Из остальных разделов высшей математики можно ещё выделить численные методы. Этот раздел посвящен представлению математических терминов и формул для алгоритмических языков. Это один из моих любимых предметов. Он очень интересный.

Ещё не нужно забывать про теорию вероятности и математическую статистику. Чаще всего их законы используются в программировании игр и моделировании систем. Рассчет случайных величин - важный прием программирования. Например, рассчитать, сколько урона нанесет юнит в игре. Или в какое время случится событие.

Ну и если программировать графику, то там без знания линейной алгебры не обойтись. Формул там действительно много.

Кроме того, всегда может попасться задача из узкой области математики, и никогда заранее не знаешь, какие знания пригодятся для её решения.

Можно сделать вывод, что мало того, что отдельные приемы математики часто применяются в практике программирования, но и человек, не знающий хорошо математику и не умеющий мыслить математически, вряд ли сможет стать хорошим программистом.
9
leviaphan
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
10.12.2009, 15:09  [ТС] 11
Цитата Сообщение от darkAngel Посмотреть сообщение
Ладно, вот задачка посложнее. На одну мат.функцию. (правда она элементарна для своего класса задач):
Группа студентов состоит из 2*n студентов.
Препод для выполнения л/р должен разбить группу на пары.
Каждый студент предложил преподу 3 кандидатуры, с кем бы он хотел быть в паре.
Написать алгоритм, который позволяет разбивать группу на пары так, чтобы в каждой паре студенты хотели бы выполнять л/р друг с другом (оба).


входные данные (для проверки):
студент №0: хочет с 1 или 2 или 4
№1) 2, 4, 0,
№2) 3, 5, 4,
№3) 2, 4, 1,
№4) 0, 5, 3,
№5) 1, 2, 0
Я так понимаю, это задача на графы? Что за метод?
0
darkAngel
Технофашист
222 / 207 / 11
Регистрация: 11.03.2009
Сообщений: 886
10.12.2009, 17:00 12
Это задача на рекурсию. При понимании рекурсивности, решается легко и быстро.
Хочу заметить, понятие рекурсии широко применяется в программирование, но нужно понимать, что заимствованно оно из математики (рекурсия - вычисление функции через пердыдущюю точку).

Т.е. хорошо понимая математику, Вы будете лучше понимать суть алгоритмизации.
0
taras atavin
4200 / 1778 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
21.12.2009, 12:45 13
Как вообще можно её не применять? В компе как у Платона всё есть число. Значит любая прога работает с числами. А любое число - уже мат. объект. Вышку ещё можно в принципе не применять в конкретной проге, но если програмер может не применять её никогда, то он наверное пишет только предельно элементарные проги, решающие столь же элементарные элементарные задачи.
0
leviaphan
4 / 4 / 1
Регистрация: 18.08.2008
Сообщений: 73
21.12.2009, 23:32  [ТС] 14
Цитата Сообщение от taras atavin Посмотреть сообщение
Как вообще можно её не применять? В компе как у Платона всё есть число. Значит любая прога работает с числами. А любое число - уже мат. объект. Вышку ещё можно в принципе не применять в конкретной проге, но если програмер может не применять её никогда, то он наверное пишет только предельно элементарные проги, решающие столь же элементарные элементарные задачи.
Поэтому я и конкретизировал:
Цитата Сообщение от leviaphan Посмотреть сообщение
Я говорю о математике, выходящей за пределы школьной программы, например, графы, мат. логика и т. п.
0
taras atavin
4200 / 1778 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
22.12.2009, 04:13 15
Любой програмер исспользует математику всегда (в каждой проге). Думаю, что любой програмер когда нибудь начинает использовать вышку иногда (в некоторых прогах). Думаю, что нет програмеров, использующих вышку часто (во многих прогах).
1
WolfCF
3295 / 1356 / 108
Регистрация: 28.04.2009
Сообщений: 4,823
22.12.2009, 04:44 16
встречный вопрос: программирование-это не математика ли??
1
Vovan4ik
6 / 4 / 4
Регистрация: 11.01.2010
Сообщений: 7
13.01.2010, 03:40 17
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>
using namespace std;
 
#define PREF 3
 
int main()
{   
        int n;
    cout << "Number of students: ";
    cin >> n;
    int ** Adjacency;
    Adjacency = new int * [n];
    for (int i = 0; i < n; i++)
        Adjacency[i] = new int [n];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            Adjacency[i][j] = 0;
    for (int i = 0; i < n; i++)
    {
        int j;
        cout << i << "`th student prefer to practise with ";
        for (int k = 0; k < PREF; k++)
        {
            cin >> j;
            Adjacency[i][j] = 1;
        }
    }
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            cout << Adjacency[i][j] << " ";
        cout << endl;
    }
 
    int doublyRelations[6];
 
    for (int k = 1; k <= n/2; k++)
    {
        for (int i = 0; i < n; i++)
        {
            int count = 0;
            for (int j = 0; j < n; j++)
                if ((Adjacency[i][j])&&(Adjacency[j][i]))
                {
                    count++;
                }
                doublyRelations[i] = count;
        }
        int min = 0;
        for (int i = 0; i < n; i++)
        {
            if ((doublyRelations[min] > doublyRelations[i])&&(doublyRelations[i])&&(doublyRelations[min]))
                min = i;        
            if ((!doublyRelations[i])&&(!doublyRelations[min]))
                                if (i!=n-1)
                    min = i+1;
                else
                                       {
                    cout << "no pair";
                                        exit(0);
                                       }
        }           
        for (int j = 0; j < n; j++)
            if ((Adjacency[min][j])&&(Adjacency[j][min]))
            {
                cout << k << "`th pair is " << min << "-" << j << " " << endl;
                for (int i = 0; i < n; i++)
                {
                    Adjacency[min][i] =0;
                    Adjacency[i][min] =0;
                    Adjacency[j][i] =0;
                    Adjacency[i][j] =0;
                    doublyRelations[j] = 0;
                    doublyRelations[min] = 0;
                }
            }
    }
    return 0;
}
Понравилась задачка, правда с помощью рекурсии не догадался как решить
darkAngel #9, абсолютно согласен насчёт дискретки!

Всем советую посмотреть курс дискретки ArsDigita
0
shor
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 14
14.01.2010, 16:21 18
Здравствуйте.Я-новичок. И наверное самый младший из вас. Хочу задать вопрос: Чтобы стать программистом, нужно быть гением математики или достаточно просто её знать?
0
WolfCF
3295 / 1356 / 108
Регистрация: 28.04.2009
Сообщений: 4,823
14.01.2010, 16:24 19
shor, нужно просто иметь мозги,всё остальное само придет.
1
cristaloleg
148 / 49 / 3
Регистрация: 21.12.2008
Сообщений: 961
14.01.2010, 16:49 20
Цитата Сообщение от Wolf Посмотреть сообщение
shor, нужно просто иметь мозги,всё остальное само придет.
может не иметь(), а владеть???

А вообще математика помогает(как физика или химия) развивать логику и мышление. а без этого учиться программировать будет сложно.
1
14.01.2010, 16:49
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2010, 16:49

Вы хорошо знаете высшую математику?
На сколько хорошо должны знать математику программисты? Некоторые говорят, что мало, другие...

Зачем сисадмину знать математику?
Во всех вузах при поступлении на факультет по системному администрированию надо обязательно сдавать...

Работа с графикой, используя математику
Дано изображение , но оно должно быть закрытое!!!, разбитое на 6 квадратов или больше. Пользователь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.