2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3  След.
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 02:22 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Во-первых, алгоритмы и структуры данных.
Кормен и др. "Алгоритмы: построение и анализ", Шень "Программирование в теоремах и задачах". Продвинутый уровень - наверное, Кнут ("Искусство программирования"), но как учебник он не всем подходит.
По самому питону не могу ничего посоветовать, кроме Dive into python.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 02:30 
Аватара пользователя


07/07/14
156
Xaositect в сообщении #902269 писал(а):
Во-первых, алгоритмы и структуры данных.
Кормен и др. "Алгоритмы: построение и анализ", Шень "Программирование в теоремах и задачах". Продвинутый уровень - наверное, Кнут ("Искусство программирования"), но как учебник он не всем подходит.
По самому питону не могу ничего посоветовать, кроме Dive into python.


Спасибо! Возьму на заметку.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 09:33 


22/08/14
25
Слово в защиту С++. Он не так сложен, как кажется. Сейчас существует замечательный комплект библиотек Qt, предназначенный для написания ПО с GUI и не только. Qt преодолевает недостатки С++. Подробнее о Qt читайте книгу: Макс Шлее "Qt: Профессиональное программирование на С++". Qt позволяет создавать кроссплатформенные приложения для Linux/Windows/Mac. Так что Qt может быть у вас дальнейшим этапом развития после Python. В настоящее время есть вакансии для Qt-программистов.

Если хотите разобраться, как работают программы внутри, то изучайте чистый С. По нему могу посоветовать книги Г. Шилдта.

Преимуществом С/С++ является то, что они обеспечивают скорость работы программ недостижимую для скриптовых языков, таких как Java/Python и т.п. за счёт того, что они компилируются в машинный код сразу понимаемый процессором.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 12:08 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Xaositect в сообщении #902269 писал(а):
Во-первых, алгоритмы и структуры данных.

Имхо, перед курсом "алгоритмы и структуры данных" нужно какое-то введение в процедурное и модульное программирование само по себе. Что такое разбиение решения задачи по шагам, иерархия функций, передача данных между ними. На каких-то примерах и с практикумом. Обычно это всё даётся в учебниках по языкам программирования (больших для новичков).

Отдельную книгу на эту тему я знаю только одну, очень старую:
Хьюз, Мичтом. Структурный подход к программированию.
Написана ещё в эпоху до всяких ООП. Но мне понравилась. Правда, надо понимать, что это устарело сегодня, но - что устарело в контексте более совершенных идей, частично основанных на данных.

-- 31.08.2014 13:09:04 --

(Оффтоп)

PeanoJr в сообщении #902263 писал(а):
У Вас в подписи написано, что математика поставляет в физику все понимание. Мне кажется, и в экономику все понимание поставляет именно математика.

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

PeanoJr в сообщении #902263 писал(а):
При поступлении подумал, что ПМ - это прикладная математика...Оказалось - производственный менеджмент.

Хорошая версия, я её приму за основную.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 20:10 


24/05/09

2054
О, дерзайте. Напишите такую программу - как раз и в экономике пригодится:

Изображение

P.S. я любитель, лет 20 програмированием увлекаюсь, не заработал ни копейки.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 20:37 
Заслуженный участник
Аватара пользователя


06/10/08
6422
Alexu007 в сообщении #902402 писал(а):
как раз и в экономике пригодится
:facepalm:

Впрочем, как простое задание действительно неплохой пример.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение31.08.2014, 23:09 


05/09/12
2587
Alexu007, давайте посоревнуемся в скорости/объеме памяти :) - вот мой С код для вашей задачи, правда только до миллиардов, но легко модифицируется:

(Оффтоп)

код: [ скачать ] [ спрятать ]
  1. void parse_str(char** pp, char* ps) 
  2.     while (*ps) {if(*ps++ == '/') *pp++ = ps;} 
  3. char* add_str_rec(char* pr, char* ps, char var, char** ptz) 
  4.     char curvar = 0, *pz; 
  5.     while (*ps && (*ps != '/')) { 
  6.         if (*ps >= '#' && *ps <= '&') {curvar = *ps++; continue;} 
  7.         if (curvar && (curvar != var)) {ps++; continue;} 
  8.   
  9.         if ((*ps >= '0' && *ps <= '9') || (*ps >= 'A' && *ps <= 'Z')){ 
  10.             pz = *(ptz + (*ps - ((*ps <= '9') ? 48 : 55))); 
  11.             pr = add_str_rec(pr, pz, var, ptz); 
  12.             ps++; continue; 
  13.         } 
  14.         *pr++ = *ps++; 
  15.     } 
  16.     return pr; 
  17. char* add_str(char* pr, char* ps, char var, char** ptz) 
  18.     char *prstart = pr; 
  19.     pr = add_str_rec(pr, ps, var, ptz); 
  20.     if (pr > prstart) *pr++ = ' '; 
  21.     return pr; 
  22. void int2fullString(int n, char* r) 
  23.     char Sigh[] = "минус"; 
  24.     char *ptria[4],  tria[] = "//тысяч$а%и/мE#ов%а/бE#ов%а"; 
  25.     char triaGen[] = "#$##"; 
  26.     char triaVar[] = "#$%%%#####"; 
  27.     char *phuns[10], huns[] = "//Fо/GеFи/3Fа/4еFа/5ьA/6ьA/7ьA/8ьA/9ьA"; 
  28.     char *ptens[10], tens[] = "///GаB/3B/сорок/5ьC/6ьC/7ьC/8ьC/HвяноFо"; 
  29.     char *pones[20], ones[] = "//1/2/3/4е/5ь/6ь/7ь/8ь/9ь/Hсять/одинD/GеD/3D/4D/5D/6D/7D/8D/9D"; 
  30.     char *ptz[20], tz[] = "//од#ин$на/дв#а$е/три/четыр/пят/шест/сем/восем/девят/сот/дцать/десят/надцать/иллион/ст/дв/де"; 
  31.     int nr[20], *pnr = nr, k; 
  32.     char *pr = r, *pst, v; 
  33.   
  34.     parse_str(ptria, tria); 
  35.     parse_str(phuns, huns); 
  36.     parse_str(ptens, tens); 
  37.     parse_str(pones, ones); 
  38.     parse_str(ptz, tz); 
  39.   
  40.     if (n < 0) {n = -n; pr = add_str(pr, Sigh, '-', ptz);} 
  41.   
  42.     k = 0; 
  43.     while (n) {*pnr++ = n%10; n = n/10; k++;} 
  44.     while (k%3) {*pnr++ = 0; k++;} 
  45.     pnr--; 
  46.     k = k/3; 
  47.   
  48.     while (k-- > 0) { 
  49.         pst = pr; 
  50.         pr = add_str(pr, phuns[*pnr--], triaGen[k], ptz); 
  51.   
  52.         n = *pnr--; 
  53.         v = (n == 1) ? triaVar[0] : 0; 
  54.         if (n < 2) { 
  55.             pr = add_str(pr, pones[n*10 + *pnr], triaGen[k], ptz); 
  56.         }else{ 
  57.             pr = add_str(pr, ptens[n], triaGen[k], ptz); 
  58.             pr = add_str(pr, pones[*pnr], triaGen[k], ptz); 
  59.         } 
  60.         n = *pnr--; 
  61.   
  62.         if (pr != pst) { 
  63.             if (!v) {v = triaVar[n];} 
  64.             pr = add_str(pr, ptria[k], v, ptz); 
  65.         } 
  66.     } 
  67.     *pr = 0; 

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение01.09.2014, 09:15 


24/05/09

2054
У меня конечно код не такой компакный, но на мой взгляд более понятный:

(Оффтоп)

Код:
// ***********************************************************************************
// функция обрабатывает по три цифры
QString fnThreeDigitText(int xx)
{

    QString edn[] = {"", "один", "два", "три", "четыре", "пять",
                   "шесть", "семь", "восемь", "девять", "десять",
                   "одиннадцать", "двенадцать", "тринадцать",
                   "четырнадцать", "пятнадцать", "шестнадцать",
                   "семнадцать", "восемнадцать", "девятнадцать"
                  };

    QString dec[] = {"двадцать", "тридцать", "сорок", "пятьдесят",
                   "шестьдесят", "семьдесят", "восемьдесят", "девяносто"};

    QString han[] = {"сто", "двести" ,"триста", "четыреста", "пятьсот",
                   "шестьсот", "семьсот", "восемьсот", "девятьсот"};

    QString str;


    int y = xx / 100;

    if(y > 0) str = han[y-1] + " ";

    xx = xx % 100;
    y = xx / 10;

    if(xx > 19)
        {
         str += dec[y-2] + " ";
         xx = xx % 10;
         }

    str += edn[xx];

    return str;
}




// ***********************************************************************************
// функция превращения числа в строку слов
QString fnOllDigitsText(qint64 xx)
{

    // return если ноль
    if(xx == 0) return "ноль";

    int y, z, Cx = 0;

    QString s1, s2, rez;

    QString gig[] = {"", "тысяч", "миллион", "миллиард", "триллион"};


    // собсна процесс превращения числа в строку слов
    while(xx > 0)
        {
        if(xx % 1000)
            {

            y = xx % 10;
            z = xx % 100;

            s1 = fnThreeDigitText(xx % 1000);
            s2 = gig[Cx];

            // отсюда начинаются шаманские танцы с бубном
            // с целью изменения склонений и спряжений
            if(Cx == 1)
                {
                if((z < 10) || (z > 20))
                    {
                    if(y == 1) s2 += "а";
                    if((y > 1) && (y < 5)) s2 += "и";

                    if(y == 1) s1.replace(s1.length()-2, 2, "на");
                    if(y == 2) s1.replace(s1.length()-2, 2, "ве");
                    }
                }

            if(Cx > 1)
                {
                if((z > 10) && (z < 21)) s2 += "ов";

                else if((y > 1) && (y < 5)) s2 += "а";
                else if((y == 0) || (y > 4)) s2 += "ов";
                }
            // конец шаманских танцев с бубном

            rez = "\n" + s1 + " " + s2 + ", " + rez;
            }

        Cx++;
        xx = xx / 1000;
        }


    // удаляем лишние последние пробелы и запятые
    y = rez.length(); Cx = 0;

    while(y--)
        {
        if((rez.at(y) == ' ')||(rez.at(y) == ',')) Cx++;
        else break;
        }

    rez.resize(rez.length() - Cx);

    // удаляем непечатные символы с начала и конца строки
    // и добавляем точку в конце
    rez = rez.trimmed();   // + ".";

    // делаем первую букву заглавной
    rez[0] = rez.at(0).toUpper();

    return rez;
}


Для автора темы, изучающего програмирование с нуля, сразу такая программа сложновата будет, ИМХО. На его месте (как и любого обучаемого) я бы начал с систем счисления - написал программу, переводящую число в 16-ричное и 2-ичное. Разумеется, переводящую без использования встроенных функций.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение01.09.2014, 15:28 
Заслуженный участник


27/04/09
28128

(Оффтоп)

Alexu007, в экономике программа, построеная по образу и подобию вашего скриншота, не пригодится, потому что в сложных числительных запятые никогда не втыкаются. Как минимум.

А код и комментировать (особенно танцы) бесполезно.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение01.09.2014, 16:51 


24/05/09

2054

(Оффтоп)

arseniiv в сообщении #902616 писал(а):

А код и комментировать (особенно танцы) бесполезно.


Легко обидеть гения!!! Это была моя любимая программа! К тому же одна из немногих, которая работала... :-(

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение01.09.2014, 17:16 
Заслуженный участник


27/04/09
28128

(Оффтоп)

Горестно вздыхаю в вашу честь.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение01.09.2014, 21:19 
Заблокирован
Аватара пользователя


22/03/08

7154
Саратов

(Оффтоп)

PeanoJr в сообщении #902157 писал(а):
1) С чего начать?

Ну, чем считать, сколько будет 2х2, идите сюда :D
Пока есть только один форумчанин, начавший решать задачу и кое-что получивший. Но до квадратов Стенли 5-го порядка он пока не добрался. Доберётся ли? :wink:
Двое форумчан замахнулись, но "удар" пока не последовал :lol:

Решаем задачу с whitefox, давний коллега и самый лучший мой помощник.
"Прикрутить" генератор primesieve к нашей задаче whitefox смог. Теперь надо оптимизировать процедуру проверки построения квадрата Стенли, чтобы она так сильно не тормозила весь процесс.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение01.09.2014, 22:55 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

То, что пишет в этой теме Nataly-Mak, к обучению программированию отношения не имеет. И к программированию, собственно, тоже.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение06.09.2014, 21:37 


30/08/10
159
PeanoJr, недавно столкнулся с похожей проблемой. Мне понадобилось изучать Python, и я не мог решить, как его изучать. Правда, у меня уже был опыт программирования на Pascal и PHP. Сейчас использую следующие вещи:
Dive into Python
Официальный tutorial
Rosalind - сборник задач по биоинформатике, начинается с простых задач.
http://pythontutor.com/ - онлайн интерпретатор. Интересен тем, что позволяет пошагово отслеживать выполнение любой программы (не слишком длинной).

+Lib reference и различные статьи с хабра.

 Профиль  
                  
 
 Re: Обучение программированию с практически нуля...
Сообщение07.09.2014, 02:18 
Заслуженный участник


11/05/08
32166

(Оффтоп)

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

Нас учили программированию как таковому году в 75-м, что ли, на Алголе-60. Мы этот курс благополучно спихнули и никогда больше о нём не вспоминали. Хотя навыки остались; и я не только по себе (о чём чуть позже) сужу, но и по своим студентам, которым тоже иногда приходится чего-нить такое программировать, и они тоже учились, согласно классику, чему-нибудь и как-нибудь; но: какой-никакой опыт есть -- и нужное схватывают на лету.

Так вот, после как бы обучения я от программирования отрубился лет на пять. Персоналок-то тогда не было; да и даже программируемых калькуляторов тоже не было (они появились несколько позже). И уже в аспирантуре, когда мне дали в порядке педагогической практики вести занятия по Фортрану (хотя, казалось бы, какое отношение Фортран имеет к математике -- но надо ж было дать нагрузку) вспомнил молодость. И мне понравилось. Навыки-то остались. И я довольно скоро перевёл для себя условно привычный Алгол на гораздо более машинноориентированный Фортран, и даже с каким-то успехом обучил ему студентов.

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 37 ]  На страницу Пред.  1, 2, 3  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group