Ada_Ru форум

Обсуждение языка Ада

Конкурс.

Оставить новое сообщение

Сообщения

Alexey Veselovsky
Конкурс.
2009-12-22 11:10:11

Вышел третий выпуск электронного журнала "Практика функционального программирования" (http://fprog.ru/2009/issue3/), одновременно был объявлен конкурс:

 

"Издревле люди пытались сравнивать языки программирования: что же лучше -

Basic или Pascal? Perl или Python? OCaml или Haskell? Обычно вопросы такого мас-

штаба, заданные в курилке, FIDO или на просторах какой-нибудь новомодной соци-

альной сети, ведут к раздору, взаимным обвинениям, обидам, и очень редко - к кру-

пицам объективной истины. Обычно в подобных спорах эмоции бьют через край, а с

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

лее или менее объективно сравнивать разные языки программирования, ничтожно

мало.

 

Чтобы исправить эту плачевную ситуацию, редакция журнала предлагает вам по-

пробовать свои силы в решении двух достаточно простых практических задач и при-

слать в редакцию получившиеся программы."

 

Почитать о условиях конкурса, и условия задач (их там две: "усечение карты" и "составление плана-графика") можно либо в самом журнале, либо тут:

http://fprog.ru/contests/2009/

http://fprog.ru/contests/2009/geo/

http://fprog.ru/contests/2009/gantt/

 

По моему, это шанс Аде как-то напомнить о себе :-)

sma

Библиотеку скачал. Работает. Однако, там есть одна ошибка. Если значение параметра пустое (например: role="") программа работает неправильно (если указать любое непустое значение, например: role="a", то всё ок). Сейчас пытаюсь исправить дело.

=Самодов Михаил=

sma

:( Своё нахальное заявление насчёт простоты алгоритма беру обратно ): При ближайшем рассмотрении задачка оказалась очень даже "хитрой". Для небольшого объёма (256x256) программу написал сравнительно быстро. Однако, для большой карты при решении задачи "в лоб" требуется слишком много ресурсов. Решение вижу в том чтобы сначала разбить карту на приемлемое количество квадратиков (256x256) а затем разбить каждый "критичный" квадратик ещё на (256x256) кусков. Т.о. результирующая м-ц будет (65536x65536) что очень даже ничего. Однако здесь есть масса нюансов....

=Самодов Михаил=

-----Original Message-----

sma

Фсем привет!

Программу на конкурс на Аде сваял.

Результаты можно смотреть по адресу : http://saturn-skb.ru/geo/readme.html Сам архив проекта здесь: http://saturn-skb.ru/geo/geo.zip

Более-менее удачным считаю реализацию настраиваемого пакета Hash_pak где организовал что-то вроде простейшей HASH-таблицы. Пикантность момента заключается в том что при окончательной реализации пакета легко можно прикреплять к ключу дополнительные данные или не прикреплять вовсе. Огорчающим моментом считаю следующее. Попытался разбить программу на 2 разных модуля (ну типа они пишутся разными людьми). Результаты работы первого Main.adb используются модулем Osm_pak.adb. Так вот. Чтобы передать несколько параметров и результирующую матрицу пришлось просто "тупо" делать общие переменные в Osm_pak и делать их видимыми. Лично я ждал более изящного механизма передачи данных между модулями.

Жду уничтожающей критики.

С уважением, =Самодов Михаил=

__________ Information from ESET NOD32 Antivirus, version of virus signature database 4244 (20090715) __________

The message was checked by ESET NOD32 Antivirus.

http://www.esetnod32.ru

sma

Отвечаю пока на 1-й вопрос..

1) Под передачей я имел ввиду передачу параметров, общие переменные и проч. хрень.

Когда одни общие данне в одном модуле другие - в другом и т.д. это всегда действует на нервы.

В настоящий момент переношу все общие переменные и процедуры в отдельный пакет Com_pak дабы подчеркнуть их особый статус.

=Самодов Михаил=

P.S. Над остальными вопросами думаю...

-----Original Message-----

sma

В принципе, задача GEO алгоритмически простая. Как говаривал Хомс "Дело на одну трубку".

В основном предвижу трудности с вводом исходных данных в формате XML. По моему, можно через QtAda добраться до Qt-шных средств на эту тему. Но разбираться с Qt и затем с QtAda в лом.

Есть ли в Gnat Аде "родные" средства для манипуляции с XML?

=Самодов Михаил=

__________ Information from ESET NOD32 Antivirus, version of virus signature database 4244 (20090715) __________

The message was checked by ESET NOD32 Antivirus.

http://www.esetnod32.ru

Не знаю как насчет родных, но мне както одалживали библиотечку (подробности можно спросить в

[email protected]), может быть пригодится:

 

http://87.236.24.180/upload/40.xml_io-subj_rs.zip

 

2009/12/24 sma <[email protected]>

 

В принципе, задача GEO алгоритмически простая. Как говаривал Хомс "Дело на одну трубку".

В основном предвижу трудности с вводом исходных данных в формате XML. По моему, можно через QtAda добраться до Qt-шных средств на эту тему. Но разбираться с Qt и затем с QtAda в лом.

Есть ли в Gnat Аде "родные" средства для манипуляции с XML?

=Самодов Михаил=

 

 

__________ Information from ESET NOD32 Antivirus, version of virus signature

database 4244 (20090715) __________

 

The message was checked by ESET NOD32 Antivirus.

 

http://www.esetnod32.ru

 

 

 

------------------------------------

 

Yahoo! Groups Links

 

 

 

 

 

 

--

Best Regards,

Gavrikov Valeriy

 

mailto:[email protected]

В принципе, задача GEO алгоритмически простая. Как говаривал Хомс "Дело на

одну трубку".

В основном предвижу трудности с вводом исходных данных в формате XML.

По моему, можно через QtAda добраться до Qt-шных средств на эту тему. Но

разбираться с Qt и затем с QtAda в лом.

Есть ли в Gnat Аде "родные" средства для манипуляции с XML?

 

Записать валидный xml сильно проще чем прочитать валидный xml. Собственно запись можно и на коленке сделать. А для чтения для ады вроде была либа умеющая SAX.

 

Трудность и интересность первой задаче в том, что объем обрабатываемых данных >> объема ОЗУ.

Например банальная карта россии занимает больше 1.5 Гиг.

Есть ли в Gnat Аде "родные" средства для манипуляции с XML?

 

http://libre.adacore.com/libre/tools/xmlada/

 

ВФ

Есть ли в Gnat Аде "родные" средства для манипуляции с XML?

 

http://libre.adacore.com/libre/tools/xmlada/

 

А оно read only, т.е. только парсинг, но не запись.

А оно read only, т.е. только парсинг, но не запись.

 

Ээээ а что-то разве нужно для записи XML кроме Put_Line? :-|

 

ВФ

Ээээ а что-то разве нужно для записи XML кроме Put_Line? :-|

 

Ну, в исходном же письме было написано:

"В основном предвижу трудности с вводом исходных данных в формате XML."

 

Видимо хочется легко и просто, и гарантированно верно (не вникая в

тонкости синтаксиса XML) сериализовать некую структуру данных в XML.

 

А то вдруг очепятаешься? ;-) Ну и там же ж куча всякой фигни,

неймспейсы какие-то, атрибуты, опять же нужно не забывать закрывать

тэги.

 

Хотя ручками сгенерить валидный XML существенно конечно проще чем

ручками его же распарсить.

 

PS. Сори, вчера не туда тыкнул и ответ ушел в личку.

On Sat, 12 Jan 2002 01:55:13 +0300, you wrote:

 

Попытался разбить программу на 2

разных модуля (ну типа они пишутся разными людьми). Результаты работы первого Main.adb используются модулем Osm_pak.adb. Так вот. Чтобы передать несколько параметров и результирующую матрицу пришлось просто "тупо" делать общие переменные в Osm_pak и делать их видимыми. Лично я ждал более изящного механизма передачи данных между модулями.

 

Жду уничтожающей критики.

 

Угу.

 

1.

 

Какие могут быть "передачи" между единицами компиляции (пакеты)?

 

Данные передаются между единицами исполнения такими как подпрограммы (процедурная декомпозиция) или (в объектно-ориентированном

программировании) данных нет вообще, они спрятаны в состояниях объектов.

