Как задать массив в паскале

от admin

Массивы в PascalABC.NET

В PascalABC.NET рекомендуется использовать динамические массивы. В отличие от статических, они имеют огромное количество методов и операций, просты в создании, заполнении и выводе.

Описание и выделение памяти

Динамический массив описывается так:

Память под динамический массив a выделяется в момент работы программы:

Здесь — первое преимущество динамических массивов — в переменной a может храниться массив любого размера, память выделяется в процессе работы программы. Кроме того, выделенная память гарантированно автоматически заполняется нулевыми значениями.

Можно совместить описание и выделение памяти — тип динамического массива выводится автоматически:

Обычно в PascalABC.NET совмещают описание динамического массива, выделение памяти и заполнение значениями. Самый простой способ — заполнить n нулями:

Индексация в динамических массивах и использование статических массивов

Динамические массивы индексируются с нуля — это эффективно. В качестве индексов в динамических массивах могут выступать только целые.

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

Заполнение статических массивов — увы — производится в цикле. Кроме того, они не помнят свою длину и передача таких массивов в качестве параметров подпрограмм связана с техническими сложностями 40-летней давности, не нужными начинающим.

Простейшее заполнение

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

Простейшее заполнение — набором значений:

Заполнение диапазоном целых или символьных значений делается с использованием функции Arr:

Заполнение определённым значением осуществляется с помощью операции умножения массива на число:

Для заполнения можно также использовать функцию ArrFill:

Для заполнения массива случайными значениями следует использовать

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

Повторять этот текст в каждой задаче — странно. Для этого есть стандартные функции.

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

Для ввода элементов массива базовых типов используются функции

Стандартная процедура вывода Write или Print выводит значения в массиве в квадратных скобках черезх запятую:

Однако лучше всего для вывода воспользоваться методом Print, выводящим все значения в массиве через пробел:

Не рекомендуется вводить и выводить элементы массива в цикле

Повторять этот текст в каждой задаче — странно. Для этого есть стандартные функции.

Циклы по массиву

Для обработки элементов массива используются следующие циклы:

    Цикл for по индексам (если требуется менять элементв или нужна информация об индексах)

Pascal-Паскаль

Программирование. Одномерные массивы Pascal-Паскаль

  • Скачено бесплатно: 25096
  • Куплено: 414
    ->Программирование. Одномерные массивы Pascal-Паскаль

Программирование. Одномерные массивы Pascal-Паскаль

Понятие структуры

До сих пор мы работали с простыми типами данных – логический ( boolean ), целый ( integer , word , byte , longint ), вещественный ( real ), символьный ( char ). Любой алгоритм можно запрограммировать с помощью этих четырех базовых типов. Но для обработки информации о многообразном реальном мире требуются данные, имеющие более сложное строение. Такие сложные конструкции, основанные на простейших скалярных типах, называются структурами. Структура – некоторый составной тип данных, составленный из базовых скалярных. Если структура не изменяет своего строения на протяжении всего выполнения программы, в которой она описана, то такую структуру называют статической.

Массив – однородная совокупность элементов

Самой распространенной структурой, реализованной практически во всех языках программирования, является массив.

Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer , real или char , либо других однотипных элементов. Из этого, правда, не следует делать вывод, что компоненты массива могут иметь только скалярный тип.

Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Что это значит? Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу).

Индекс массива

Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип ( integer , word или byte ), но может быть и логический и символьный.

Описание массива в Паскале. В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом:

где I – тип индекса массива, T – тип его элементов.

Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных:

Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа : I 1 .. I n . Например, индексы могут изменяться в диапазоне 1..20 или ‘ a ‘..’ n ‘.

При этом длину массива Паскаля характеризует выражение:

Вот, например, объявление двух типов: vector в виде массива Паскаля из 10 целых чисел и stroka в виде массива из 256 символов:

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

Опишем переменные типа vector и stroka :

далее в программе мы можем обращаться к отдельным элементам массива a или c . Например, a [5]:=23; c [1]:=’ w ‘; a [7]:= a [5]*2; writeln ( c [1], c [3]).

Вычисление индекса массива Паскаля

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

Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».

Пример программы с ошибкой массива Паскаля

Хотя данная программа полностью соответствует синтаксису языка, и транслятор «пропустит» ее, на стадии выполнения произойдет ошибка выхода за пределы массива Паскаля. При n =45 выражение n *2=90, компьютер сделает попытку обратиться к элементу массива a [90], но такого элемента нет, поскольку описан массив размерностью 80.

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

Из всего этого следует сделать вывод: программисту надо быть очень аккуратным при работе с индексами массива.

Основные действия с массивами Паскаля

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

то можно переменной a присвоить значение переменной b ( a := b ). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b. Все остальные действия над массивами Паскаля производятся поэлементно (это важно!).

Ввод массива Паскаля

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

Пример фрагмента программы ввода массива Паскаля

Рассмотрим теперь случай, когда массив Паскаля заполняется автоматически случайными числами, для этого будем использовать функцию random ( N ).

Пример фрагмента программы заполнения массива Паскаля случайными числами

Вывод массива Паскаля

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

Пример фрагмента программы вывода массива Паскаля

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

Пример программы вывода массива Паскаля в столбик

На экране мы увидим, к примеру, следующие значения:

Пример решения задачи с использованием массивов Паскаля

Задача: даны два n -мерных вектора. Найти сумму этих векторов.

Решение задачи:

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

Ход решения задачи:

  • определим количество элементов (размерность) массивов, введем значение n ;
  • введем массив a ;
  • введем массив b ;
  • в цикле, перебирая значения индекса i от 1 до n , вычислим последовательно значения элементов массива c по формуле:

Текст программы :

Пример программы суммирования векторов

Программирование

Исходники Pascal (127)

Справочник

Справочник по паскалю: директивы, функции, процедуры, операторы и модули по алфавиту

Как задать массив в паскале

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

Массив в языке Pascal – это набор однотипных данных, причём количество этих данных фиксировано и определяется при описании массива. Все переменные, входящие в массив, имеют одно и то же имя – имя массива, а различаются они по индексу – номеру (месту) в массиве.

Массив Result :

Массив Season :

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

Описание массива выглядит так:

array [<тип индекса>] of <тип компонент>

array и of – служебные слова («массив» и «из»);

• <тип индекса> – описание индексации компонент (элементов) массива;

• <тип компонент> – тип величин, составляющих массив.

Запишите описание массива, ориентируясь на его назначение.

Массив для записи температуры (целое число) каждого дня года.

var Day: array [1..366] of integer;

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

var T: array [1..24] of real;

Массив для подсчета частоты встречаемости прописных латинских букв в тексте.

var T: array [‘A’ .. ‘Z’] of longint;

Массив с фамилиями учащихся 11-го класса (всего 25 учащихся).

var Name: array [1 .. n] of string;

Типовые задачи обработки одномерных массивов

— Поиск элементов с заданными свойствами

— Поиск максимумов и минимумов

— Подсчёт элементов, удовлетворяющих условию

— Проверка массива на упорядоченность

— Удаление из массива элемента с индексом k

— Вставка в массив элемента на место с индексом k

— Перестановка элементов в обратном порядке

— Сортировка массива. Метод «пузырька»

Последовательный поиск в неупорядоченном массиве

Пример 3. Имеется массив A [1..n]. Найти элемент массива, равный p.

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

Возможный алгоритм решения:

1. Установить i = 1.

2. Если A [i] = p, алгоритм завершил работу успешно.

3. Увеличить i на 1.

4. Если i ≤ n, то перейти к шагу 2. В противном случае алгоритм завершил работу безуспешно.

var A: array [1..n] of integer;
i, p: integer;
begin

writeln (‘Ввод значений элементов массива:’);

for i := 1 to n do
read (A[i]);

write (‘ Ввод p: ‘);
readln (p);

while (i<=n) and (A[i]<>p) do
i:=i+1;

if i=n+1 then writeln (‘ Искомого элемента в массиве нет ‘)
else writeln (‘ Искомый элемент A[‘, i, ‘] = ‘, A[i])
end.

Поиск максимумов и минимумов

Пример 4. Имеется массив A [1..n]. Найти элемент массива с наименьшим значением.

Алгоритм поиска элемента с наименьшим значением в неупорядоченном массиве:

1. Установить значение текущего минимума равным первому исследуемому элементу.

2. Установить счетчик равным 2.

3. Если исследованы ещё не все элементы (i<=n), то перейти к шагу 4, иначе алгоритм окончен (минимальный элемент равен m in ).

4. Если рассматриваемый элемент меньше, чем текущий минимум, то минимуму присвоить значение текущего элемента.

5. Перейти к следующему элементу (увеличить i на единицу).

6. Перейти к шагу 3 .

Программа :

const n=5;
var A: array [1..n] of integer;
i, min: integer;

writeln (‘ Ввод значений элементов массива :’);
for i := 1 to n do
read (A[i]);

while (i<=n) do
begin

if A[i] < min then min := A[i];

end ;
writeln (‘ Минимум =’, min)
end.

Подсчёт элементов массива, удовлетворяющих некоторому условию

Зачастую бывает важно выяснить, сколько элементов, обладающих определённым свойством, содержится в массиве.

Пример 5. Имеется массив A [1..n]. Подсчитать количество элементов массива кратных некоторому числу p .

Алгоритм решения :

1. Присвоить нулевое значение переменной (счётчику), введённой для подсчёта количества элементов, удовлетворяющих заданному условию.

2. Организовать просмотр всех элементов массива: если просматриваемый элемент удовлетворяет заданному условию, значение счётчика увеличивать на 1.

Программа :

const n=5;
var A: array [1..n] of integer;
i, p, k: integer;

writeln (‘Ввод значений элементов массива:’);

for i := 1 to n do
read (A[i]);

writeln (‘ Ввод числа р :’);
readln (p);

for i := 1 to n do

if A[i] mod p = 0 then k := k + 1;

writeln (‘k=’, k)
end.

Проверка массива на упорядоченность

Пример 7. Имеется массив A [1..n]. Определить, упорядочены ли элементы массива по неубыванию, т. е. каждый элемент массива с 1-го по (n – 1)-й не больше последующего.

Алгоритм решения

Самый простой путь решения этой задачи – проверить, есть ли в массиве такие пары элементов, что A [i] > A [i + 1]. Если подобные пары элементов есть, то массив не упорядочен по неубыванию, а если таких пар нет, то – упорядочен.

В программе будем использовать логическую переменную flag:

• если flag = true, то массив упорядочен;

• если flag = false, то массив неупорядочен.

Программа :

const n=5;
var A: array [1..n] of integer;
i: integer; flag: boolean;

writeln (‘Ввод значений элементов массива:’);

for i := 1 to n do
read (A[i]);

for i := 1 to n-1 do
if
a[i]>a[i+1] then flag:=false;

if flag then writeln (‘ упорядочен ‘)
else writeln (‘ неупорядочен ‘)

Удаление из массива элемента с индексом k

Пример 8. Имеется массив a[1..n]. Удалить элемент с индексом k .

При удалении из массива любого из элементов размерность массива уменьшается на 1.

Мы видим, что элементы с индексами от 1 до k – 1 не изменились.

На место элемента с индексом k (6) переместился элемент, имевший индекс k + 1 (7), на место элемента с индексом k + 1 (8) переместился элемент, имевший индекс k + 2 (8) и т. д.

Фрагмент программы удаления из массива элемента с индексом k и последующим сдвигом всех расположенных справа от него элементов на одну позицию влево имеет вид:

for i := k to n-1 do
A[i] := A[i+1];

Программа :

const n=10;
var A: array [1..n] of integer;
i, k: integer;

writeln (‘ Ввод значений элементов массива :’);
for i := 1 to n do
read (a[i]);

write (‘ Ввод индекса k: ‘);
readln (k);

for i := k to n-1
do A[i] := A[i+1];

writeln(‘ Массив после обработки :’);
for i := 1 to n -1 do
write (A[i], ‘ ‘)
end.

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

Пример 9. Добавить в массив элемент Х на место с индексом k .

При вставке в массив ещё одного элемента размерность массива увеличивается на 1. Это надо учесть при описании массива.

Элементы с индексами от 1 до k – 1 не изменились.

На место элемента с индексом k (6) должен переместиться элемент, имевший индекс k + 1 (7), на место элемента с индексом k + 1 (8) –элемент, имевший индекс k + 2 (8) и т. д.

Поскольку при присваивании нового значения элементу старое пропадает, замену надо производить с конца. После чего заменить значение элемента с индексом k .

for i :=n downto k+1 do A[i] := A[i-1];

Программа :

const n=10;
var A: array [1..n] of integer;
i, k, X: integer;
begin

writeln (‘ Ввод значений элементов массива :’);
for i := 1 to n-1 do
read (A[i]);

write (‘ Ввод индекса k: ‘); readln (k);

write (‘Ввод числа Х: ‘); readln (X);

for i:=n downto k+1 do
A[i] := A[i-1];
A[k] := X;

writeln(‘Массив после обработки: ‘ );
for i:=1 to n do
write (A[i], ‘ ‘)

Перестановка всех элементов массива в обратном порядке

Пример 10. Имеется массив A [1..n].

Перевернуть его, т.е. что поменять местами 1-й и последний элементы, 2-й и предпоследний и т. д.

В общем случае, меняются местами элементы A [i] и A [ n i + 1 ].

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

Фрагмент программы по перестановке в обратном порядке всех элементов массива:

for i := 1 to n div 2 do
begin
R := A[i];
A[i] := A[n-i+1];
A[n-i+1] := R

Программа :

const n=7;
var A: array [1..n] of integer;
i, r: integer;
begin

writeln (‘ Ввод значений элементов массива :’);
for i := 1 to n do
read (A[i]);

for i := 1 to n div 2 do
begin
R := A[i];
A[i] := A[n-i+1];
A[n-i+1] := R
end;

writeln (‘ Массив после обработки :’);
for i := 1 to n do write (A[i], ‘ ‘)
end.

Сортировка массива

Сортировка – это распределение элементов массива в соответст­вии с определёнными правилами.

Существует 2 вида сортировки:

Сортировка методом «пузырька»

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

Пусть n– количество элементов в неупорядоченном массиве.

1. Поместим на место n-го элемента наибольший элемент массива. Для этого:

1) положим i = 1;

2) пока не обработана последняя пара элементов: сравниваем i-й и (i + 1)-й элементы массива; если A [i] > A [i + 1] (элементы расположены не по порядку), то меняем элементы местами; переходим к следующей паре элементов, сдвинувшись на один элемент вправо.

2. Повторяем пункт 1, каждый раз уменьшая размерность неупорядоченного массива на 1, до тех пор, пока не будет обработан массив из одной пары элементов (таким образом, на k-м просмотре будут сравниваться первые (n – k) элементов со своими соседями справа).

for k := n-1 downto 1 do

for i := 1 to k do

If A[i] > A[i+1] then

begin R := A[i]; A[i] := A[i+1]; A[i+1] := R end;

Сортировка выбором

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

1. В массиве выбирается минимальный элемент.

2. Минимальный и первый элементы меняются местами (первый элемент считается отсортированным).

3. В неотсортированной части массива снова выбирается минимальный элемент и меняется местами с первым неотсортированным элементом массива.

4. Действия, в пункте 3, повторяются с неотсортированными элементами массива до тех пор, пока не останется один неотсортированный элемент (его значение будет максимальным).

5. Программа :

Пример 10. Отсортировать массив A [1..n] по возрастанию.

Урок 14. Одномерные массивы. Работа с элементами

Одномерные массивы

Сегодня мы с вами наконец-то начинаем новую тему — одномерные массивы .

Одномерные массивы. Определение.

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

Между именем типа и именем переменной ставится знак «двоеточие». Array — служебное слово (в переводе с английского означает «массив», «набор»); [1..N] — в квадратных скобках указывается номер первого элемента, затем, после двух точек, номер последнего элемента массива; of — служебное слово (в переводе с английского «из»); integer — тип элементов массива.

Индексом могут быть не только натуральные числа: мы можем написать так: [0..10], [-29..45], [‘a’..’z’], [false..true] — то есть нам подходят любые символы и числа — главное соблюсти следующее условие: левая часть меньше правой. Для того чтобы определить, что меньше — восклицательный знак(‘!’) или точка(‘.’) используем таблицу ASCII и функции Ord() и Chr().

Как же производится ввод одномерного массива?

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

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

Раз уж мы затронули тему задач из блока Series, давайте решим пару задачек оттуда с помощью массивов, а не тем увечным способом, которым нам приходилось пользоваться.

Одномерные массивы. Решение задач.

Series8. Дано целое число N и набор из N целых чисел. Вывести в том же порядке все четные числа из данного набора и количество K таких чисел.

Series28. Дано целое число N и набор из N вещественных чисел: A1, A2, …, AN. Вывести следующие числа:

Исходное решение: Series28.

Более подробно про возведение числа в степень мы говорили в решении задачи for36.

Ну и напоследок давайте разберём веселенькую задачу на длинную арифметику.

Задача. Найти факториал числа.

Мы уже решали эту задачу здесь(for19).

Научимся вычислять факториал натурального числа N. Факториал числа — это произведение чисел 1*2*3*…*(N-1 )*N (обозначается как N!). Сложность задачи в том, что уже 8!=40320, а 13!=6227020800. Типы данных Integer, Longlnt применимы весьма в ограниченном диапазоне натуральных чисел. Для представления факториала договоримся использовать массив. Пример:

A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]
8 0 0 8 6 1 9 9 3

В массиве записано значение 11!=39916800. Каким образом? В А[0] фиксируется число занятых элементов массива, в А[1] — цифра единиц результата, в А[2] — цифра десятков результата, в А[3] — цифра сотен результата и т. д. Почему так, а не наоборот? Такая запись позволяет исключить сдвиг элементов массива при переносе значений в старший разряд. А сейчас наберите, как обычно, текст программы, выполните компиляцию и, выполните ее в пошаговом режиме, отслеживая изменение значений переменных при не очень большом значении N. Добейтесь полного понимания логики работы программы.

Для того чтобы выполнить программу в пошаговом режиме, нажмите «шаг без входа в подпрограмму» и перейдите в «локальные переменные».

факториал с одномерным массивом

Одномерный массив — это конечное упорядоченное множество элементов. За первым элементом идет второй, за вторым — третий и т. д. Индекс может быть чем угодно — и целым числом, и символом. Но чаще мы всё-таки будем пользоваться следующим диапазоном: [1.. N].

На сегодня все! Если у вас еще остались вопросы о том, как работает программа выше, оставляйте их в комментариях. И очень скоро мы начнем решать задачи на массивы из задачника М. Э. Абрамяна.

Читать:
Почему после форматирования флешки она не работает

Похожие статьи