Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 20.01.2010
Сообщений: 40

Структурированные типы данных

07.06.2012, 09:08. Показов 5430. Ответов 2

Студворк — интернет-сервис помощи студентам
Любой из структурированных типов (а их в делфи 4: массивы, запписи, множества и файлы) характеризуются множественностью образующих этот тип элементов.

Как следует понимать в этом предложении слово "множественность"?

Слово packed перед описанием компилятора предписывает компилятору по возможности экономить память, отводимую под объекты структурированного типа.

Как понимать эту фразу? Компилятор же не обладает интеллектом, как он может "экономить"??

Как понимать описание:

Delphi
1
matrix = array [byte] of Single
???

Как понимать такое описание:

Delphi
1
mat = array [0..5,-2..2, char] of Byte;
???

В чём смысл фразы:

В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших индексов к старшим наиболее быстро меняется самый правый индекс массива. ?

Как распределяется память в динамическом массиве? Что такое вообще память? Что значит инициализи ровать массив? Зачем использовать функцию Finalize? Чем принципиально отличается динамический массив от статического? Только тем, что статический формируется на стадии компиляции, а динамический в процессе работы программы? Что от этого меняется??
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.06.2012, 09:08
Ответы с готовыми решениями:

Структурированные типы данных
Ребят, я в делфи не разбираюсь, но мне нужна ваша помощь как сделать эту программу? Вот задание Во всех заданиях по теме...

Структурированные типы данных
Доброго дня всем! Ребята, есть просьба, помогите мне пожалуйста. Очень вас прошу, кто может. Я буду очень благодарен, если найдется тот,...

Структурированные типы данных (двухмерные массивы)
Структурированные типы данных (двухмерные массивы) Для получения зачета по данной лабораторной работе необходимо набрать 6 баллов. ...

2
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
07.06.2012, 14:35
Для начала расскажу по первым двум вопросам - по структурированным типам и про неупакованные/упакованные структуры.
Цитата Сообщение от jerryway Посмотреть сообщение
Любой из структурированных типов (а их в делфи 4: массивы, запписи, множества и файлы) характеризуются множественностью образующих этот тип элементов.
Как следует понимать в этом предложении слово "множественность"?
Здесь слово "множественность" надо понимать буквально. - Т. е., данные этих типов могут содержать 1 и более элементов. Здесь надо заметить, что множества и файлы могут не содержать ни одного элемента.
Цитата Сообщение от jerryway Посмотреть сообщение
Слово packed перед описанием компилятора предписывает компилятору по возможности экономить память, отводимую под объекты структурированного типа.
Как понимать эту фразу? Компилятор же не обладает интеллектом, как он может "экономить"??
Эта фраза неверная. Слово packed может участвовать в описаниях структурированных типов - записей и массивов. Это слово показывает компилятору, что структура должна быть упакованной. И не "по возможности", а однозначно - упакованной. Упакованная структура не содержит байтов выравнивания. И напротив, неупакованная структура может содержать байты выравнивания. Байты выравнивания - это дополнительные байты, не несущие полезной информации, которые могут добавляться к элементам неупакованной структуры таким образом, чтобы каждый элемент по возможности не был разделён границами слов. Это упрощает адресацию элементов структуры. Таким образом, для неупакованных структур достигается бОльшая скорость работы. А упакованные структуры часто применяются для записи/чтения данных из файлов. Т. к., упакованная структура организована в памяти точно в соответствии с описанием её типа.
---
Про упакованные/неупакованные структуры лучше пояснить на примере.
Создадим проект Delphi, кинем на форму кнопку и в качестве обработчика события OnClick этой кнопки напишем такой код:
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
type
  //Тип, определяющий неупакованную запись.
  TRec = record
    Fw : DWord; //= Longword - 4 байта.
    Fb : Byte; //1 байт.
  end;
  TArr = array[1..4] of TRec;
var
  Rec : TRec;
  Arr : TArr;
  AddrRec, AddrArr : String;
  SizeRec, SizeArr : Integer;
begin
  //Адреса по которым в памяти расположены переменные: Rec и Arr.
  AddrRec := Format('$%p', [@Rec]);
  AddrArr := Format('$%p', [@Arr]);
 
  //Размер памяти, выделенный для переменных.
  SizeRec := SizeOf(Rec);
  SizeArr := SizeOf(Arr);
 
  Rec.Fw := $AAAAAAAA;
  Rec.Fb := $BB;
 
  Arr[1] := Rec;
  Arr[2] := Rec;
  Arr[3] := Rec;
  Arr[4] := Rec;
 
  //Эта строка нужна только для того, чтобы поставить на ней точку останова.
  Rec := Rec;
end;
Теперь открываем: Главное меню - Project - Options... - закладка Compiler.
На этой закладке убираем галочку в опции "Optimization". И смотрим какой вид выравнивания применяется в данный момент. - Это поле "Record field alignment". По умолчанию, в этом поле установлено значение = 8. - Это означает, что компилятор будет располагать в памяти данные с выравниванием по границе 8-мибайтных слов.
Теперь, на примере этой программы будем наблюдать, как изменится размер и расположение в памяти структур типа TRec в зависимости от того, как определён этот тип.
Так:
Delphi
1
2
3
4
5
6
type
  //Тип, определяющий неупакованную запись.
  TRec = record
    Fw : DWord; //= Longword - 4 байта.
    Fb : Byte; //1 байт.
  end;
Или так:
Delphi
1
2
3
4
5
6
type
  //Тип, определяющий упакованную запись.
  TRec = packed record
    Fw : DWord; //= Longword - 4 байта.
    Fb : Byte; //1 байт.
  end;
Что при этом будет происходить показано на приложенных рисунках.
Миниатюры
Структурированные типы данных   Структурированные типы данных   Структурированные типы данных  

Структурированные типы данных  
6
2 / 2 / 0
Регистрация: 20.01.2010
Сообщений: 40
21.06.2012, 01:07  [ТС]
Большое спасибо, я понял, что означает слов packed.

Хотелось бы теперь понять назначение динамической памяти.

Также с тех пор накопилось очень много вопросов:
для чего применять логические операции к операндам целого типа? Зачем нужны логические операции "левый сдвиг" и "правый сдвиг"? Для динамических алгоритмов? Мощность типа - это суммарная длина этого типа во внутреннем представлении, не может превышать 2 ГБ. Это так? Плохо понимаю определение записи. Запись - это упорядоченный набор полей. Так? Плохо понимаю отличие множественного типа от динамического массива. Для чего вообще нужен множественный тип, если есть перечисленный? Плохо понимаю отличия динамических массивов от статических: динамический создаётся в процессе выполнения программы, а статический на стадии компиляции. Ну и что? Какая польза от этого, как это позволяет экономить память? Где хранится динамический массив? В динамической памяти? Что такое динамическая память? Особая область памяти, отвечающая за взаимодействие с ядром ОС? А статический где размещается? Чем отличается оперативная память от динамической?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.06.2012, 01:07
Помогаю со студенческими работами здесь

Структурированные типы данных. Одномерные и двумерные массивы
Дан двумерный массив целых чисел. Определить есть ли в нем столбец, состоящий только из элементов, кратных числу а или 6.

Структурированные типы данных. файлы. работа с текстовыми файлами.
Дан текстовый файл f. Переписать в файл g все его строки, содержащие более 60 символов в обратном порядке. ( Помогите пожалуйста допилить...

Типы данных
Почему в одном случае нормально, в другом ошибка, число одинаковое procedure TForm1.Button1Click(Sender: TObject); var str:string;...

Типы данных
Здрасте! Создал вот такое из ТурбоПаскаль на Delphi и начались проблемы с типами (там где знаки вопроса) Программа вот: Напишите...

Числовые типы данных
Ребят, помогите решить задачку одну из двух, любую! 1)Определить, равна ли сумма значений первых двух разрядов заданного четырехзначного...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru