Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Понятие массивов, описание массивов в TurboPascal



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

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

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

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

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

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

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

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

В первом случае форма описания массива имеет вид:

Type

< имя типа массива> = array [< тип индекса> ] of < тип элемента>;

Var

< имя массива как переменной>: < имя типа массива>;

Во втором случае форма описания массива имеет вид:

Var

< имя массива как переменной>: array [< тип индекса> ] of < тип элемента>;

Здесь array означает массив (дословный перевод – " строй", " порядок" ), < тип индекса> – тип порядкового номера (обозначения) элементов массива, of – " состоящий из элементов типа", < тип элемента> – базовый тип элементов массива – тип данных, хранящихся в массиве.

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

Базовый тип элементов массива – любой тип данных Турбо Паскаля.

Например, в программе описание одномерного массива может иметь вид:

а) с использованием разделов типа и переменных:

Type

am = array [1..50] of real;

Var

A1: am;

б) с использованием только раздела переменных:

Var

A1: array [1..50] of real;

Массив как структурированный тип данных может иметь своим компонентом другой ком­понент структурированного типа, т.е. массив. Глубина вложенности структурированных типов данных есть величина произвольная. Количество выражений вида array [интервал] of в описании многомерного массива (имеющего два и более порядковых номеров у каждого элемента) не ограничено, однако суммарная длина внутреннего представления каждого массива не может быть больше 65520 байт.

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

а) с использованием раздела типов и раздела переменных:

Type

< имя типа массива> = array [< тип 1 индекса> ] ofarray [< тип 2 индекса> ] ofarray [< тип 3 индекса> ] … ofarray [< тип n индекса> ] of < базовый тип элементов>;

Var

< имя переменной>: < имя типа массива>;

б) с использованием только раздела переменных:

Var

< имя переменной>: array [< тип 1 индекса> ] ofarray [< тип 2 индекса> ] ofarray [< тип 3 индекса> ].. ofarray [< тип n индекса> ] of < базовый тип элементов>;

Например, в программе многомерные массивы можно описать с использованием:

а) разделов типа и переменных в виде

Type

Bm = array [1..50] of array [-3..5] of integer; {Двумерныймассивцелыхчисел}

Mass_3 = array [7..25] of array [-1..5] of array ['a'.. 'd'] ofreal; {Трёхмерный массив действительных (вещественных) чисел}

Var

d: Bm;

mas_0: Mass_3;

б) только раздела переменных в виде

Var

d: array [1.. 50] of array [-3.. 5] of integer;

mas_0: array [7.. 25] of array [-1.. 5] of array ['a'.. 'd'] of real;

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

а) разделов типа и переменных в виде

Type

Bm = array [1.. 50, -3.. 5] of integer;

Mass_3 = array [7.. 25, -1.. 5, 'a'.. 'd'] of real;

Var

d, f: Bm;

mas_0: Mass_3;

б) только раздела переменных в виде

Var

d, f: array [1.. 50] of array [-3.. 5] of integer;

mas_0: array [7.. 25] of array [-1.. 5] of array ['a'.. 'd'] of real;

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

Const

a: array [1..5] ofinteger = (1, 3, 5, 7, 9); {Одномерныймассив}

b: array [1..2, 1..5] ofchar = (‘a’, ’b’, ’c’, ’d’, ’e’), (’m’, ’n’, ‘o’, ‘p’, ‘q’); { Двумерныймассивиздвухстрокипятистолбцов}

В этом случае элементы массива " а" получат значения 1, 3, 5, 7 и 9, а элементы массива " b" – abcde

mnopq.

Действия над массивами

В Паскале различают действия над массивами как над целыми переменными и действия над элементами массивов.

Над массивами как целыми объектами допускается только одна операция – операция присваивания, в которой массивы одного типа являются операндами. Например, если раздел описаний программы имеет вид

type mas1 = array [1.. 50] ofinteger;

mas2 = array [1.. 50] of integer;

var a, b: mas1;

c, d: mas2;

то в разделе операторов программы допустимы операции a: = b; и d: = c; но недопустимы c: = a; и d: = a;

Здесь массив " а" будет являться точной копией массива " b", а массив " d" – точной копией массива " с", так как они имеют одинаковые типы друг с другом. Операции c: = a; и d: = a; недопустимы, так как массивы в левых и правых частях операторов имеют разные типы, а именно mas1 и mas2.

Действия над массивами как над целыми используют довольно редко.

Ввод данных в массивы

