Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Массивы — структурированный тип данных

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

А вот указывать для каждой ячейки отдельное имя — неудобно. Как быть?

 

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

 

Хранение однотипных данных в виде таблицы

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

Все элементы массива имеют один и тот же тип. Сам массив при этом имеет имя — одно для всех элементов. Для обращения к конкретному элементу массива необходимо указать имя массива и (в квадратных скобках) индекс элемента.

Простейший вид массива — одномерный массив (рис. 8.1).

Рис. 8.1. Условное изображение одномерного массива в виде строки

А — имя массива, числа в клетках таблицы — элементы массива.
Рассмотрим запись А[3] = -8.

В этой записи:
А — имя массива,
3 — номер элемента массива (индекс),
А[3] — обозначение 3-го элемента массива,
-8 — значение 3-го элемента массива.

 

Основные действия по работе с массивами

Нам предстоит научиться выполнять ряд наиболее распространенных действий с массивами:

описание;
заполнение массива случайными числами;
заполнение массива с клавиатуры;
вывод на экран;
поиск максимального элемента;
вычисление суммы всех элементов массива;
вычисление количества положительных элементов.

 

Описание массива на языке Паскаль

<Имя массивам array [<тип индекса>] of<Tnn компонентов>;

Здесь <тип компонентов> — это тип данных, который имеет каждый элемент массива, а <тип индекса> — границы изменения индекса.

Например:
var A: array [1..10] of integer;

Здесь тип индекса — интервальный, изменяется в интервале от 1 до 10, тип данных (элементов массива) — целый.

 

Заполнение массива случайными числами и вывод массива на экран

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

Рис. 8.2. Блок-схема алгоритма заполнения одномерного массива случайными числами и вывода массива на экран

Пример 8.1.
Основные действия по работе с массивами

Program Massivl;
uses Crt;
const { Раздел описания констант, то есть постоянных величин, определяемых в программе заранее и не изменяющихся по ходу выполнения программы }
N=10; { Имена констант не используются для имен переменных величин (из раздела var) }
var
A: array [1..N] of integer; { 1..N - тип индекса. Для индекса выбран интервальный тип, то есть интервал целых чисел от 1 до N, где N определено в разделе const }
i: ihteger; { Переменная, хранящая индекс элемента массива, к которому идет обращение }
begin
{II. Задание значений элементов массива как случайных чисел }
Randomize; { Инициализация датчика случайных чисел }
{ Задание элементов массива: }
for i:=1 to N do { Переменная i изменяется в цикле от 1 до N, то есть мы по очереди перебираем все элементы массива }
A[i]:=Random(100); { В очередной элемент массива A[i] записываем случайное число от 0 до 99, обратите внимание: i - номер элемента массива (принято говорить "индекс"), A[i] - значение элемента массива }
{ III. Вывод элементов массива на экран в одну строку }
ClrScr;
writeln('Введенный массив:');
for i:=l to N do
write(A[i]:4); { На каждый элемент массива выделяется по 4 позиции строки, чтобы они не склеивались при выводе!}
writeln { Этот "пустой" оператор вывода отработает только один раз и переведет курсор на новую строку для дальнейшей работы }
readln
end.

 

В данном примере мы заполнили массив случайными числами от 0 до 99. Это обеспечила нам функция random(100).
А если нам нужно получить случайные числа в другом диапазоне — например, не от нуля? Расчет нужно сделать такой: функция random(N) выдаст N различных чисел от 0 до N - 1. Если нам нужно, чтобы наименьшим числом диапазона было К, значит, необходимо прибавить это К к random(N). Наибольшее число, которое будет выдавать в этом случае формула random(N) + К, будет наибольшим числом диапазона.

Пусть, например, нам требуются случайные числа в диапазоне -100...+100. Считаем, сколько различных чисел в этом диапазоне: 100 положительных, 100 отрицательных и ноль. Итого 201.
Формула тут проста: вычесть из большего меньшее и прибавить 1.
Значит, N = 201, а К = -100.
То есть получаем формулу random(201) -100.

 

ЗАМЕЧАНИЕ

К сожалению, в таком виде формула работать не будет — при запуске программа «вылетит» с сообщением об ошибке. Это от «излишнего ума», который проявляет здесь среда Паскаль. Дело в том, что Паскаль считает тип этого выражения по функции random. А она имеет
тип word . Иными словами, беззнаковый. При попытке вычесть 100 из числа, меньшего 100, получаем отрицательный результат, что Паскаль не устраивает. Самый простой способ обойти эту напасть — паменять местами уменьшаемое (random) и вычитаемое, то есть написать: -100 + random(201). Тогда Паскаль будет считать тип этого выражения как integer по первому числу (-100), и оишбки не возникнет.

 

Задание 8.1.
Оформите эту программу так, чтобы задание массива и вывод его элементов на экран выполнялись в одном цикле. Вам понадобится составной оператор для тела цикла begin ... end.

Задание 8.2.
Добавьте в программу задания 8.1 новый цикл вывода элементов массива в обратном порядке (начиная с последнего). Попробуйте выполнить то же задание без введения нового цикла.

 

ЗАПОМНИТЕ!

Массив — это множество ячеек памяти. Поэтому любое действие с массивом заключаемся в том, чтобы перебрать все эти ячейки или, по крайней мере, какую-то их часть. Это значит, что любое действие с массивами должно содержать в себе цикл, в котором перебираются элементы массива. Если вы пишете программу с массивом и не написали цикла (for, while или repeat) — значит, вы ошиблись.




 

Комментарии:

2012-10-22 ответил Мария

Мне понравилось! Содержательно и понятно)



2013-11-07 ответил Данил

Спасибо, помогло!



2014-08-18 ответил Антон

Спасибо большое



2014-10-11 ответил Виталий

"Если вы пишете программу с массивом и не написали цикла (for, while или repeat) — значит, вы ошиблись." Лол xD



2014-11-30 ответил Массив

Заполнение массива



2015-12-20 ответил Диёра

спасибо)



2016-10-05 ответил Саша

Р?нтересно Рё познавательно &#128121;



2016-10-05 ответил Саша

Р?нтересно Рё познавательно &#128121;



2016-10-15 ответил SeoG

Спасибо, содержательно и не слишком мудрено




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


Введите значение:
 









   
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru