В этом уроке мы узнаем, что такое массивы, зачем они нужны и почему их так любят программисты. Также мы подробнее расскажем вам о том, как выполняется программа.
Открытые массивы в Pascal
При описании открытого массива (в разделе type или var ) указывается тип элементов, из которых он состоит (например, real , char ), но не указываются границы индексов. Например:
mas1: array of real; mas2: array of integer;
В результате получаются как бы безразмерные массивы. Их размер может задаваться и меняться в программе при ее выполнении. Это так называемое динамическое распределение памяти, а переменные открытых массивов представляют собой ничто иное, как указатели на динамически выделяемую область памяти. То есть в переменных открытых массивов будут содержаться адреса начала массива, а не сам массив.
Особенностью открытых массивов является то, что их индексы всегда начинаются с нуля (а не с единицы, которая чаще всего используется для обычных массивов).
Чтобы в программе выделить память под открытый массив, следует воспользоваться процедурой setlength , которая принимает два фактических параметра – имя открытого массива и устанавливаемое количество элементов в нем. В результате работы setlength в памяти выделяется столько байт, сколько необходимо для хранения n -го количества элементов определенного типа. Так, если массив ранее описан как real и задано 5 элементов, то процедура setlength выделит под него 40 байт, т.к. для хранения каждого числа типа real требуется 8 байт памяти (это может зависеть от компилятора).
Что такое массивы в программировании.
Функция high принимает в качестве параметра имя массива и возвращает индексный номер последнего элемента массива. Например, выделяется память под десять элементов открытого массива; значит, индекс последнего будет равен 9 (т.к. индексация начинается с 0), что и вернет функция high .
Чтобы освободить, выделенную под массив память, используется оператор nil .
Обычно открытые массивы используются для передачи в подпрограмму массивов переменных размеров. Это позволяет с помощью одной и той же подпрограммы обрабатывать массивы произвольной длины. Без использования открытых массивов пришлось бы для каждого массива иной длины писать собственную подпрограмму.
Функция sizeof возвращает количество памяти (в байтах), отведенное под переменную.
var a: array[1..10] of real; b: array of real; i, n: integer; sum: integer; begin writeln(‘Переменная a занимает ‘, sizeof(a),’ байт памяти.’); writeln(‘Переменная b занимает ‘, sizeof(b),’ байт памяти.’); write(‘ : ‘); readln(n); setlength(b,n); writeln(‘Индекс последнего элемента массива ‘, high(b)); sum := 0; for i:=0 to high(b) do begin sum := sum + sizeof(b[i]) end; writeln(‘Массив b занимает в памяти ‘, sum, ‘ байт(а);’); writeln(‘но переменная b по-прежнему ‘, sizeof(b),’.’); b := nil; sum := 0; for i:=0 to high(b) do sum := sum + sizeof(b[i]); writeln(‘Сейчас массив b занимает в памяти ‘, sum, ‘ байт,’); writeln(‘т.к. память была освобождена с помощью nil.’); end.
Переменная a занимает 80 байт памяти. Переменная b занимает 8 байт памяти. : 4 Индекс последнего элемента массива 3 Массив b занимает в памяти 32 байт(а); но переменная b по-прежнему 8. Сейчас массив b занимает в памяти 0 байт, т.к. память была освобождена с помощью nil.
Источник: pas1.ru
Вывод массива. Массивы и циклы. Цикл с массивом. Array c++. C++ для начинающих. Урок #27.
Методы работы с массивами на языке BASIC (стр. 1 из 3)
Алгоритмические языки используют различные приемы объявления данных. Все данные при решении задачи на ЭВМ могут классифицироваться по разным признакам. Если под одним именем переменной хранится одно значение данных (число, запись), то оно занимает одну “ячейку” оперативной памяти. Указание только этого имени в каком-либо операторе достаточно для обращения к этому данному.
Такие данные называются простыми переменными. Если же используется набор данных одного типа и по своей функциональной значимости в логике они однозначны, то каждому элементу давать свое уникальное имя неэффективно. Такие данные объединяются в массивы и им присваивают одно уникальное имя для всего набора этих данных.
Практически во всех составленных программах обязательно используются массивы, поэтому студенты должны хорошо усвоить этот оператор овладеть практическими навыками в программировании задач, совершенствовать навыки в редактировании программ при помощи данных методических указаний.
В работе описывается лишь несколько способов применения массивов. Если возникнет потребность в более глубоком изучении этого раздела программирования, необходимо обратиться к специальной литературе для соответствующего алгоритмического языка.
1. Теоретические сведения
Массив – это набор чисел, которому дано общее имя. Каждое число в массиве называют элементом. Массив является структурным типом данных. В данной работе рассмотрены только одно- и двумерные числовые массивы.
1.1.1. Ввод элементов массива
Пример 1. Допустим число сотрудников в различных отделах некоторого предприятия следующее:
1 отдел | 2 отдел | 3 отдел | 4 отдел | 5 отдел | 6 отдел |
32 чел. | 11 чел. | 24 чел. | 10 чел. | 17 чел. | 26 чел. |
Набор этих данных можно представить как одномерный массив с шестью элементами. Пусть этому массиву дано имя L. Тогда элементы массива L можно записать в виде переменных с индексами:
L(1) L(2) L(3) L(4) L(5) L(6)
или L(I), где I = 1, 2, 3, 4, 5, 6. Индекс данного массива будет один – I. Каждая переменная будет иметь свое значение:
L(1) = 32 L(2) = 11 L(3) = 24 L(4) = 10 L(5) = 17 L(6) = 26
Пример 2. В качестве примера двумерного массива рассмотрим матрицу:
В этой матрице две строки, три столбца и ее элементы можно представить как двумерный массив. Индексация элементов двумерного массива производится таким образом: первый индекс обозначает номер строки матрицы, в которой находится данный элемент, второй индекс – это столбец в строке. Пусть имя заданного массива – R. Тогда элементы массива обозначаются как R(I,J), где I = 1,2 и J = 1,2,3.
R(1,1) = 1 R(1,2) = 3 R(1,3) = 7
R(2,1) = 6 R(2,2) = 9 R(2,3) = 10
Заметим, что индекс не имеет ничего общего с содержимым ячейки. Пара индексов служит для адресации заданной ячейки памяти.
В Basic элементы массивов располагаются в последовательных ячейках памяти. Это означает, что массив занимает непрерывную область памяти. Прежде, чем мы сможем обратиться к массиву из программы, надо указать, сколько памяти необходимо для размещения массива. Описание размера массива выполняется с помощью оператора DIM, который имеет следующий синтаксис:
DIM переменная (индексы) [, переменная (индексы)].
Здесь имя переменной является именем массива, индексы – это список числовых выражений, определяющих максимальное значение соответствующих индексов, разделенных запятыми. В одном операторе DIM возможно описание нескольких массивов, разделенных запятыми.
Опишем заданные в примерах массивы:
где L, R – имена массивов; 6, 2, 3 – их индексы.
Этот оператор предписывает интерпретатору отвести достаточно памяти для размещения массива L с шестью элементами и двумерного массива R из двух строк и трех колонок.
Элементам массива мы можем присвоить значение точно таким же образом как и обычным переменным. И так же, как обычные переменные, элемент массива имеет значение 0 с того момента, когда массив определен, и до того, как он получит какое-то другое значение. Чаще всего элементы массива получают значения с помощью оператора присваивания или оператора ввода.
Приведенные ниже программы присваивают значения элементам массива L с помощью оператора присваивания LET, операторов DATA-READ и оператора INPUT. Строки с оператором INPUT введены в программы для просмотра содержимого массивов.
Поочередно наберите и запустите программы 1–3. Перед набором очередной программы не забывайте очищать память ЭВМ (команда NEW) и экран (команда CLS).
15 L(1) = 32:L(2) = 11:L(3) = 24:L(4) = 10:L(5) = 17:L(6) = 26
20 PRINT L(1), L(2), L(3), L(4), L(5), L(6)
15 DATA 32,11,24,10,17,26
20 READ L(1), L(2), L(3), L(4), L(5), L(6)
30 PRINT L(1), L(2), L(3), L(4), L(5), L(6)
15 INPUT L(1), L(2), L(3), L(4), L(5), L(6)
20 PRINT L(1), L(2), L(3), L(4), L(5), L(6)
Возможно присваивание значений не всем элементам массива. Тогда оставшиеся элементы будут иметь начальное нулевое значение.
Если загрузить значения в большой массив, то эти методы работы с массивами становятся непрактичными. Можно значительно упростить программу, если привлечь для присвоения значений оператор цикла FOR.
Выполните и проанализируйте действие программы 4.
15 FOR I = 1 TO 6
20 INPUT «Введите элемент массива «,L(I)
30 FOR I = 1 TO 6
В этой программе печать элементов массива на экран реализована тоже с помощью оператора FOR. Поставьте в конце строки 35 точку с запятой ( ; ) и запустите программу. Найдите и запомните отличия в действиях программ. Затем замените в программе 4 точку с запятой ( ; ) на запятую ( , ) и снова запустите программу. Сделайте выводы об особенностях работы оператора PRINT и не забывайте о них, так как именно этот оператор формирует формат выходных данных в программе.
Ввод нескольких массивов одного размера можно осуществить в одном цикле (программа 5).
10 PRINT “Введите массивы А, С”
20 PRINT “ Набирайте элементы массива поочередно”
35 FOR I = 1 TO 6
При выполнении программы 5 данные вводятся попарно: А(I), С(I). После ввода каждой пары значений нажимается клавиша Enter. Однако такой способ ввода часто является причиной ошибок. Более естественно вводить сначала все элементы одного массива, а затем другого. Для этого ввод каждого массива нужно осуществлять в отдельном цикле, как показано в программе 6.
20 PRINT “Введите массив А”
30 FOR I = 1 TO 6
40 PRINT “Введите массив С”
50 FOR I = 1 TO 6
Если вводимые массивы имеют различные размеры, то последний способ ввода данных является оптимальным. Аналогичным образом можно вводить любое количество массивов. Действия со строковыми массивами аналогичны действиям c числовыми массивами, но не забывайте, что имена строковых массивов должны оканчиваться символом $, например, L$, PROBA$, S$ и т. д.
1.1.2. Вывод массивов
При выводе массивов необходимо обеспечить наглядность и удобство восприятия полученных результатов. В программах 1–4 использовался вывод элементов массивов при помощи оператора PRINT. Рассмотрим это более подробно.
Вывод одномерного массива, как правило, целесообразно осуществлять в строку, сопровождая поясняющим текстом (программа 7).
200 PRINT “Массив А”
210 FOR I = 1 TO N
Число N в программе 7 обозначает размерность массива А. В приведенной программе вывод массива А в строку обеспечивается использованием точки с запятой ( ; ) в операторе PRINT (строка 220). PRINT без списка (строка 240) осуществляет вывод пустой строки после окончания вывода массива А.
При выводе двух или нескольких одномерных массивов одного размера часто удобно вывести их как параллельно расположенные столбцы (программа 8).
200 PRINT “Массив А”, “Массив В”
210 FOR I = 1 TO N
220 PRINT A(I), B(I);
Вывод двух или более массивов различных размеров, как правило осуществляется в строку. Вывод нового массива начинается с новой строки. В программе 9 обеспечивается печать элементов массива А в ту же строку, в которую выводится заголовок “Массив А:”, что реализуется использованием точки с запятой в строке 200. Аналогично для массива В.
200 PRINT “Массив А:”;
210 FOR I = 1 TO N
250 PRINT “МассивВ:”;
260 FOR I=1 TO M
1.1.3. Задания для самостоятельной работы
1. Составить программу, которая выводит в одномерный числовой массив десять последовательных целых чисел, начиная с числа К (число К запрашивается программой) и выводит содержимое массива в строку.
3. Составить программу, которая выводит в одномерный строковый массив список из пяти фамилий, а затем выводит их в столбец.
4. Составить программу “Вычислитель календаря”. Программа должна запрашивать номер месяца и в ответ выводить название месяца и количество дней в нем.
1.2. Вложенные циклы
Циклы могут быть вложенными друг в друга, то есть один цикл выполняется внутри другого цикла. Если циклы вложены, то каждый цикл должен иметь уникальное имя счетчика цикла. Оператор NEXT, заканчивающий внутренний цикл, должен появляться раньше, чем оператор NEXT, заканчивающий внешний цикл. Пример работы программы с вложенными циклами показан в программе 10.
Источник: smekni.com