facebook
twitter
vk
instagram
linkedin
google+
tumblr
akademia
youtube
skype
mendeley
Global international scientific
analytical project
GISAP
GISAP logotip
Перевод страницы
 

НУЖНЫ ЛИ ПРОСТЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ?

НУЖНЫ ЛИ ПРОСТЫЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ?
Евгений Травников, кандидат технических наук, доцент

Слуцкий Геннадий Юрьевич, старший научный сотрудник

НИИЭМП

Мякушко Константин Владимирович, начальник сектора эксплуатации системы s.w.i.f.t

ЧАО "Всеукраинский депозитарий ценных бумаг"

Смирнов Юрий Михайлович, старший научный сотрудник, кандидат технических наук

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

УДК 681.3.06

В статье приводятся некоторые соображения относительно разработки и использования упрощенных языков программирования и пример использования языка Си в качестве базы для разработки таких языков.

Ключевые слова: языки программирования, простые языки программирования, пиджин-Си, разработка, использование.

This article describes some considerations on the development and use of simplified programming languages and use the C language as a base for development of such languages.

Keywords: simple programming languages, programming languages, pidgin-C, development, use.

Знакомая дорога - самая короткая!?

Введение.

Действительно, кому и зачем нужны простые языки программирования? Как они должны выглядеть? Следует ли облегчать непрофессионалам доступ к «языковому» программированию или пока им достаточно «оконно-кнопочногого» интерфейса?

Может показаться странным, но, задолго до появления и оконного интерфейса и «кнопочного» программирования, на последний вопрос часто отвечали отрицательно, аргументируя это опасениями, что подобная "демократизация" может привести к неуправляемому развитию вычислительной техники и, как следствие, к разрушительным процессам в социально-экономической сфере, по типу великой депрессии 30-х годов..., но сейчас, похоже, эти страхи немного развеялись и сменились другими. В первую очередь это пугающее усложнение устройств и катастрофы, теперь уже техногенные. Сам компьютер, потеснив взбунтовавшихся роботов, стремительно превращается в "чудище непостижимое, неуправляемое и враждебное", с которым часто справиться не могут не только «кнопочные» пользователи, но и «языковые» профессионалы. Человек и Машина перестают понимать друг друга. Поиски взаимопонимания обычно сводятся к разработке все новых и новых языков, процесс неизбежный, но ведет он нас к ситуации, известной, как Вавилонское Столпотворение. Поэтому авторы задались вопросом: "Вообще, существует ли язык, понятный и компьютеру и большинству специалистов?" Очевидно, существует, это - Алгебра, почти "школьная" (далее просто-алгебра). Мысль далеко не новая, с этого, собственно, все начиналось; и, как воспоминание о легендарной истории, в программировании сохранились, теперь уже малопонятные операции, "которые выполняются до первого нуля или единицы" (см. D2.2). Причину такого весьма ограниченного использования алгебры в программировании, авторы видят в традиции, в первую очередь, преподавания, и вовсе не в сложности метода. В любом случае, алгебра могла бы стать основой создания, по крайней мере, "общепонятного языка".

Причем, это не должен быть еще один "новый" язык. Это должно быть подмножество элементов, уже существующего, достаточно мощного и популярного языка, что-то вроде пиджин-инглиш [10] в филологии, но при единственном базовом языке, с его  строгими правилами, инструментарием, нормативной и учебной литературой. Выбор в качестве базового языка С, очевидно, понятен, и ответом на вопрос, вынесенный в заглавие, могла бы стать успешная разработка и внедрение такого пиджин-С, или просто рС.

Алгебраическое программирование.

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

рС-алгебра.

Мы попытались очень кратко описать алгебраическую основу такого языка программирования. РС-алгебра соответствует С-стандарту [4] и отличается от  просто-алгебры, прежде всего, следующими операторами:

D1.0 "=" - присвоить переменной значение, значением выражения становится присвоенное значение;

D1.1 "==" -  проверить на равенство -"равно"/"не равно", значение выражения - 1/0;

D1.2 "===" - просто-равно - не входит в С-стандарт, мы будем использовать его в комментариях /* === */ ;

D1.3 "!=" -  проверить на неравенство - "не равно"/"равно", значение выражения - 1/0;

D1.4  "<", " >", ">=", "<=" -  проверить отношение -"выполняется"/"не выполняется", значение выражения - 1/0;

D1.5 "," - оператор запятая; /* (x, y, z)===z*/ - выражение принимает значение последнего операнда;

D1.6 a[i][j] -индексы переменных записываются в квадратныхскобках.

D2.1.  "&&", "||", "!" -операторы логических выражений, ключевые в алгебраическом программировании. Значениями этих выражений могут быть 0 или 1, а операндами любые числа, причем 0 остается 0, а не-0  "приводится" к 1.

D2.2. Операция логического умножения "&&" отличается от прсто-умножения "*" нулей и единиц тем, что выполняется до первого нулевого операнда включительно; а логическое сложение "||", отличается от просто-сложения "+" нулей и единиц только тем, что /* (1 || 1) === 1 */ и выполняется до первого единичного операнда. (см. С1, С2, С3)

 Таким образом, знаменитая С-инструкция "if(x==5) x=2; elsex=4;" - "если х равно 5, то х присвоить значение 2, иначе - х присвоить значение 4", записывается на рС как

"(x==5) && (x=2) || (x=4) ".

Аксиоматизация.

Кроме алгебры, в работе использовано еще одно важное изобретение Европейской науки - аксиоматизация (в широком смысле - Эвклид, Ньютон, Менделеев, Максвелл)[9]. Предполагается, что такой подход позволит систематизировать и сократить объем описания языка, тем самым сделать проще его изучение.

Например, последовательно определим ("выведем") несколько операторов ("теорем") через (из "аксиом") "<" и "&&":

T1.1  !x       /* ===(1&&x)<1*/,

T1.2  (x==y)  /* ===(!(x<y))&&(!(y<x)) */,

T1.3  (x!=y)   /* ===!(x==y)*/,

T1.4  (x||y)    /* ===!(!x&&!y)*/,

T1.5  (x<=y)  /* ===((x<y)||(x==y))*/, и т.д.

Таким образом, из утверждений D1.0 ... D2.2, собственно аксиомами рС-алгебры можно считать:

A1.0 (D1.0)   "="     - присвоить значение,

A1.2 (D1.2)   "==="  - просто-алгебраическое равенство,

A1.3 (D1.4)   "<"     - строго меньше,

A1.4 (D1.5)   ","      - оператор запятая,

A1.5 (D2.2)   "&&"   -операция логического умножения,

A1.6 (D1.6)   "a[i][j]" -индексация переменных.

Кроме того, аксиомами будем считать просто-алгебраические операторы:

A2."*"- (умножение), "/"- (деление), "%" - (остаток от деления), "+" - (сложение), "-" - (вычитание) [1, с.199], "( ... )" - (пара круглых скобок), "f(x, y)" - (вызов функции) [1, с.194].

Утверждения (D1.0 ... A2) позволяют достаточно строго описать остальные элементы рС и С и будут максимально использоваться в последующем изложении.

Р1.  (пример1) Скобки и запятые позволяют определить порядок выполнения последовательности операторов.

/*    (x, y, u, v)===((((x), y), u), v)===v - "выполняется слева направо",

(x=y=u=v)===(x=(y=(u=(v))))===(u=v, y=u, x=y)===x - "выполняется справа налево". */

Классические цитаты на рС.

Замечание.Термины "операция", "последовательность операций", "операнд", "оператор" (с операндами), "число", "константа", "переменная", "вызов функции" в языке С есть синонимы термина "выражение" и используются для характеристики различных его (выражения) свойств. Поэтому строгие определения логических С-операторов, и их почти "дословный" перевод на  рC выглядят так:

С.1.  "Результат (операции "!") равен 1, если сравнение операнда с 0 дает истину (1), и равен 0 в противном случае." [1, с.198]

/* (!x)===(t=0, (x==0)&&(t=1), t)===(0==x) */

С.2.  "Операторы  &&  выполняются слева направо ... : вычисляется первый операнд, если он равен 0, то значение выражения есть 0. В противном случае вычисляется правый операнд, и, если он равен 0,  то значение выражения есть 0, в противном случае оно равно 1." [1, с.202]

/* (x && y && u && v)===(((( x ) &&y ) &&u ) &&v ),

(x&&y)===(t=1, (x==0)&&(t=0), t&&(y==0)&&(t=0), t)===(x!=0)&&(y!=0) */

С.3.  "Операторы  ||  выполняются слева направо ...: вычисляется первый операнд, если он не равен 0, то значение выражения есть 1. В противном случае вычисляется правый операнд, и, если он не равен 0,  то значение выражения есть 1, в противном случае оно равно 0." [1, с.202]

/*   (x|| y|| u|| v)===(((( x) ||y) ||u) ||v),

(x||y)===(t=0, (x!=0)&&(t=1), (t==0)&&(y!=0)&&(t=1), t) */

Р2. Несколько несложных примеров.

(x=2)&&(x<5)&&(x==2)&&(x=3)/* ===2&&1&&1&&3===1, x===3 */,

(x=2)&&(x+1)&&(x==3)&&(x=3) /* ===2&&3&&0     ===0, x===2 */,

(x=5, x+3)               /* === 8, x === 5 */,   ( x=5+8/4, 6)        /* === 6, x === 7 */, 

( y=2, x=y)        /* === 2, x === y === 2 */,   (x=5+8/4)*2       /* === 14, x  === 7 */,

(x=1)&&(x=2)           /* === 1, x === 2 */,   (x=1)||(x=2)           /* === 1, x === 1 */,

(x=1)&&(x=2)&&(x=3)  /* === 1, x === 3 */,  (x=1)||(x=2)||(x=3)     /* === 1, x === 1 */,

(x=1)&&(x=2)-2&&(x=3) /* === 0, x === 2 */,  (x=1)||(x=2)-2||(x=3)   /* === 1, x === 1 */,

(x=1)-1&&(x=2)||(x=3)   /* === 1, x=== 3 */,  (x=1)-1||(x=2)&&(x=3) /* === 1, x=== 2 */.

Алгебраическое программирование в Интернете.

Перейдем к более сложным примерам. Есть в Интернете «Международный Конкурс непонятного кода на Си» [5]. Парадокс состоит в том, что среди этих программ много алгебраических, причем, авторы утверждают, и мы не можем с этим не согласиться, что они короче аналогичных традиционных, неалгебраических решений и, действительно, страшно запутаны, что вполне соответствует условиям конкурса. Возникает впечатление, что сложность - это неотъемлемое свойство алгебраических программ. Мы постараемся на одном из примеров показать обратное. Сразу заметим, что мы не рискуем обсуждать качество программы и нашего перевода на рС; речь идет только о ее "читаемости".

Индексная запись и адресация переменных.

Но, прежде хотелось бы пару слов сказать об индексных переменных и памяти машины. Всю информацию машина хранит в памяти - пронумерованной (индексированной) последовательности байтов M[i] (см.D1.6). Отсюда, переменная, кроме просто-алгебраического имени "х" и значения  /*  х ===123  */ , имеет еще адрес"&х", так что /* x===M[&x]===(&x)[0]  */. Адрес "&x", как целое число, можно присвоить другой переменной "p" /* p=&x */. А обратиться к переменной по адресу "&х" можно при помощи оператора "*" или через M[i]:

/*  p=&x, х === *&х=== *p===p[0]===(M=0)[p]]===M[&х] и т.д.  */

Или в более общем случае  /* a[b]===*(a+b)===b[a] */ [1, с.195]

  Р3.  "Непонятная" программа и ее рС-перевод [5],[6],[7].

main(argc, argv)

int    argc;

char   **argv;

{

        while (*argv != argv[1] && (*argv = argv[1]) && (argc = 0) || (*++argv

                && (**argv && ((++argc)[*argv] && (**argv <= argc[*argv] ||

                (**argv += argc[*argv] -= **argv = argc[*argv] - **argv)) &&

                --argv || putchar(**argv) && ++*argv--) || putchar(10))))

                ;

}

Так выглядит форматированный текст с укороченными переменными. В комментариях указатели (адресные переменные) заменены индексными.

main(c, v) int c; char **v;

{ /*  int i=0, j=0, char **w; w=v; */

while

   (  *v != v[1] && (*v = v[1]) && (c = 0)  /* w[i]!=w[i+1] && (w[i] = w[i+1]) && (c = 0) */

   ||   (   *++v                                                          /* w[i=i+1]!=0 */

       &&   (**v                                                              /* w[i][j] */

              &&  (     (++c)[*v]                                    /* w[i][j+(c=c+1)] */

                    &&  (  **v <= c[*v]                           /* w[i][j]<=w[i][j+c] */

                          || (**v += c[*v]  -= **v  = c[*v] - **v )        /* t=a, a=b, b=t*/

                          )

                    &&  --v                     /*  w[i=i-1] */

                    ||     putchar(**v)

                    &&  ++*v--                 /*             (w[i] = w[t=i, i=i-1, t] + 1)*/

                                                   /*      ===(t = w[i] = w[i]+1,  i=i-1, t] ) */

                    )

              ||     putchar(10)

              )

       )

   )

;

}

На рС текст можно перевести, например, так:

#define sort(a, b)  ( a<=b||(a+=b-=a=b-a) )   /* ( a<=b||(t=b, b=a, a=t) ) */

main(int c, char *v[]);

{

int i=1, j=0,c=0;char t;

while

    (v[i] && (v[i][j] && (  v[i][j+(c=c+1)] &&  sort( v[i][j], v[i][j+c] )

                          ||  ( putchar(v[i][j]),  c=0, j=j+1 )     /* Конец "всплытия", */                                                                                                                             

                                                                 /* новый пузырек     */  

                          )

              || ( putchar(10), c=j=0, i=i+1 )     /* v[i][j]===0, Конец сортировки строки, */

                                                 /*новая строка                             */

              )

    )            /* v[i]===0,  Конец сортировки всего массива строк, конец программы */

;}

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

Выводы.

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

2. Авторы считают оправданными усилия по разработке и внедрению упрощенного варианта языка С (далее рС - pidgin-C - по аналогии с Pidgin English) и предлагают сотрудничество.

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

4. Такой подход, по мнению авторов, позволяет:

- значительно облегчить начинающим программистам и специалистам смежных дисциплин, доступ к современным профессиональным технологиям и инструметариям программирования;

- стимулирует разработку добротного и читаемого текста программ, поскольку, образцами интуитивно становятся математические выражения, упрощать и "прихорашивать" которые мы учились не один год;

- создает условия и предпосылки сначала "ручной" разработки рС-комментариев и переводов с языка С (и не только с С!) на рС, а в дальнейшем, программ-словарей, программ-переводчиков;

- разработка простейших интерпретаторов рС ( сложный cint уже разрабатывается, [8], мы опоздали :-) могла бы заменить непрофессионалам целый ряд специализированных интерпретаторов (shell, make, greep, awk...), изобилие которых, постепенно превращается в серьезную проблему не только для начинающих;

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

5. Разработка основывается на двух основных принципах:

- алгебраизация -- максимальное использование С-expression вместо С-statment'ов;

- аксиоматизация -- выделение истинного подмножества конструкций языка С ("аксиомы") достаточного (и необходимого?) для определения ("вывода" и/или замены) остальных ("теоремы") конструкций базового языка С.

  5. Основные требования:

- вложенность - все компоненты рС есть компоненты С. Для работы с рС пригоден весь инструментарий С (редакторы, компиляторы, отладчики, библиотеки...);

- достаточность - любая (?) С-программа принципиально может быть переведена на рС.

 

Литература:

1. Б. Керниган, Д. Ритчи, Язык программирования Си, Москва, "Финансы и статистика", 1992.

2. М. И. Болски, Язык программирования Си, Москва, "Радио и связь", 1988.

3. ISO/IEC 9899:1990, Programming languages — C.

4. INTERNATIONAL STANDARD ©ISO/IEC ISO/IEC 9899:TC2 Committee Draft — May 6, 2005 WG14/N1124

5. http://ru.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest

6.http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D1%83%D0%B7%D1%8B%D1%80%D1%8C%D0%BA%D0%BE%D0%BC

7. http://en.wikipedia.org/wiki/Bubble_sort

8. http://ru.wikipedia.org/wiki/CINT

9. http://en.wikipedia.org/wiki/Axiom

10. http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D0%B4%D0%B6%D0%B8%D0%BD

Комментарии: 19

Slutsky Gennady

С удовольствием благодарим всех участников конференции, откликнувшихся на нашу статью, за важные для нас и полезные замечания. Мы поняли, что ошиблись, начиная изложение сразу с непривычной большинству читателей С-нотации и постараемся исправить эту ошибку, предположив, что, поскольку умножение на ноль всегда дает ноль (Х*0=0), машина вычисляет операнды в том порядке, в котором они записаны, слева направо и выполняет последовательность операций умножения только до первого нулевого операнда включительно. В этом случае: (x=2)*(x<5)*(x==2)*(x=3)===2*1*1*3===6, x===3 (x=2)*(x+1)*(x==3)*(x=3)===2*3*0 ===0, x===2 где: (x=2) -- "присвоить переменной x значние 2" (x<5) -- "x меньше 5 ?" и если "да", то значение выражения "1", в противном случае "0", то же самое (x==2) -- "x равно 2?" -- "да"/ "нет" --"1"/ "0" (x=3) -- переменной x присваивается новое значние 3, x===3 -- "x равно 3" -- обычное алгебраическое равенство. (x=2)*(x<5)*(x==2)*(x=3)===2*1*1*3 -- значение выражения равно произведению значений выражений в скобках: (x=2)===2, (2<5)===1, (2==2)===1, (x=3)===3 2*1*1*3===6 -- произведение значений выражений в скобках равно 6. То же самое для второго выражения: ((x=2)*(x+1)*(x==3)*(x=3)===2*3*0 ===0, x===2), (x=2)===2, x===2, (x+1)===2+1===3, x===2, (x==3)===(2==3)===0, стоп!!!, выражение (x=3) не вычисляется!!! и окончательно: (x=2)*(x+1)*(x==3)*(x=3)===2*3*0===0, x===2. Такая запись позволяет формализовать принятую в просто-алгебре запись условий, например: "y=0 при x<=0 и y=x при x>0" превращается в "y=(x>0)*x". Можно привести еще целый ряд подобных примеров; обычно они не вызывают серьезных затруднений..., но это уже введение в настоящую алгебру программирования. Однако, в С, сделанные выше предположения, не выполняются и для их реализации служит специальный оператор "&&": x&&y === (x*y) != 0 -- "(x*y) не равно 0?" -- "да"/ "нет" --"1"/ "0"..., дальше по тексту. С уважением Травников.

Konstantinova Lyudmila Anatolievna

Уважаемый автор! Учет многообразных факторов формирования современного специалиста определяет сегодняшнюю политику в сфере высшего, основанного на практических исследованиях, профессионального образования. Отличительной чертой этой политики является актуализация роли формирования профессиональной компетентности в качестве неотъемлемого элемента общей и профессиональной культуры, которая невозможна без использования компьютерных технологий. Однако, как показывает действительность, сложные компьютерные программы зачастую оказываются непосильны для неспециалистов. И сами авторы задаются вопросом «кому и зачем нужны простые языки программирования? Как они должны выглядеть? Следует ли облегчать непрофессионалам доступ к «языковому» программированию или пока им достаточно «оконно-кнопочногого» интерфейса? и сами «считают оправданными усилия по разработке и внедрению упрощенного варианта языка С (далее рС - pidgin-C - по аналогии с Pidgin English) и предлагают сотрудничество, как мы понимаем специавлистам-непрофессионалам. Хочется надеяться, что планы авторов осуществятся и в ближайшее время, что сделает работу преподавателей-филологов более качественной, интересной и продуктивной. С уважением, Людмила Константинова.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Slutsky Gennady

Спасибо за реплику! В какой-то мере Вы безусловно правы, и нам не удалось полностью раскрыть материал, но в работе речь идет именно о методике изучения (обучения) программирования на базе школьной алгебры. Принципиально новыми можно считать правило "умножения до первого нуля", оператор "," - запятая, и то, что операторы "сравнения" принимают значения 0/1. После этого практически все конструкции языка программирования можно строго описать выражениями (формулами) такой "расширенной" алгебры программирования. Изложение получается значительно короче традиционного словесного описания, а сами формулы становятся прекрасными примерами алгебраического программирования. С уважением Евгений Травников.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Стариков Павел Анатольевич

Очень интересная идея - создать язык, удобный для человеческого мышления и для машины. Такая постановка вопроса очень изыскана и оригинальна. С уважением, Стариков.

Травников Евгений Николаевич

Благодарим за внимание. Если Вас интересует эта тема, предлагаем сотрудничество.

Саносян Хачатур

Уважаемые авторы. Поддерживаю вашу идею. С уважением Х.А. Саносян

Травников Евгений Николаевич

Благодарим за поддержку. С уважением Е.Н.Травников.

Вильчинская-Бутенко Марина Эдуардовна

Спасибо за статью и за стиль - читается легко и понятно, хотя с того момента, как я осваивала Бэйсик, много воды утекло...

Galina Makotrova

Поставленный авторами вопрос находит ответ в статье. Но ее понимание затруднено примерами, которые понятны лишь специалисту в области программирования. А сама идея замечательная! Облегчит ли реализация данной идеи творчество учителей и школьников в познавательной деятельности? Если да, то как? С уважением, Макотрова Галина

Травников Евгений Николаевич

Уважаемая Галина, благодарим за интересные замечания. Действительно, примеры получились невыразительными и при первом чтении их можно пропустить, а мы будем стараться их исправить. В то же время, следует заметить, что, если речь идет о разработке универсального языка (по типу http://gisap.eu/ru/node/10494 Перспективы развития проекта универсального алфавита для решения проблем межкультурной коммуникации), то непривычные большинству читателей символы "&&" и "||" можно было бы заменить, на более выразительные, принятые в математике /\ и \/ или другие, например: (x=2)/\(x<5)/\(x==2)/\(x=3) /* === 2 /\ 1 /\ 1 /\ 3 ===1, x===3 */, (x=2)/\(x+1)/\(x==3)/\(x=3) /* === 2 /\ 3 /\ 0 ===0, x===2 */, (x=1)/\(x=2) /* === 1, x === 2 */, (x=1)\/(x=2) /* === 1, x === 1 */. Мы старались на примерах показать достоинства предложенного метода введения в программирование. Если участники сочтут работу полезной, мы готовы подробней обсудить его в одой из следующих конференций.

Искак Наби

По-моему, статья не имеет отношения к педагогике, поэтому неспециалистам трудно полемизировать с авторами. Тем не менее желаю им успехов

Морарь Марина Михайловна

Спасибо за доклад! Вызов посредством полемики очень удачно мотивирует и обосновывает проблему исследования, чего нет в большей части докладов. Тема актуальна. Дальнейших успехов!

Травников Евгений Николаевич

Спасибо за добрые пожелания. Целую Ваши ручки.

Федина Владимира

Дякуємо за статтю! Актуальна тема. Риторичне питання у назві статті викликає багато питань і заохочує до пошуку відповідей.

Травников Евгений Николаевич

Щиро дякуемо, ми завжди в пошуку.
Комментарии: 19

Slutsky Gennady

С удовольствием благодарим всех участников конференции, откликнувшихся на нашу статью, за важные для нас и полезные замечания. Мы поняли, что ошиблись, начиная изложение сразу с непривычной большинству читателей С-нотации и постараемся исправить эту ошибку, предположив, что, поскольку умножение на ноль всегда дает ноль (Х*0=0), машина вычисляет операнды в том порядке, в котором они записаны, слева направо и выполняет последовательность операций умножения только до первого нулевого операнда включительно. В этом случае: (x=2)*(x<5)*(x==2)*(x=3)===2*1*1*3===6, x===3 (x=2)*(x+1)*(x==3)*(x=3)===2*3*0 ===0, x===2 где: (x=2) -- "присвоить переменной x значние 2" (x<5) -- "x меньше 5 ?" и если "да", то значение выражения "1", в противном случае "0", то же самое (x==2) -- "x равно 2?" -- "да"/ "нет" --"1"/ "0" (x=3) -- переменной x присваивается новое значние 3, x===3 -- "x равно 3" -- обычное алгебраическое равенство. (x=2)*(x<5)*(x==2)*(x=3)===2*1*1*3 -- значение выражения равно произведению значений выражений в скобках: (x=2)===2, (2<5)===1, (2==2)===1, (x=3)===3 2*1*1*3===6 -- произведение значений выражений в скобках равно 6. То же самое для второго выражения: ((x=2)*(x+1)*(x==3)*(x=3)===2*3*0 ===0, x===2), (x=2)===2, x===2, (x+1)===2+1===3, x===2, (x==3)===(2==3)===0, стоп!!!, выражение (x=3) не вычисляется!!! и окончательно: (x=2)*(x+1)*(x==3)*(x=3)===2*3*0===0, x===2. Такая запись позволяет формализовать принятую в просто-алгебре запись условий, например: "y=0 при x<=0 и y=x при x>0" превращается в "y=(x>0)*x". Можно привести еще целый ряд подобных примеров; обычно они не вызывают серьезных затруднений..., но это уже введение в настоящую алгебру программирования. Однако, в С, сделанные выше предположения, не выполняются и для их реализации служит специальный оператор "&&": x&&y === (x*y) != 0 -- "(x*y) не равно 0?" -- "да"/ "нет" --"1"/ "0"..., дальше по тексту. С уважением Травников.

Konstantinova Lyudmila Anatolievna

Уважаемый автор! Учет многообразных факторов формирования современного специалиста определяет сегодняшнюю политику в сфере высшего, основанного на практических исследованиях, профессионального образования. Отличительной чертой этой политики является актуализация роли формирования профессиональной компетентности в качестве неотъемлемого элемента общей и профессиональной культуры, которая невозможна без использования компьютерных технологий. Однако, как показывает действительность, сложные компьютерные программы зачастую оказываются непосильны для неспециалистов. И сами авторы задаются вопросом «кому и зачем нужны простые языки программирования? Как они должны выглядеть? Следует ли облегчать непрофессионалам доступ к «языковому» программированию или пока им достаточно «оконно-кнопочногого» интерфейса? и сами «считают оправданными усилия по разработке и внедрению упрощенного варианта языка С (далее рС - pidgin-C - по аналогии с Pidgin English) и предлагают сотрудничество, как мы понимаем специавлистам-непрофессионалам. Хочется надеяться, что планы авторов осуществятся и в ближайшее время, что сделает работу преподавателей-филологов более качественной, интересной и продуктивной. С уважением, Людмила Константинова.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Slutsky Gennady

Спасибо за реплику! В какой-то мере Вы безусловно правы, и нам не удалось полностью раскрыть материал, но в работе речь идет именно о методике изучения (обучения) программирования на базе школьной алгебры. Принципиально новыми можно считать правило "умножения до первого нуля", оператор "," - запятая, и то, что операторы "сравнения" принимают значения 0/1. После этого практически все конструкции языка программирования можно строго описать выражениями (формулами) такой "расширенной" алгебры программирования. Изложение получается значительно короче традиционного словесного описания, а сами формулы становятся прекрасными примерами алгебраического программирования. С уважением Евгений Травников.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Konstantinova Lyudmila Anatolievna

Спасибо за статью! К сожалению она не имеет отношения к педагогике, поэтому не в нашей компетенции делать какие-либо комментарии, однако тема, несомненно актуальна. Простые языки программирования действительно нужны, особенно неспециалистам в области кибернетики. Желаю авторвм дальнейших успехов.

Стариков Павел Анатольевич

Очень интересная идея - создать язык, удобный для человеческого мышления и для машины. Такая постановка вопроса очень изыскана и оригинальна. С уважением, Стариков.

Травников Евгений Николаевич

Благодарим за внимание. Если Вас интересует эта тема, предлагаем сотрудничество.

Саносян Хачатур

Уважаемые авторы. Поддерживаю вашу идею. С уважением Х.А. Саносян

Травников Евгений Николаевич

Благодарим за поддержку. С уважением Е.Н.Травников.

Вильчинская-Бутенко Марина Эдуардовна

Спасибо за статью и за стиль - читается легко и понятно, хотя с того момента, как я осваивала Бэйсик, много воды утекло...

Galina Makotrova

Поставленный авторами вопрос находит ответ в статье. Но ее понимание затруднено примерами, которые понятны лишь специалисту в области программирования. А сама идея замечательная! Облегчит ли реализация данной идеи творчество учителей и школьников в познавательной деятельности? Если да, то как? С уважением, Макотрова Галина

Травников Евгений Николаевич

Уважаемая Галина, благодарим за интересные замечания. Действительно, примеры получились невыразительными и при первом чтении их можно пропустить, а мы будем стараться их исправить. В то же время, следует заметить, что, если речь идет о разработке универсального языка (по типу http://gisap.eu/ru/node/10494 Перспективы развития проекта универсального алфавита для решения проблем межкультурной коммуникации), то непривычные большинству читателей символы "&&" и "||" можно было бы заменить, на более выразительные, принятые в математике /\ и \/ или другие, например: (x=2)/\(x<5)/\(x==2)/\(x=3) /* === 2 /\ 1 /\ 1 /\ 3 ===1, x===3 */, (x=2)/\(x+1)/\(x==3)/\(x=3) /* === 2 /\ 3 /\ 0 ===0, x===2 */, (x=1)/\(x=2) /* === 1, x === 2 */, (x=1)\/(x=2) /* === 1, x === 1 */. Мы старались на примерах показать достоинства предложенного метода введения в программирование. Если участники сочтут работу полезной, мы готовы подробней обсудить его в одой из следующих конференций.

Искак Наби

По-моему, статья не имеет отношения к педагогике, поэтому неспециалистам трудно полемизировать с авторами. Тем не менее желаю им успехов

Морарь Марина Михайловна

Спасибо за доклад! Вызов посредством полемики очень удачно мотивирует и обосновывает проблему исследования, чего нет в большей части докладов. Тема актуальна. Дальнейших успехов!

Травников Евгений Николаевич

Спасибо за добрые пожелания. Целую Ваши ручки.

Федина Владимира

Дякуємо за статтю! Актуальна тема. Риторичне питання у назві статті викликає багато питань і заохочує до пошуку відповідей.

Травников Евгений Николаевич

Щиро дякуемо, ми завжди в пошуку.
Партнеры
 
 
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
image
Would you like to know all the news about GISAP project and be up to date of all news from GISAP? Register for free news right now and you will be receiving them on your e-mail right away as soon as they are published on GISAP portal.