Как задать массив в паскале
Перейти к содержимому

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

  • автор:

Массивы в Pascal

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

Представление переменных в памяти компьютера

В данных ячейках могут содержаться любые значения из диапазона, определяемого их типами. Например, в ячейке month может быть любое одно значение от 1 до 12, а в ячейке x любое натуральное число в диапазоне примерно от -32000 до 32000.

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

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

Ячейки массива можно назвать элементами; в квадратных скобках стоят индексы. Базовый тип массива – это тип элементов, из которых составлен массив (в каждом массиве все компоненты одного типа).

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

nums[3] := 115.58; read(nums[1]);

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

Во фрагменте кода ниже записывается 0 во все элементы массива nums :

for i := 1 to 3 do nums := 0;

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

Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.

Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.

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

Итак, массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.

Помним, все элементы определенного массива имеют один и тот же тип. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer , а другой – из чисел типа real .

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

Если индекс массива может приобретать все допустимые значения определенного перечислимого типа, то при описании массива возможно задание имени типа вместо границ изменения индекса. При этом границами индекса будут первое и последнее значения в описании типа индекса. Границы изменения индексов могут задаваться с помощью ранее объявленных констант. Рекомендуется предварительно объявлять тип массива в разделе описания типов.

Массив можно создать несколькими способами.

const N = 200; type months = (jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec); years = 1900..2100; people = array[years] of longint; var growth: array[months] of real; hum: people; notes: array[1..N] of string;

Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента.

Простой массив является одномерным. Он представляет собой линейную структуру.

var ch: array [1..11] of char; h: char; i: integer; begin for i := 1 to 11 do read(ch[i]); for i := 1 to 11 do write(ch[i]:3); end.

В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, ‘q’, ’w’, ’e’, ’2’, ’t’, ’9’, ’u’, ’I’, ’I’, ’o’, ’p’), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экран.

Функция sizeof, примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.

Массивы в Паскале

Массивы в Паскале

Одномерные и двумерные массивы — это довольно большая тема в языке программирования pascal. Однако она довольно простая для понимания.

Если вы внимательно прочитаете данную статью , то никаких проблем с использование массивов у вас не будет. Примерный процент использования массивов в программе составляет 70-80 % , так что столкнетесь вы с ними довольно часто .

Массивы в языке pascal

Объявление массива

Начнем пожалуй с того , что объясним вам что такое массив. Массив можно представить как совокупность переменных имеющих общее имя и тип , но разные индексы.
Каждый массив как и переменные объявляются в блоке var. Примеры объявления массивов в паскале :

В данном случае мы создаем два массива. Массив «а» длиной в 5 переменных и массив «б» длинной в 3 переменные.

Как записываются массивы ? Для начала нужно придумать имя массива , например names , после этого ставится двоеточие «:» . Далее пишется слово array ( массив ) , сразу после этого в квадратных скобках обозначается длинна массива . Первая цифра — первый индекс , вторая — последний . И в конце обозначаем тип массива в целом , например of integer.

Как это будет выглядеть изнутри :

Как это будет выглядеть

Когда мы объявляем массив , можно сказать что мы создаем последовательность переменных. Как видно на картинке выше при создании массива «а» мы создаем 5 переменных , значения каждой пока равны 0 ( стандартно ) , с адресами a[1] , a[2] . соответственно.

После этого мы задаем переменной a с индексом 4 ( a[4] ) значение 8.

Массивы также можно создавать через свои типы данных. Пример :

Объявление массива через типы

Пример заполнения массива через цикл :

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

Вывод :

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

О двумерных массивах можно прочитать здесь.

Массивы и строки

Есть задача: Дан текст (массив символьных строк), каждый символ которого может быть буквой, цифрой или одним из знаков +, -, *. Подсчитать число вхождений буквы f в первые три группы букв. Решить нужно на pascal. С числами еще понятно. А вот с символами. Не соображу, как заполнить массив случайным образом, чтобы были, и буквы, и цифры, и знаки +, -, *. При этом параметры массива нужно, чтобы определялись с клавиатуры. Все это должно быть в двух процедурах. Одна для ввода матрицы. Вторая для вывода матрицы на экран. Или такой возможности в Паскаль нет? Тогда лучше вводить строки с клавиатуры? Потом подсчет в первые три группы букв. Это имеется ввиду, что в строке может быть например, пять слов, разделенных пробелами, и поиск буквы f выполнить только в первых трех словах. Я правильно поняла? Как же это можно реализовать? Покажите, пожалуйста, пример, а то со вчерашнего дня мозги с этой задачей уже на бекрень:)

Отслеживать
81.6k 9 9 золотых знаков 78 78 серебряных знаков 136 136 бронзовых знаков
задан 18 янв 2012 в 3:55
elenavictory elenavictory
320 3 3 золотых знака 7 7 серебряных знаков 23 23 бронзовых знака

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

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

Const N0=100; (* число элементов массива и массив-алфавит *) Alf: Array[0..38] Of Char = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '+', '-', '*', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); Var StrMas: Array[0..N0-1] Of String; i, j, n, l: Byte; AlfInd: 0..38; begin Repeat (* проверочка ввода числа элементов *) Write('N = '); ReadLn(N); Until (N In [1..99]); Dec(N); (* вычитаю 1 (N:=N-1; - то же самое) *) Randomize; For i:=0 To N Do (* мотаю цикл от 0 до число элементов - 1 *) Begin StrMas[i]:=''; (* элемент сначала равен пустому символу *) l:=Random(50)+1; (* случайная длина строки, но не меньше 1 *) For j:=1 To L Do (* мотаю цикл от 1 до длины будущей строки *) StrMas[i]:=StrMas[i]+Alf[Random(38)]; (* заполняю случайными элементами *) End; (* вывожу массив *) For i:=0 To N Do WriteLn(StrMas[i]); WriteLn('Davi na ENTER. '); ReadLn; end. 

А вторая часть задания требует дополнительных пояснений: в задаче не указано, что в строках могут быть пробелы, поэтому группа букв, скорее всего, что-то другое: элемент массива, или определённое количество символов (заранее известное), или что-то ещё.

Pascal-Паскаль

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

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

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

  • Массив как однородная совокупность элементов
  • Индекс массива
  • Вычисление индекса массива Паскаля
  • Основные действия с массивами Паскаля
  • Ввод массива Паскаля
  • Вывод массива Паскаля
  • Пример решения задачи с использованием массивов Паскаля

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

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

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

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

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

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

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

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

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

Type < имя _ типа >= array [ I ] of T;

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

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

Var a,b: array [ I ] of T;

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

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

ord ( I n )- ord ( I 1 )+1.

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

Type
Vector=array [1..10] of integer;
Stroka=array [0..255] of char;

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

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

Var a: vector;
c: stroka;

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

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

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

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

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

Program primer _ error ;
Type
vector=array [1..80] of word;
var
n: integer;
a: vector;
begin
n:=45;
a[n*2]:=25;
end .

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

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

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

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

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

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

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

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

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

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

Var
A : array [1..10] of integer ;
I : byte ;
Begin
For i:=1 to 10 do
Readln (a[i]); < ввод i- го элемента производится с клавиатуры >

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

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

Var
A: array [1..10] of integer;
I : byte ;
Begin
For i :=1 to 10 do
A [ i ]:= random (10); < i -му элементу массива присваивается «случайное» целое число в диапазоне от 0 до 10>

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

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

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

Var
A: array [1..10] of integer;
I : byte ;
Begin
For i :=1 to 10 do
Write ( a [ i ],’ ‘);

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

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

Var
A: array [1..10] of integer;
I : byte ;
Begin
For i:=1 to 10 do
Writeln (‘a[‘, i,’]=’, a[i]); < вывод элементов массива в столбик >

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

a [1]=2
a [2]=4
a [3]=1 и т.д.

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

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

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

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

var a , b : array [1..100] of integer ;

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

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

c [ i ]= a [ i ]+ b [ i ];

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

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

Program summa;
Var
a, b, c: array [1..100] of integer;
I, n: byte;
Begin
Write (‘введите размерность массивов:’);
Readln(n);
For i:=1 to n do
Readln (a[i]); < ввод массива a>
For i:=1 to n do
Readln (b[i]); < ввод массива b>
For i:=1 to n do
C[i]:=a[i]+b[i]; < вычисление суммы массивов >
For i:=1 to n do
write (c[i],’ ‘); < вывод массива с >
end.

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

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

Справочник

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

Счетчики

2008—2024 © pascal.helpov.net | All Rights Reserved

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *