Длина массива задается при его описании и работы программы

Простые типы данных позволяют использовать в программе одиночные объекты — числа, символы, строки и т.п. В Турбо Паскале могут использоваться также объекты, содержащие множество однотипных элементов. Это массивы — формальное объединение нескольких однотипных объектов (чисел, символов, строк и т.п.), рассматриваемое как единое целое. К необходимости применения массивов мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных величин. Например, результаты многократных замеров температуры воздуха в течение года удобно рассматривать как совокупность вещественных чисел, объединенных в один сложный объект — массив измерений.
При описании массива необходимо указать общее число входящих в массив элементов и тип этих элементов. Например:

var а: array [1..10] of real; b: array [0..50] of Char; с: array [-3..4] of Boolean;

Как видим, при описании массива используются зарезервированные слова ARRAY и OF ( массив, из ). За словом ARRAY в квaдрaтныx скобкax указывается тип-диапазон, с помощью которого компилятор oпеределяет общее число элементов массива. Тип-диапазон задается левой и правой границами изменения индекса массива так что массив А состоит из 10 элементов, массив В — из 31, а массив C — из 8 элементов. За словом OF указывается тип элементов, образующих массив.

sizeof что это. sizeof c++ массив. Узнать количество элементов массива. sizeof array. Урок #28.


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

var a: array [1..10] of Integer; b: array [0..40] of Char; c: array [-2..2] of Boolean; k: Integer; begin b[17] := ‘F’; c[-2] := a[1] > [2]; for k := 1 to 10 do a[k] := 0; . . . . . end.

В правильно составленной программе индекс не должен выходить за пределы, определенные типом-диапазоном. Например, можно использовать элементы А[1], В[38], С[0], но нельзя А[0] или С[38] . Турбо Паскаль может контролировать использование индексов в программе на этапе компиляции и на этапе счета программы.
Для иллюстрации приемов работы с массивами составим программу, которая создает массив случайных целых чисел, подсчитывает их среднее арифметическое, а также определяет и выводит на экран минимальное и максимальное из этих чисел.

Program Average; const N = 1000; MAX_VALUE = 100+1; var m: array [1..N] of Integer; i: Integer; max, min: Integer; s: real; begin for i := 1 to N do m[i] := random(MAX_VALUE); s := 0; max : = m[1]; min := m[1]; for i := 1 to N do begin s := s + m [i]; if m[i] < min then min := m[i] else if m[i] > max then max := m[i] end; WriteLn(‘Мин = ‘, min, ‘ Макс = ‘, max, ‘Среднее = ‘, s/N) end.

Для создания массива используется встроенная функция RANDOM (МАХ) , которая возвращает случайное целое число, равномерно распределенное в диапазоне от 0 до МАХ-1 ( МАХ — параметр обращения). Массивы в Турбо Паскале во многом схожи с аналогичными типами данных в других языках программирования. Отличительная особенность массивов заключается в том, что все их компоненты суть данные одного типа (возможно, структурированного). Эти компоненты можно легко упорядочить и обеспечить доступ к любому из них простым указанием его порядкового номера, например:

ВСЯ ПРАВДА О МАССИВАХ | СТРУКТУРЫ ДАННЫХ

type digit = array [0..9] of char; matrix = array [byte] of single; var m: matrix; d: digit; i: integer; begin . . . . . m[17] := ord(d[i-1])/10; . . . . . end.
Описание типа массива задается следующим образом:
= ARRAY [ ] OF

имя типа> — правильный идентификатор;
ARRAY, OF — зарезервированные слова (массив, из);
сп.инд.типов> — список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список, — требование синтаксиса;
тип> — любой тип Турбо Паскаля.

В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LONGINT и типов-диапазонов с базовым типом LONGINT .
Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например:

var a,b: array [1..10] of real;

Обычно в качестве индексного типа используется тип-диапазон, в как тип, в котором задаются границы изменения индексов. Так как тип < тип >, идущий за словом OF , — любой тип Турбо Паскаля, то он может быть, в частности, и другим массивом, например:

type mat = array [0..5] of array [-2..2] of array [char] of byte;
Такую запись можно заменить более компактной:
type mat = array [0..5,-2..2,char] of byte;

Глубина вложенности структурированных типов вообще, а следовательно, и массивов — произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива, как уже говорилось, не может быть больше 65520 байт. В памяти ПК элементы массива следуют друг за другом так, что при переходе от младших адресов к старшим наиболее быстро меняется самый правый индекс массива. Если, например,

var а: array [1..2,1..2] of byte; begin а[1,1] := 1; а[2,1] := 2; а[1,2] := 3; а[2,2] := 4; end.

то в памяти последовательно друг за другом будут расположены байты со значениями 1, 3, 2, 4 . Это обстоятельство может оказаться важным при использовании стандартной процедуры копирования памяти MOVE .
В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:

var a,b: array [1..5] of single; begin . . . . . a := b; . . . . . end.

После этого присваивания все пять элементов массива А получат те же значения, что и в массиве В , Однако над массивами не определены операции отношения. Нельзя, например, записать

if a = b then .
Сравнить два массива можно поэлементно, например:
var a,b: array [1..5] of single; eq: Boolean; i: byte; begin . . . . . eq := true; for i := 1 to 5 do if a[i] <> b[i] then eq := false; if eq then . . . . . end.

ТИПИЗИРОВАННЫЕ КОНСТАНТЫ В Турбо Паскале допускается использование типизированных констант. Они задаются в разделе объявления констант следующим образом:

идентификатор> — идентификатор константы;
тип> — тип константы;
значение> — значение константы.

Типизированным константам можно присваивать другие значения в ходе выполнения программы, поэтому фактически они представляют собой переменные с начальными значениями. Типизированная константа приобретает указанное в ее объявлении значение, т.е. инициируется, лишь один раз: к моменту начала работы программы. При повторном входе в блок (процедуру или функцию), в котором она объявлена, инициация типизированной константы не производится и она сохраняет то значение, которое имела к моменту выхода из блока.
Типизированные константы могут быть любого типа, кроме файлов. Нельзя также объявить типизированную константу-запись, если хотя бы одно из ее полей является полем файлового типа.
Поскольку типизированная константа фактически не отличается от переменной, ее нельзя использовать в качестве значения при объявлении других констант или границ типа-диапазона.

Читайте также:
Что осуществляется с помощью специальных программ роботов

КОНСТАНТЫ ПРОСТЫХ ТИПОВ И ТИПА STRING

Объявление таких констант обычно не вызывает трудностей, так как в качестве их значения используются нетипизированные константы или их идентификаторы.
Примеры объявлений:

type colors = (white, red, black); const CurrCol: colors = red; name: string = ‘Вирт Н.’; year: word = 1989; x: real = 0.1; min: integer = 0; max: integer = 10; days: 1..31 = 1; answer: char = ‘Y’; mass: array [min..max] of real; a,b,c: byte = 0; var NameF: string [22] = ‘prog.pas’;

КОНСТАНТЫ-МАССИВЫ В качестве начального значения типизированной константы-массива используется список констант, отделенных друг от друга запятыми; список заключается в круглые скобки, например:

type colors = (white, red, black); const ColStr: array [colors] of string[5] = (‘white’, ‘red’, ‘black’); vector: array [1..5] of byte = (0,0,0,0,0);

При объявлении массива символов можно использовать то обстоятельство, что все символьные массивы и строки в Турбо Паскале хранятся в упакованном формате, поэтому в качестве значения массива-константы типа CHAR допускается задание символьной строки соответствующей длины. Два следующих объявления идентичны:

const digit: array [0..9] of char = (‘0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9’); digchr: array [0..9] of char = ‘0123456789’;