В обоих случаях в Аде это будет record type, с данными убранными в приватную часть пакета. Модуляризация осуществляется либо через child пакеты или separate-ные тела.

 

2.

 

type Ceil_Idx_type is (Face, Back, Face_Contur, Back_Contur, Pic); for Ceil_Idx_type'Size use Unsigned_8'Size;

for Ceil_Idx_type use (Face => 2#00001#, Back => 2#00010#, Face_Contur => 2#00100#, Back_Contur => 2#01000#, Pic => 2#10000#);

 

Зачем? Это, что интерфейс с С? Тогда

 

type Ceil_Idx_type is new Unsigned_8;

Face : constant Ceil_Idx_type := 2**1;

...

(и остальные декларации неверны без pragma Convention)

 

Если не интерфейс, то

 

type Ceil_Idx_type is mod 2**<число состояний>;

Face : constant Ceil_Idx_type := 2**1;

...

 

3. Почему tagged?

 

4. Почему Венгерская нотация?

 

Ceil_Idx_type --> Cell_Index

*_pak --> разумное название без _pak, без сокращений, без

французско-нижегородского.

 

5. Не надо пользовать Ada.Strings.Unbounded без особой надобности. Это очень медленно, а для ввода-вывода уж точно никогда не нужно.

 

6. И тем более не надо Ada.Unchecked_Conversion.

 

7. Передача имен файлов через формальный параметр generics - более чем сомнительно.

 

8. Никогда не вызывайте End_Of_File!

 

9. Никогда не вызывайте функцию Index для разбора строк, используйте рекурсивный спуск.

 

10. Отступ в Аде - 3 пробела.

 

--

Regards,

Dmitry A. Kazakov

http://www.dmitry-kazakov.de

Как известно, программы по объёму условно можно разделить на:

1. Крошечные (от 0 строк ..)

2. Маленькие (от 100 строк ..)

3. Большие (от 1000 строк ..)

4. Оч.Большие (от 10000 строк ..)

 

Это всё меленькие :-)

До примерно 200 000 строк -- маленький проект.

От 200 000 до где-то 700 000 -- средний проект.

От 700 000 до ~ 10 000 000 -- большой.

Дальше уже идут гигантские

Итак, в OSM-файле сначала идёт секция узлов (node), затем секция путей (way) и, далее секция отношений

(relation).

 

Это не гарантировано. Т.е. в спецификации формата это никто не

гарантирует. По сути это лишь особенность данного конкретного

генератора этих osm-файлов.

 

Советую ознакомиться с обсуждением задания вот тут:

http://community.livejournal.com/fprog/5508.html

Внимание вопрос: вы на реальных данных, т.е. на реальных картах и реальных полигонах обрезки эту программу пробовали? У меня лично оно банально валится с исключением:

* EXCEPTION :(osm_pak.adb:89 index check failed)

 

Это при попытке скормить ей карту россии с полигоном для вырезки

московской области.

 

PS. А зачем при чтении каждого узла из osm-файла в консоль пишется строчка с дословным содержимым оного xml-тэга? Для пущей "скорости"? Это никак не отключить?

Дас, и работает (когда работает) примерно в 5-6 раз медленней

osmosis'a (который писан на java).

sma

üÔÏ ÍÏÑ ÌÉÞÎÁÑ ËÌÁÓÓÉÆÉËÁÃÉÑ. ðÒÏÅËÔ × 1000 ÓÔÒÏË ÓÞÉÔÁÀ ÕÖÅ ÂÏÌØÛÉÍ, Ô.Ë. ÜÔÏ ÉÍÅÎÎÏ ÔÏÔ ÏÂÏÚÒÉÍÙÊ ÐÒÅÄÅÌ, ËÏÔÏÒÙÊ ×ÌÁÚÉÔ × ÏÄÎÕ ÇÏÌÏ×Õ. åÓÌÉ ÓÔÒÏË ÂÏÌØÛÅ ÜÔÏÇÏ ËÏÌÉÞÅÓÔ×Á, ÕÖÅ ÎÁÄÏ ÐÒÉÎÉÍÁÔØ ÓÐÅÃÉÁÌØÎÙÅ ÍÅÒÙ.

=óÁÍÏÄÏ× íÉÈÁÉÌ=

sma

 

1.ºÐÚØÕ ÜÞÓãâ Ñëâì "ßÕàÕÔÐçØ" ÜÕÖÔã ÕÔØÝØæÐÜØ ÚÞÜßØÛïæØØ (ßÐÚÕâë)? ´ÐÝÝëÕ ßÕàÕÔÐîâáï ÜÕÖÔã ÕÔØÝØæÐÜØ ØáßÞÛÝÕÝØï âÐÚØÜØ ÚÐÚ ßÞÔßàÞÓàÐÜÜë (ßàÞæÕÔãàÝÐï ÔÕÚÞÜßÞ×ØæØï) ØÛØ (Ò ÞÑêÕÚâÝÞ-ÞàØÕÝâØàÞÒÐÝÝÞÜ

ßàÞÓàÐÜÜØàÞÒÐÝØØ) ÔÐÝÝëå ÝÕâ ÒÞÞÑéÕ, ÞÝØ áßàïâÐÝë Ò áÞáâÞïÝØïå ÞÑêÕÚâÞÒ. ² ÞÑÞØå áÛãçÐïå Ò °ÔÕ íâÞ ÑãÔÕâ record type, á ÔÐÝÝëÜØ ãÑàÐÝÝëÜØ Ò ßàØÒÐâÝãî çÐáâì ßÐÚÕâÐ. ¼ÞÔãÛïàØ×ÐæØï ÞáãéÕáâÒÛïÕâáï ÛØÑÞ çÕàÕ× child ßÐÚÕâë ØÛØ separate-ÝëÕ âÕÛÐ.

 

*** Ï ÝÕ áÞÒáÕÜ ßàÐÒØÛìÝÞ ÒëàÐ×ØÛáï. ÀÕçì èÛÐ Þ ÝÕÞÑåÞÔØÜÞáâØ ÒëÝÞáÐ ÞÑéØå ßÕàÕÜÕÝÝëå Ø äãÝÚæØÙ Ò ÞâÔÕÛìÝëÙ ÞÑéØÙ ßÐÚÕâ ÔÛï ãÝØäØÚÐæØØ. ***

 

2.> type Ceil_Idx_type is (Face, Back, Face_Contur, Back_Contur, Pic); for Ceil_Idx_type'Size use Unsigned_8'Size;

for Ceil_Idx_type use (Face => 2#00001#, Back => 2#00010#, Face_Contur => 2#00100#, Back_Contur => 2#01000#, Pic => 2#10000#);

·ÐçÕÜ? ÍâÞ, çâÞ ØÝâÕàäÕÙá á Á? ÂÞÓÔÐ

type Ceil_Idx_type is new Unsigned_8;

Face : constant Ceil_Idx_type := 2**1;

...

(Ø ÞáâÐÛìÝëÕ ÔÕÚÛÐàÐæØØ ÝÕÒÕàÝë ÑÕ× pragma Convention)

µáÛØ ÝÕ ØÝâÕàäÕÙá, âÞ

type Ceil_Idx_type is mod 2**<çØáÛÞ áÞáâÞïÝØÙ>;

Face : constant Ceil_Idx_type := 2**1;

...

*** ¸×ÝÐçÐÛìÝÞ ÜëáÛØÛ Ò âÕàÜØÝÐå ¿ÐáÚÐÛìÝëå ÜÝÞÖÕáâÒ, ßÞíâÞÜã ßÞÛãçØÛáï ÒÞâ âÐÚÞÙ ÒÐàØÐÝâ ***

 

3. ¿ÞçÕÜã tagged?

*** á tagged ÔÕÙáâÒØâÕÛìÝÞ, ßÕàÕÑÞà. ½Ð áÐÜÞÜ ÔÕÛÕ ÞáâÐÛÞáì Þâ ßàÕÔëÔãéÕÓÞ ÒÐàØÐÝâÐ. ***

 

4. ¿ÞçÕÜã ²ÕÝÓÕàáÚÐï ÝÞâÐæØï?

*** ÇÕáÝÞ ÓÞÒÞàï, ÛîÑÛî ï íâÞ ÔÕÛÞ. ¿àØÒëçÚÐ - áâàÐèÝÐï áØÛÐ! ***

5. ½Õ ÝÐÔÞ ßÞÛì×ÞÒÐâì Ada.Strings.Unbounded ÑÕ× ÞáÞÑÞÙ ÝÐÔÞÑÝÞáâØ. *** ÇÕáÝÞ ÓÞÒÞàï, ÝÞÓØ àÐáâãâ Ø× áØèÝÞÓÞ ÚÛÐááÐ CString ßÞíâÞÜã Ò ßÐÚÕâÕ Ada.Strings.Unbounded ãÒØÔÕÛ çâÞ-âÞ ÑÛØ×ÚÞÕ Ø àÞÔÝÞÕ. ² âÐÚÞÜ áÛãçÐÕ, Ð çÕÜ ÕÓÞ ×ÐÜÕÝØâì? ½Õ ÛîÑÛî ßàÞÓàÐÜÜë Ò ÚÞâÞàëå Ò ãéÕàÑ äãÝÚæØÞÝÐÛìÝÞáâØ ßëâÐîâáï ÒëØÓàÐâì áÚÞàÞáâì. ´Ûï ÜÕÝï íâÞ ÔÕèñÒëÙ ßàØñÜ. ²ëØÓàëÒÐâì ÝÐÔÞ ÜÕâÞÔÞÜ Ð ÝÕ íÚÞÝÞÜØÕÙ ÝÐ áßØçÚÐå. ***

 

6. ¸ âÕÜ ÑÞÛÕÕ ÝÕ ÝÐÔÞ Ada.Unchecked_Conversion.

*** ÁÞÓÛÐáÕÝ. µáÛØ ÔÕÛÐâì çÕàÕ× type Ceil_Idx_type is new Unsigned_8; âÞ ÔÕÙáâÒØâÕÛÕÝÞ ÝÐäØÓ ÝÕ ÝãÖÝÞ. ***

 

7. ¿ÕàÕÔÐçÐ ØÜÕÝ äÐÙÛÞÒ çÕàÕ× äÞàÜÐÛìÝëÙ ßÐàÐÜÕâà generics - ÑÞÛÕÕ çÕÜ áÞÜÝØâÕÛìÝÞ.

*** ÁÞÓÛÐáÕÝ. ¾ÔÝÐÚÞ, ßÞ ÛÞÓØÚÕ áÞÑëâØÙ ÔÛï ÚÐÖÔÞÙ HASH-âÐÑÛØæÕ ÝÐ×ÝÐçÐÕâáï äÐÙÛ á ãÝØÚÐÛìÝëÜ ØÜÕÝÕÜ. ¼ÞÖÝÞ ÚÞÝÕçÝÞ ÑëÛÞ Ñë ØáßÞÛì×ÞÒÐâì ÓÕÝÕàÐâÞà ãÝØÚÐÛìÝëå ØÜñÝ, ÝÞ ÝÐßàïÜãî ÝÐ×ÝÐçØâì ØÜï ßÞÚÐ×ÐÛÞáì ÛÐÚÞÝØçÝÕÕ. ***

 

8. ½ØÚÞÓÔÐ ÝÕ Òë×ëÒÐÙâÕ End_Of_File!

*** ¿ÞçÕÜã? (ØáÚàÕÝÝÕÕ ÝÕÔÞãÜÕÝØÕ) ¼ÞÖÕâ ï çÕÓÞ ÝÕ ×ÝÐî ßàÞ End_Of_File? ***

9. ½ØÚÞÓÔÐ ÝÕ Òë×ëÒÐÙâÕ äãÝÚæØî Index ÔÛï àÐ×ÑÞàÐ áâàÞÚ, ØáßÞÛì×ãÙâÕ àÕÚãàáØÒÝëÙ áßãáÚ.

*** ÇâÞ âÐÚÞÕ "àÕÚãàáØÒÝëÙ áßãáÚ" çÕáâÝÞ ÝÕ ×ÝÐî. ÄãÝÚæØï Index ÔÛï ÜÕÝï àÞÔÝÐï Ø× âÞÓÞ ÖÕ ÚÛÐááÐ CString (äãÝÚæØØ Find, ReverseFind) ***

10. ¾âáâãß Ò °ÔÕ - 3 ßàÞÑÕÛÐ.

*** ¿Þ áâÐàÞÙ Ðà-à-àÜÕÙáÚÞÙ ßàØÒëçÚÕ Þâáâãßë ÔÕÛÐî áØÜÒÞÛÞÜ âÐÑãÛïæØØ. ² ÑÞÛìèØÝáâÒÕ àÕÔÐÚâÞàÞÒ (ÝÐßàØÜÕà Ò MultiEdit) Þâáâãß ßÞ âÐÑãÛïâÞàã - ÒÕÛØçØÝÐ àÕÓãÛØàãÕÜÐï. à ÜÕÝï, ÝÐßàØÜÕà, áâÞØâ (4). ÂÐÑãÛïâÞàë ÞáÞÑÕÝÝÞ ãÔÞÑÝë ßàØ ÒàÕÜÕÝÝÞÜ ÚÞÜÜÕÝâØàÞÒÐÝØØ ÞßÕàÐâÞàÞÒ, áâàÞÚÐ ÒßàÐÒÞ ÝÕ áÜÕéÐÕâï, ÝÕ ÝÐàãèÐï "áâàÞï". ¾ßïâì ÖÕ íÚÞÝÞÜØï. ÂÐÜ ÓÔÕ ï 1 àÐ× ÝÐÖÜã ÚÝ. Tab ÐÔÕßâ ßàÞÑÕÛìÝëå ÞâáâãßÞÒ 3 àÐ×Ð ÝÐÖÜñâ ÚÝ.ßàÞÑÕÛ. ºÞÝÕçÝÞ, íâÞ ßàÞâØÒÞàÕçØâ àÕÚÞÜÕÝÔãÕÜÞÜã áâØÛî °Ôë. ½Þ ÞâÚÐ×Ðâìáï Þâ áâÐàëå (àÐæØÞÝÐÛìÝëå) ßàØÒëçÕÚ ßÞÚÐ ÝÕ ÓÞâÞÒ. =ÁÐÜÞÔÞÒ ¼ØåÐØÛ=

sma

[Cyr KOI8-R] 1) îÁ ÒÅÁÌØÎÙÈ ÄÁÎÎÙÈ ÐÒÏ×ÅÒÑÌ.

éÓÐÏÌØÚÏ×ÁÌ ËÁÒÔÙ Egypt.osm, Japan.osm, Finladia.osm, Russian Federation.osm (ÎÁÚ×ÁÎÉÑ ÐÉÛÕ ÐÏ ÐÁÍÑÔÉ). îÁ ÍÏÓËÏ×ÓËÏÊ ÏÂÌÁÓÔÉ ÎÅ ÐÒÏÂÏ×ÁÌ. úÁ ×ÙÑ×ÌÅÎÎÕÀ ÏÛÉÂËÕ ÓÐÁÓÉÂÏ, ÉÝÕ ÐÒÉÞÉÎÕ.

2) üÔÏ ÏÔÌÁÄÏÞÎÁÑ ×ÅÒÓÉÑ Ó ÔÒÁÓÓÉÒÏ×ËÏÊ. ÷ ÁÒÈÉ×Å ÐÒÏÅËÔÁ ÅÓÔØ ×ÁÒÉÁÎÔ ÂÅÚ ×ÙÄÁÞÉ geo_speed.exe.

=óÁÍÏÄÏ× íÉÈÁÉÌ=

 

--- In [email protected], Alexey Veselovsky <alexey.veselovsky@...> wrote:

sma

[Cyr KOI8-R] :( íÏÖÅÔ ÔÁËÏÅ ÂÙÔØ ÉÚ-ÚÁ ÉÓÐÏÌØÚÏ×ÁÎÉÑ Unbounded_String? ): äÅÌÏ × ÔÏÍ, ÞÔÏ ÐÒÏÇÒÁÍÍÁ ÌÉÎÅÊÎÁÑ, ÎÉËÁËÉÈ ÄÒÕÇÉÈ ÁÌÇÏÒÉÔÍÉÞÅÓËÉÈ ÞÕÄÅÓ × ÐÒÏÇÒÁÍÍÅ ÎÅÔ.

 

--- In [email protected], Alexey Veselovsky

Новое сообщение:
Страницы: 1 2

Чтобы оставить новое сообщение необходимо Зарегистрироваться и Войти