Массивомназывают упорядоченный набор однотипных переменных (элементов). Каждый элемент имеет целочисленный порядковый номер, называемыйиндексом. Число элементов в массиве называют егоразмерностью. Массивы используются там, где нужно обработать сразу несколько переменных одного типа – например, оценки всех 20 студентов группы или координаты 10 точек на плоскости. Строку текста можно рассматривать как массив символов, а текст на странице – как массив строк.
Массив описывается в разделе varоператором следующего вида:
Var ИмяМассива: array [НижнийИндекс .. ВерхнийИндекс] of Тип;
НижнийИндекс– целочисленный номер 1-го элемента массива,
..– оператор диапазона Паскаля (именнодветочки!);
ВерхнийИндекс– целочисленный номер последнего элемента,
Тип – любой из известных типов Паскаля; каждый элемент массива будет рассматриваться как переменная соответствующего типа.
Примеры массивов:
Var a: array [1..20] of integer;
Здесь мы описали массив с именем A, состоящий из 20 целочисленных элементов;
Язык Паскаль с нуля | #7 Одномерные массивы в паскаль.
Var x,y : array [1..10] of real;
Описаны 2 массива с именами xиy, содержащие по 10 вещественных элементов;
Var t : array [0..9] of String;
Массив tсостоит из 10 строк, которые занумерованы с нуля.
Таким образом, размерность(число элементов) массива вычисляется как
ВерхнийИндекс – НижнийИндекс + 1
Для обращения к отдельному элементу массиваиспользуется оператор вида
Здесь Индекс– целочисленный номер элемента (может быть целочисленным выражением или константой). Индекс не должен быть меньше значения нижнего или больше верхнего индекса массива, иначе возникнет ошибка «Constantoutofrange». Отдельный элемент массива можно использовать так же, как переменную соответствующего типа.
Пока мы изучаем одномерныемассивы, в которых каждый элемент имеет один номер (индекс), характеризующий его положение в массиве. В математике понятию одномерного массива изnэлементов соответствует понятиевектора изnкомпонент:
A = Ai>, i=1,2,…,n
Как правило, ввод, обработка и вывод массива осуществляются поэлементно, с использованием цикла for
Ввод массива с клавиатуры:
Var a: array [1..n] of real;
Writeln (‘Введите элементы массива’);
For i:=1 to n do read (A[i]);
Размерность массива определена константой n, элементы вводятся по одному в циклеfor– при запуске этой программы пользователю придется ввести 10 числовых значений. При решении учебных задач вводить массивы «вручную», особенно если их размерность велика, не всегда удобно. Существуют, как минимум, два альтернативных решения:
Описание массива константудобно, если элементы массива не должны изменяться в процессе выполнения программы. Как и другие константы, массивы констант описываются в разделеconst, приведем пример такого описания:
const a:array [1..5] of real=(
Как видно из примера, элементы массива перечисляются в круглых скобках через запятую, их количество должно соответствовать его размерности.
Работа с массивами Pascal
Формирование массива из случайных значенийуместно, если при решении задачи массив служит лишь для иллюстрации того или иного алгоритма, а конкретные значения элементов несущественны. Для того, чтобы получить очередное случайное значение, используется стандартная функцияRandom(N), где параметромNпередается целое или вещественное число. Она вернет случайное число того же типа, что тип аргумента и лежащее в диапазоне от0доN-1включительно. Например, оператор видаa[1]:=Random(100);запишет вa[1]случайное число из диапазона [0,99].
Для того, чтобы при каждом запуске программы цепочка случайных чисел была новой, перед первым вызовом Randomследует вызвать стандартную процедуруRandomize;,запускающую генератор случайных чисел. Приведем пример заполнения массива из 20 элементов случайными числами, лежащими в диапазоне от -10 до 10:
var a:array [1..20] of integer;
for i:=1 to 20 do begin
Еще более удобный путь – чтение элементов массива из текстового или двоичного файла. Об этом рассказывается в главах 21 и 22.
Обработка массива(в данном случае, вычисляется суммаsего положительных элементов)
Var b:array [1..5] of real;
Writeln (‘Введите 5 элементов массива’);
for i:=1 to 5 do read (b[i]);
for i:=1 to 5 do if b[i]>0 then s:=s+b[i];
Как видно из этого примера, к массивам применимы все типовые алгоритмы, изученные в теме «Циклы».
Вывод массива на экран:
For i:=1 to 5 do write (b[i]:6:2);
Здесь 5 элементов массива bнапечатаны в одну строку. Для вывода одного элемента на одной строке можно было бы использовать операторwritelnвместоwrite
Если обработка массива осуществляется последовательно, по 1 элементу, циклы ввода и обработки зачастую можно объединить.
Пр. Найти арифметическое среднее элементов вещественного массиваtразмерностью 6 и значение его минимального элемента.
Var b:array [1..6] of real;
writeln (‘Ввод B[6]’);
for i:=1 to 6 do begin
writeln (‘min=’,min,’ s=’, s/6);
Теоретически в этой программе можно было бы обойтись и без массива – ведь элементы b[i]используются только для накопления суммы и поиска максимума, так что описание массива вполне можно было заменить описанием вещественной переменнойb. Однако, в реальных задачах данные, как правило, обрабатываются неоднократно и без массивов обойтись трудно. Приведем пример учебной задачи, где использование массива дает выигрыш за счет уменьшения объема вычислений, выполняемых программой.
Пр. Задана последовательностьTi=max,i= -5, -4, …, 5. Найти элемент последовательности, имеющий минимальное отклонение от арифметического среднего положительных элементов.
Здесь в первом циклеможно сформировать массив по заданному правилу и найти арифметическое среднее положительных элементов. Вовтором цикле, когда среднее известно, можно искать отклонение. Без использования массива нам пришлось бы считать элементы последовательности дважды.
Var t : array [-5..5] of real;
For i:=-5 to 5 do begin
if t[i]>0 then begin
For i:=-5 to 5 do begin
Writeln (‘Ot=’, ot:8:2);
Приведем еще один пример, связанный с обработкой в задаче более 1 массива.
Пр. Координаты 10 точек на плоскости заданы массивамиX=i>,Y=i>,i=1,2,…,10. Найти длину ломаной, проходящей через точки (x1,y1), (x2,y2), …, (x10,y10), а также номер точки, лежащей дальше всего от начала координат.
При решении задачи используем формулу для нахождения расстояния между 2 точками на плоскости, заданными координатами (x1,y1) и (x2,y2):
Обозначим Rрасстояние между текущей точкой и следующей,Lenискомую длину ломаной,Dist– расстояние от текущей точки до начала координат,Max– максимальное из этих расстояний,Num– искомый номер точки.
Var x,y : array [1..10] of real;
R, Len, Dist, max : real;
Writeln (‘Введите координаты 10 точек’);
For i:=1 to 10 do begin
Dist:=sqrt (sqr(x[i]) + sqr (y[i]));
If dist > max then begin
Writeln (‘Номер точки=’,num, ‘ расстояние=’,dist:8:2);
For i:=1 to 9 do begin
Writeln (‘Длина ломаной=’,len:8:2);
Пр. Задача формирования массива по правилу:
Задан массив Xиз 8 элементов. Сформировать массивYпо правилу
Y[i]= 4X[i], еслиI– четное
Cos2X[i], еслиI– нечетное
и найти количество его положительных элементов.
Var x,y: array [1..8] of real;
Writeln (‘Введите массив X из 8 элементов’);
For i:=1 to 8 do begin
If I mod 2 =0 then y[i]:=4*x[i]
Источник: studfile.net
Как создать N размер массива задаваемый пользователем PASCAL
Это можно сделать с помощью динамических массивов. Например:
program p1; var a: array of integer; n: integer; begin readln(n); // вводим длину массива SetLength(a, n); // устанавливаем новую длину массива writeln(length(a)); // показываем длину массива end.
P.S. Для написания кода использовался PascalABC
Отслеживать
ответ дан 22 окт 2020 в 15:19
SurfaceStack SurfaceStack
849 5 5 серебряных знаков 23 23 бронзовых знака
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
lang-pascal
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Источник: ru.stackoverflow.com
Одномерные массивы в языке Pascal
В процессе создания любой программы разработчику предстоит использовать не только выбранный язык программирования, но и его основные элементы.
В данной статье расскажем о заданных одномерных массивах. Эти сведения пригодятся всем новичкам. Использовать их на практике не составит особого труда.
Определение
Массив – множество данных. Структура информации, которая хранит в себе набор значений (элементы), идентифицируемых при помощи так называемого индекса (или их набора), принимающего целые (приводимые к целым) значения из заданного непрерывного интервала.
Массивом называют упорядоченный набор элементов, каждый из которых содержит в себе то или иное значение. Идентификация соответствующего компонента производится с помощью одного или нескольких индексов.
Самый простой массив:
- имеет постоянную длину;
- содержит единицы данных одного и того же типа;
- предусматривает в виде index целые числа.
Количество индексов, задействованных в множестве, бывает разным. Зависит от конкретной поставленной задачи. Их «отсчет» меняется в зависимости от выбранного языка разработки. В Pascal допускается определение произвольного диапазона значений любого типа данных, приводимого к целому. Сюда относят: перечисления, символы, целые числа, логические вариации («истина» и «ложь»).
Виды множеств
- Одномерными. В них всего один индекс.
- Двумерными. Индекса уже два.
- Трехмерными и так далее.
Одномерный вариант нестрого соответствует вектору в математике, двумерный – матрице. Соответствующие компоненты на практике встречаются чаще остальных. Работа с трехмерными и более крупными множествами информации – огромная редкость.
Массивы бывают обычными. Их называют статическими или динамическими. У них «размерность» не меняется по мере обработки программного кода. Есть динамические множества. В них размер корректируется в зависимости от выполненного приложения или задачи.
Также различают гетерогенные множества. В них элементы содержат информацию, относящуюся к различным типам данных. Встречается такой вариант не слишком часто. Новичкам работать с ним не рекомендуется. Выступает гетерогенный вариант в виде универсальной структуры для хранения набора данных произвольных типов.
Реализация требует усложнения механизма поддержки рассматриваемого элемента кода в трансляторе языка.
Одномерность в Pascal
Массив – одна из самых распространенных структур хранения информации. В Pascal, как и в других ЯП, чаще всего встречаются одномерные и двумерные вариации. Рассмотрим первый тип более подробно.
Если в задаче дан тот или иной одномерный массив из n элементов, он будет называться линейным. Представляет собой итоговое (конечное) количество однотипных элементов, которые объединяются при помощи общего имени. Каждый компонент обладает собственным порядковым номером. Обращение к элементам будет осуществиться по имени множества, а также порядковому номеру (индексу).
Линейным соответствующий компонент кода называется из-за того, что в нем все элементы следуют друг за другом. Объект может быть представлен элементарной таблицей из нескольких строк:
- имеющиеся индексы элементов;
- значения.
Имена массивов составляются по тем же принципам, что и в случае с переменными. Границы индексов будут заданы в описании множества в квадратных скобках. Рекомендуется начинать с «1», чтобы не запутаться в итоговом коде.
Конечный индекс определяется при помощи условия имеющейся задачи. Численно он будет равен размеру заданного множества – количеству элементов в нем.
Числовые массивы содержат действительные, а также целые числа. Тип элементов прописывается в описании. Выше – пример того, как это делается.
Как записывать данные во множество
Программисты в процессе работы с рассматриваемым элементом задают множеству ту или иные значения. Это можно сделать несколькими способами:
- самостоятельно через клавиатуру;
- при помощи генерации случайных чисел;
- по выставленному условию или формуле.
Также иногда есть задачи, в которых можно задать элементы множества путем их чтения из файла в Pascal. Этот прием достаточно сложный, поэтому рассматривать его более подробно пока не будем.
В процессе работы с примерами определите множество информации, включающее в себя пять элементов:
var a: array [1…5] of integer;
Выше – пример соответствующего кода. Для работы с множеством одномерного типа из неопределенного количества элементов, нужно использовать запись типа «1 to n».
Ручная прописка
Этот вариант хорош для небольших одномерных массивов. Чтобы вводить его элементы с клавиатуры, нужно использовать любой цикл. Самый простой вариант – с if:
Выше – наглядный пример того, как соответствующий вариант будет выглядеть в программном коде.
Случайность
Если дан одномерный массив в той или иной задаче из n элементов, можно заполнить его случайными значениями. Справиться с соответствующей задачей дает следующая форма записи:
Подобный прием особо актуален, если массив сложно назвать небольшим. Помогает проверить работоспособность фрагмента кода или всего приложения.
По правилам
Бывает и так, что в имеющейся задаче необходимо устанавливать элементы массива согласно определенным принципам. Тогда поможет генерация «по формуле».
Выше – пример того, как это выглядит на практике. Соответствующий шаблон поможет при решении огромного количества задач. Здесь предстоит заполнить массив квадратами натуральных числовых значений.
Как правильно вывести
Если дан одномерный массив в приложении из n элементов, его рано или поздно придется вывести на экран. Для этого используется такая команда:
Без цикла в Pascal справиться с поставленной задачей не получится.
Шаблон для задач
Основная масса задач, связанных с линейными массивами, решается при помощи одних и тех же схем. Для того, чтобы быстрее справиться с ними, можно воспользоваться следующим шаблоном:
Корректируя соответствующий фрагмент под условия имеющейся задачи, можно решать различные примеры с линейными массивами с разным количеством элементов. Здесь их 100 целых.
А вот видео-урок, который поможет быстрее разобраться в рассмотренной теме каждому новичку. Для того, чтобы лучше изучить Pascal, его массивы и иные элементы соответствующего языка программирования, рекомендуется воспользоваться дистанционными онлайн курсами. Пример – от OTUS. Здесь с нуля научат в течение 12 месяцев программировать.
Можно выбрать одно или несколько направлений одновременно. Курсы разнятся по уровню начальных знаний – есть предложения для опытных разработчиков и новичков. Весь процесс организован дистанционно. Гарантируется постоянное кураторство, помощь в формировании портфолио, множество практики и интересные домашние задания. Полученные знания и навыки можно будет подтвердить при помощи официального электронного сертификата, выписываемого в конце прохождения курса.
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!
Источник: otus.ru