Массивы данных в Турбо Паскале

Основные данные о работе

Версия шаблона

2.1

Филиал

Петрозаводский

Вид работы

Курсовая работа

Название дисциплины

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

Тема

Массивы данных в Турбо  Паскале

Фамилия студента

Приймак

Имя студента

Ольга

Отчество студента

Владимировна

№ контракта

0800211400609013


 

 

 
 

Содержание

Введение…………………………………………………………………………….3

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

2 Двумерные массивы…………………………………………………………….12     

Заключение………………………………………………………………………...18

Глоссарий………………………………………………………………………….20

Список использованных источников……………………………………………22

Список сокращений……………………………………………………………….23

Приложения……………………………………………………………………….24

Введение

Цели: углубление знаний и расширение навыков по разработке массивам и их реализации на персональном компьютере

Задачи: рассмотреть массивы, дать им определение, наглядно обрисовать задачи и их решения.

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

Массив - это именованная  группа однотипных данных, хранящихся в последовательных ячейках памяти. Каждая ячейка содержит элемент массива. Элементы нумеруются по порядку, но необязательно начиная с единицы. Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Структура массива всегда однородна. Массив может состоять из элементов типа integer, real или char, либо других однотипных элементов. Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу). Индекс - это переменная типа INTEGER. В одномерном массиве элементы массива нумеруются одним индексом. Нужно четко понимать, что индекс ячейки массива не является ее содержимым. Содержимым являются хранимые в ячейках данные, а индексы только указывают на них. Действия в программе над массивом осуществляются путем использования имени переменной, связанной с областью данных, отведенной под массив.

Массивом называется набор данных одного типа, расположенный в оперативной памяти. К элементу массива можно обратиться по его индексу (номеру). В памяти ЭВМ все элементы массива располагаются подряд. Каждый из индексов массива находится в некотором диапазоне (<нач. элемент>…<кон. элемент>). Причем конечный элемент больше либо равен начальному элементу. В качестве диапазона можно использовать: Integer, Char, Boolean. Очень часто это целочисленный тип (integer, word или byte), но может быть и логический и символьный. У разных массивов типы данных могут различаться. Например, один массив может состоять из чисел типа integer, а другой - из чисел типа real.

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

<переем. массив>: array[<диапазон 1>..<диапазон N>]<тип переменной>;

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

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

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

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

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

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

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

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

Основная часть

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

 

МАССИВ ДАННЫХ [array, data file] (или информационный массив) — совокупность однородных записей (т. е. наборов данных, характеризующих какой-либо объект управления, процесс и т. д.), рассматриваемых как одно целое и упорядоченных таким образом, что их описание (набор индексов) однозначно определяет положение каждого элемента или путь доступа к нему (напр., картотека материалов в отделе снабжения завода). Простейшее упорядочение данных — их нумерация в виде списка (одномерный массив). Но обычно производственные данные представляются в виде таблиц, которые содержат данные двух видов: постоянную часть (заголовок таблицы, названия строк и столбцов) и переменную часть — собственно показатели таблицы (матрицы). Запись таблиц осуществляется при этом двумя способами: при первом подряд записываются все элементы матрицы, включая нулевые — их легко находить по порядковому номеру записи. При втором, чтобы сделать запись экономнее, в массив включают только значащие элементы и каждому из них дают индекс, признак его места в таблице (напр., номер столбца и номер строки) — это двухмерное упорядочение массива. Применяется и трехмерное упорядочение.

Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным, или одномерным.

Одномерный массив – это фиксированное количество элементов одного типа, объединенных одним именем, причем каждый элемент имеет свой уникальный номер, и номера элементов идут подряд.

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

Тип массив описывается следующим образом:

Type      

Имя типа = Array [тип индекса (ов)] Of  тип элементов;

Var      

Имя переменной: имя типа;

Переменную типа массив можно описать сразу в разделе описания переменных Var:

Var   Имя переменной: array [тип индекса (ов)] Of  тип элементов;

  • Array – служебное слово (в переводе с английского означает «массив»);
  • Of – служебное слово (в переводе с английского означает «из»).
  • Тип индекса – любой порядковый тип, кроме типов integer, longint.
  • Тип же самих элементов может быть любым, кроме файлового типа.
  • Количество элементов массива называется его размерностью.Несложно подсчитать, что при последнем способе описания множества индексов размерность массива равна: максимальное значение индекса – минимальное значение индекса + 1.

Например:

Type      

