Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132

Можно ли передать массив класса в процедуру

11.11.2013, 09:02. Показов 1370. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли передать в процедуру массив, если массивов несколько и их тип это разные классы:
есть переменные типа массивы пяти классов:
Pascal
1
2
3
4
5
6
Var P: array [1..n] of tPoint;
    C: array [1..n] of tCircl;
    E: array [1..n] of tEllipse;
    L: array [1..n] of tLine;
    T: array [1..n] of tTriangle;
    R: array [1..n] of tRectangle;
Для упрощения программы мне хочется написать процедуру, но я не знаю, как эти массивы передать в процедуру и возможно ли такое вообще, ведь получается, что у каждого массива разные типы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Procedure RandMove(Mas[i])
 Begin
  SetGraphMode (gm);
                  for i:=1 to n do
                      begin
                         Mas[i].Def;
                         Mas[i].Draw;
                      end;
                  repeat
                    key:=readkey;
                    for i:=1 to n do
                        begin
                           Mas[i].Hide;
                           Mas[i].Def;
                           Mas[i].Draw;
                        end;
                  until key=#27;
                  RestoreCrtMode;
End;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2013, 09:02
Ответы с готовыми решениями:

Как можно передать массив из десяти объектов класса?
class A { A() {} public: A(int x) {} } A *ptr = ?

Массив: Подскажите, пожалуйста, как передать массив А в процедуру Arr?
Добрый день! Подскажите, пожалуйста, как передать массив А в процедуру Arr? using System; using System.Collections.Generic; ...

Передать массив в процедуру
Товарищи, как испавить ошибку в 5 строке(и не только в 5-ой) program lab82; var i:integer; a:array of integer; d:array of integer;...

4
Почетный модератор
 Аватар для ildwine
6201 / 2963 / 1300
Регистрация: 04.03.2013
Сообщений: 5,797
Записей в блоге: 1
11.11.2013, 13:11
А что если не передавать массив как параметр, а передавать только условно его номер, а работать в процедуре непосредственно с оригиналом из основной программы...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
11.11.2013, 13:15
Ульяниус, наследование всех нужных тебе классов от общего предка + виртуализация методов решают проблему. Процедура RandMove будет полиморфной:

Pascal
1
2
3
4
5
6
7
Procedure RandMove(var Obj : array of TBaseObject)
begin
   // ...
   Obj[i].Def;
   Obj[i].Draw;
   // ...
end;
1
 Аватар для Ульяниус
1 / 1 / 0
Регистрация: 15.08.2013
Сообщений: 132
11.11.2013, 13:49  [ТС]
Мне первый раз надо статически написать программу, а второй уже с применением полиморфов...
Ну да ладно со статическим методом тогда.
Другой вопрос: все мои методы описаны в отдельном Unit, я его буду подключать. А описание массива идет в основной программе, общий предок это tPoint, можно ли в этом случае сделать эту процедуру полиморфной?
Я просто недопонимаю немного - класс tpoin в массиве будет содержать данные x,y, а уже класс tcircle будет содержать в массиве данные x,y,rx, tLine еще вдобавок x1,y1. Например мне надо нарисовать линию, координаты второй точки x1y1 в массиве tpoint нет, что же мне нарисует программа?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
11.11.2013, 14:08
Нет, то, что я привел вообще не откомпилируется (называется, размечтался ). Всё, что удалось сделать - это:

Набросок для понимания идеи
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
type
  ptbaseobject = ^tbaseobject;
  tbaseobject = object
    constructor create;
    procedure draw; virtual;
  end;
 
  ptpoint = ^tpoint;
  tpoint = object(tbaseObject)
    data : integer; { change size of object }
 
    constructor create;
    procedure draw; virtual;
  end;
  ptcircl = ^tcircl;
  tcircl = object(tbaseObject)
    constructor create;
    procedure draw; virtual;
  end;
 
const n = 10;
type
  TBaseArr = array[1 .. n] of ptbaseobject;
 
procedure RandMove(const Objs : TBaseArr);
var i : integer;
begin
   for i := low(objs) to high(objs) do
     objs[i]^.draw;
end;
 
constructor tbaseobject.create;
begin end;
procedure tbaseobject.draw;
begin end;
 
constructor tpoint.create;
begin inherited create end;
procedure tpoint.draw;
begin writeln('tpoint.draw') end;
 
constructor tcircl.create;
begin inherited create end;
procedure tcircl.draw;
begin writeln('tcircle.draw') end;
 
 
Var P: array [1..n] of ptPoint;
    C: array [1..n] of ptCircl;
    i : integer;
begin
  for i := 1 to n do
  begin
    p[i] := new(ptpoint, create);
    c[i] := new(ptcircl, create);
  end;
 
  RandMove(tbaseArr(p));
  RandMove(tbaseArr(c));
end.


Цитата Сообщение от Ульяниус Посмотреть сообщение
координаты второй точки x1y1 в массиве tpoint нет, что же мне нарисует программа?
А и не надо, метод Draw должен быть виртуальным, то есть, вызовется он не для TPoint, а для переданного в полиморфную процедуру экземпляра потомка, то есть, для tline, а там уже есть координаты двух точек...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2013, 14:08
Помогаю со студенческими работами здесь

Передать массив в процедуру
Объявите массив из 10 чисел и заполните его случайным образом. Напишите процедуру, перемещающую 1-й элемент на 2-е место, 2-й — на 3-е...

Как передать массив в процедуру?
:confused: нужно передать в проседуру или функцию массив и поменять там значение элементов как это молжно сделать procedure...

Передать из php массив в процедуру
Доброго времени суток как передать из php массив в процедуру массив я делаю checkbox с значения номер месяца как передать значения...

Как можно вызвать хранимую процедуру и при вызове передать ей параметр
ASP.NET C# вопрос: Есть веб-приложение, на странице содержится GridView с подключённой базой данных через SqlDataSource. Как можно...

Как передать в процедуру массив (структуру)?
Как передать в другую процедуру структуру переменных? И так, к примеру у нас имеется такой код со структурами переменных. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru