Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции за I семестр конспект Гуревича для C++ B....doc
Скачиваний:
11
Добавлен:
21.11.2018
Размер:
1.3 Mб
Скачать

10.5. Компонента StringGrid

В оконном режиме ввод и вывод массивов обычно организуется с использованием компоненты StringGrid, предназначенной для отображения информации в виде двумерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну Edit):

Доступ к информации осуществляется с помощью свойства Cells[ACol][ARow] типа AnsiString, где целочисленные значения ACol, ARow указывают позицию элемента.

Внимание! Первый индекс ACol определяет номер столбца, а второй ARow – номер строки в отличие от индексов массива.

В инспекторе объектов значения ColCount и RowCount устанавливают начальные значения количества столбцов и строк в таблице, а FixedCols и FixedRows задают количество столбцов и строк фиксированной зоны. Фиксированная зона выделена другим цветом и обычно используется для надписей.

11. Размещение данных и программ в памяти пэвм

11.1. Общие понятия.

Данные и программы во время работы ПЭВМ размещаются в оперативной памяти (ОЗУ), которая представляет собой последовательность пронумерованных ячеек. По указанному номеру процессор находит нужную ячейку, поэтому номер ячейки называется ее адресом.

Минимальная адресуемая ячейка (согласно стандарту IBM), с точки зрения программиста, состоит из 8 двоичных позиций (т.е. в каждую двоичную позицию могут быть записаны либо 0, либо 1). Объем информации, который помещается в одну двоичную позицию, называется битом. Объем информации, равный 8 битам, называется байтом.

Таким образом, в одной ячейке из 8 двоичных разрядов помещается объем информации в один байт. Поэтому объем памяти принято оценивать количеством байт (210 байт = 1024 байт = 1 Кб, 210 Кб = 1048576 байт = 1 Мб).

Для помещения данных в такие ячейки производится их запись с помощью нулей и единиц (кодирование). При этом любые байты ОЗУ могут быть использованы для хранения информации любого рода; реальный смысл хранимых в них нулей и единиц определяется только при их использовании согласно замыслу программиста.

11.2. Кодирование целых чисел.

При кодировании целых чисел они преобразуются в двоичное представление. Например,

2 = 121 + 020 = 102; 5 = 122 + 021 + 120 = 1012; 256 = 128 = 1000000002.

С увеличением числа количество разрядов для его представления в двоичной системе резко возрастает, поэтому для размещения большого числа выделяется несколько подряд расположенных однобайтных ячеек. В этом случае адресом такой расширенной ячейки является адрес первого байта. Один бит такой ячейки может выделяться под знак числа. Числа, размещенные таким образом - целые.

Тип int - целое число, обычно соответствующее естественному размеру целых в используемой ЭВМ. Квалификаторы short и long, которые можно использовать с типом int, указывают на различные размеры целых, т.е. определяют размер памяти, выделяемой под переменную.

Примеры: short int x;

long int x;

unsigned int x = 8; (декларация с одновременной инициализацией числом 8).

Слово int в таких ситуациях может быть опущено.

Тип char также может использоваться для хранения целых чисел; его размер составляет 1 байт.

С типами int и char могут использоваться атрибуты signed или unsigned. Они показывают, как интерпретируется старший бит числа - как знак, или как часть числа:

char

Знак

Значение числа

7

6 5 4 3 2 1 0

- номера битов

unsigned char

Значение числа

7 0

short

Знак

Значение числа

15

14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

- номера битов

unsigned short

Значение числа

15 0

long

Знак

Значение числа

31

30 0

unsigned long

Значение числа

31 0

По умолчанию все виды int и char считаются знаковыми (signed).

Отрицательные целые числа хранятся в т.н. дополнительном коде, в котором отрицательное двоичное число -X (здесь X - модуль этого числа) заменяется на 2N-X, где N - число бит в ячейке. Легко заметить, что если само X не превосходит 2N-1 , то полученное "дополнительное к нему" число окажется положительным, а старший бит ячейки - единицей. В то же время, "настоящие" положительные числа допустимого диапазона занимают не более N -1 бит, поэтому старший бит ячейки оказывается нулевым. Таким образом, старший бит signed - ячейки показывает знак исходного числа.

Такой способ хранения удобен для осуществления операции сложения. Действительно, хранимые числа либо совпадают с исходными (если исходные положительны), либо отличаются от них на 2N (если исходные отрицательны). Поэтому и результат сложения может отличаться от правильного только на некоторое количество 2N. Но 2N соответствует N+1 - му двоичному разряду, который не помещается в ячейке и обычно просто отбрасывается.

Пример:

short int a=1000; char b=-20;

В памяти они представляются следующим образом:

100010 = 11111010002 , (28-20)10 = 111011002 ,

a

0 0 0 0 0 0 1 1 1 1 1 0 1 0 0 0

b

1 1 1 0 1 1 0 0

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

- номера битов

Заметим еще, что байты числа хранятся в порядке "от младших разрядов - к старшим" (видимо, опять-таки для удобства операции сложения столбиком). Например, у вышеприведенного числа a=1000 первый байт будет равен 111010002 , а второй - 000000112.