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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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