DRAKON.SU
https://forum.drakon.su/

Вопрос новичка, Оберон и Дракон - ?
https://forum.drakon.su/viewtopic.php?f=62&t=984
Страница 1 из 2

Автор:  adva [ Четверг, 08 Май, 2008 17:32 ]
Заголовок сообщения:  Вопрос новичка, Оберон и Дракон - ?

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

Т.к. опыта ни в том ни в другом нет: хотел бы уточнить некоторые вопросы:

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

2. Как в драконе я могу реализовать вызов рекурсивной функции, если не сложно, то пример какой-нибудь не помешал бы. А то я ломал голову, но так и не сообразил (пытался составить схему для вычисления суммы n-членов ряда Фиббоначи, поэтому если пример будет об этом, буду рад вдвойне, хотя это не обязательно, просто принцип хочу понять)

Автор:  Илья Ермаков [ Четверг, 08 Май, 2008 19:16 ]
Заголовок сообщения:  Re: Визуальный язык программирования "Дракон"

По поводу автоматов - Вам не надо их бояться, а лучше подружиться :-) В целом простая и понятная вещь.
Посмотрите, например, курс на Интуите: http://www.intuit.ru/department/algorithms/intavth/ , для начала самые первые главы. А потом поподробней можно здесь - http://softcraft.ru/auto.shtml .
Это для самообразования.

А по поводу вопросов.
Ветки Дракона представляются элементарно:

Код:
CONST ветка1 = 1; ветка2 = 2; конец = 0;
VAR сост: INTEGER;

сост := ветка1;
REPEAT
CASE сост OF
| ветка1:
...
сост := ветка2
| ветка2:
...
сост := конец
END
UNTIL сост = конец


Труднее представить некоторые конфигурации внутри одной ветки. Они напрямую не переводятся в конструкции текстового структурного программирования. Либо переписывать немного, либо использовать в Драконе только аналог текстовых конструкций IF-ELSE, WHILE, REPEAT - т.е. строго один выход у блока (вход один и в Драконе тоже).

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

Но числа Фиббоначи через рекурсию считать жутко неэффективно, там обычный цикл. (Имею в виду лобовую рекурсию, которая из математического определения вытекает. Так-то конечно цикл можно трансформировать в аналогичную рекурсию всегда). Две переменных, которые содержат i и i+1 - ые члены ряда, а каждый шаг цикла сдвигает их к следующему i...
Вообще, почитайте Вирта "Алгоритмы и структуры данных" (см. здесь, поиском по странице - http://europrog.ru/ilog.html).
(Там же есть Д. Грис "Наука программирования" - будет время серьёзно подучиться, почитайте).

Автор:  Geniepro [ Четверг, 08 Май, 2008 19:34 ]
Заголовок сообщения:  Re: Визуальный язык программирования "Дракон"

Числа Фибонначи нужно считать алгоритмом Госпера-Саламина. Вариант на Хаскелле будет выглядеть примерно так:
Код:
type GSt = (Integer, Integer)

instance Num GSt where
    (a,b) * (c,d) = (a*(c+d) + b*c, a*c + b*d)

fib n = fst $ ((1,0) :: GSt) ^ n
Сложность этого алгоритма O(log n), гораздо лучше, чем у линейного
Код:
fib n = fib' 0 1 n
  where
    fib' a _ 0 = a
    fib' a b n = fib' b (a+b) (n-1)
или тем более у наивного квадратичного алгоритма
Код:
fib 1 = 1
fib 2 = 1
fib n = fib (n-1) + fib (n-2)

Автор:  Илья Ермаков [ Четверг, 08 Май, 2008 20:14 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

(от я так и знал, одним местом чуял, шо Евгений на слова "рекурсия" и "фибоначчи" с Хаскелом придёт :-) :-) ).

За Госпера-Саламина спасибо, только не забывайте, что вопрос задавал новичок - и его цель не максимально эффективно посчитать числа Фибоначчи, а научиться программировать (строить итерации по последовательностям, например). А Вы его своим функциональным С++-ом сразу по голове... :-))

(Лучше бы объяснили суть алгоритма. Насколько я помню, это возведение матрицы в степень?)

Автор:  Geniepro [ Четверг, 08 Май, 2008 21:27 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Илья Ермаков писал(а):
(от я так и знал, одним местом чуял, шо Евгений на слова "рекурсия" и "фибоначчи" с Хаскелом придёт :-) :-) ).

Числа Фибоначчи -- это наше главное и основное! :о)
Правда сейчас у функциональщиков мода на фибоначчи и факториал отходит в пользу рей-трейсеров и парсеров... :о)

Илья Ермаков писал(а):
За Госпера-Саламина спасибо, только не забывайте, что вопрос задавал новичок - и его цель не максимально эффективно посчитать числа Фибоначчи, а научиться программировать (строить итерации по последовательностям, например). А Вы его своим функциональным С++-ом сразу по голове... :-))
Я бы Хаскелл сравнивал не с С++, а, скажем, с Алголом-68. Идеологически ближе... ;о)

Илья Ермаков писал(а):
(Лучше бы объяснили суть алгоритма. Насколько я помню, это возведение матрицы в степень?)
Совершенно верно.
В данном примере определяется простейший тип матрицы 2х1, которую если возвести в нужную степень, будет содержать нужное число Фибоначчи. Для этой матрицы определяется операция умножения, а далее используется тот факт, что если для некоего типа определено умножение, то автоматически получаем и возведение в степень.
Конечно, правильнее было бы определить для этой матрицы все операции над числами, но в данной задаче достаточно одного умножения...

ЗЫ. Здесь приводится объяснение похожего алгоритма: http://algolist.manual.ru/maths/count_f ... onacci.php

Автор:  adva [ Пятница, 09 Май, 2008 03:57 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Илья Ермаков писал(а):
Ветки Дракона представляются элементарно:

Дествительно, все просто
Спасибо и за ссылки

Geniepro писал(а):
Числа Фибоначчи -- это наше главное и основное!

Спасибо за примеры алгоритмов, но действительно, мне пока понятен только наивный квадратичный алгоритм :-) , в дебри пока не суюсь. Записался на курсы для новичков по программированию на компонентном паскале в Хабаровской школе, вот и решаю простые задачи пока.
Если уж для Вас это "главное и основное", то можно примеры где это используется ? Можно в виде ссылок. Я так то программирую на 1С, если это конечно считается программированием, поэтому если привязка примеров будет к задачам автоматизации думаю будет более понятно :-). Если вдруг таких примеров не окажется, просто скажите, в программировании на 1с это может понадобиться? А то не хотелось бы изучать то, что не пригодиться в дальнейшем.