mas = array [1..20] of  real;

Var  X: mas;

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

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

Индексы элементов массива могут  начинаться с любого целого числа, в  том числе и отрицательного, например:

Type bb = Array [-5..3] Of Boolean;

Массивы данного типа будут содержать 9 логических переменных, пронумерованных от -5 до 3.

Ввод и вывод одномерных массивов в Паскале

Ввод и вывод массивов осуществляется поэлементно.

Введем одномерный массив Х, состоящий из 30 элементов, то есть необходимо ввести некую последовательность элементов Х1, Х2, …, Х30.

Пусть i – индекс (порядковый номер) элемента в массиве Х. Тогда

Х– i-й элемент массива Х, где i = 1, 2, …, 30.

Для ввода массива  можно использовать любой цикл.

Первый вариант: ввод массива с использованием цикла с предусловием (Рисунок 1).

Program Primer_1;

Var i: integer;    

 X: array [1..30] of Integer;

Begin    

i := 1;     

While i <= 30 Do         

Begin           

Read (X[i]); i := i + 1          

End;      

 Readln

End.

Можно ввести с клавиатуры элементы следующим образом:

-7 _ 4 _ -2 _ 0 _ 12 _ -1 _ -5 _  9 _ 11 _ -3 _ -5 _ … _15, то есть через пробел ввести в строчку и нажать клавишу Enter.

Можно было ввести элементы в столбец,   отделяя элементы клавишей Enter, то есть каждый элемент с новой экранной строки:

-7 Enter 

4 Enter

-2 Enter 

 … 

 … 

 … 

15 Enter

В первом варианте ввод массива Х в программе осуществляется с использованием цикла с предусловием.

Второй вариант: ввод массива с использованием цикла с постусловием (Рисунок 2).

Program Primer_2;

Var i: integer;    

X: array [1..30] of Integer;

Begin    

i := 1;    

Repeat          

Read (X[i]); i := i + 1     

Until i > 30;      

Readln

End.

Массив X введен с использованием цикла с постусловием.

Третий вариант: ввод массива с использованием цикла с параметром (Рисунок 3).

Program Primer_3;

Var i: integer;    

X: array [1..30] of Integer;

Begin     

For i := 1 To 30 Do Read (X[i]);    

 Readln

End.

Массив вводится с помощью цикла  с параметром, где в качестве параметра используется индекс элемента массива (i).

Вывод одномерного массива осуществляется аналогично.

В программе вместо операторов Read или Readln используются операторы Write или Writeln. Но просто заменить одни операторы  на другие здесь недостаточно. Для  того чтобы выводимые значения не сливались между собой, надо явным образом вставлять между ними разделитель – пробел или перевод строки. Приведем два возможных способа вывода массива:

  • For i := 1 To n Do Write (X[i],’ ‘);
  • For i := 1 To n Do Writeln (x[i]).

На первый взгляд второй способ может показаться более простым и удобным, но это далеко не всегда так. Результат работы такой программы зачастую неудобно, а то и просто невозможно анализировать. Ведь каждый элемент массива будет располагаться в отдельной строке, следовательно, мы не сможем увидеть более 25 элементов одновременно. Кроме того, очень часто массив требуется распечатать дважды, чтобы сравнить состояние массива до обработки и результат его обработки. В этом случае сравнение состояний массива гораздо удобнее проводить, если они распечатаны в двух соседних строках, а элементы выровнены по столбцам, то есть к варианту 1 должна быть добавлена еще и форматная печать (указано количество позиций, которое должно отводиться на печать одного элемента).

Например, выведем одномерный массив Х1, Х2, …, Хn, состоящий из элементов вещественного типа, используя цикл с параметром (Рисунок 4):

Program Primer_4;

Const n = 30;

Var i: Integer;    

X: Array [1..n] Of Real;

Begin        

For i:= 1 To n Do Write (X[i] : 6 : 2,  ‘ ‘);         

 Writeln; {курсор переводит на новую строку}        

Readln

End.

Алгоритмы сортировки одномерных массивов. Сортировка - один из наиболее распространённых процессов современной  обработки данных.

Сортировкой называется распределение элементов массива в соответствии с определёнными правилами. Например, сортировка массива по возрастанию или убыванию его элементов. Описание типа линейного массива выглядит так:

<Имя типа>=Array [<Диапазон  индексов>] Of <Тип элементов>;

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

Одномерный массив можно  задать (объявить) двумя способами:

C помощью служебного слова TYPE описывается тип массива, а затем с помощью VAR вводится переменная этого типа.

Общая форма записи

<тип массива> = ARRAY [тип индекса] OF <тип компонент>;<переменная>: <тип массива>;

С помощью слова VAR сразу  описывается переменная типа массив.

Общая форма записи

<переменная>: ARRAY [тип  индекса] OF <тип компонент>;

Описать переменную-массив можно и сразу (без предварительного описания типа) в разделе описания переменных:

<Переменная-массив> : Array [<Диапазон индексов>] Of <Тип  элементов>;

Примеры описания массивов:

Var, BB : Array [1..40] Of Real;: Array ['A'..'Z'] Of Integer;: Array [-20..20] Of Word;: Array [1..40] Of Real;

Теперь переменные S, BB и T представляют собой массивы из сорока вещественных чисел; массив N имеет  индексы символьного типа и целочисленные элементы; массив R может хранить в себе 41 число типа Word.

Единственным действием, которое возможно произвести с массивом целиком - присваивание. Для данного  примера описания впоследствии допустима  следующая запись:=BB;

Но присваивать можно только массивы одинаковых типов. Даже массиву T присвоить массив S нельзя, хотя, казалось бы, их описания совпадают, произведены они в различных записях раздела описания.

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

 

2 Двумерные массивы 

 

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

Описание двумерного массива Паскаля.

Существует несколько способов объявления двумерного массива Паскаля.

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

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

Type

Vector = array [1..5] of <тип_элементов>;

Matrix= array [1..10] of vector;

Var m: matrix;

Мы объявили двумерный  массив Паскаля m, состоящий из 10 строк, в каждой из которых 5 столбцов. При  этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i , j ].

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

of <тип элементов>;

Обращение к элементам  двумерного массива имеет вид: M [ i , j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце. Тут главное не перепутать строки со столбцами, а то мы можем снова получить обращение к несуществующему элементу. Например, обращение к элементу M [10, 5] имеет правильную форму записи, но может вызвать ошибку в работе программы.

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

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

type

matrix= array [1..5, 1..10] of integer;

var

a , b : matrix ;

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

Ввод двумерного массива  Паскаля

Для последовательного  ввода элементов одномерного  массива использовался цикл for, в котором изменяли значение индекса с 1-го до последнего. Но положение элемента в двумерном массиве Паскаля определяется двумя индексами: номером строки и номером столбца.

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

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

type

matrix= array [1..5, 1..10] of integer;

var

a, : matrix;

i, j: integer; { индексы массива }

begin

for i :=1 to 5 do {цикл для  перебора всех строк}

for j :=1 to 10 do {перебор всех  элементов строки по столбцам}

readln ( a [ i , j ]); {ввод с  клавиатуры элемента, стоящего в i -й строке и j -м столбце}

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

Вывод двумерного массива  Паскаля на экран

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

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

for i :=1 to 5 do {цикл для  перебора всех строк}

begin

for j :=1 to 10 do {перебор всех  элементов строки по столбцам}

write ( a [ i , j ]:4); {печать  элементов, стоящих в i -й строке матрицы в одной экранной строке, при этом для вывода каждого элемента отводится 4 позиции}

writeln ; {прежде, чем сменить  номер строки в матрице, нужно  перевести курсор на начало  новой экранной строки}

end ;

Двумерный массив (т.е. таблица, матрица, набор векторов) - это пример массива, в котором элементы нумеруются двумя индексами. 
В качестве индекса элемента массива используется выражение порядкового типа  (integer). 
Размер двумерного массива - количество элементов в массиве M*N, где М- число строк, N- число столбцов (натуральные числа).

У любого массива должно быть имя. Пусть у массива будет  имя A, тогда к любой компоненте массива можно обратиться по адресу – A[i,j] или A[i][j], где индекс i – номер строки, а индекс j – номер столбца.

Квадратная матрица – матрица с равным числом строк и столбцов.

Порядок матрицы – число строк (столбцов) квадратной матрицы.

Для квадратной матрицы  вводятся понятия главной и побочной диагонали, которые обладают следующими свойствами: 1) у элементов, лежащих на главной диагонали, номер строки и номер столбца совпадают, т.е. i=j; 2) у элементов, лежащих на побочной диагонали номер строки и номер столбца связаны следующим соотношением, если i – номер строки, то номер столбца j=N-i+1.

Описание двумерного массива

Тип описания массива может быть задан одним из способов:

1) Type  tm1=array[ti2] of tk;  

           tm2=array[ti1] of tm1;  

где tm1 – тип массива, ti2 – тип индекса, tk – тип компонент одномерного массива,

tm2 – тип массива, ti1 – тип индекса, tm1 – тип компонент двумерного массива

Из этого описания видно, что двумерный массив – это одномерный массив, у которого компоненты – одномерный массив.

Так как массивы относятся к произвольным типам, то их можно описывать как через раздел TYPE так и через раздел VAR.

Заполнение двумерного массива

Заполнение по строкам:

А[1,1]

А[1,2]

А[1,3]

А[1,4]

А[1,5]

А[2,1]


Для заполнения матрицы  организуется наружный цикл по i, внутренний – по j (при условии, что i- строки, j –столбцы). При этом индекс строки i меняется медленнее индекса столбца j за счет того, что происходит постепенный перебор всех элементов строки, т.е. столбцов i-й строки.

Заполнение по столбцам:

А[1,1]

А[1,2]

А[2,1]

А[3,1]

A[4,1]


 

Заполнение двумерного массива возможно по строкам и столбцам, каждый из элементов можно вводить:

С  клавиатуры.

Например:

Write(‘Введите число  строк M= ‘); readLn (M);

Write(‘Введите число  столбцов N= ‘); readLn (N);

for i:=1 to M do

begin

   for j:=1 to N do

       begin

           write(‘Введите элемент A[',i,',',j,']=’);

           read(A[i,j]);

      end;

   readLn;           

end;

С  помощью генератора случайных чисел;

randomize;

writeLn(‘Матрица А:’);

FOR i:= 1 to M DO {наружный цикл по строкам}

begin

FOR j:=1 TO N DO {внутренний цикл по столбцам}

begin

A[i,j]:= random(10);

write(A[i,j]:3); {печатаем подряд всю строку}

end;

В этих примерах заполнение показано по строкам. Если порядок выполнения циклов поменять, то заполняться массив будет по столбцам.

Вывод двумерного массива осуществляется аналогичным образом.

{Вывод матрицы}

writeLn(‘Результирующая  матрица A:’);

for i:=1 to M do               

begin

for j:=1 to N do

write(A[i,j],’ ‘);

writeLn;

end;

 

 

 
 

Заключение

В данной Курсовой работе было рассмотрено основное понятие массивов.

На данный момент мировая  компьютерная индустрия развивается  очень стремительно. Производительность систем возрастает, и поэтому возрастают возможности обработки больших  объёмов данных. С каждым годом программы более усовершенствуются, поэтому работать в них становиться все легче, но, на мой взгляд, программа Турбо Паскаль таит в себе много сложностей, в которых можно долго разбираться, но в ней можно освоить основные приёмы решения задач и составления программ. Вот, например, очень часто в программах встречается ошибка, когда ввод с клавиатуры или вывод на экран массива пытаются осуществить следующим образом: readln (a), writeln (a), где а – это переменная типа массив. В сообщении написано, что переменную этого типа невозможно считать или напечатать. Заполнение и вывод на экран элементов массива также должно осуществляться последовательно и поэлементно, т.к. в памяти ЭВМ элементы массива располагаются в последовательных ячейках, т.е. друг за другом заполняются ячейки.

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

Глоссарий

№ п/п

Понятие

Определение

1

Алгоритм

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

2

Диапазон

интервал значений какой-либо величины

3

Индекс

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

4

Массив

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

5

Матрица

двумерный массив

6

Объект

некоторая сущность в виртуальном пространстве, обладающая определённым состоянием и поведением, имеющая заданные значения свойств (атрибутов) и операций над ними (методов). Как правило, при рассмотрении объектов выделяется то, что объекты принадлежат одному или нескольким классам, которые определяют поведение (являются моделью) объекта. Термины «экземпляр класса» и «объект» взаимозаменяемы.

7

Операция

конструкция в языках программирования, аналогичная по записи математическим операциям, то есть специальный способ записи некоторых действий. Наиболее часто применяются арифметические, логические и строковыеоперации. В отличие от функций, операции часто являются базовыми элементами языка и обозначаются различными символами пунктуации, а не алфавитно-цифровыми; они имеют специальный инфиксный синтаксис и нестандартные правила передачи аргументов. Терминология, однако, несколько отличается от языка к языку.

8

Паскаль 

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

9

Переменная

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

10

Цикл 

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

Массивы данных в Турбо Паскале