Автор | Сообщение |
|
| |
Пост N: 64
Зарегистрирован: 05.07.14
|
|
Отправлено: 11.08.14 17:38. Заголовок: Как программно создать двумерный массив
Вопрос к знатокам! Что-то не догоняю в программном создании двумерного массива. Сталкиваюсь с этим уже не первый раз. Вот пример: Скрытый текст local m_spisok:={} public aRoute := {} m:=4 n:=4 // создаем одномерный массив из m элементов for i=1 to m aadd(m_spisok,0) next msgdebug ('m_spisok=',m_spisok) // Создаем двумерный массив из n строк for i=1 to n aadd(aRoute,m_spisok) next msgdebug ('aRoute=',aRoute)
| Получаю какую-то абракадабру. Кстати с арабского это означает:"Лечу (от слова лечить) я, лечу". Что я делаю не так? Есть у меня сомнение в правильности вывода на экран msgdebug.
|
|
|
Ответов - 33
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 279
Зарегистрирован: 20.02.11
|
|
Отправлено: 11.08.14 18:02. Заголовок: evgeny2006 пишет: Е..
evgeny2006 пишет: цитата: | Есть у меня сомнение в правильности вывода на экран msgdebug. |
| аналогично массив создается правильно, можно вывести на экран как for n=1 to Len( aRoute ) msgdebug ('aRoute['+ntoc(n)+']=',aRoute[n]) next Видимо msgdebug не дружит с многомерными массивами, можно под них написать свою гляделку
|
|
|
|
| |
Пост N: 4151
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.08.14 18:04. Заголовок: evgeny2006 пишет: f..
evgeny2006 пишет: цитата: | for i=1 to n aadd(aRoute,m_spisok) next |
| После такой операции будет получен массив { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }
|
|
|
|
| |
Пост N: 65
Зарегистрирован: 05.07.14
|
|
Отправлено: 11.08.14 20:13. Заголовок: Dima пишет: После т..
Dima пишет: цитата: | После такой операции будет получен массив { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} } |
| Мне это и нужно! Только msgdebug выдает другие результаты. Значит нужно осмотрительно относиться к выводу многомерных массивов. Спасибо! Haz пишет: цитата: | Видимо msgdebug не дружит с многомерными массивами, можно под них написать свою гляделку |
| Спасибо за подсказку!
|
|
|
|
| |
Пост N: 4152
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.08.14 20:17. Заголовок: evgeny2006 пишет: m..
evgeny2006 пишет: цитата: | msgdebug ('aRoute=',aRoute) |
| Вот так попробуй msgdebug ('aRoute=',hb_ValToExp(aRoute)) ЗЫ Сделал вот такой тестик. a:={{1,2,3,4},{1,333,"333"}} ? hb_ValToExp(a) // выдает {{1, 2, 3, 4}, {1, 333, "333"}}
|
|
|
|
| Администратор
|
Пост N: 3211
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.08.14 09:12. Заголовок: Вместо for i=1 to n..
Вместо for i=1 to n aadd(aRoute,m_spisok) next лучше делать так: for i=1 to n aadd(aRoute, ACLONE(m_spisok)) next иначе все элементы массива будут содержать один и тот же m_spisok, что приведет к неприятному сюрпризу: при изменении одного элемента изменятся сразу все.
|
|
|
|
| постоянный участник
|
Пост N: 380
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.08.14 11:58. Заголовок: evgeny2006 пишет:Тол..
evgeny2006 пишет: цитата: | Только msgdebug выдает другие результаты |
| Это очень странно ? MsgDebug использует hb_ValToExp(...) : FUNCTION MsgDebug( ... ) *-----------------------------------------------------------------------------* LOCAL i, cMsg, nCnt := PCount() cMsg := "Called from: " + ProcName( 1 ) + "(" + hb_ntos( ProcLine( 1 ) ) + ") --> " + ProcFile( 1 ) + CRLF + CRLF FOR i = 1 TO nCnt cMsg += hb_ValToExp( PValue( i ) ) + iif( i < nCnt, ", ", "" ) NEXT MsgInfo( cMsg, "DEBUG INFO" ) RETURN cMsg
|
|
|
|
| |
Пост N: 4153
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.08.14 20:56. Заголовок: Да вроде все верно р..
Да вроде все верно работает. Пример: proc main local amas:={{1,2,3,4}} ? MsgDebug(amas) /// {{1, 2, 3, 4}} FUNCTION MsgDebug( ... ) *-----------------------------------------------------------------------------* #define CRLF CHR(13)+CHR(10) LOCAL i, cMsg, nCnt := PCount() cMsg := "Called from: " + ProcName( 1 ) + "(" + hb_ntos( ProcLine( 1 ) ) + ") --> " + ProcFile( 1 ) + CRLF + CRLF FOR i = 1 TO nCnt cMsg += hb_ValToExp( PValue( i ) ) + iif( i < nCnt, ", ", "" ) NEXT *MsgInfo( cMsg, "DEBUG INFO" ) RETURN cMsg
|
|
|
|
| постоянный участник
|
Пост N: 3539
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.08.14 01:24. Заголовок: Dima пишет: Да врод..
Dima пишет: цитата: | Да вроде все верно работает. |
| Глючит зараза... И как это понимать ?
|
|
|
|
| постоянный участник
|
Пост N: 381
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.08.14 10:40. Заголовок: Andrey пишет:И как э..
Andrey пишет: Понимать надо так - где то у тебя пропущен разделитель и выполнение функции пошло по др. ветке (см. ..\rtl\valtoexp.prg line > 160): FUNCTION hb_ValToExp( xVal, lRaw ) hb_default( @lRaw, .F. ) RETURN s_valToExp( xVal, lRaw ) STATIC FUNCTION s_valToExp( xVal, lRaw, cInd, hRefs, cRefs, cObjs ) ...
|
|
|
|
| постоянный участник
|
Пост N: 3542
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.08.14 14:54. Заголовок: SergKis пишет: Пони..
SergKis пишет: цитата: | Понимать надо так - где то у тебя пропущен разделитель и выполнение функции пошло по др. ветке |
| Я взял пример из Menu2.prg !
|
|
|
|
| постоянный участник
|
Пост N: 382
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.08.14 15:55. Заголовок: Andrey пишет:Я взял ..
Andrey пишет: цитата: | Я взял пример из Menu2.prg ! |
| Попробовал. Результат такой же, а вот так - все ok! : cOut := '' AEVAL(aObjButton, {|aE,nE| cOut += hb_ntos(nE)+'. '+hb_valtoexp(aE)+CRLF }) ? cOut надо смотреть почему hb_valtoexp(...) лезет в (line 161) : ... IF cInd == "" IF ! Empty( cRefs ) cVal := "__itemSetRef( " + cVal + ", {" + cRefs + "} )" ENDIF
|
|
|
|
|
| |
Пост N: 66
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 14:17. Заголовок: Pasha пишет: что пр..
Pasha пишет: цитата: | что приведет к неприятному сюрпризу: при изменении одного элемента изменятся сразу все. |
| Спасибо большое!!! Именно это у меня произошло! Башку сломал! Даже хотел создать новую тему и изложить то, что у меня произошло. У меня были 2 программки на Фортране и Питоне для решения транспортой задачи. Задумал я эту программу перевести на Харбор. В результате столкнулся с вышеизложенными проблемами. Пришлось отказаться от динамического построения двумерных массивов, а использовать массивы с заранее фиксированными границами. Все прошло безукоризненно. Еще раз большое спасибо!!!
|
|
|
|
| |
Пост N: 67
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 14:30. Заголовок: Dima пишет: Пример:..
Dima пишет: цитата: | Пример: proc main local amas:={{1,2,3,4}} ? MsgDebug(amas) /// {{1, 2, 3, 4}} |
| Не подскажите, как компилировать, линковать и исполнять подобные программы? Я этого не знаю. И куда посмотреть? Дело в том, что прежде чем что-то делать, иногда надо проверить, как работает команда. Без этого инструмента я и напоролся на якобы неправильно работающую функцию directory().
|
|
|
|
| |
Пост N: 68
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 14:37. Заголовок: Может быть не совсем..
Может быть не совсем по теме, но все-таки имеющей к ней отношение. Есть ли примеры, кроме minigraph, для построения графиков функции. И где можно посмотреть или поискать.
|
|
|
|
| |
Пост N: 4154
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.14 15:22. Заголовок: evgeny2006 пишет: Н..
evgeny2006 пишет: цитата: | Не подскажите, как компилировать, линковать и исполнять подобные программы? |
| Если мы говорим о простых консольных примерах (тестах) то собирается очень просто. Пример для BCC , пути к нему у меня прописаны в переменной PATH Proc main // test.prg ? "Hello word" wait return Сборка c:\hb32\bin\hbmk2 test.prg Где c:\hb32 путь к Harbour
|
|
|
|
| |
Пост N: 69
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 15:25. Заголовок: Dima пишет: Если мы..
Dima пишет: цитата: | Если мы говорим о простых консольных примерах (тестах) то собирается очень просто. |
| Спасибо!!! А как собрать без использования hbmk2? Он у меня не хочет работать.
|
|
|
|
| |
Пост N: 70
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 15:50. Заголовок: Dima пишет: Пример ..
Dima пишет: цитата: | Пример для BCC , пути к нему у меня прописаны в переменной PATH |
| Если можно, покажите полные пути к BCC55
|
|
|
|
| |
Пост N: 4155
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.14 15:51. Заголовок: Батник вот тут http:..
Батник вот тут http://www.kresin.ru/hrbfaq.html#Compile evgeny2006 пишет: цитата: | Если можно, покажите полные пути к BCC55 |
| у меня так Path=c:\bcc55\bin; Dima пишет: цитата: | у меня так Path=c:\bcc55\bin; |
| некоторые делают ошибку и добавляют случайно лишний пробел в пути Path=c:\bcc55\bin По этой причине кстати может не работать HBMK2 , так как не найдет компилятор.
|
|
|
|
| |
Пост N: 71
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 16:57. Заголовок: Dima пишет: Path=c:..
Dima пишет: Не знаю на что и грешить. У меня путь прописан следующим образом: C:\Borland\Bcc55;C:\Borland\BCC55\bin Первая часть пути - так на всякий случай. Даже поместил hello.prg в C:\minigui\harbour\bin, но линковка не проходит. Честно говоря, у меня появилось сомнение - а был ли hbmk2.bat у меня при установке minigui. Или я его скопировал и установил дополнительно. При установке minigui я использовал HarbourMiniGUIExtEd-2.3.6-Setup
|
|
|
|
| |
Пост N: 4156
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.14 16:59. Заголовок: evgeny2006 пишет: Ч..
evgeny2006 пишет: цитата: | Честно говоря, у меня появилось сомнение - а был ли hbmk2.bat у меня при установке minigui. |
| я писал не про него а про C:\MiniGUI\Harbour\bin\hbmk2.exe попробуйте так C:\MiniGUI\Harbour\bin\hbmk2.exe hello.prg
|
|
|
|
| |
Пост N: 4157
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.14 17:06. Заголовок: evgeny2006 пишет: C..
evgeny2006 пишет: цитата: | C:\Borland\Bcc55;C:\Borland\BCC55\bin |
| вот тут после BCC55\bin не живет один пробел ?
|
|
|
|
|
| |
Пост N: 4158
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.08.14 17:18. Заголовок: Вот сваял батничек д..
Вот сваял батничек для Вас rem Sborka.bat set path=C:\Borland\BCC55\bin; C:\MiniGUI\Harbour\bin\hbmk2 %1 Собирать так Sborka hello.prg
|
|
|
|
| |
Пост N: 72
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 21:39. Заголовок: Dima пишет: вот тут..
Dima пишет: цитата: | вот тут после BCC55\bin не живет один пробел ? |
| Еще раз проверил. Пробелов нет. При запуске с помощью hbmk2 компиляция проходит, а вот линковка - нет. При этом, в командном окне появляются кракозябры и сообщении о наличии ошибок.
|
|
|
|
| |
Пост N: 73
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 21:40. Заголовок: Dima пишет: Собират..
Dima пишет: цитата: | Собирать так Sborka hello.prg |
| Спасибо большое!!! Завтра сразу попробую.
|
|
|
|
| |
Пост N: 74
Зарегистрирован: 05.07.14
|
|
Отправлено: 14.08.14 21:48. Заголовок: Dima пишет: попробу..
Dima пишет: цитата: | попробуйте так C:\MiniGUI\Harbour\bin\hbmk2.exe hello.prg |
| Вторым заходом я это и делал, т.е скопировал hello.prg в папку C:\MiniGUI\Harbour\bin\ и запускал из этой папки. Вот, что получилось: Скрытый текст C:\MiniGUI\Harbour\bin>hbmk2 hello.prg Harbour 3.2.0dev (r1405231501) Copyright (c) 1999-2014, http://harbour-project.org/ Compiling 'hello.prg'... Lines 4, Functions/Procedures 1 Generating C source output to 'C:\Users\admin\AppData\Local\Temp\hbmk_8t5pst.dir \hello.c'... Done. C:/MiniGUI/Harbour/lib/hbextern.lib: file not recognized: File format not recogn ized ♣ ld ☻♣♂♫☺ ☺ ♫♦♫♀ ☻♫☻ ☻ 1 hbmk2: Error: Running linker. 1 gcc.exe C:/Users/admin/AppData/Local/Temp/hbmk_8t5pst.dir/hello.o C:/Users/admin /AppData/Local/Temp/hbmk_8t5pst.dir/hbmk_xwajod.o -Wl,--nxcompat -Wl,--dynami cbase -mconsole -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang - lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhb usrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lh bcplr -lhbpp -lhbcommon -lhbmainstd -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2 _32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleau t32 -lmpr -lwinmm -lmapi32 -limm32 -lmsimg32 -lwininet -Wl,--end-group -ohello .exe -LC:/MiniGUI/Harbour/lib C:\MiniGUI\Harbour\bin>
|
|
|
|
|
| |
Пост N: 287
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.08.14 22:03. Заголовок: evgeny2006 пишет: g..
evgeny2006 пишет: так у вас Borland или Mingw все же ??? похоже вы пытаетесь линкеру GCC скормить либы от BCC
|
|
|
|
| |
Пост N: 75
Зарегистрирован: 05.07.14
|
|
Отправлено: 15.08.14 10:00. Заголовок: Haz пишет: похоже в..
Haz пишет: цитата: | похоже вы пытаетесь линкеру GCC скормить либы от BCC |
| Я пользуюсь BCC, но у меня есть два mingw - один для QGIS, другой для Harbour. Mingw прописан в Path. При установке я прописывал все для BCC, но несколько раз обнаруживал попытку подключить Mingw. Это у меня уже третий заход приобщиться к hbmk2. Пока тоже неудачный. Удалять Mingw из Path вроде бы жалко, но как заставить линкер (hbmk2) использовать BCC - пока не знаю. Хотя в той статье, что Вы порекомендовали - есть инструкция. цитата: | Если у вас больше, чем один установленный C компилятор и хотите указать, какой именно должна использовать hbmk2, пропишите параметр -comp=<name>, где <name> - условное обозначения компилятора |
| Сейчас попробую. Спасибо за помощь!!!
|
|
|
|
| |
Пост N: 76
Зарегистрирован: 05.07.14
|
|
Отправлено: 15.08.14 10:18. Заголовок: Dima пишет: Вот сва..
Dima пишет: цитата: | Вот сваял батничек для Вас |
| Скрытый текст rem Sborka.bat set path=C:\Borland\BCC55\bin; C:\MiniGUI\Harbour\bin\hbmk2 %1
| Сделал, как Вы порекомендовали. Все отлично проходит!!! СПАСИБО!!! Главное, что нет попытки подключить линкер Mingw. Выходит, что у hbmk2 установлены разные приоритеты просмотра доступа к линкерам в зависимости от того, что раньше задано. Вероятно set path имеет более высокий приоритет.
|
|
|
|
| |
Пост N: 77
Зарегистрирован: 05.07.14
|
|
Отправлено: 15.08.14 10:33. Заголовок: evgeny2006 пишет: В..
evgeny2006 пишет: цитата: | Вероятно set path имеет более высокий приоритет. |
| Абсолютно точно, что на время выполнения .bat файла в системе устанавливается новый PATH. Поэтому-то hbmk2 и выполняется правильно.
|
|
|
|
| |
Пост N: 4162
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.08.14 22:45. Заголовок: evgeny2006 я думаю ..
evgeny2006 я думаю правильнее в PATH совсем ни чего не прописывать в плане BCC и MINGW и просто использовать BAT (CMD) файлы с нужным PATH и тд и тп
|
|
|
|
| |
Пост N: 80
Зарегистрирован: 05.07.14
|
|
Отправлено: 16.08.14 11:00. Заголовок: Dima пишет: я думаю..
Dima пишет: цитата: | я думаю правильнее в PATH совсем ни чего не прописывать в плане BCC и MINGW |
| Согласен с Вами. Спасибо!!!
|
|
|
|
|
| |
Пост N: 84
Зарегистрирован: 05.07.14
|
|
Отправлено: 19.09.14 22:35. Заголовок: Dima Что-то не могу..
Dima Что-то не могу найти, как обратиться к администратору непосредство, поэтому вынужден обратиться так. Как можно получить доступ к курилке?
|
|
|
|
| |
Пост N: 4216
Зарегистрирован: 17.05.05
|
|
Отправлено: 19.09.14 22:57. Заголовок: evgeny2006 пишет: К..
evgeny2006 пишет: цитата: | Как можно получить доступ к курилке? |
| Там нет ни чего интересного. Курят там , постоянные участники и выше. Курение вред
|
|
|
Ответов - 33
, стр:
1
2
All
[только новые]
|
|