| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > одна функция для двумерных статических |
| Автор: vespa 8.6.2007, 09:57 | ||
| В программе объявленно несколько двумерных статических массивов разной размерности. Нужно написать функцию, которая на вход получала бы любой из этих массивов + его длины и обрабатывала его. должно быть примерно так:
Как это можно реализовать, желательно без указателей? В случае, если без указателей никак, то как с ними? |
| Автор: Sunvas 8.6.2007, 10:31 | ||
Так в процедурах используються открытые массивы (кажется так называется). Поэтому для твоего случая это не подходит. Вынеси свои массивы в тип. И объявляй примерно так:
|
| Автор: vespa 8.6.2007, 14:31 | ||
Это не выход. Если у меня будет 1000 разных массивов, мне придется объявить 1000 типов. |
| Автор: aktuba 8.6.2007, 15:42 | ||
Так пойдет? |
| Автор: vespa 8.6.2007, 20:03 | ||
| К сожалению, нет. Я не могу поменять массивы. Мне нужно решить задачу именнно в такой постановке. Как мне одной функцией обрабатывать двумерные статические массивы произвольной размерности. Причем вся проблема именно в двумерности. Для одномерных все получается. Я просто пишу в функции:
и все работает. |
| Автор: Sunvas 8.6.2007, 21:36 |
| http://forum.vingrad.ru/forum/topic-109022.html http://forum.vingrad.ru/forum/topic-40135.html |
| Автор: vespa 8.6.2007, 22:59 | ||||
To Sunvas:
это про одномерные массивы для них работает
это примерно то же самое, что и в первой ссылке и несет мало смысловой нагрузки именно по моему вопросу, там для двумерных массивов проблема так и не решена лучше бы какой дельный совет дали, чем ссылки давать(поиском я пользоваться умею) |
| Автор: Yanis 8.6.2007, 23:42 |
А http://forum.vingrad.ru/index.php?showtopic=40135&view=findpost&p=307773 что тогда? |
| Автор: vespa 9.6.2007, 10:21 |
| To Yanis: Что конкретно Вы имеете в виду под словами "это" ? Процитируйте, напрямую, пожалуйста. |
| Автор: Yanis 9.6.2007, 11:03 | ||||
абырвалг |
| Автор: Rennigth 9.6.2007, 11:21 |
| vespa, Ну нельзя со статическими массивами. Они не содержат в себе размерность, а динамические содержат. Единственный вариант это в функцию передавать указатель на область памяти массива и также туда передавать его размерность. Это имхо изврат. Статические массивы не для того предназначены. Используй динамические. Что тебя мешает? |
| Автор: vespa 9.6.2007, 12:08 | ||||||
В этом фрагменте функция вызывается с тем же параметром, с каким объявлена. Этот вариант не подходит. Добавлено @ 12:19 To Rennigth: Я тоже думаю что со статическими массивами не получится такая процедура. Динамические массивы я использовать не могу, т.к. не могу менять код, который у меня есть. А он весь основан исключительно на статических массивах. Вообще, для меня довольна странная ситуация. Казалось, бы такая простая задача, а простого решения нет. В Си, например, такой проблемы вообще бы не стояло. |
| Автор: aktuba 9.6.2007, 17:03 | ||
Если у тебя есть код, то почему нельзя его поменять??? Объяви как динамический и при запуске программы присвой размеры, а при выгрузке обнуляй... |
| Автор: vespa 9.6.2007, 21:50 | ||||
Почему нельзя менять код - это долгая история. Вообще, я тут в одной статье прочитала, что динамические массивы работают раза в три медленнее статических. Думаю, не имеет смысла переводить их в динамические. Хотя если бы я сама писала бы подобный код, то я бы, не задумываясь, обявила бы как динамические. |
| Автор: vespa 10.6.2007, 08:48 |
| To MetalFan: честно, не на заборе читала, могу ссылку на источник привести И спасибо за код. После праздников попробую сделать так. |
| Автор: MetalFan 10.6.2007, 08:58 |
не все йогурты одинаково полезны ;) т.е. не в заборе дело. возможно человек, что писал текст по ссылке, не очень оптимально работал с дин.массивами... отсюда и замедление работы. |
| Автор: vespa 13.6.2007, 08:11 |
| Еще раз большое спасибо MetalFan. |