Автор | Сообщение |
|
| |
Пост 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 пишет: цитата: | Да вроде все верно работает. |
| Глючит зараза... LOCAL aObj3But .... присвоение и вычисление.... aObj3But := { ; {"oBut_CExit" ,nRow1,nCol1,nLenButt,nHButt,"[Esc];Выход","iExit48x1" ,"iExit48x2" ,nFontSize,aFontColor,COLOR_RED_METRO , NIL ,'' ,.T.,.F. }, ; {"oBut_CSave" ,nRow1,nCol2,nLenButt,nHButt,"Сохранить;и выйти","iSave48x1","iSave48x2",nFontSize,aFontColor,COLOR_BRIGHT_GREEN, NIL ,'Сохранить карточку и выйти' ,.T.,.F. }, ; {"oBut_CPrint",nRow1,nCol3,nLenButt,nHButt,"[F5];Печать","iPrint48x1" ,"iPrint48x2" ,nFontSize,aFontColor,COLOR_DARK_GREY , NIL ,'Печать карточки' ,.T.,.F. }, ; {"oBut_CTab" ,nRow1,nCol7,nLenBut2,nHButt,"[Tab];Следующая карточка",NIL ,NIL ,nFontSize,BLUE ,COLOR_LIGHT_BLUE , NIL ,'Перейти на следующую запись' ,.T.,.F. }, ; {"oBut_CShTab",nRow1,nCol8,nLenBut2,nHButt,"[Shift+Tab];Предыдущая карточка",NIL ,NIL,nFontSize,BLUE ,COLOR_LIGHT_BLUE , NIL ,'Перейти на предыдущую запись',.T.,.F. } ; } // проверка массива сразу ! MsgDebug("Проверка:",aObj3But) Результат: И как это понимать ?
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
Ответов - 33
, стр:
1
2
All
[только новые]
|
|