При объявлении многомерных констант-массивов множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми. В результате образуются вложенные структуры множеств, причем глубина вложения должна соответствовать количеству измерений (размерности) массива. Самые внутренние множества констант связываются с изменением самого правого индекса массива.
Следующая программа выведет на экран три строки с монотонно увеличивающимися целыми числами:

var i, j, k, l: byte; const matr: array [1..3, 1..5] of byte = (( 0, 1, 2, 3, 4), ( 5, 6, 7, 8, 9), (10,11,12,13,14)); cube: array [0..1, 0..1, 0..2] of integer = (((0, 1, 2), (3, 4, 5 )), ((6, 7, 8), (9, 10,11))); mas4: array [0..1, 0..1, 0..1, 0..1] of word = (((( 0, 1), ( 2, 3)), (( 4, 5), ( 6, 7))), ((( 8, 9), (10,11)), ((12,13), (14,15)))); begin for i := 1 to 3 do for j := 1 to 5 do Write(matr[i,j]:3); writeln; for i := 0 to 1 do for j := 0 to 1 do for k := 0 to 2 do Write(cube[i,j,k]:3); writeln; for i := 0 to 1 do for j := 0 to 1 do for k := 0 to 1 do for 1 := 0 to 1 do Write(mas4[i,j,k,l]:3); WriteLn end.

Количество переменных в списке констант должно строго соответствоват объявленной длине массива по каждому измерению.

Источник: pascal-site.blogspot.com

Массивы

Кроме базовых типов, в большинстве алгоритмических языков присутствует конструкция массив. Иногда массив называют также таблицей или вектором. Массив позволяет объединить множество элементов одного типа в единую переменную.

Все элементы массива имеют один и тот же тип. Элементы массива обычно нумеруются индексами от 0 до n-1, где n — число элементов массива. В некоторых языках можно задавать границы изменения индексов, в других нижняя граница значения индекса равна единице, а не нулю. Мы, тем не менее, будем придерживаться языка Си (а также C++, Java, C#), в котором нижней границей индекса всегда является ноль.

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

При описании массива указывается тип и число его элементов. Тип записывается перед именем массива, размер массива указывается в квадратных скобках после его имени. Примеры:

цел a[100]; описан массив целых чисел размера 100

(индекс меняется от 0 до 99)

вещ r[1000]; описан вещ. массив из 1000 элементов.

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

Для доступа к элементу массива указывается его имя и в квадратных скобках — индекс нужного элемента. С элементом массива можно работать как с обычной переменной, т.е. можно прочитать его значение или записать в него новое значение. Примеры:

a[3] := 0; элементу массива a с индексом 3

присваивается значение 0;

a[10] := a[10]*2; элемент массива a с индексом

Массив — это самая важная конструкция алгоритмического языка. Важность массива определяется тем, что память компьютера логически представляет собой массив (его можно рассматривать как массив байтов или как массив четырехбайтовых машинных слов). Индекс в этом массиве обычно называют адресом.

Элементы массива читаются и записываются исключительно быстро, за одно действие, независимо от размера массива и величины индекса. Для программиста конструкция массива как бы дана свыше. Большинство других структур данных, используемых в программировании, моделируются на базе массива.

Текстовые строки

Текстовые строки представляются массивами символов. Строковая переменная содержит на самом деле адрес этого массива. В отличие от символа, который занимает либо один, либо два байта в зависимости от используемой кодировки, строка имеет переменную длину. Существуют два способа указания длины строки:

  1. строка заканчивается символом с нулевым кодом, т.е. либо нулевым байтом в случае однобайтового представления символов, либо двумя нулевыми байтами в случае двухбайтового представления. Такой способ принят в языке Си. Отметим, что нулевой байт — это вовсе не символ ‘0’! Символ ‘0’ имеет код 48 в кодировках ASCII и UNICODE, а изображаемых символов с нулевым кодом не существует;
  2. строка в качестве первого элемента (байта или двух байтов) содержит общее число символов, не включая начального элемента. Затем идут сами символы в указанном количестве. Такой способ используется в языке Паскаль.
Читайте также:
Медиа программы отзывы сотрудников

Недостаток первого способа состоит в том, что для вычисления длины строки необходимо последовательно просмотреть все ее элементы, начиная с первого, пока не будет найден нулевой байт. Такая операция может быть долгой для длинной строки. Недостаток второго способа заключается в том, что длина строки ограничена. В случае однобайтовых символов максимальная длина строки равна 255, т.е. максимальному числу, которое можно записать в одном байте. Длина строки двухбайтовых символов ограничена числом 65535.

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

Источник: studfile.net

Массивы

В этом видеоуроке учащиеся начнут изучение структурных типов данных, которые применяются для хранения большого количества величин. Будет рассмотрен первый структурный тип – массивы, их назначение и способы обработки в программе на языкеPascal.

В данный момент вы не можете посмотреть или раздать видеоурок ученикам

Чтобы получить доступ к этому и другим видеоурокам комплекта, вам нужно добавить его в личный кабинет.

Получите невероятные возможности

1. Откройте доступ ко всем видеоурокам комплекта.

2. Раздавайте видеоуроки в личные кабинеты ученикам.

3. Смотрите статистику просмотра видеоуроков учениками.
Получить доступ

Конспект урока «Массивы»

· Хранение массивов в оперативной памяти компьютера.

· Описание массивов и обращение к ним на языке Pascal.

· Ввод и вывод элементов массива.

Массив – это величина регулярного типа. Регулярный тип данных – это структурный тип данных, который используется для хранения пронумерованных величин одного типа. Это означает, что массив состоит из ячеек оперативной памяти, в которых хранятся данные одного типа. Эти ячейки называются элементами массива. Они расположены в оперативной памяти компьютера последовательно и каждая из них имеет порядковый номер, который называется индексом элемента массива.

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

Сначала, как у любой переменной, у массива указывается имя или идентификатор дальше после двоеточия, через пробел, записывается служебное слово array, что в переводе с английского языка означает «массив». После него, через пробел, в квадратных, или иначе индексных, скобках указывается тип индексов элементов массива. После квадратных скобок, через пробел, следует служебное слово of, после которого, через пробел, указывается тип элементов массива.

Чаще всего в качестве типа индексов указывается ограниченный тип, который представляет собой набор значений в указанном диапазоне. Диапазон указывается следующим образом:

Описание ограниченного типа

В качестве примера зададим массив, который будет хранить количество яблок в каждой из восьми корзин. Назовём массив k. Очевидно, что индексами элементов массива будут номера корзин – целые числа от 1 до 8. Поэтому в квадратных скобках укажем число 1, через две точки, после которого будет следовать число 8. Дальше запишем служебное слово of.

После него укажем тип элементов массива. Пока мы не знаем количества яблок в корзинах, но очевидно, что это будут целые неотрицательные числа и мы предположим, что в одной корзине будет находиться не больше 255 яблок. Поэтому в качестве типа элементов массива укажем тип byte.

k: array [1..8] of byte;

Описание массива для хранения количества яблок в корзинах

При описании массивов важно понимать, что они занимают некоторый объём оперативной памяти, который в некоторых случаях может быть достаточно большим. Например, описанный нами массив для хранения количества яблок содержит 8 элементов типа byte. Переменные этого типа занимают объём оперативной памяти равный одному байту. Таким образом, нам нужно указанный объём оперативной памяти умножить на количество элементов массива.

1 байт × 8 элементов = 8 байт

Так мы вычислили, что заданный нами массив занимает 8 байт оперативной памяти. Рассмотрим ещё один массив, который содержит элементы с порядковыми номерами с 77 по 1100, принадлежащие к целочисленному типу integer. Количество элементов массива 1100 – 77 + 1 = 1024. Так наш массив содержит 1024 элемента. Одна переменная типа inetger в среде Pascal ABC занимает 4 байта оперативной памяти.

4 байта × 1024 элемента = 4096 байт = 4 Кб

Умножив этот объём на количество элементов, мы получим что данный массив будет занимать 4096 байт или 4 килобайта оперативной памяти.

Рассмотрим, как же можно обратиться к элементам массива из программы. Для этого указывается имя, или идентификатор массива, после которого, в квадратных скобках, указывается индекс одного из его элементов. Так, для того, чтобы узнать сколько яблок находится в пятой корзине, мы должны обратиться к элементу массива k с индексом 5 – k[5].

Индекс элемента можно указывать не только числом, но и выражением. Например, мы можем обратиться к элементу массива k с номером равным остатку от деления 15 на 4 – k[15 mod 4], или с номером, равным сумме 2 и 5 – k [2+5]. Однако если на одном из этапов результатом выражения станет число, находящееся за пределами диапазона индексов –программа выведет сообщение об ошибке.

В качестве типа индексов элементов массива в среде Pascal ABC могут использоваться любые перечисляемые типы размерностью до 2 байт включительно. Например мы можем задать символьный или логический тип индексов массива. Индексами элементов таких массивов будут соответственно значения символьного или логического типа. Тип элементов массива не ограничен.

Часто при написании программы необходимое количество элементов в массиве неизвестно заранее, так как задаётся пользователем. При этом изменение количества элементов массива в теле программы невозможно. Поэтому при описании количество элементов массива задаётся максимально возможным по условию задачи, а при работе программы используется необходимая часть элементов массива в соответствии с данными, введёнными пользователем.

Рассмотрим, как осуществляется ввод массива в программе. Ввод массива происходит поэлементно, поэтому для перечисления индексов элементов массива удобно использовать цикл. Например, нам необходимо ввести первые n элементов в описанном нами массиве, для хранения количества яблок. В начале происходит считывание n. После этого записывается цикл for i:=1 to n do.

В теле цикла нам достаточно написать оператор readln (k [i]). При вводе элементов массива через консоль, значение каждого из них задаётся в новой строке. Важно при этом чтобы значение n не превышало, ограничения типа индексов элементов. В нашем случае оно должно быть не больше 8. Иначе при попытке обратиться к несуществующему элементу массива с индексом 9, программа выведет сообщение об ошибке и прекратит свою работу.

Читайте также:
Программы как автоматизированной системы

for i:=1 to n do

Цикл ввода элементов массива

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

for i:=1 to n do

Цикл ввода элементов массива с поясняющими сообщениями

Теперь рассмотрим, как организовать вывод массива. Вывод массивов также осуществляется поэлементно. Наиболее часто требуется вывести значения элементов массива в одну строку. Для этого достаточно написать такой же цикл с параметром, как и при вводе, только в нём будет следовать оператор write, выводящий на экран значение элемента массива с индексом i.

Но так элементы массива будут выведены в одну строку без разделителей. Поэтому в этот же оператор вывода нужно добавить вывод некоторого разделителя после элемента массива, например, символа пробел.

for i:=1 to n do

Цикл вывода элементов массива

До этого мы рассматривали одномерные массивы. Однако в языке Паскаль можно использовать многомерные массивы. Начнём с двумерных. Наглядно такие массивы можно представить в виде таблицы значений, состоящей из строк и столбцов. Пример такого массива – таблица Пифагора.

Двумерные массивы в языке Паскаль трактуются как массивы массивов. Пусть у нас есть 5 полок, на которых располагается по 8 корзин с яблоками. То есть, для описания количества яблок в корзинах нам нужен массив из 5 элементов. Элементами которого будут массивы из 8 элементов типа byte. Опишем такой массив.

Назовём его t. После двоеточия будет следовать служебное слово array, после которого в квадратных скобках укажем тип индексов массива – целые числа от 1 до 5, по числу полок. После служебного слова of, укажем тип элементов массива. Это будут массивы, то есть укажем служебное слово array. В квадратных скобках укажем тип индексов 5 массивов, то есть целые числа от 1 до 8. Элементами этих массивов будут числа типа byte.

t: array [1..5] of array [1..8] of byte;

Описание массива массивов

Если двумерный массив описан таким образом, то при обращении к его элементам необходимо в первых квадратных скобках указывать номер массива – целое число от 1 до 5, а во вторых квадратных скобках – номер элемента в этом массиве – число от 1 до 8.

t[a][b], где 1 ≤ a ≤ 5, 1 ≤ b ≤ 8

Обращение к элементу описанного массива

Но возможна и более короткая форма описания массива, при этом в квадратных скобках указывается тип индексов первого массива, в нашем случае целые числа в диапазоне от 1 до 5, после него через запятую указывается тип индексов массивов, из которых он состоит, то есть целые числа в промежутке от 1 до 8. После квадратных скобок следует слово of, после него указывается тип элементов из которых состоят внутренние массивы, то есть byte.

t: array [1..5, 1..8] of byte;

Описание двумерного массива

Индекс элемента такого массива будет состоять из двух целых чисел, указанных через запятую. Первое из них будет в диапазоне от 1 до 5, а второе – от 1 до 8. Аналогично можно описывать массивы и с большим числом измерений, например, трёхмерные и четырёхмерные.

Рассмотрим, как организовать ввод двумерных массивов. Как и в случае с одномерными массивами их размерность может быть заранее неизвестна, поэтому сначала организуем ввод двух чисел: n и m. Первое число будет обозначать, корзины на скольких полках нас интересуют, а второе – какое количество корзин на каждой полке нас интересует.

После этого опишем цикл с параметром i, изменяющим от 1 до n. Он будет перебирать номера полок, которые нас интересуют. В нём опишем вложенный цикл, с параметром j, изменяющимся от 1 до m. Он будет перебирать номера корзин на полках. Во внутреннем цикле будет оператор readln, считывающий значение элемента t[i, j].

Таким образом пользователь будет вводить количества яблок от первой полки до полки с номером n, от первой корзины до корзины с номером m. Чтобы облегчить ввод элементов массива, также, как и в случае с одномерным массивом поместим оператор ввода в логические скобки и запишем перед ним оператор write, выводящий на кран поясняющее сообщение, о том какой элемент массива необходимо ввести.

for i:=1 to n do

for j:=1 to m do

Цикл ввода элементов двумерного массива

Вывод элементов двумерного массива будет организован также с помощью вложенного цикла, однако вложенный цикл будет находиться в логических скобках и будет содержать оператор вывода элемента массива t[i, j]. После вложенного цикла во внешнем цикле будет следовать оператор writeln без параметров.

Таким образом, мы получим построчный вывод элементов двумерного массива. Но так как значения элементов массива могут быть числами различной длины, стоит указать формат их вывода. Например, выделим для вывода каждого числа по 4 знаковых позиции. Тогда при выводе мы получим ровные столбцы из чисел.

for i:=1 to n do

for j:=1 to m do

Цикл вывода элементов двумерного массива

Помимо поэлементных действий над массивами, есть два случая, когда к массивам можно обращаться как к единому целому. Мы можем присвоить элементам одного массива значения элементов другого массива. Также мы можем проверить равенство и неравенство элементов одного массива элементам другого массива. В обоих случаях случаях у массивов должны совпадать типы индексов и типы элементов.

Важно запомнить:

· Массивы – это переменные, которые используются для хранения пронумерованных величин одного типа.

· Порядковый номер элемента массива называется индексом.

· Большинство операций над массивами, в том числе их ввод и вывод производятся поэлементно.

· Над массивами как над единым целым возможны 3 действия: присваивание, а также проверка их равенства и неравенства.

Источник: videouroki.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru