Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 091

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Вот вроде все было хорошо, а тут опять на ровном месте...
Есть у меня двумерный байтовый массив или другими словами - массив векторов. Требуется передать какой-нибудь из векторов в подпрограмму. И что из этого получается. ( см. код )


Наверно, есть более цивилизованный способ передачи данных, не через Альпы, но я его пока не в курсе...

Приложение:
  1. type
  2. BMas16 = array [0..15] of byte ;
  3. PB = ^Byte ;
  4. TForm1 = class(TForm)
  5. ..............................
  6. procedure OutMat( arrmas : PB );
  7. procedure FormClick(Sender: TObject);
  8.  
  9. ...........................
  10. var
  11. Form1: TForm1;
  12. Wrk : array [0..17] of BMas4 ;
  13. Tmp : BMas16 ;
  14. JM,KM : array[0..3] of BMas16 ;
  15.  
  16. ......................................
  17. procedure TForm1.FormClick(Sender: TObject);
  18. begin
  19. OutMat(@JM[1][0]) ;
  20. end;
  21.  
  22.  
  23. // S U B R O U T I N E S
  24.  
  25. procedure TForm1.OutMat( Pmas : PB );
  26. var stro : string ; i,j,k : integer ;
  27. begin
  28. for j := 0 to 15 do begin Tmp[j] := ^Pmas ; Inc(Pmas) end ;
  29.  
  30.  
  31. end ;
  32.  
  33. end.
  34.  


Толяныч Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Толяныч (статус: 4-ый класс)
Вопрос отправлен: 16 марта 2011, 22:52
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 18 марта 2011, 22:30; участников в обсуждении: 4.
DNK

DNK (статус: Студент), 16 марта 2011, 23:44 [#1]:

procedure TForm1.FormClick(Sender: TObject);
begin
   OutMat(JM[1]) ; 
end;
 
 
// S U B R O U T I N E S
 
procedure TForm1.OutMat(const Pmas : BMas16 );
var j: integer;
  b: byte ;
begin
  for j := 0 to 15 do begin 
    b := Pmas[j];
    // И делаете с байтом, что хотите
  end ;
 
end ;
"Digital Networked Knight"
Толяныч

Толяныч (статус: 4-ый класс), 17 марта 2011, 00:40 [#2]:

Действительно, работает - thanks !
Иногда простые решения бывают самыми эффективными.
Почему же на мой вариант ругается? Я ведь попросил - дай мне значение переменной, на которую указывает указатель, ничего боле.

17 марта 2011, 00:42: Статус вопроса изменён на решённый (изменил автор вопроса — Толяныч)

DNK

DNK (статус: Студент), 17 марта 2011, 00:50 [#3]:

А так?
Tmp[j] := Pmas^;
"Digital Networked Knight"
Вадим К

Вадим К (статус: Академик), 17 марта 2011, 10:47 [#4]:

У каждого языка программирования есть своя идеология и методология. То, что в одном языке нормально, в другом может быть под запретом, а в третьем - смертный грех. (классический пример - goto. В ассемблере без него никак. В С - вполне себе, но часто можно без него. В С++ - уже нежелательный. В Java ключевое слово такое есть, но оно фейковое - использовать не получится, а в Python - уже нет такого, только есть эмуляция через библиотеки).
Смотря на код выше, понимаю, что написан он не на паскале, а на смеси Си и асма. Поэтому и сложно заставить работать.

В паскале/делфи можно абсолютно спокойно передавать массив в функцию/процедуру. И не нужно никаких изворотов с указателями. Единственное, что нельзя написать объявление функции так
function test(a:array[1..100] of integer):integer;
нужно только так
type mas = array[1..100] of integer;
function test(a:mas):integer;
то есть, только заведя свой тип.
Галочка "подтверждения прочтения" - вселенское зло.
Толяныч

Толяныч (статус: 4-ый класс), 17 марта 2011, 12:33 [#5]:

Да нет, спасибо DNK - все заработало. А то, что я начинал программирование на PC с 'С' - так это прорывается, как глухое 'г' у белоруса :-) А вот после первого освоенного Алгол-60 на БЭСМ-6 паскалевские begin-end'ы и ':=' воспринимаются как родные, хотя сишные фигурные скобки для составных операторов меньше утомляют пальцы. А указателями решил побаловаться на случай динамических массивов, авось пригодится, но блин вышел комом , одкако исправили.
Кстати, goto ни в одном мне известном ассемблере нет - там все jp, rjmp, br и т.д. А из АЯ так без GOTO никуда - так это в раннем Фортране ( Фортран-4).
Всем - гран мерси .
Вадим К

Вадим К (статус: Академик), 17 марта 2011, 12:50 [#6]:

jmp - это тот же goto. Говоря о goto я имею ввиду не слово, а понятие.
Галочка "подтверждения прочтения" - вселенское зло.
Толяныч

Толяныч (статус: 4-ый класс), 17 марта 2011, 13:25 [#7]:

Я понял - просто захотелось блеснуть ерундицией :-))
bugmenot

bugmenot (статус: 3-ий класс), 17 марта 2011, 15:17 [#8]:

Tmp[j] := ^Pmas
синтах еггог же, Pmas^ же

надо поработать над стилем, тогда такие косяки будут видны сразу
виконання програми розпочинається з того самого мiсця, де призупинилося.

DNK

DNK (статус: Студент), 17 марта 2011, 19:25 [#9]:

Цитата:

А вот после первого освоенного Алгол-60 на БЭСМ-6 паскалевские begin-end'ы и ':=' воспринимаются как родные, хотя сишные фигурные скобки для составных операторов меньше утомляют пальцы.

Толяныч: Пальцы утомлены только у тех, кто выполняет сам работу компьютера. Другие пользуют Code Templates.
"Digital Networked Knight"
Толяныч

Толяныч (статус: 4-ый класс), 18 марта 2011, 22:30 [#10]:

Code Templates -в Дельфи нашел что-то вроде , но как им пользоваться, пока не в курсе.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:57
Выполнено за 0.03 сек.