- Паскаль способы задания массива
- Массивы в Pascal
- Одномерный массив
- Алгоритмы заполнения массива в Pascal
- Массивы в Паскале. Одномерные массивы
- Массивы в PascalABC.NET
- Описание и выделение памяти
- Индексация в динамических массивах и использование статических массивов
- Простейшее заполнение
- Ввод и вывод элементов массива
- Циклы по массиву
- Методы массива
- Операции с массивами
- Изменение размера динамического массива
Паскаль способы задания массива
Презентация «Основы Турбо Паскаль»
Презентация «Сортировка одномерного массива»
В некоторых случаях приходится сталкиваться с ситуацией, когда нужно использовать относительно много данных одного типа. Представим себе программу, которая позволяет вычислить определенные метеорологические данные и в которой всегда будет не менее 365 переменных. Таким способом можно присваивать отдельным переменным метеоданные по отдельным дням всего года. Можно объявить тип real у 365 переменных, используя запись
Var day1, day2, day3. day365:real;
Чтобы только записать все данные, понадобится страница, а чтобы выполнить над введенными данные какие-либо арифметические операции, например, найти среднее арифметическое, понадобится еще страница записи программы. Согласитесь, не совсем удобно в плане расхода времени, бумаги и т.д. Для таких случаев Pascal предоставляет возможность введения большого числа переменных одного и того же типа, используя простые выражения. Вспомогательное средство, которые имеется в виду, известно под именем array , (в переводе с английского – массив).
Массив – это совокупность конечного числа данных одного типа или упорядоченная последовательность данных, состоящая из фиксированного числа элементов. Данные одного типа имеют одно имя.
Массив данных в программе рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться как на массив данных в целом, так и на любую из его компонент.
Переменные, представляющие компоненты массивов, называются переменными с индексами в отличие от простых переменных, представляющих в программе элементарные данные. Индекс в обозначении компонент массивов может быть константой, переменной или выражением порядкового типа .
Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным. Вообще количество индексов элементов массива определяет размерность массива. По этом признаку массивы делятся на одномерные (линейные), двумерные, трёхмерные и т.д.
Массивы могут быть описаны несколькими способами:
1. ARRAY – указывает на ряд переменных одного и того же типа, например, integer или real , имеющих один идентификатор. Определенная переменная из массива представлена именем массива, например, day , после которого в квадратных скобках записано число (номер). Или говорят ИМЯ [индекс]. Отдельные переменные массива называются элементами массива.
Var имя массива: ARR или AY [ n 1.. n 10] of ;
Var а: ARRAY [100] of integer ;
Если задается несколько одинаковых массивов, то они описываются следующим способом:
а ,b,c: ARRAY [1..50] of; const:=5;
Сначала в разделе описания типов TYPE указывается тип массива, затем в разделе описаний переменных Var перечисляются массивы, относящиеся к указанному типу.
Введение типа массива увеличивает раздел описаний, но упрощает отладку программ. Указание типов в разделе описаний является хорошим стилем программирования.
Type massiv:=array[n1..n2] of тип элементов >;
Type mass:=array[1..30] of integer;
Одномерный массив – это фиксированное количество элементов одного типа, объединенных одним именем, где каждый элемент имеет свой номер (индекс). Обращение к элементам массива осуществляется с помощью указания имени массива и номеров элементов.
Пример: числовая последовательность четных натуральных чисел 2, 4, 6, . N представляет собой линейный массив, элементы которого можно обозначить А[1]=2, А[2]=4, А[3]=6, . А[К]=2*(К+1), где К — номер элемента, а 2, 4, 6, . N — значения. Индекс (порядковый номер элемента) записывается в квадратных скобках после имени массива.
Например, A[7] — седьмой элемент массива А; D[6] — шестой элемент массива D.
Для размещения массива в памяти ЭВМ отводится поле памяти, размер которого определяется типом, длиной и количеством компонент массива. В языке Pascal эта информация задается в разделе описаний. Массив описывается так:
имя массива : Array [начальное значение индекса..конечное значение индекса] Of базовый тип;
Var B : Array [1..5] Of Real, R : Array [1..34] Of Char;
— описывается массив В, состоящий из 5 элементов и символьный массив R, состоящий из 34 элементов. Для массива В будет выделено 5*6=30 байт памяти, для массива R — 1*34=34 байта памяти.
Задача 1. Заполнить одномерный массив элементами, отвечающими следующему соотношению:
FOR I := 3 TO N DO
A[I] := A[I — 1] + A[I — 2];
Другой вариант присваивания значений элементам массива — заполнение значениями, полученными с помощью датчика случайных чисел.
Задача 2. Заполнить одномерный массив с помощью датчика случайных чисел таким образом, чтобы все его элементы были различны.
Type Mas = Array[1..100] Of Integer;
Var A : Mas; I, J, N : Byte; Log : Boolean;
randomize; A[1] := -32768 + random(65535);
For I := 2 To N Do
A[i] := -32768 + random(65535); J := 1;
While Log and (j
begin Log := a[i] <> a[j]; j := j + 1 End
For i := 1 to N Do Write(a[i]:7); writeln
2) ввод значений элементов массива с клавиатуры используется обычно тогда, когда между элементами не наблюдается никакой зависимости. Например, последовательность чисел 1, 2, -5, 6, -111, 0 может быть введена в память следующим образом:
Var N, I : Integer;
A : Array [1..20] Of Integer;
Write(‘ Введите количество элементов массива ‘); ReadLn(N);
FOR I := 1 TO N DO
Write(‘ Введите A[‘, I, ‘] ‘); ReadLn(A[I])
Над элементами массивами чаще всего выполняются такие действия, как
а) поиск значений;
б) сортировка элементов в порядке возрастания или убывания;
в) подсчет элементов в массиве, удовлетворяющих заданному условию.
Заполнить массив можно следующим образом:
1) с помощью оператора присваивания. Этот способ заполнения элементов массива особенно удобен, когда между элементами существует какая-либо зависимость, например, арифметическая или геометрическая прогрессии, или элементы связаны между собой реккурентным соотношением.
Источник
Массивы в Pascal
Массив в программировании является набором элементов одного типа (однотипных).
Различают несколько видов массивов – одномерный (векторный) и многомерный.
Элементы в массиве характеризуются своими именами и порядковыми номерами — индексами.
Индекс – это порядковый номер элемента в массиве.
В Паскале каждому элементу присваивается один или несколько индексов, которые описывают положение элемента в массиве.
Одномерный массив
Синтаксис массива в Pascal таков :
Где :
1 – нижний индекс
10 – верхний индекс
A – имя переменной массива
[ ] – диапазон значений
Integer – тип данных
A[ i ] – обращение к элементу массива в Pascal
Тип элементов массива может быть любым допустимым типом в Pascal, кроме файлов (даже массивом).
Пример массива : A =
Когда описывается массив, его верхний индекс должен быть строго определён.
При описании массива идёт распределение памяти, и компилятор должен знать какое количество памяти нужно выделить под описанный массив.
Ограничения по количеству индексов в массиве Pascal не ограничивается. Однако сам массив не должен быть больше чем 65537 байт.
Массив также можно объявлять в разделе описания типов:
Доступ к элементам массива осуществляется в цикле.
Наиболее рациональным способом обработки элементов массива в Паскаль является оператор цикла с параметром.
Алгоритмы заполнения массива в Pascal
- Ввод элементов массива с помощью компьютера осуществляется с помощью такой конструкции :
Задание массива случайным образом.
Массив можно задать случайным образом с помощью датчика случайных величин.
Для запуска датчика случайных величин в Паскаль нужно прописать специальную конструкцию — Randomize;
Новое значение генерируется с помощью функции Random(n) ,где n – целое число. В таком случае генерируется любое число с диапазоном от 0 до n.
Если функция Random используется без параметра, то она генерирует вещественное число (тип real) в диапазоне 0 Автор: bigspawn100 на 1/27/2012
Источник
Массивы в Паскале. Одномерные массивы
Предположим, что программа работает с большим количеством однотипных данных. Скажем около ста разных целых чисел нужно обработать, выполнив над ними те или иные вычисления. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже выражение вычисления значения? Это очень неэффективно.
Есть более простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.
Нужно четко понимать, что индекс ячейки массива не является ее содержимым. Содержимым являются хранимые в ячейках данные, а индексы только указывают на них. Действия в программе над массивом осуществляются путем использования имени переменной, связанной с областью данных, отведенной под массив.
Итак, массив – это именованная группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы (хотя в языке программирования Pascal чаще всего именно с нее). Порядковый номер элемента массива называется индексом этого элемента.
Помним, все элементы определенного массива имеют один и тот же тип . У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer , а другой – из чисел типа real .
Индексы элементов массива обычно целые числа, однако могут быть и символами, а также описываться другими порядковыми типами. Т.е. для индекса можно использовать тип, в котором определена дискретная последовательность значений, и все эти значения можно пересчитать по порядку. Индексировать можно как константами и переменными, так и выражениями, результат вычисления которых дает значение перечислимого типа.
Если индекс массива может приобретать все допустимые значения определенного перечислимого типа, то при описании массива возможно задание имени типа вместо границ изменения индекса. При этом границами индекса будут первое и последнее значения в описании типа индекса. Границы изменения индексов могут задаваться с помощью ранее объявленных констант. Рекомендуется предварительно объявлять тип массива в разделе описания типов.
Массив можно создать несколькими способами.
Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента.
Простой массив является одномерным . Он представляет собой линейную структуру.
В примере выделяется область памяти под массив из 11 символов. Их индексы от 1 до 11. В процессе выполнения программы пользователь вводит 11 любых символов (например, ‘q’, ’w’, ’e’, ’2’, ’t’, ’9’, ’u’, ’I’, ’I’, ’o’, ’p’), которые записываются в ячейки массива. Текущее значение переменной i в цикле for используется в качестве индекса массива. Второй цикл for отвечает за вывод элементов массива на экран.
Функция sizeof , примененная к имени массива или имени массивного типа, возвращает количество байтов, отводимое под массив.
Источник
Массивы в PascalABC.NET
В PascalABC.NET рекомендуется использовать динамические массивы. В отличие от статических, они имеют огромное количество методов и операций, просты в создании, заполнении и выводе.
Описание и выделение памяти
Динамический массив описывается так:
Память под динамический массив a выделяется в момент работы программы:
Здесь — первое преимущество динамических массивов — в переменной a может храниться массив любого размера, память выделяется в процессе работы программы. Кроме того, выделенная память гарантированно автоматически заполняется нулевыми значениями.
Можно совместить описание и выделение памяти — тип динамического массива выводится автоматически:
Обычно в PascalABC.NET совмещают описание динамического массива, выделение памяти и заполнение значениями. Самый простой способ — заполнить n нулями:
Индексация в динамических массивах и использование статических массивов
Динамические массивы индексируются с нуля — это эффективно. В качестве индексов в динамических массивах могут выступать только целые.
Статические массивы тем не менее иногда удобно использовать — в задачах, где индексы либо символьные, либо по-существу начинаются не с нуля. Например, для подсчёта количества слов на каждую букву может использоваться стаический массив
Заполнение статических массивов — увы — производится в цикле. Кроме того, они не помнят свою длину и передача таких массивов в качестве параметров подпрограмм связана с техническими сложностями 40-летней давности, не нужными начинающим.
Простейшее заполнение
Важную роль играют функции заполнения динамических массивов. Перед заполнением они выделяют для массива память, поэтому в одной строке можно совмещать описание, выделение памяти и заполнение.
Простейшее заполнение — набором значений:
Заполнение диапазоном целых или символьных значений делается с использованием функции Arr:
Заполнение определённым значением осуществляется с помощью операции умножения массива на число:
Для заполнения можно также использовать функцию ArrFill:
Для заполнения массива случайными значениями следует использовать
Не рекомендуется использовать алгоритм для заполнения массива случайными в каждой задаче:
Повторять этот текст в каждой задаче — странно. Для этого есть стандартные функции.
Ввод и вывод элементов массива
Для ввода элементов массива базовых типов используются функции
Стандартная процедура вывода Write или Print выводит значения в массиве в квадратных скобках черезх запятую:
Однако лучше всего для вывода воспользоваться методом Print, выводящим все значения в массиве через пробел:
Не рекомендуется вводить и выводить элементы массива в цикле
Повторять этот текст в каждой задаче — странно. Для этого есть стандартные функции.
Циклы по массиву
Для обработки элементов массива используются следующие циклы:
- Цикл for по индексам (если требуется менять элементв или нужна информация об индексах)
Пример. Найти количество чётных элементов, стоящих на чётных местах
Методы массива
Массивы содержат большое количество стандартных методов:
Кроме того, доступны процедуры
Методика. Обращаем внимание, что в методических целях естественно рассказывать, как эти алгоритмы устроены “внутри”. Но потом следует пользоваться стандартными алгоритмами, а не заставлять учеников во всех задачах использовать рукописные сортировки или рукописный поиск минимума. Например, рекомендуется показать, как накопить сумму элементов массива:
Здесь следует обратить внимание, что этот алгоритм может быть легко модифицирован в алгоритм нахождения суммы элементов по условию: например, всех чётных элементов:
Отметим, что заполнение случайными и вывод — это технические части программы, которые делаются в PascalABC.NET в одну строку, позволяя концентрироваться на алгоритме.
Если условие надо накладывать на индексы, то в этом случае (и только в этом случае) следует использовать цикл for по индексам:
Для нахождения суммы без условия необходимо использовать стандартный метод a.Sum:
Отметим также, что для поиска суммы по условию также имеется короткая однострочная запись. Она требует использование стандартного метода Where с параметром, являющимся лямбда-выражением. Лямбда-выражения мы будем рассматривать далее:
Методика. Поскольку данная запись использована здесь впервые, обращаем внимание на её высокую универсальность: алгоритмы фильтрации и поиска суммы не слиты в один алгоритм, а используются порознь один за другим, что позволяет:
- Лучше читать код (потому что он записан компактно и методами с понятными и очевидными названиями)
- Лучше модифицировать код
- Решать более сложные и более прикладные задачи за одно и то же время урока
Далее лямбда-выражения объясняются подробно и тщательно и используются повсеместно.
Операции с массивами
Изменение размера динамического массива
Если в процессе работы программы требуется чтобы динамический массив менял свой размер, то следует … пользоваться типом List ! Это — динамический массив с возможностью эффективного измненения размера и рядом дополнительных методов. Основным является методы Add — добавить в конец:
Для первоначального заполнения списков List используется короткая фунеция Lst:
При необходимости список List можно преобразовать к динамическому массиву, вызвав метод .ToArray:
Большинство методов, которые имеются в массивах, есть и в списках List. Поэтому выбор типа List или array of для контейнера при решении задач определяется тем, будет ли данный контейнер расширяться по ходу работы программы.
Источник