Тема 3.2. Структурированные типы данных. Одномерные массивы.Цель занятия. Содержание: Паскаль предлагает некоторые методы определения типов данных с помощью ранее определённых типов. Значения, принадлежащие к такому типу, представляют совокупности значений компонент, принадлежащих к определённым ранее типам. Такие составные значения называются структурированными. С учётом практических задач представления и использования данных универсальный язык программирования должен располагать несколькими методами структурирования. Основные методы позволяют строить следующие структуры: массив, запись, множество, строка и последовательность (файл). При решении как научно-технических, так и экономических задач часто обрабатываются совокупности простых значений. Например, программирование научно-технических задач связано с описанием действий над совокупностями значений, организованных в форме векторов и матриц, а экономических задач - над совокупностями различного вида документов. Рассмотрим небольшой пример: В последовательности из 10 чисел найти максимальный и разделить каждый из 10-ти элементов на найденный максимальный элемент. При определении максимального элемента последовательности можно было бы вводить числа по очереди в одну и ту же ячейку памяти, а максимальное из введенных переменных получить в другой переменной. При таком алгоритме решения первой части задачи после ввода следующего числа предыдущее пропадает, и для того чтобы решить вторую часть задачи понадобиться снова вводить те же самые числа. Следовательно, каким-то образом запоминать значения, из которых выбирается максимальный элемент. Такую возможность предоставляет использование массивов. Массив
это упорядоченная последовательность величин, обозначаемая одним именем. Упорядоченность заключается в том, что элементы массива располагаются в последовательных ячейках памяти. Массив
это структура данных, которую можно рассматривать как набор переменных одинакового типа, имеющих общее имя. Массивы удобно использовать для хранения однородной по составу информации, например, элементов таблицы, коэффициентов уравнений, матриц. Описывать массивы можно двумя способами: 1. Type <имя типа>= array[<номер 1 эл-та>..<номер последнего эл-та>] of <тип элементов>;
Var <имя массива>:<имя типа>;
2. var <имя массива>:array [<номер 1 эл-та>..<номер последнего эл-та>] of <тип элементов>;
Пример. Описать массив из 10 целых чисел, назвать его а. Решение. 1) Type Myarray=array[1..10]of integer;
Var a:MyArray;
2) Var a:array[1..10]of integer;
Чтобы получить доступ к нужному элементу массива, нужно указать имя массива
и индекс (номер) элемента массива. Пример. Пусть описан массив из 5 целых чисел: Var A:array [1..5] of integer;
И пусть первоначально все элементы массива равны 0, а третьему элементу массива мы хотим присвоить значение 9. Оператор присваивания будет иметь вид: A[3]:=9;
Для большей наглядности представим графически набор ячеек памяти компьютера, которые выделяются для хранения этого массива: Здесь I - порядковый номер элемента в массиве. Базовые алгоритмы работы с одномерными массивами. Ввод одномерного массива. Составить процедуру ввода элементов массива, состоящего из 10 целых чисел. Const n=10;
type mas=array[1..n]of integer;
Var a:mas;
Procedure wwod(var a:mas; Name:char);
var i:integer;
Begin
for i:=1 to n do
Begin
Write(Name,'[',i,']=');
ReadLn(a[i]);
End;
End;
Задание Составить процедуру ввода одномерного массива, состоящего из 15 вещественных чисел. Составить процедуру ввода одномерного массива, состоящего из 12 символов.
Ещё один способ заполнения массива - это задание его с помощью генератора случайных чисел, этот способ более удобен, когда много элементов в массиве. Составим программу заполнения массива случайными числами. Program wwod;
Const n=10;
Var a:array[1..n]of integer;
Begin
Randomize;
for i:=1 to n do
a[i]:=Random(121);
End.
Вывод одномерного массива. Составить процедуру вывода элементов массива, состоящего из 10 вещественных чисел. Const n=10;
Type Mass=array[1..n]of real;
Var a:Mass;
Procedure wywod(a:Mass);
Var i:integer;
Begin
For i:=1 to n do
Begin
write(a[i]:6:3,' ');
If i mod 5=0 then writeln
End;
End;
Суммирование элементов массива. Найти сумму элементов массива, состоящего из 12 целых чисел. Const n=12;
type mas=array[1..n]of integer;
Var a:mas; i,s:integer;
Procedure wwod(var a:mas; Name:char);
var i:integer;
Begin
for i:=1 to n do
Begin
Write(Name,'[',i,']=');
ReadLn(a[i]);
End;
End;
Begin
wwod(a,'a');
For i:=1 to n do
s:=s+a[i];
Write('s=',s:4);
Readln;
End.
Нахождение номеров элементов с заданными свойствами. Найти номера чётных элементов. Решение. Const n=10;
Type mas=array[1..n]of integer;
Procedure Solve(a:mas);
var i:integer;
Begin
For i:=1 to n do
If a[i] mod 2=0 then write(i:4);
End;
Суммирование двух массивов. Составить программу суммирования двух массивов одинакового размера. Program Sum;
Const n=10;
type mas=array[1..n]of integer;
Var a,b,c:mas; i:integer;
Procedure wwod(var a:mas; Name:char);
var i:integer;
Begin
for i:=1 to n do
Begin
Write(Name,'[',i,']=');
ReadLn(a[i]);
End;
End;
Procedure wywod(a:Mass);
Var i:integer;
Begin
For i:=1 to n do
Begin
write(a[i]:6:3,' ');
If i mod 5=0 then writeln
End;
End;
Begin
wwod(a,'a');
wwod(b,'b');
for i:=1 to n do
c[i]:=a[i]+b[i];
wywod(c);
Readln;
End.
Удаление элемента из массива. Требуется удалить k-й элемент из массива А размером N, состоящий из символов. Удалить k-й элемент массива можно сдвинув весь "хвост" массива, начиная с k+1 элемента влево. Const n=10;
type mas=array[1..n]of integer;
Var a:mas; i,k:integer;
Procedure wwod(var a:mas; Name:char);
var i:integer;
Begin
for i:=1 to n do
Begin
Write(Name,'[',i,']=');
ReadLn(a[i]);
End;
End;
Procedure wywod(a:Mass);
Var i:integer;
Begin
For i:=1 to n do
Begin
write(a[i]:6:3,' ');
If i mod 5=0 then writeln
End;
End;
Begin
wwod(a,'a');
Writeln('Введите номер элемента, который необходимо удалить');
for i:=k to n-1 do
a[k]:=a[k+1];
a[n]:=0;
wywod(a);
Readln;
End.
|