URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4616
[ Назад ]

Исходное сообщение
"Паскаль"

Отправлено Ярополк , 15-Янв-07 15:33 
Нужно передать двумерный массив в функцию.
program ...;
const
N=...;
var ...;

mass:array[1..N,1..N]of integer;
type t2=array[1..N,1..N]of integer;

function abc(a:array of t2);
begen
...;
end;

begin{main}
...;
abc(mass); {Вот тут то и возникает проблема}
...;
end.

Если в качестве параметра передавать mass то возникает ошибка "недопустимый тип".
Возможно надо mass както подругому объявлять? Помогите пожалуйста. Заранее спасибо.


Содержание

Сообщения в этом обсуждении
"Паскаль"
Отправлено XAnder , 15-Янв-07 15:44 
>mass:array[1..N,1..N]of integer;
>type t2=array[1..N,1..N]of integer;
>
>function abc(a:array of t2);
>...;
>abc(mass); {Вот тут то и возникает проблема}
>...;
>
>Если в качестве параметра передавать mass то возникает ошибка "недопустимый тип".
>Возможно надо mass както подругому объявлять? Помогите пожалуйста. Заранее спасибо.

Форумом случайно не ошиблись? Где здесь Web технологии?

А по существу - функция требует трехмерный массив (array of t2), а получает двумерный (mass), так что удивляться нечему.


"Паскаль"
Отправлено Ярополк , 15-Янв-07 15:55 

>Форумом случайно не ошиблись? Где здесь Web технологии?
Я просто не знал куда дернуться, а паскаль к делфи ближе во и подумал...

>А по существу - функция требует трехмерный массив (array of t2), а
>получает двумерный (mass), так что удивляться нечему.

А не подскажете как это будет выглядеть?
И почему массив трехмерный, объявлен то вроде как двумерный.


"Паскаль"
Отправлено XAnder , 15-Янв-07 17:37 
>>Форумом случайно не ошиблись? Где здесь Web технологии?
>Я просто не знал куда дернуться, а паскаль к делфи ближе во
>и подумал...

Понятнее не стало :) Причем тут Делфи?

>>А по существу - функция требует трехмерный массив (array of t2), а
>>получает двумерный (mass), так что удивляться нечему.
>
>А не подскажете как это будет выглядеть?
>И почему массив трехмерный, объявлен то вроде как двумерный.

t2=array[1..N,1..N]of integer ~ t2 есть двумерный массив целых чисел

array of t2 ~ массив из t2, т.е. массив из двумерных массивов целых чисел, т.е. трехмерный массив

Как это будет выглядеть, представляю с трудом, потому что во-первых не знаю, для чего это нужно, а во-вторых, на Паскале не писал с турбопаскакальных досовских времен. Может быть так:

...
type t2 = array[1..N, 1..N] of integer;
var mass : t2;
function abc(a : t2); {но может быть все-таки procedure?}
...
begin
    ...
    abc(mass);
    ...
end.


"Паскаль"
Отправлено Ярополк , 15-Янв-07 18:19 
Нет, задача поставлена именно в функцию. И такой способ тож не работает. Жаль. Все равно спасибо.

"Паскаль"
Отправлено kerdan , 17-Янв-07 20:28 
Очень просто все!
передавать надо указатель на массив - и паскаль возрадуется что ты до этого доехал! ;)
знаешь, надеюсь, как указатель делать-то?

Ну, например:

type TMas = array[1..N] of integer;
     PMas = ^TMas;

function foo(mas:PMas):word;
begin
   mas^[i] := 1234;
//...
end;

var mas: TMas;
begin
   foo(@mas);
end.

Должно, работать. Указателей боятся не надо!


"Паскаль"
Отправлено Ярополк , 18-Янв-07 00:44 
>знаешь, надеюсь, как указатель делать-то?
>Должно, работать. Указателей боятся не надо!

Я программирую на си и что такое указатели прекрасно знаю, просто родственница попросила написать лабораторку (на паскале), пришлось учить синтаксис практически с нуля.  Лабораторная уже написана, большое, всем кто откликнулся, и вам в частности, спасибо.