До начала работы необходимо заполнить массивы, то есть ввести в них данные. Ввод значений элементов массива можно выполнить несколькими способами: 1) с клавиатуры в ручном режиме, 2) в автоматическом режиме, предусмотренном программой, и 3) считыванием данных из файла в автоматическом режиме. Но во всех этих случаях для ввода данных должен использоваться цикл. Наиболее удобным, как правило, является цикл с параметром, так как размерность массива известна. Если массивы многомерные, то следует использовать вложенные циклы.

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

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

Например,

b [3] – третий элемент одномерного массива " b",

b [( i + l )*2] – элемент номера ( i + l )*2 одномерного массива " b",

d [5, 2] – элемент матрицы " d", расположенный в пятой строке и во втором столбце,

d [i, j] или d [i] [j] – элемент матрицы " d", расположенный в i-й строке и в j-м столбце.

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

 

Порядок выполнения работы

1. Разработайте алгоритм решения задачи в соответствии со своим вариантом.

2. Откройте текстовый редактор TurboPascal.

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

4. Отладьте программу.

5. Сохраните результаты работы программы.

Содержание отчета

Отчет оформляется индивидуально и содержит:

- титульный лист;

- наименование, цель и содержание работы;

- алгоритм и текст программы

- изображения экранов монитора с результатами работы программы;

- выводы по результатам работы.

 

Варианты заданий

 

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

 

1. Сформировать и вывести на экран последовательность из n элементов, заданных датчиком случайных чисел на интервале [-23, 34].

2. Найти произведение элементов одномерного массива, состоящего из n элементов. Элементывводятсясклавиатуры.

3. Найти сумму элементов одномерного массива. Элементы вводятся с клавиатуры.

4. Задан массив А, состоящий из n чисел. Найти среднее арифметическое его элементов. Элементывводятсясклавиатуры.

5. Найти сумму элементов массива с четными номерами, содержащего N элементов. Элементывводятсясклавиатуры.

6. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-19, 26]. Найти произведение элементов с нечетными номерами.

7. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-56, 47]. Найти произведение элементов с четными номерами, которые превосходят некоторое число t.

8. Найти наименьший элемент одномерного массива, состоящего из n элементов. Элементывводятсясклавиатуры.

9. Найти номер наименьшего элемента в массиве, заданного датчиком случайных чисел на интервале [-20, 25].

10. В заданном одномерном массиве, состоящем из n целых чисел, подсчитать количество нулей.

11. В заданном одномерном массиве, состоящем из n целых чисел, подсчитать количество четных элементов.

12. Найдите среднее арифметическое элементов массива, состоящего из 10 чисел, которые превышают по величине число С. Элементы вводятся с клавиатуры.

13. Найти произведение элементов целочисленного одномерного массива с четными номерами, состоящего из n элементов. Элементывводятсясклавиатуры.

14. В заданном одномерном массиве поменять местами соседние элементы.

15. Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из четных элементов массива А. Элементы вводятся с клавиатуры.

16. Массив А вводится с клавиатуры. Найти сумму его элементов.

17. Найти произведение элементов, кратных 3 в массиве, заданном датчиком случайных чисел на интервале [-28, 27].

18. Массив А вводится с клавиатуры. Найти среднее арифметическое его элементов с нечетными номерами.

19. Массив А вводится с клавиатуры. Найти сумму его элементов с четными номерами, произведение отрицательных элементов, количество нечетных элементов.

20. Найти наибольший элемент и его номер в последовательности, элементы которой вводятся с клавиатуры.

21. Найти средне арифметическое элементов последовательности, превосходящих некоторое число С. Массив задан датчиком случайных чисел на интервале [-44, 35]. Значение С вводится с экрана.

22. Массив А вводится с клавиатуры. Вывести только нечетные элементы.

23. Упорядочить данную последовательность по убыванию. Элементы вводятся с клавиатуры.

24. Упорядочить данную последовательность по убыванию. Массив задан датчиком случайных чисел на интервале [-54, 33].

25. Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из положительных элементов массива А.

26. Массив задан датчиком случайных чисел на интервале [-31, 45]. Сформировать новый массив В, состоящий из нечетных элементов массива А.

27. Массив А вводится с клавиатуры. Сформировать новый массив В, состоящий из положительных элементов массива А и найти в нем наибольший элемент.

28. Массив задан датчиком случайных чисел на интервале [-37, 66]. Найти наименьший нечетный элемент.

 

II. Разработайте алгоритм и программувыполняющую действия над двумерными массивами в соответствии с заданным вариантом. В программе предусмотреть вывод справочной информации (назначение программы, вид выполняемого действия, автор), возможность повторного выполнения программы. Вывод-вывод матриц организовать с использованием процедур или функций. Размерность матриц – 5х6, если не указано иное.

1. Сортировка произвольного столбца матрицы по убыванию.

2. Замена двух произвольных строк матрицы.

3. Нахождение максимального и минимального элемента матрицы.

4. Подсчёт кол-во столбцов в 2-мерном массиве, содержащих элемент равный заданному.

5. Найти и поменять местами максимальный и минимальный элементы матрицы.

6. Найти и поменять местами максимальный и минимальный элементы произвольной строки матрицы.

7. Подсчёт кол-во столбцов в 2-мерном массиве, содержащих элемент не превышающий заданное значение.

8. Суммирование двумерных матриц.

9. Замена двух произвольных столбцов матрицы.

10. Подсчёт кол-ва элементов в 2-мерном массиве равных заданному

11. Умножение двумерных матриц, размерность матриц 4х3 и 3х4.

12. Транспонирование матрицы.

13. Подсчёт кол-во строк в 2-мерном массиве, содержащих элемент превышающий заданное значение.

14. Сортировка произвольной строки матрицы по возрастанию.

15. Сортировка произвольной строки матрицы по убыванию.

16. Подсчёт кол-ва элементов в 2-мерном массиве в диапазоне, вводимом пользователем

17. Найти и поменять местами максимальный и минимальный элементы произвольного столбца матрицы.

18. Изменить все элементы матрицы на заданную пользователем величину.

19. Нахождение максимального и минимального элемента произвольной строки матрицы.

20. Подсчёт кол-ва элементов в 2-мерном массиве меньше заданного

21. Сортировка произвольного столбца матрицы по возрастанию.

22. Подсчёт кол-во строк в 2-мерном массиве, содержащих элемент не превышающий заданное значение.

23. Нахождение максимального и минимального элемента матрицы находящегося на главной диагонали матрица. Размерность матрицы 6х6.

24. Поэлементное умножение двух произвольных срок матрицы с записью результатов умножения в строку указанную пользователем.

25. Поэлементное умножение двух произвольных столбцов матрицы с записью результатов умножения в столбец указанный пользователем.

26. Вычисление суммы, произведения и среднего арифметического всех элементов матрицы.

27. Нахождение максимального и минимального элемента произвольного столбца матрицы.

28. Подсчёт кол-во строк в 2-мерном массиве, содержащих элемент равный заданному.

29. Подсчёт кол-ва элементов в 2-мерном массиве больше заданного

30. Подсчёт кол-во столбцов в 2-мерном массиве, содержащих элемент превышающий заданное значение.

 

6 Контрольные вопросы

1. Поясните, что такое массив, приведите примеры использования массивов.

2. Перечислите основные типы массивов.

3. Перечислите основные варианты описания одномерных массивов в среде TurboPascal.

4. Перечислите основные варианты описания двумерных массивов в среде TurboPascal.

5. Перечислите основные варианты описания многомерных массивов в среде TurboPascal.

6. Приведите синтаксис инициализации одномерного массива с использованием раздела определения типов.

7. Приведите синтаксис инициализации одномерного массива с использованием раздела описания переменных.

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

9. Приведите синтаксис инициализации многомерного массива с использованием раздела описания переменных.

10. Поясните, какие действия можно выполнять над массивами целиком.

11. Приведите основные правила ввода-выводов массивов.

12. Укажите, каким способом можно получить доступ к произвольному элементу массива.

Рекомендуемая литература

1. Степанов А.Н. Информатика. Базовый курс. Учебник для ВУЗов. - Издательство " Питер", 2007. – 768с.

2. Острейковский, В.А. Информатика: учебник для вузов / В.А.Острейковский.— 3-е изд., стер. — М.: Высш.шк., 2005.— 511с.: ил. — Библиогр.в конце кн. — ISBN 5-06-003533-6 /в пер./: 128.74.


 

ЛАБОРАТОРНАЯ РАБОТА 14

Динамическая память, указатели, создание динамических массивов в TurboPascal. Работа с динамическими массивами (2 часа)

 

Цель работы

 

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

 

2 Краткая теоретическая справка

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-06-04; Просмотров: 746; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.06 с.)
Главная | Случайная страница | Обратная связь