Автор работы: Пользователь скрыл имя, 07 Февраля 2013 в 06:04, курсовая работа
С развитием вычислительной техники образовались два основных направления ее использования. Это выполнение численных расчетов и использование средств вычислительной техники в автоматических или автоматизированных системах. Информационная система представляет собой программно-аппаратный комплекс, выполняющий функции поддержки надежного хранения информации в памяти компьютера, выполнении определенных преобразований информации, предоставления пользователям удобного интуитивно понятного интерфейса.
Оглавление
Введение
С развитием вычислительной техники образовались два основных направления ее использования. Это выполнение численных расчетов и использование средств вычислительной техники в автоматических или автоматизированных системах. Информационная система представляет собой программно-аппаратный комплекс, выполняющий функции поддержки надежного хранения информации в памяти компьютера, выполнении определенных преобразований информации, предоставления пользователям удобного интуитивно понятного интерфейса.
Хранение данных в памяти компьютера на низком уровне происходит путем выделения области памяти для хранения данных, а обращение к данным происходит путем считывания содержимого из указанных ячеек памяти с определенным адресом. В языках высокого уровня обращение к этим областям памяти осуществляется через специальные указатели, на которые ссылаются объявленные в программе переменные. Переменные в языке высокого уровня могут быть разного типа, такие как целочисленные, с плавающей точкой, строковые, символьные и т.д. Они очень удобны для хранения некоторых обособленных данных. Но когда необходимо оперировать множеством однотипных данных, лучше всего использовать массивы.
Например, вместо использования двенадцати строковых переменных, хранящих название месяцев, массив позволяет, обратившись к одному идентификатору и указывая целочисленный индекс как номер месяца, получить название нужного месяца.
Но задача получения какого-то конкретного элемента массива возникает гораздо реже необходимости последовательной обработки каждого элемента массива. Для этого используются различные конструкции языка высокого уровня по организации программ циклической структуры.
Таким образом, конструкции языка высокого уровня по организации программ циклической структуры и по работе с массивами являются важнейшими инструментами решения обширных задач.
В данной работе будет рассмотрены способы работы с массивами и организации циклов в языке высокого уровня Object Pascal.
Для лучшего понимания принципов и способов работы с массивами необходимо провести следующие исследования:
В первой части:
- Изучить синтаксические
конструкции языка,
- Изучить способы создания массива, способы первичного заполнения массива
- Изучить способы и механизмы получения элемента массива по его индексу
- Изучить способы изменения элемента с указанным индексом.
Во второй части:
- Изучить синтаксис циклических операторов
- Рассмотреть различные
способы организации циклов, обозначить
особенности различных
- Рассмотреть возможность применения каждого оператора для работы с массивом
В третьей, практической части:
- Составить программу, работающую с массивами и использующую операторы организации циклов
В этой работе рассматривается некоторые конструкции языка высокого уровня, который уже создан, эти конструкции реализованы программистами, создавшими компилятор и среду разработки.
2.2 Массивы
Массив — это
Таблица 1
Массив значений температур
№ элемента |
1 |
2 |
3 |
… |
364 |
365 |
температура |
-11 |
-15 |
-20 |
-30 |
-15 |
Такого рода массив, представляющий собой просто список данных одного и того же типа, называют простым, или одномерным массивом. Для доступа к данным, хранящимся в определенном элементе массива, необходимо указать имя массива и порядковый номер этого элемента, называемый индексом. Если возникает необходимость хранения данных в виде таблиц, в формате строк и столбцов, то необходимо использовать многомерные массивы.
В таблице 2 приведен пример массива, состоящего из трех строк и четырех столбцов. Это двумерный массив. Строки в нем можно считать первым измерением, а столбцы — вторым. Для доступа к данным, хранящимся в этом массиве, необходимо указать имя массива и два индекса, первый должен соответствовать номеру строки, а второй — номеру столбца, в которых хранится необходимый элемент.
Таблица 2
Двумерный числовой массив
Номера столбцов | |||||
1 |
2 |
3 |
4 | ||
Номера строк |
1 |
5.555 |
7.000 |
4.300 |
-3.400 |
2 |
-1.000 |
7.522 |
8.000 |
44.000 | |
3 |
12.000 |
8.000 |
2222.000 |
-10.234 |
Для описания массива служат служебные слова array of. Размер массива не может быть меньше одно элемента. Это свойство массива называется «нулевой барьер». Описать массив можно двумя способами:
Ввести новый тип данных, а потом описать переменные нового
типа. В этом случае формат оператора type следующий:
type имя_типа = array [тип_индекса] of тип_компонентов;
В качестве типа_индекса следует использовать перечислимый тип, тип_компонентов — это любой ранее определенный тип данных, например:
type
massiv=array[0..11] of real;
//Тип данных massiv из 12 элементов,
//элементы нумеруются от 0 до 11.
dabc=array[-3..6] of integer;
//Тип данных dabc из 10 элементов,
//элементы нумеруются от -3 до 6.
var
x,y:massiv;
z: dabc;
Можно не вводить новый тип, а просто описать переменную следующим образом:
var
переменная: array [тип_индекса] of тип_переменной;
Например:
var
z, x: array[1..25] of word;
//Массивы z и x из 25 значений типа word,
//элементы нумеруются от 1 до 25.
g:array[-3..7] of real;
//Массив g из 11 значений типа real,
//которые нумеруются от -3 до 7.
Для описания массива можно использовать предварительно определенные константы:
const
n=10;
m=12;
var
a: array[1..n] of real;
b: array[0..m] of byte;
Константы должны быть определены до использования, так как массив не может быть переменной длины. Двумерный массив (матрицу) можно описать, применив в качестве базового типа (типа компонентов) одномерный:
type
massiv=array[1..200] of real;
matrica=array[1..300] of massiv;
var
ab:matrica;
Такая же структура получается при использовании другой формы записи:
Type
matrica = array [1..300,1..200] of real;
var
ab:matrica;
или
var ab:array [1..300,1..200] of real;
При всех трех определениях мы получали матрицу вещественных чисел, состоящую из 300 строк и 200 столбцов. Аналогично можно ввести трехмерный массив, или массив большего числа измерений[3]:
type
abc=array [1..4,0..6,-7..8,3..11] of real;
var b:abc;
При решении различных задач возникает необходимость оперировать некоторыми данными. Это могут быть числа, символы, строки, наборы строк. Например, для описания учетной карточки студента необходимо оперировать такими данными, как фамилия, имя студента – строка, пол – символ, дата рождения – дата, номер курса - число. Соответственно можно составить набор переменных, описывающих карточку студента для рассматриваемого примера:
Name: string; - имя студента,
Family: string; - фамилия,
Gender: char; - пол,
BirthYear, BirthMon, BirthDay: word; - дата рождения,
Course: integer; - номер курса.
Если же понадобиться написать программу, работающую со списком студентов в группе, встанет вопрос организации данных. Набор переменных, описывающих одного студента можно объединить в запись, создав новый тип:
Type
RStudent = record
Name: string;
Family: string;
Gender: char;
BirthYear, BirthMon, BirthDay: word;
Course: integer;
End;
Как быть со списком студентов? Заводить для каждого студента переменную типа Student – а сколько переменных заводить? Конечно, по количеству студентов в группе на факультете:10, 15 или 25. Получится примерно такой набор переменных:
Student1: RStudent; - фамилия первого студента в группе,
Student2: RStudent; - фамилия второго студента в группе,
…
StudentN: RStudent;- фамилия N-го студента в группе.
Вполне реализуемо, и
можно работать. Первая сложность
возникнет, когда потребуется
Как видно в рассматриваемом примере, список студентов группы есть список однотипных данных о студентах. Данные об одном студенте ни как не отличаются по форме от данных о другом студенте, все отличия только в содержимом. Можно считать список группы студентов списком однотипных данных. Для работы с такими списками применяются массивы.
2.2.3 Способы первичного заполнения массива
Для создания массива, содержащего названия месяцев года можно использовать такую конструкцию:
var
Months: array [1..12] of string;
Begin
Months[1] = ‘январь’;
Months[2] = ‘февраль’;
Months[3] = ‘март’;
. . .
Months[12] = ‘декабрь’;
End;
В разделе программы объявления переменных был объявлен массив Months, содержащий 12 строк.
В программе производится заполнение массива, каждому элементу массива присваивается соответствующее значение.
Можно задать массив при объявлении переменной в разделе Var или константой в разделе Const. В последнем случае буден определён массив констант и при попытке присвоения значения его элементам компилятор будет выдавать ошибку присвоения:
var
Months: array [1..12] of string = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
Если при объявлении переменной типа массив количество указанных значений не будет соответствовать размеру массива или типу элементов, это вызовет ошибку на этапе компиляции.
2.2.4 Способы и механизмы получения элемента массива по его индексу
При обращении к указанному индексу массива можно получить соответствующее этому индексу значение. Например, в рассматриваемом выше примере для получения названия 5-го месяца нужно обратиться к элементу массива с индексом 5:
Months[5] – будет получено название 5-го месяца: ‘май’.
Пример процедуры для получения текущей даты
Var
Months: array [1..12] of string[10] = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
Y, M, D, Dow: word;
Days : Array [0..6] Of String[11] = ('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота');
Result: string;
Begin
GetDate ( Y, M, D, Dow );
Result := ‘Сегодня ’.D.’ ‘.Months[M].’ ‘.Y.’, ‘.Days[Dow];
End;
В данном примере используется два массива символьных обозначений дней недели (массив Days) и месяцев (массив Month). Получение текущего дня недели происходит путем обращения к нумерованной ячейке массива Days по индексу, являющемуся днем недели. Получение названия месяца, соответственно, происходит путем обращения к массиву Months с индексом, являющимся номером месяца.
По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные — матрицами. Размер статических массивов не может быть изменен в процессе выполнения. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких изменений удобно определять индексные параметры в разделе констант:
сonst
Imax=10;
Jmax=20;
var
Mas: array[1..Imax, 1..Jmax] of integer;
Теперь для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе — раздел констант[4].
Данный приём позволяет гибко контролировать индекс не позволяя ему выходить за границы массива используя описанные выше константы в соответствующих условиях используемых операторов циклов, например:
const
Imin=1;
Imax=10;
var
i : integer;
Mas: array[Imin..Imax] of integer;
for i:=Imin to Imax do оператор;
for i:=Imax downto Imin do оператор;
//пример для while
i:=Imin;
while i <=Imax do
begin
Оператор1;
…
ОператорN;
…
i :=i +1;
end;
//пример для repeat…until
i:=Imin;
repeat
Оператор1;
…
ОператорN;
…
i :=i +1;
until i=Imax;
При выходе индекса за границы массива будет выдано сообщение об ошибке обращения к несуществующему элементу массива.
Информация о работе Создание программы циклической структуры. Работа с массивами