Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.10.2010, 15:48
Новичок

Отправить личное сообщение для osupka Посмотреть профиль Найти все сообщения от osupka
 
Регистрация: 10.05.2010
Сообщений: 2

Формальные методы для синтеза програм
Это можна еще назвать "Формальные методы програмирования".

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

Попытка решения:
Потрачено много времени на поиск решения этой общей проблемы, на поиск какой либо информации по этому поводу, вот теперь и у вас спрашиваю.

1. Что такое программа.
Если называть программой то что у нас стоит на компе, как например WinRar, FireFox и т.д. То это нечто для решения какой нибудь задачи. То есть WinRar берет на входе контент файла, грубо говоря, и выдает сжатый контент. FireFox как интерактивная программа, имеет на входе бесконечный поток(список) дествий от пользователя, и выдает бесконечный поток графических картинок.
Из всего этого четко видется что любая программа это ничто иное как алгоритм.

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

3. Что такое создание программы.
Создание программы это как ни странно тоже алгоритм)). Такой алгоритм берет на входе "постановку задачи" или скажем уже растолкованные человеком структуры данных, и дает на выходе работающую программу.

4. Как представить программу.
Ну написать ее например на языке С (Императивный подход). Или на Haskell (Функциональный). Программы на функциональном языке ближе к математике, и представить на них программы и алгоритмы проще и нагляднее чем на императивном языке. С другой стороны наши компьютеры это автоматы с переходом состояний, памятью, и работают по императивному принципу. Банальный trade-off.
В универе мы изучали как синтезировать автомат из какой нибудь булевой функции. Но я никак не могу найти доступный способ применять такие принципы для синтеза больших программ на С.
Другая проблема это построение самой функции программы (помним что программа это большая функция, или автомат). Имея набор общих алгоритмов я не знаю как
А. Представить постановку задачи как некую запись в виде функций, формул или чего то там еще.
Б. Синтезировать программу из пункта А.

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

ЗЫ. Блок схемы это просто графическое представление императивной программы. Эта штука разве что показывает условные переходы и последовательность операторов (statement ов). Так что это дает очень большую картину даже для небольшой программы, и эта визуализация бесполезна для понимания.
UML диаграммы, чисто для ООП программирования. Такое абстрактное описание системы тоже бесполезно так как подразумевает программу как взаимодействие обьектов. Что собственно не является лучшим представлением программы.

Спасибо всем.
  #2  
Старый 28.11.2010, 23:54
Аватар для pavlinux
Пользователь

Отправить личное сообщение для pavlinux Посмотреть профиль Найти все сообщения от pavlinux
 
Регистрация: 16.11.2008
Сообщений: 93

Цитата:
Что такое алгоритм.
Последовательность действий.

Де́йстие (Деятельность) — процесс (процессы) активного взаимодействия субъекта с
объектом, во время которого субъект удовлетворяет какие-либо свои потребности,
достигает цели. Деятельностью можно назвать любую активность человека, которой он
сам придает некоторый смысл. Деятельность характеризует сознательную сторону личности
человека (в отличие от поведения).

Слова: взаимодействие, субъект, объект, надо переводить на детсадовский или сам?

Сообщение от osupka Посмотреть сообщение
Что такое программа.
Комбинация алгоритмов.

Цитата:
Что такое создание программы.
Создание взаимосвязи между алгоритмами.

Цитата:
Как представить программу.
Есть 4 вида представлений - видим, слышим, нюхаем и трогаем.

Вопрос-то какой? То что не можешь понять?! Так учиться надо было!

Последний раз редактировалось pavlinux, 28.11.2010 в 23:58.
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Методы диффузии в изображениях risen Обработка изображений, звук, графика 0 07.06.2009 03:59
Формальные языки гость Поиск и обсуждение книг/сайтов 2 22.04.2008 00:22
Современные методы фотограмметрии (цифровой) AnTe Искусственный интеллект, нейронные сети 1 27.02.2008 12:37
Мейер Б. Бодуэн К. Методы программирования quidam Хлебные места 0 13.12.2007 16:26
методы обращения матриц Веретень Математические алгоритмы 6 11.05.2007 01:54