Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2011, 14:50   #1
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию как заполнить трехмерный массив процедурой?

Здравствуйте. У меня имеется трехмерный массив:
Код:
var mass:array[1..8,1..14,1..10] of string;
Занести в него нужно по меньшей мере 1500 строк. Понятное дело, что такая красота в основном коде никому не нужна, поэтому решил вынести в отдельный юнит и написать процедуру zapolnenie(mass[i,j,k]); в этом Юните.
Пишу:
Код:
Procedure zapolnenie(mymass:array[1..8,1..14,1..10] of string);//тут ругается, почему?
begin
mymass[1,1,1]:='строка 1';
mymass[1,1,2]:='строка 2';
mymass[1,1,3]:='строка 3';
....
end;
Вызывать вообще не имею представления как... Тут цикл понадобится?
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 03.01.2011 в 14:53.
MyLastHit вне форума Ответить с цитированием
Старый 03.01.2011, 15:13   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
type
 TMyArray=array[1..8,1..14,1..10] of string;

var mass:TMyArray;
Procedure zapolnenie(mymass:TMyArray);
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.01.2011, 16:06   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

добавлю к абсолютно правильному совету Пепла Феникса

в процедуре надо описать массив через VAR:
Код:
Procedure zapolnenie(var mymass:TMyArray);

Цитата:
Сообщение от MyLastHit
Вызывать вообще не имею представления как... Тут цикл понадобится?
Ну, это Вам виднее. от данных зависит.
Если возможно через цикл сделать заполнение - то обязательно через цикл и делайте.
А если нельзя - значит прийдётся или описывать все Ваши 1500 строк
или выносить строки во внешние ресурсы (например, в текстовый файл. или текст сделать ресурсом приложения)...
или вообще воспользоваться базой данных.

Последний раз редактировалось Serge_Bliznykov; 03.01.2011 в 16:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.01.2011, 19:01   #4
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Спасибо большое всем! Описал весть свой массив, внес записи вручную. Только проблема - не могу обратиться к Этой процедуре(Unit2) через свой основной Unit1.
Делаю так:
В Unit2 прописал процедуру после type массива.
В Unit1 делаю:
Код:
type
TMyArray=array[1..8,1..14,1..10] of string;
var 
varianti:TMyArray;
Потом вызываю в онкриэйт формы:
Код:
zapolnenie(varianti);
Но ошибка:
Код:
[Error] Unit1.pas(360): Types of actual and formal var parameters must be identical
С указателем на ошибку в строке:
Код:
zapolnenie(varianti);
Я не правильно что-то делаю? Подскажите пожалуйста как будет правильно...
Ненавижу быть как все, но люблю, чтобы все были как я.

Последний раз редактировалось MyLastHit; 03.01.2011 в 19:08.
MyLastHit вне форума Ответить с цитированием
Старый 03.01.2011, 19:21   #5
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Совет из поста номер 3 не подошло?
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 03.01.2011, 19:39   #6
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Цитата:
Совет из поста номер 3 не подошло?
Ну не надо пустых ответов...
пост 3 дает информацию о вариантах вызова процедуры, я выбрал вариант, который мне нужен, теперь мне нужно описать его кодом, чего как видно у меня не получается. В чем ошибка я не понимаю... Разъясните кто знает...
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 03.01.2011, 19:43   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

используйте тот же тип переменной TMyArray, я же показывал.

Serge_Bliznykov, спасибо за поправку, пропустил передачу по ссылке.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.01.2011, 19:52   #8
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Ну я же его и использую! Я же описал проблемму...
Цитата:
[Error] Unit1.pas(360): Types of actual and formal var parameters must be identical
Я же написал, что делаю все точно так же как ты говоришь. Обьявил в типах такой же массив, обьявил в варах ссылку на этот тип. Потом в процедуру передаю эту переменную. Но эта ошибка лезет всеравно...
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Старый 03.01.2011, 20:40   #9
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Кароче делаешь так:

1. Создаёшь Unit3 где будешь хранить все свои типы, константы и пр.
Для нашего случае там будет такой код:

Код:
unit Unit3;

interface

type
  TMyArray = array [1..8, 1..14, 1..10] of string;

implementation

end.
2. Unit2 будет содержать процедуры. Код его такой:

Код:
unit Unit2;

interface

Uses Unit3;

Procedure zapolnenie(var mymass : TMyArray);

implementation

Procedure zapolnenie(var mymass : TMyArray);
begin
......
end;

end.
3. Unit1 главный юнит и там нужно писать так:

Код:
uses .... Unit2, Unit3;

......
var varianti : TMyArray;

.....

Вызов:
zapolnenie(varianti);
Так должно работать. Покрайней мере хранить все свои типы, константы и пр в отдельном Юните это правильнее.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 03.01.2011, 21:00   #10
MyLastHit
Очень суровый
Участник клуба
 
Аватар для MyLastHit
 
Регистрация: 17.12.2009
Сообщений: 1,988
По умолчанию

Спасибо, Valio!
Ненавижу быть как все, но люблю, чтобы все были как я.
MyLastHit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как заполнить двумерный массив случайными числами? SkuLLL Помощь студентам 1 14.12.2010 17:04
Трехмерный дин. массив revanatar Общие вопросы C/C++ 3 29.11.2010 22:02
Как заполнить массив вещественными числами new-in-c Общие вопросы C/C++ 1 03.05.2010 10:54
как заполнить массив рандомно ronny137 Помощь студентам 9 02.05.2010 21:25
как в с помощью random заполнить одномерный массив вещественными числами Deniska112 Общие вопросы C/C++ 2 04.06.2009 09:36