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



Пост 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 пишет:

 цитата:
Да вроде все верно работает.



Глючит зараза...

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


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

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