Автор:  Александр Ильин [ Пятница, 09 Май, 2008 06:31 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

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

Автор:  adva [ Пятница, 09 Май, 2008 07:57 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Александр Ильин писал(а):
А такое бывает?

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

Вопрос.
А как в драконе представлять функции (продедуры, возвращающие значение) ? Просто как значок "вызов вспомогательного алгоритма" вроде не получается, т.к. значение надо присвоить какой-либо переменной, а значит это надо делать в иконе "Действие" . Или я что не так понял ?

Автор:  adva [ Пятница, 09 Май, 2008 08:38 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

К Илье Ермакову. Вы обещали, как я понял, выложить развернутое мнение о Драконе. Понимаю, что нехватка времени - серьезная проблема, поэтому вопрос, когда примерно это можно ожидать?

Автор:  Клоп Говорун [ Пятница, 09 Май, 2008 10:19 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Цитата:
отходит в пользу рей-трейсеров

:) а нельзя ли поподробнее :)

Автор:  Geniepro [ Пятница, 09 Май, 2008 12:51 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

adva писал(а):
Если уж для Вас это "главное и основное", то можно примеры где это используется ? Можно в виде ссылок.
Ну вапще-то там смайлик стоял... :о)
Понимаете, раньше было модно демонстрировать возможности функционального программироания на всяких факториалах и числах Фибоначчи. Теперь мода немного изменилась, но если Вас интересуют эти числа, может заинтересует и вот эта статья:
Алексей Стахов, "Компьютер Фибоначчи"

adva писал(а):
Если вдруг таких примеров не окажется, просто скажите, в программировании на 1с это может понадобиться? А то не хотелось бы изучать то, что не пригодиться в дальнейшем.
Тут следует думать не о конкретно числах Фибоначчи, а о раздвигании горизонтов своего программистского мышления.
Есть отличная книга по Хаскеллу: John O’Donnell, Cordelia Hall and Rex Page, "Discrete Mathematics Using a Computer" (увы не знаю, есть ли её перевод на русский). Так вот, по статистике, студенты, изучавшие дискретку по этому курсу, становились в среднем более качественными программистами, чем не изучавшие вообще или изучавшие по другим курсам. Вряд ли это может не пригодиться в будущем, даже при программировании на 1С...

Автор:  Geniepro [ Пятница, 09 Май, 2008 13:00 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

cbsc писал(а):
Цитата:
отходит в пользу рей-трейсеров

:) а нельзя ли поподробнее :)

Сейчас всё больше демонстрируют ФП на парсерах и рей-трейсерах, даже на таких языках, которые, вообще-то не для этого делались. Например, рей-трейсер на LINQ: RayTracing in one LINQ statement

Вот ещё примеры рейт-рейсеров:
Ray tracer language comparison
Ray tracer Benchmark
Scheme Raytracer written in couple of days

Так же модно делать монадические комбинаторы парсеров на языках, где отродясь не было никаких монад:
Monadic Parser Combinators using C# 3.0
Parser Combinators in C
Haskell-style Parser Combinators in Scheme

А вот любопытная заметка о встраивании алголоподобного языка в Пролог:
An Embedded ALGOL-like language in Prolog

Автор:  Geniepro [ Пятница, 09 Май, 2008 13:32 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

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

Илья Ермаков любит давить нас цитатами из книги Н. Непейводы "Основания программирования", вот выгодная для фп-шников цитата:
Цитата:
Опыт показал, что владение функциональным стилем программирования является элементом фундаментального образования программиста и мощным средством проектирования программ на концептуальном уровне. Тот, кто осмыслил концепции функционального программирования, гораздо глубже овладевает современными высокоуровневыми методами объектно-ориентированного проектирования и дизайна и гораздо эффективнее их применяет...

Эти слова подтверждаются также опытом разработчиков американского проекта The TeachScheme! Project ("TeachScheme, ReachJava!") -- школьники и студенты, изучавшие ФЯ Scheme, как правило, гораздо лучше понимают ООП и Java...

Автор:  Илья Ермаков [ Пятница, 09 Май, 2008 16:07 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Чё там понимать.... Ничего существенного (т.е. "по существу дел") в "ООП и Java" нет. Просто мозг, натренированный "умозрительными конструктами", конечно, лучше воспримет любой выкидыш бурного воображения... :-)

А вот чтобы критически анализировать эти вещи, ФП вряд ли поможет... Полезней в архиве Дейкстры и Ершова покопаться, на мой взгляд...

(Просьба не докапываться до моих слов... Так это... О своём, так сказать....)

Автор:  Клоп Говорун [ Пятница, 09 Май, 2008 18:44 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

adva , они Вас дурят :) это не функциональное, а рекурсивное программирование :). Оно так раньше и называлось см. В.Бердж "Методы рекурсивного программирования". :) А единственно-истинный функциональный язык это АПЛ :) :)

Автор:  Илья Ермаков [ Пятница, 09 Май, 2008 19:02 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

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

Автор:  adva [ Суббота, 10 Май, 2008 10:20 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Да пусть пудрят :-) . Если бы еще и на мои простые вопросы при этом ответили. Ну да ладно, самому тоже надо мозг тренировать :-) .

Про Фиббоначи так и подумал, нужно для общего образования (для раздвигания горизонтов), а ссылка : Алексей Стахов "Компьютер Фиббоначи" почему-то не открылась .

Автор:  Geniepro [ Суббота, 10 Май, 2008 12:45 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

Ну в крайнем случае Гугл бы помог:
http://www.ssga.ru/erudites_info/computers/kompfib.html

Автор:  adva [ Среда, 14 Май, 2008 13:56 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

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

Автор:  Борис Рюмшин [ Среда, 14 Май, 2008 15:24 ]
Заголовок сообщения:  Re: Вопрос новичка, Оберон и Дракон - ?

adva писал(а):
Не в тему, но... моя ветка что хочу то и делаю :-) (надеюсь сильно правила не нарушаю, а то я их не читал :-) )
Вопросы по форуму:
1. с какой периодичностью приходит подписка на тему в форуме или сразу же как ответ придет?
2. если я подписан на основную тему, то подписка действует и на ветки от нее ? Или на них отдельно подписываться надо? и вообще ветка это отдельная тема, или ветка?


У нас тут основным правилом является совесть пишущего. :) Вообще, по административным вопросам сюда: viewtopic.php?f=25&t=508

1. Оповещение об ответе высылается сразу после ответа.
2. Теоретически, если изменения происходят в ветках ниже по иерархии, а Вы подписаны на вышестоящую, то Вам высылается оповещение.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/