Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на языке Pascal

Выпуск № 254
от 15.03.2004, 06:40

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 431
Отправлено ответов: 1572
Активность: 364.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Strory
Статус: Доверительный
Общий рейтинг: 156
[Подробней >>]
Andy
Статус: Опытный
Общий рейтинг: 101.74
[Подробней >>]
Vitally
Статус: Доверительный
Общий рейтинг: 143.66
[Подробней >>]
 
sir henry
Статус: Профессиональный
Общий рейтинг: 158.1
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 116.54
[Подробней >>]
samum2000
Статус: Профессиональный
Общий рейтинг: 130.33
[Подробней >>]
 
Boriss
Статус: Профессиональный
Общий рейтинг: 154.62
URL: Программирование на Паскале
[Подробней >>]
ILuHER®
Статус: Начальный
Общий рейтинг: 140
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 429. Доброе время суток, люди. Подскажите начинающему: Нужно написать процедуру, которая грузит imge из B... (ответов: 8)

Вопросов: 1, ответов: 8


 Вопрос № 429

Доброе время суток, люди. Подскажите начинающему:
Нужно написать процедуру, которая грузит imge из BMP-файла
на момент написания программы границы этого массива не известны,
как передать этот массив в процедуру? Может быть есть какой - то синтаксис типа array of byte, только для 2-м массива?



Вопрос отправлен: 11.03.2004, 20:26
Отправитель: Pavel

[Следующий вопрос >>] [Список вопросов]

Отвечает Strory

Добрый день, Pavel!
Тут нужно пользоваться динамическими массивами. Создаёшь указатель на одномерный массив, затем выделяешь память GetMem'ой и пользуешься. Об этом подробно писалось здесь уже много раз (вопрос извечный), поэтому заходите на сайт и ищите.

Ответ отправлен: 13.03.2004, 02:54
Отправитель: Strory


Отвечает Andy

Добрый день, Pavel!
Можно передать массив как указатель на первый элимент и его размерности... так как массив располагается последовательно в памяти, то зная размер элимента можно легко вычислить индец элемента.

Приложение:

Ответ отправлен: 12.03.2004, 05:02
Отправитель: Andy


Отвечает Vitally

Здравствуйте, Pavel!
Делается это примерно так: создаете запись и массив из одного элемента типа этой записи. Затем, выделяете память под нужное кол-во элементов.
Обязательно нужно отключить проверку "допустимости индексов массива" (Range Cheking).
См. Приложение.

Приложение:

Ответ отправлен: 11.03.2004, 21:17
Отправитель: Vitally


Отвечает sir henry

Приветствую Вас, Pavel!
В Паскале такого нету. Обычно в этих случаях используется выделение динамической памяти, типа GetMem(имя_указателя_на_структуру, размер_структуры).

Ответ отправлен: 12.03.2004, 07:50
Отправитель: sir henry


Отвечает Ayl

Доброе время суток, Pavel!
Должен тебя огорчить. В качестве открытых параметров допускаются только одномерные массивы. То есть тебе придется как-нибудь извращаться самому. Либо определять двумерный массив по максимуму, либо трансформировать свой двумерный массив в одномерный. Т.е. заводишь массив не так:
A : array [1..N, 1..M] of Byte;

а так:
B : array [1..N*M] of Byte;

Тогда элемент первого массива A [i, j] будет соответствовать, например, элементу B [(j-1) * N + i] и наоборот.
Слово "например" в предыдущем предложении употреблено потому, что такое отображение двумерного массива на одномерный не единственное. Можно транспонировать не по строкам, а по столбцам, тогда индекс в одномерном массиве будет такой: (i-1) * M + j.


Ответ отправлен: 12.03.2004, 12:54
Отправитель: Ayl


Отвечает samum2000


Приветствую вас, Павел.
О границах какого массива идет речь? Вы хотите читать в массив байт содержимое файла, так?
У вас, на мой взгляд, остается только один вариант - работать с динамической памятью. То есть вы сначала резервируете за указателем необходимый объем памяти, считываете туда файл, а в процедуру передаете сам указатель.
Нужно, конечно, сказать еще о т.н. "открытом массиве" - формальном параметре подпрограммы, который описывает базовый тип элементов, но не описывает размерность массива:
Procedure (MyArray: array of byte);
Верхнюю границу MyArray вернет функция High, а нижняя равна 0. Однако этот метод, судя по задаче, на подходит.

Приложение:

Ответ отправлен: 12.03.2004, 14:09
Отправитель: samum2000


Отвечает Boriss

Здравствуйте, Pavel!
Для двумерного массива такого в Borland Pascal нет. Нужно как-то обходить по-другому.
Наверно, лучше всего рассчитать, сколько памяти нужно. Получить ее в динамической памяти с помощью GetMem
Загрузить туда содержимое картинки с помощью BlockRead
Для чтения ряда или точнее переноса его в видеопамять вомпользоваться Move
Если длина ряда известна, но вычислить адрес N-го ряда несложно
Процедуре передать указатель на этот "двумерный" массив, длину ряда и количество рядов
Если не справишься, то пиши bsurin@mail.ru

Ответ отправлен: 12.03.2004, 20:06
Отправитель: Boriss


Отвечает ILuHER®

Добрый день, Pavel!
Этот вопрос очень часто задается,
я уже отвечал на этот вопрос,
посмотри архив рассылки я там и примерчик наваял

Ответ отправлен: 13.03.2004, 14:18
Отправитель: ILuHER®



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (30)
C / C++ (22)
Perl (4)
Builder / Delphi (20)
Pascal (22)
Basic / VBA (9)
Java / JavaScript (8)
PHP (13)
Криптография (7)
WinAPI (16)
Радиоэлектроника (11)
Пользователю
Windows 95/98/Me (42)
Windows NT/2000/XP (61)
"Железо" (37)
Поиск информации (21)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (13)
Юристу
Гражданское право (14)
Семейное право (12)
Трудовое право (12)
КоАП (10)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное