On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 64
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 11.08.14 17:38. Заголовок: Как программно создать двумерный массив


Вопрос к знатокам!
Что-то не догоняю в программном создании двумерного массива.
Сталкиваюсь с этим уже не первый раз.
Вот пример:
Скрытый текст

Получаю какую-то абракадабру. Кстати с арабского это означает:"Лечу (от слова лечить) я, лечу".
Что я делаю не так? Есть у меня сомнение в правильности вывода на экран msgdebug.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 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 не дружит с многомерными массивами, можно под них написать свою гляделку




Спасибо: 1 
ПрофильЦитата Ответить
администратор




Пост 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} }

Спасибо: 1 
ПрофильЦитата Ответить



Пост 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 не дружит с многомерными массивами, можно под них написать свою гляделку


Спасибо за подсказку!


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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"}}




Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост 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, что приведет к неприятному сюрпризу: при изменении одного элемента изменятся сразу все.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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)

Результат:


И как это понимать ?


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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 )
...



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3542
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.14 14:54. Заголовок: SergKis пишет: Пони..


SergKis пишет:

 цитата:
Понимать надо так - где то у тебя пропущен разделитель и выполнение функции пошло по др. ветке



Я взял пример из Menu2.prg !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост 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



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 66
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 14:17. Заголовок: Pasha пишет: что пр..


Pasha пишет:

 цитата:
что приведет к неприятному сюрпризу: при изменении одного элемента изменятся сразу все.


Спасибо большое!!!
Именно это у меня произошло! Башку сломал!
Даже хотел создать новую тему и изложить то, что у меня произошло.
У меня были 2 программки на Фортране и Питоне для решения транспортой задачи.
Задумал я эту программу перевести на Харбор. В результате столкнулся с вышеизложенными проблемами.
Пришлось отказаться от динамического построения двумерных массивов, а использовать массивы с заранее
фиксированными границами.
Все прошло безукоризненно.
Еще раз большое спасибо!!!


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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().


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 68
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 14:37. Заголовок: Может быть не совсем..


Может быть не совсем по теме, но все-таки имеющей к ней отношение.
Есть ли примеры, кроме minigraph, для построения графиков функции.
И где можно посмотреть или поискать.


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 69
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 15:25. Заголовок: Dima пишет: Если мы..


Dima пишет:

 цитата:
Если мы говорим о простых консольных примерах (тестах) то собирается очень просто.


Спасибо!!!
А как собрать без использования hbmk2?
Он у меня не хочет работать.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 70
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 15:50. Заголовок: Dima пишет: Пример ..


Dima пишет:

 цитата:
Пример для BCC , пути к нему у меня прописаны в переменной PATH


Если можно, покажите полные пути к BCC55

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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 , так как не найдет компилятор.


Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 71
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 16:57. Заголовок: Dima пишет: Path=c:..


Dima пишет:

 цитата:
Path=c:\bcc55\bin


Не знаю на что и грешить.
У меня путь прописан следующим образом:
C:\Borland\Bcc55;C:\Borland\BCC55\bin
Первая часть пути - так на всякий случай.
Даже поместил hello.prg в C:\minigui\harbour\bin, но линковка не проходит.
Честно говоря, у меня появилось сомнение - а был ли hbmk2.bat у меня при установке minigui.
Или я его скопировал и установил дополнительно.
При установке minigui я использовал HarbourMiniGUIExtEd-2.3.6-Setup


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4157
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 14.08.14 17:06. Заголовок: evgeny2006 пишет: C..


evgeny2006 пишет:

 цитата:
C:\Borland\Bcc55;C:\Borland\BCC55\bin


вот тут после BCC55\bin не живет один пробел ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост 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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 72
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 21:39. Заголовок: Dima пишет: вот тут..


Dima пишет:

 цитата:
вот тут после BCC55\bin не живет один пробел ?


Еще раз проверил. Пробелов нет.
При запуске с помощью hbmk2 компиляция проходит, а вот линковка - нет.
При этом, в командном окне появляются кракозябры и сообщении о наличии ошибок.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 73
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 14.08.14 21:40. Заголовок: Dima пишет: Собират..


Dima пишет:

 цитата:
Собирать так Sborka hello.prg


Спасибо большое!!!
Завтра сразу попробую.


Спасибо: 0 
ПрофильЦитата Ответить



Пост 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\ и запускал
из этой папки. Вот, что получилось:

Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 287
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 14.08.14 22:03. Заголовок: evgeny2006 пишет: g..


evgeny2006 пишет:

 цитата:
gcc.exe


так у вас Borland или Mingw все же ???
похоже вы пытаетесь линкеру GCC скормить либы от BCC

Спасибо: 0 
ПрофильЦитата Ответить



Пост 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> - условное обозначения компилятора



Сейчас попробую.
Спасибо за помощь!!!

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 76
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 15.08.14 10:18. Заголовок: Dima пишет: Вот сва..


Dima пишет:

 цитата:
Вот сваял батничек для Вас


Скрытый текст


Сделал, как Вы порекомендовали. Все отлично проходит!!!

СПАСИБО!!!

Главное, что нет попытки подключить линкер Mingw.
Выходит, что у hbmk2 установлены разные приоритеты просмотра доступа к линкерам
в зависимости от того, что раньше задано. Вероятно set path имеет более высокий приоритет.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 77
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 15.08.14 10:33. Заголовок: evgeny2006 пишет: В..


evgeny2006 пишет:

 цитата:
Вероятно set path имеет более высокий приоритет.


Абсолютно точно, что на время выполнения .bat файла в системе устанавливается новый PATH.
Поэтому-то hbmk2 и выполняется правильно.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4162
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 15.08.14 22:45. Заголовок: evgeny2006 я думаю ..


evgeny2006
я думаю правильнее в PATH совсем ни чего не прописывать в плане BCC и MINGW и просто использовать
BAT (CMD) файлы с нужным PATH и тд и тп

Спасибо: 1 
ПрофильЦитата Ответить



Пост N: 80
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 16.08.14 11:00. Заголовок: Dima пишет: я думаю..


Dima пишет:

 цитата:
я думаю правильнее в PATH совсем ни чего не прописывать в плане BCC и MINGW


Согласен с Вами.
Спасибо!!!


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 84
Зарегистрирован: 05.07.14
ссылка на сообщение  Отправлено: 19.09.14 22:35. Заголовок: Dima Что-то не могу..


Dima
Что-то не могу найти, как обратиться к администратору непосредство, поэтому
вынужден обратиться так.
Как можно получить доступ к курилке?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 4216
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.09.14 22:57. Заголовок: evgeny2006 пишет: К..


evgeny2006 пишет:

 цитата:
Как можно получить доступ к курилке?


Там нет ни чего интересного.
Курят там , постоянные участники и выше.
Курение вред

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 33 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 28
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет