DRAKON.SU

Текущее время: Вторник, 17 Июнь, 2025 23:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Вопрос новичка, Оберон и Дракон - ?
СообщениеДобавлено: Четверг, 08 Май, 2008 17:32 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 242
Откуда: Россия, Стерлитамак
Не знаю даже к кому лучше обратиться, программирование стал изучать сравнительно недавно, заинтересовали как обероны, так и дракон. Не знаю, даже в тему ли обращаюсь, если что не судите строго.

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 08 Май, 2008 19:16 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
По поводу автоматов - Вам не надо их бояться, а лучше подружиться :-) В целом простая и понятная вещь.
Посмотрите, например, курс на Интуите: 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).
(Там же есть Д. Грис "Наука программирования" - будет время серьёзно подучиться, почитайте).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 08 Май, 2008 19:34 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
Числа Фибонначи нужно считать алгоритмом Госпера-Саламина. Вариант на Хаскелле будет выглядеть примерно так:
Код:
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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
(от я так и знал, одним местом чуял, шо Евгений на слова "рекурсия" и "фибоначчи" с Хаскелом придёт :-) :-) ).

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 08 Май, 2008 21:27 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
Илья Ермаков писал(а):
(от я так и знал, одним местом чуял, шо Евгений на слова "рекурсия" и "фибоначчи" с Хаскелом придёт :-) :-) ).

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

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 03:57 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 242
Откуда: Россия, Стерлитамак
Илья Ермаков писал(а):
Ветки Дракона представляются элементарно:

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 06:31 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 189
Откуда: Россия, Санкт-Петербург
adva писал(а):
А то не хотелось бы изучать то, что не пригодиться в дальнейшем.
А такое бывает? : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 07:57 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 242
Откуда: Россия, Стерлитамак
Александр Ильин писал(а):
А такое бывает?

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 08:38 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 242
Откуда: Россия, Стерлитамак
К Илье Ермакову. Вы обещали, как я понял, выложить развернутое мнение о Драконе. Понимаю, что нехватка времени - серьезная проблема, поэтому вопрос, когда примерно это можно ожидать?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 10:19 

Зарегистрирован: Среда, 14 Ноябрь, 2007 19:03
Сообщения: 5
Цитата:
отходит в пользу рей-трейсеров

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 12:51 

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 13:00 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 13:32 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
adva писал(а):
А то не хотелось бы изучать то, что не пригодиться в дальнейшем.

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 16:07 
Модератор
Аватара пользователя

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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 18:44 

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 09 Май, 2008 19:02 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 631
Откуда: Россия, Орёл
Уважаемые. Как модератор, советую заводить отдельные ветки для своих экзотик и не пудрить мозги людям.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 10 Май, 2008 10:20 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 242
Откуда: Россия, Стерлитамак
Да пусть пудрят :-) . Если бы еще и на мои простые вопросы при этом ответили. Ну да ладно, самому тоже надо мозг тренировать :-) .

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 10 Май, 2008 12:45 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 56
Откуда: Узбекистан, Чирчик
Ну в крайнем случае Гугл бы помог:
http://www.ssga.ru/erudites_info/computers/kompfib.html


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Май, 2008 13:56 

Зарегистрирован: Суббота, 16 Февраль, 2008 07:58
Сообщения: 242
Откуда: Россия, Стерлитамак
Не в тему, но... моя ветка что хочу то и делаю :-) (надеюсь сильно правила не нарушаю, а то я их не читал :-) )
Вопросы по форуму:
1. с какой периодичностью приходит подписка на тему в форуме или сразу же как ответ придет?
2. если я подписан на основную тему, то подписка действует и на ветки от нее ? Или на них отдельно подписываться надо? и вообще ветка это отдельная тема, или ветка?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 14 Май, 2008 15:24 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 71
Откуда: Россия, Орёл
adva писал(а):
Не в тему, но... моя ветка что хочу то и делаю :-) (надеюсь сильно правила не нарушаю, а то я их не читал :-) )
Вопросы по форуму:
1. с какой периодичностью приходит подписка на тему в форуме или сразу же как ответ придет?
2. если я подписан на основную тему, то подписка действует и на ветки от нее ? Или на них отдельно подписываться надо? и вообще ветка это отдельная тема, или ветка?


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

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


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

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2025, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB