МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное агентство по образованию
Санкт-Петербургский государственный университет сервиса и экономики
Кафедра «информатики»
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
И МЕТОДЫ ТРАНСЛЯЦИИ
Методические указания по выполнению контрольной работы для студентов направления 010500.65 (510200) «Прикладная математика и информатика
»
Санкт-Петербург
2008
Одобрены на заседании кафедры Информатики, протокол № 3 от 26.04.2008г.
Утверждены Методическим Советом ИЭУПС, протокол № 8 от 24.04.2008г.
Языки программирования и методы трансляции: методические указания по выполнению контрольной работы для студентов специальности 010500.62 (510200) «Прикладная математика и информатика» / сост.. В.М. Пестриков, О.В. Князькова, Е.В. Козлова. – СПб.: Изд-во СПбГУСЭ, 2008. – 23с.
Методические материалы разработаны на основе требований государственного образовательного стандарта высшего профессионального образования второго поколения к содержанию и уровню подготовки по курсу «Языки программирования и методы трансляции» для специальности 010500.62 (510200) «Прикладная математика и информатика.
Составитель: доктор техн. наук, проф. В.М. Пестриков, старший преподаватель О.В. Князькова, ассистент Е.В. Козлова.
Рецензент: д-р воен. наук, проф. Г.П. Пуха.
© Санкт-Петербургский государственный университет сервиса и экономики
2008 г.
ОГЛАВЛЕНИЕ
Введение.. 4
I. Цели и задачи выполнения контрольной работы... 4
II. Общие требования к содержанию и оформлению контрольной работы... 6
II. Задания для выполнения контрольной работы... 8
3.1. Теоретическая часть работы
...
8
3.2. Требования к практической части работы и рекомендации по ее выполнению
...
9
IV. Методические указания и примеры решения задач.. 13
4.1. Понятие множества. Операции над множествами
..
13
4.2. Пример решения задачи на множества
..
16
4.3. Понятие массива
..
17
4.4. Пример решения задачи на приемы работы с двумерными массивами
..
19
V. Литература.. 23
Введение
Цель курса
- ввести студентов в проблематику, связанную с изучением языков программирования, методов разработки алгоритмов и программ и методов реализации языков программирования, ввести в круг понятий и задач, связанных с использованием языков программирования и методов трансляции, с тем, чтобы студенты могли самостоятельно создавать программы на языках высокого уровня. Эти знания могут понадобиться в практической и исследовательской работе по специальности. Вместе с другими предметами изучение данной дисциплины должно способствовать развитию точного научного мышления, повышению программистской культуры.
Задача курса состоит в выработке у студентов навыков использования языков программирования для создания систем обработки данных, обоснованного выбора средств программирования, понимания механизмов трансляции программ.
В процессе изучения курса студенты должны знать:
· формальные способы описания языков программирования;
· основные положения современной концепции типа данных;
· методы и основные этапы трансляции;
· конструкции распределенного и параллельного программирования.
В процессе изучения курса студент должен уметь:
· использовать формальные способы описания языков программирования;
· применять на практике современные концепции типов данных;
· использовать конструкции распределенного и параллельного программирования.
На изучение данной дисциплины отводится 141 час, из них для очной формы обучения:
· аудиторные занятия - 97 часов;
· самостоятельная работа - 44 часа.
Форма итогового контроля: экзамен, зачет.
i. Цели и задачи выполнения контрольной работы
В ходе изучения данной дисциплины и освоения готовых прикладных программ специалисту с высшим образованием, прежде всего, необходимо не только понять методологию, но и овладеть приемами разработки программного обеспечения вычислительных систем вообще и прикладных задач в частности.
Дело в том, что, во-первых
, методология разработки любого программного обеспечения предполагает, в общем случае, выполнение следующих этапов данного процесса:
– постановку задачи;
– ее формализацию;
– алгоритмизацию (разработку алгоритма решения задачи);
– программирование (разработку машинной программы задачи на языке программирования);
– составление описания задачи.
Следовательно, независимо от статуса специалиста, в случае необходимости разработки оригинальной прикладной задачи для своей предметной области, любой из них должен будет принимать участие в постановке задачи, отвечая на вопрос, какие цели преследует ее решение и что должно быть на выходе. Затем, на этапе формализации, он должен показать, какими наиболее рациональными методами задача может быть решена и какие функциональные зависимости при этом предполагается использовать, а на этапе алгоритмизации – указать предполагаемую последовательность ее решения и заказать желательную порядок выдачи результатов.
А, во-вторых
, даже при использовании готовых наиболее распространенных программ пользователям ЭВМ, в случае реализации своих оригинальных фрагментов или процедур, приходится, так или иначе, применять элементы программирования – т.е. выступать в роли программиста.
Таким образом, контрольная работа по дисциплине «Языки программирования и методы трансляции», как одна из форм проверки уровня знаний студента, направлена на закрепление теоретического материала с одной стороны, и освоение методики разработки машинных программ с помощью языка программирования высокого уровня - с другой.
II
. Общие требования к содержанию и оформлению контрольной работы
Контрольная работа по дисциплине «Языки программирования и методы трансляции» является самостоятельной творческой работой студента и предполагает выполнение трех заданий.
1. Письменного ответа на один из теоретических вопросов.
2. Разработки алгоритма и машинной программы решения задачи с использованием операций над множествами.
3. Разработки алгоритма и машинной программы решения задачи с использованием операций над матрицами и элементами массива.
Контрольная работа оформляется на стандартных листа формата А4.
При этом может быть рекомендована следующая ее структура:
· титульный лист;
· содержание;
· теоретическая часть (первое задание);
· практическая часть (второе и третье задание);
· литература;
· приложения.
Работа выполняется по вариантам. Номер варианта для теоретической и практической частей работы определяется по порядковому номеру студента в списке группы. Если этот номер превышает число предлагаемых вопросов, то отсчет начинается опять с первого номера (например, номер по списку студента 42, а последний вопрос – 35, тогда номер варианта контрольной работы = 42-35=7) и т.д.
Каждую часть, а также введение и заключение (если таковые предполагаются) начинают с новой страницы.
Нумерация страниц в работе сквозная. Таблицы и рисунки, расположенные на отдельных страницах, список литературы и приложения включаются в сквозную нумерацию страниц. Первой страницей является титульный лист, второй – оглавление. На страницах 1-2 номера страниц не проставляются. Первой страницей, имеющей номер (номер 2) является «Содержание».
Введение и заключение не нумеруются, а все остальные разделы основной части контрольной работы должны иметь порядковую нумерацию. Часть обозначается одной арабской цифрой с точкой на конце. Параграфы нумеруются в пределах каждой части. Номер параграфа состоит из двух цифр, первая из которых является номером части, а вторая – номером параграфа, разделенных точкой. После номера параграфа также ставят точку: например, 3.1. – первый параграф третьей части.
Пункты нумеруются арабскими цифрами в пределах каждого параграфа. Номер пункта состоит из трех цифр, соответствующих номеру части, параграфа и пункта, разделенных точками. Например, 3.1.4. – четвертый пункт первого параграфа третьей части.
Части и параграфы должны иметь краткие, соответствующие содержанию заголовки, которые выносятся в содержание. В конце заголовка точку не ставят. Подчеркивание и перенос слов в заголовках не допускается. Выделение заголовка производят увеличением жирности.
Необходимые иллюстрации, таблицы и другие наглядные материалы (схемами, графиками, диаграммами и др.) располагаются в тексте или выносятся на отдельную страницу. Все наглядные материалы и таблицы должны иметь заголовок и быть пронумерованы.
Нумерация таблиц и наглядных материалов осуществляется раздельно, но сквозной для данной части (раздела).
Все иллюстрации в контрольной работе размещаются сразу после ссылки на нее в тексте, называются рисунками и обозначаются словом «Рис.». Каждый рисунок должен сопровождаться кратким названием. Название рисунка и его номер располагают под рисунком. После номера рисунка ставится точка. После пробела с заглавной буквы приводят его наименование, в конце которого точка не ставится.
Таблицы и иллюстративные материалы располагают таким образом, чтобы их можно было читать без поворота рукописи или, в крайнем случае, с поворотом по часовой стрелке.
Формулы, помещенные в текст работы, нумеруются. Порядковый номер формулы приводится в круглых скобках справа от нее и записывается арабскими цифрами. Под формулой пишут слово «где», а затем расшифровывают ее составляющие в той последовательности, в которой они приведены в формуле. В конце формулы и в поясняющем ее тексте знаки препинания расставляются в соответствии с правилами пунктуации.
Сведения о книгах в списке литературы должны включать: фамилию и инициалы автора, наименование книги, место издания (город), издательство, год издания, количество страниц. Сведения о статьях из журналов, сборников, научных трудов или газет указывают: автора (фамилию, инициалы), название статьи, наименование сборника, журнала (название, год, номер, страницы), по газетам (название, год, число, месяц или номер и страницу, если объем газеты более 6 страниц).
Нумерация источников в списке литературы должна быть сквозной.
После списка литературы представляют Приложения (таблицы, графики, схемы, исходные и другие материалы, которые были использованы при выполнении курсовой работы как вспомогательные). Приложения должны иметь последовательную нумерацию и заголовки, отражающие их содержание.
Приложения необходимо располагать в порядке появления ссылок на них в тексте основных разделов. Каждое приложение начинают с новой страницы; в правом верхнем углу пишут слово «Приложение» с соответствующим порядковым номером (например, «Приложение 1» и т.д.).
Задания для выполнения контрольной работы
3.1. Теоретическая часть работы
Для написания теоретической части работы студент выбирает один из предложенных теоретических вопросов.
Задание 1
Цель задания
: приобретение навыков работы с учебной литературой по дисциплине «Языки программирования и методы трансляции».
Задание: написать ответ на один из теоретических вопросов.
Варианты задания
:
1. Понятие алгоритма. Свойства алгоритма. Способы описания алгоритма.
2. История развития языков программирования.
3. Основные конструкции языков программирования и их реализация.
4. Методы разработки алгоритмов и программ.
5. Динамические и статистические языки программирования.
6. Классификация данных.
7. Базисные типы данных в традиционных языках программирования.
8. Формальные грамматики (ФГ). Основные понятия и определения. Классификация ФГ.
9. Объектно-ориентированные языки программирования.
10. Функциональное и логическое программирование.
11. Модульное программирование.
12. Сущность трансляции. Компиляция и интерпретация.
13. Лексика. Сущность лексического анализа.
14. Восходящий синтаксический анализ.
15. Нисходящий синтаксический анализ.
16. Семантический анализ. Семантика языка.
17. Промежуточное представление программы.
18. Контекстные условия языков программирования.
19. Организация таблиц компилятора.
20. Генерация кода.
Примечание
: материалы, отражающие сущность и основные положения выбранной темы, конспективно формируется в виде краткого реферата, в заключение которого делаются соответствующие выводы. Объем данной части работы должен быть в пределах 3-5 стр. текста полуторного интервала формата А4 (шрифт Times New Roman размер 14) или аналогичный объем аккуратно оформленного рукописного текста.
3.2. Требования к практической части работы и рекомендации по ее выполнению
Практическая часть состоит из двух заданий, посвященных изучению основ структурного программирования на языке Pascal. Результатом выполнения этой части являются выполняемые файлы программ, представленные преподавателю вместе с правильно оформленным отчетом.
Практическую часть контрольной работы можно выполнять в любой среде программирования (Turbo Pascal 5.5, 6.0, 7.0, Borland Pascal 7.0) и на любой доступной вычислительной технике.
В соответствии с методологией разработки любого программного обеспечения, практическая часть контрольной работы должна содержать следующие обязательные элементы, соответствующие одноименным этапам этого процесса:
– постановку задачи;
– ее формализацию;
– разработку алгоритма решения задачи;
– разработку машинной программы задачи на языке программирования;
– результаты работы программы.
Задание 2
Цель задания
: приобретение навыков работы с данными нестандартных типов на языке Pascal.
Задание
: разработать алгоритм, написать и отладить программу решения задачи с использованием операций над множествами.
Варианты задания
:
1. Ввести два множества чисел. Сформировать и вывести множество чисел из первого множества, которые делятся на заданное число, и из второго множества, не делящихся на это же заданное число.
2. Ввести две строки символов. Вывести одинаковые символы этих строк.
3. Ввести строку символов, в которой задана последовательность целых чисел (возможно со знаком), разделенных пробелами. Вывести номера некорректно записанных чисел.
4. Во введенной строке символов подсчитать количество букв (отдельно русского и английского алфавитов), цифр, слов, предложений. (Считать, что слова разделены пробелами, а предложения — точками).
5. Во введенной строке символов подсчитать количество разделителей (любые скобки, точка, запятая, точка с запятой, пробел).
6. Во введенной строке символов, содержащей прописные буквы русского алфавита, подсчитать количество различных (без повторений) букв.
7. Для трех веденных множеств, сформировать и вывести множества, являющиеся их объединением и пересечением.
8. Из введенной строки, содержащей непустую последовательность слов из строчных букв английского алфавита, разделенных пробелами, сформировать и вывести в алфавитном порядке множество всех гласных букв, входящих хотя бы в одно слово.
9. Из двух введенных множеств чисел составить третье множество, элементами которого будут совпадающие числа заданного диапазона.
10. Из трех введенных множеств символов сформировать и вывести четвертое множество символов, входящих ровно в два любых их этих множеств.
11. Определить, в каком из трех введенных символьных множеств больше встречается цифр.
12. По введенному множеству натуральных чисел заданного диапазона сформировать и вывести множество чисел, делящихся на заданное число.
13. По введенному множеству натуральных чисел заданного диапазона сформировать и вывести множество нечетных.
14. По введенному множеству символов сформировать и вывести множество, исключающее все цифры.
15. По введенному множеству символов сформировать множество символов русского алфавита (строчные и прописные) и вывести его упорядоченным по убыванию.
16. Подсчитать количество повторений элементов заданного множества символов во введенной строке.
17. Подсчитать процентное соотношение гласные/согласные во введенной строке, содержащей строчные буквы русского алфавита.
18. Получить объединение, пересечение, разность и симметрическую разность двух введенных множеств символов.
19. Сформировать и вывести множество простых чисел из заданного диапазона первых натуральных чисел.
20. По введенному множеству чисел заданного диапазона сформировать и вывести множество четных чисел.
Примечание: В программе обязательно использование типов–множеств там, где это наиболее подходит алгоритму. Желательно также использовать данные перечисляемого типа. Все множества задаются самостоятельно.
Задание 3
Цель задания
: Приобретение навыков работы с массивами на языке Pascal.
Задание
: разработать алгоритм, написать и отладить программу решения задачи с использованием операций над матрицами и элементами массива.
Варианты задания
:
1. Cоставить программу умножения двух матриц.
2. Cоставить программу сложения и вычитания двух матриц.
3. Составить программу вычисления НОД массива заданных чисел.
4. Составить программу вычисления суммы и числа положительных элементов каждого столбца прямоугольной матрицы.
5. Составить программу генерации (заполнение случайными числами в введенном диапазоне) квадратных матриц: единичной, диагональной, треугольной, обычной).
6. Составить программу нахождения максимального и минимального элементов и их индексов в одномерном массиве.
7. Составить программу нахождения суммы последних элементов одномерного массива, произведение которых не превышает заданного числа.
8. Составить программу определения суммы отрицательных чисел в одномерном массиве и подсчета их количества.
9. Составить программу сортировки элементов одномерного массива по возрастанию и убыванию.
10. Составить программу упорядочения элементов нечетных строк двумерного массива по возрастанию, а четных — по убыванию. Найти суммы элементов каждого столбца и наибольшую из этих сумм.
11. Составить процедуры транспонирования квадратной матрицы и подсчета в ней нулевых элементов.
12. Составить программу вычисления НОК массива заданных чисел.
13. Составить программу вычисления определителя квадратной матрицы.
14. Составить программу нахождения произведения первых элементов одномерного массива, сумма модулей которых не превышает заданного числа.
15. Составить программу определения максимина и минимакса прямоугольной матрицы.
16. Составить программу поиска наибольшего и наименьшего элемента в трехмерном массиве.
17. Составить программу проверки линейной независимости векторов.
18. Составить программу проверки ортогональности квадратной матрицы заданного порядка (скалярное произведение любой пары различных строк равно 0, а скалярное произведение каждой строки на себя равно одному и тому же числу не равному 0).
19. Составить программу проверки симметричности квадратной матрицы заданного порядка.
20. Составить программу проверки, является ли квадратная матрица заданного порядка магическим квадратом (суммы элементов в каждом столбце и каждой строке одинаковы).
IV
. Методические указания и примеры решения задач
4.1. Понятие множества. Операции над множествами
В программировании структура, состоящая из элементов одного типа, которые можно по-разному располагать, называется множеством. Общий вид описания переменной множественного типа в языке Паскаль:
var
< имя_множества >: set
of
< тип >;
где var
и set
– служебные слова. Слово set
в переводе с английского и означает «набор, множество»;
< имя_множества > – имя создаваемого типа-множества;
< тип > – один из уже существующих типов, к которому отн
Примеры описания множеств:
Множество натуральных трехзначных чисел:
var
triznak: set
of
100..999;
Базовый тип для данного множества – integer
.
Множество прописных букв русского алфавита
var
prop: set of
'А’..’Я’;
Базовый тип – char
.
При описании множества элементы множества не должны повторяться и если множество создается на базе числового типа данных, то значения элементов множества не должны быть с одной стороны отрицательными, а с другой - не превышать число 255.
Наряду с вышеописанными переменными типа «множества» в программах могут встречаться и постоянные множества. Элементы такого множества перечисляются в квадратных скобках: [1,2,3,4,5,6,7,8,9]
– так будет выглядеть описание постоянного множества, состоящего из однозначных целых чисел. Множество, может содержать несколько элементов, один элемент – [1]
или вообще ни одного – []. В последнем случае множество называется пустым.
Над множествами, так же как и над обычными переменными, можно выполнять ряд операций.
Операция, обозначающаяся знаком * – пересечение
двух множеств. Результатом выполнения этой операции над двумя множествами является нахождение их общих элементов, принадлежащих как одному, так и другому множеству. Например, если мы присвоим переменной типа «множество» А
значение [20,30,40], что записывается в программе следующим образом: А
:=[20,30,40];
а переменной того же типа B
присвоим значение [30,40,50], что записывается как B
:=[30,40,50];
то в результате операции C
:=
A
*
B
множество С
получит следующее значение – [30,40].
Если при операции над двумя множествами используется знак +, то такая операция называется объединением
двух множеств. Результатом такой операции будет получение множества, в которое будут входить все элементы, содержащиеся хотя бы в одном из исходных множеств. В качестве примера возьмем два множества: lat
, значением которого будет [q,w,e,r,t,y] и rus
, значением которого будет [й,ц,у,к,е,н,г]. В результате операции latrus
:=
lat
+
rus
множество latrus
получит следующее значение: [q,w,e,r,t,y, й,ц,у,к,е,н,г].
Операция, обозначаемая знаком – называется разностью
двух множеств. В результате выполнения данной операции над двумя множествами мы получаем новое множество, содержащее те элементы первого, которые не входят во второе. Рассмотрим эту операцию на примере двух множеств language
и low
.
Первому из этих множеств присвоим значение, представляющее собой перечень различных языков программирования, а второе представляет собой список только тех языков, которые не являются языками высокого уровня. Операции присваивания будут выглядеть следующим образом:
language:=[basic,pascal,c,fortran,algol,assembler_language,machine_code];
low:=[assembler_language,machine_code];
Далее, выполним операцию нахождения разности и результат присвоим множеству high
:
high:=language-low;
в результате данной операции множество high
получит следующее значение: [basic,pascal,c,fortran,algol],
то есть данное множество будет содержать в себе перечень языков высокого уровня.
Наряду с вышеописанными операциями над множествами можно также производить сравнение множеств друг с другом. В сравнении также участвуют два множества. Для сравнения двух множеств используются операции отношения, которые обозначаются теми же знаками, что и операции сравнения обычных переменных, но имеют иной смысл. Результатом операции отношения является логическая величина, которая может принимать значения true
или false
. Рассмотрим более подробно данные операции:
= - равенство двух множеств (все элементы первого множества совпадают с элементами второго);
< > - неравенство двух множеств (одно из множеств содержит хотя бы один элемент, отсутствующий в другом).
Пример использования данных операций
: даны два множества G
и H
.
Значение множества G
– [4,5,6]; H
также имеет значение [4,5,6]. Для данных множеств результат операции сравнения G
=
H
будет равен true, а операции G
< >
H
будет равен false
. В случае же, если мы множеству H
присвоим другое значение H
:=[6,7,8]; а G
оставим без изменения, то результат операции G
=
H
будет равен false
, а операции G
< >
H
будет равен true
.
< - проверка на строгое вхождение первого множества во второе (то есть все элементы первого множества должны одновременно входить во второе. Кроме того, второе множество должно содержать какие-либо дополнительные элементы.)
<= - проверка на нестрогое вхождение первого множества во второе (все элементы первого множества должны одновременно входить во второе. Помимо элементов первого множества второе множество может как содержать, так и не содержать какие-либо дополнительные элементы.)
> - проверка на строгое вхождение второго множества в первое;
>= - проверка на нестрогое вхождение второго множества в первое.
При работе с множествами часто используется еще одна операция, в которой участвуют не два множества, а множество и какой-либо элемент. Такая операция называется операцией определения принадлежности элемента множеству. Общий вид данной операции следующий:
< элемент > in
[< значение_множества >];
где < элемент > – элемент, относящийся к базовому для данного множества типу;
in
– служебное слово, обозначающее в переводе с английского «в»;
< значение_множества > – список всех элементов, входящих в множество. Операция имеет значение true
, если элемент входит в данное множество (то есть совпадает с одним из элементов множества) и false
, если он в данное множество не входит.
Например, выражения D
in
[A
..
E
]
и 5
in
[3,5,7,9]
имеют значение true
, а выражения D
in
[
E
..
N
] и 5
in
[7,9,11]
имеют значение false
.
При осуществлении операций над множествами, так же как и при выполнении арифметических и логических операций над обычными переменными, соблюдается определенный приоритет.
Наибольшим приоритетом обладает операция *.
Следующими по приоритету являются операции + и -.
Наименьший приоритет имеют операции in, =, < >, <, <=, >, >=.
При необходимости изменить порядок выполнения операций над множествами, как и для обычных переменных, используют круглые скобки. Значение выражения, заключенного в скобки вычисляется в первую очередь.
4.2. Пример решения задачи на множества
Задача:
для любого введенного с клавиатуры текста, написанного на русском языке, определить количество имеющихся в нем гласных и согласных букв.
Текст программы:
program filolog;
Uses Crt;
var
gl,sog:integer;
a:char;
begin
ClrScr;
gl:=0;
sog:=0;
Writeln ('Вводите текст построчно.');
Writeln ('Ввод каждой строки заканчивайте нажатием клавиши Enter');
Writeln ('Для завершения ввода всего текста введите 0 и Enter');
Repeat
Repeat
Read (a);
If a in ['а','е','и','о','у','ы','э','ю','я', 'А','Е','И','О','У','Ы','Э','Ю','Я']
then gl:=gl+1;
If a in ['б'..'д','ж','з','й'..'н','п','р'..'т','ф'..'щ', 'Б'..'Д','Ж','З','Й'..'Н','П'..' Т','Ф'..'Щ']
then sog:=sog+1
until eoln;
until a='0';
Readln;
Writeln ('Число гласных букв в тексте равно ',gl);
Writeln ('Число coгласных букв в тексте равно ',sog);
Readln
end.
В программе текст вводится построчно. Считывается же текст оператором read
посимвольно. Процесс считывания символов, содержащихся в строке, производится во внутреннем цикле repeat
..
until
. Каждый считываемый символ проверяется условным оператором if
на принадлежность к множеству гласных букв. Если вводимый символ принадлежит данному множеству, то значение переменной-счетчика gl
увеличивается на единицу. (В начале программы переменной-счетчику было присвоено нулевое значение). Второй условный оператор аналогичным образом проверяет принадлежность символа к множеству согласных букв. Переменной-счетчиком здесь является sog
.
Условием окончания внутреннего цикла является обнаружение признака конца строки. Нахождение конца строки осуществляется с помощью соответствующей стандартной функции eoln
. Эта функция по умолчанию имеет значение false
, а при обнаружении ею двух управляющих символов возврата каретки CR
и перевода строки LF
получает значение true
, что приводит к завершению работы внутреннего цикла.
Внешний цикл repeat
..
until
повторяет процесс построчного ввода до тех пор, пока в ходе его работы не будет обнаружен признак конца всего текста. Таким признаком, завершающим работу цикла, является ввод нуля. После окончания работы цикла, полученные статистические данные выводятся на экран компьютера операторами writeln
.
4.3. Понятие массива
Массив представляет собой упорядоченную последовательность однородных элементов. Элементами массива могут быть различные величины, как числовые (целые и вещественные), так и символьные или строковые. Все элементы каждого отдельно взятого массива должны относиться к одному и тому же типу, что и называется однородностью массива. В массиве каждый элемент имеет свой порядковый номер, который называется индексом. Важной характеристикой массива является его диапазон, то есть пределы, в которых может изменяться значение индекса массива. Массивы бывают одномерные и двумерные.
Одномерный массив.
Примером простейшего одномерного массива является список учеников одного школьного класса или студентов одной группы. В этом случае элементами массива будут фамилии учеников или студентов, а индексами – номера учеников или студентов в списке.
В случае использовании массива в программе, он предварительно должен быть описан в разделе описания переменных.
В общем виде, описание массива, состоящего из элементов-переменных, выглядит следующим образом:
var
< имя массива >
:
array
[
a
..
b
]
of
< тип элементов >;
где var
,
array
и of
– служебные слова. Array
означает массив, предлог of
в данном случае – из, a
и b
– соответственно нижняя и верхняя границы диапазона массива.
Пример описания одномерного массива:
var
a: array
[1..20] of
integer
;
это – описание массива с именем a, который может содержать до 20 элементов, причем все эти элементы целого типа.
var
st: array
[1..10] of string [15];
а в данном случае описан массив с именем st
из 10 строковых элементов, каждый из которых может содержать до 15 символов.
В программе можно работать не только со всем массивом целиком, но и с отдельными его элементами. Для того, чтобы обратиться в программе к какому-либо элементу массива, нужно указать имя массива и индекс содержащегося в нем элемента. Например, если Вы встретите в программе следующую запись: a
[10
], то она означает, что мы обращаемся к элементу массива a
с порядковым номером 10
.
Отметим еще две особенности массивов. Во-первых, элементами массива могут быть не только переменные, но и константы. Такой массив, естественно, описывается в разделе объявлений как константа, причем константы описываются перед переменными. В этом же разделе такому массиву присваиваются значения. Во-вторых, нижней границей диапазона массива необязательно должна быть единица. Важно только, чтобы значение нижней границы было меньше, чем верхней.
Двумерный массив
.
Простейшим примером двумерного массива является всем известная таблица умножения, в которой результат умножения двух чисел определяется по номеру строки, соответствующей одному из сомножителей, и номеру столбца, соответствующему другому. Соответственно и в любом двумерном массиве элемент определяется по двум индексам.
В языке Паскаль в общем виде двумерные массивы описываются следующим образом:
var
< имя массива >: array
[
a
..
b
,
c
..
d
]
of
< тип элементов >;
где a
и b
– соответственно верхняя и нижняя граница диапазона значений для первого индекса; c
и d
- верхняя и нижняя граница диапазона значений для второго индекса.
Двумерный массив таким образом можно представить в виде таблицы, имеющей b
-
a
+1
строк и c
-
d
+1
столбцов.
Пример описания двумерного массива:
var
tabl: array [1..9,1..9] of integer;
таким образом, описан целочисленный массив, содержащий 9 строк и 9 столбцов.
4.4. Пример решения задачи на приемы работы с двумерными массивами
Задача
: дан двумерный массив размерностью 4х5. Элементами данного массива являются вещественные числа. Требуется: заполнить массив произвольными числами, затем вывести содержимое массива на экран компьютера, подсчитать сумму элементов для каждого столбца, имеющегося в массиве, и сформировать из этих сумм одномерный массив.
Текст программы:
Program arrsum;
Uses Crt;
var
f:array [1..4,1..5] of real;
x:array [1..5] of real;
i,j:integer;
s:real;
begin
Clrscr;
For i:=1 to 4 do
For j:=1 to 5 do
begin
Writeln ('Введите ',j,' элемент ',i,' строки');
Readln (f [i,j])
end;
Writeln ('элементы двумерного массива');
For i:=1 to 4 do
begin
For j:=1 to 5 do write (f [i,j]:7:2,' ');
Writeln
end;
Writeln ('элементы одномерного массива');
For j:= 1 to 5 do
begin
s:=0;
For i:=1 to 4 do s:=s+f [i,j];
x [j]:=s;
write (x [j]:7:2,' ')
end;
Readln
end.
В программе arrsum
в разделе описания переменных описываются два массива. Первый из них – это двумерный массив f
, который в дальнейшем будет заполнен числами вещественного типа. В данном массиве, как видно из описания, имеется 4 строки и 5 столбцов. Второй описанный в разделе массив x
является одномерным и в дальнейшем будет заполнен элементами, каждый из которых представляет собой сумму элементов, содержащихся в одном из столбцов двумерного массива. Всего в одномерном массиве x
должно быть 5 элементов – по количеству столбцов в двумерном массиве f
.
В начале программы производится заполнение массива f
произвольными вещественными числами, вводимыми с клавиатуры компьютера. Этот процесс осуществляется с помощью двух вложенных циклов. Во внутреннем цикле производится поэлементное заполнение одной из строк массива числами. Этот цикл повторяется 5 раз в соответствии с количеством элементов в каждой строке (количество элементов двумерного массива, содержащихся в одной строке равно количеству столбцов, имеющихся в данном массиве). Соответственно и счетчик данного цикла – переменная j
изменяет свое значение от 1 до 5. Перед непосредственным вводом очередного элемента, производимым оператором readln
, оператор writeln
выводит приглашение на ввод данного элемента, указывающее номер текущей строки и порядковый номер элемента в строке. Внешний цикл с переменной i
обеспечивает повторение всех действий внутреннего цикла 4 раза (по количеству строк, имеющихся в массиве).
Далее для того, чтобы наглядно убедиться в том, что двумерный массив f
целиком заполнен данными, производим построчный вывод содержимого массива на экран компьютера. Эта операция, как и предыдущая, производится с помощью двух циклов, один из которых вложен в другой. Внутренний цикл с переменной j
обеспечивает вывод элементов одной строки. При этом для того, чтобы значения элементов массива представлялись на экране в удобном для восприятия человеком виде, (а не в нормализованном) элементы выводятся в отформатированном виде: под каждый элемент отводится по 7 позиций, в том числе 4 под целую часть, 1 – под точку и 2 – под дробную часть. Внешний цикл с переменной i
, как и в предыдущем случае обеспечивает четырехкратное повторение действий внутреннего цикла.
Третья группа из двух вложенных циклов используется для подсчета сумм элементов нового одномерного массива и его формирования. Внешний цикл в данном случае повторяет всю совокупность действий, производимых во внутреннем цикле, 5 раз – по числу элементов формируемого цикла (и, соответственно столбцов двумерного массива). Внутренний же цикл с переменной i
подсчитывает сумму элементов, содержащихся в одном из столбцов. Эта сумма подсчитывается с помощью вспомогательной переменной s
. Перед началом работы внутреннего цикла эта переменная обнуляется с помощью оператора присваивания – первого оператора внешнего цикла, а затем во внутреннем цикле к ее текущему значению каждый раз прибавляется значение очередного элемента из обрабатываемого столбца. В итоге работы внутреннего цикла в переменной s мы и получаем искомую сумму. Далее, следующий оператор внешнего цикла присваивает получившееся значение соответствующему элементу одномерного массива. Наконец, последний из операторов внешнего цикла выводит значение этого элемента одномерного массива на экран. Таким образом, после завершения работы данного внешнего цикла массив будет заполнен данными и поставленная задача будет решена.
V
. Литература
1. Ахо А. Теория синтаксического анализа, перевода и компиляции /А.Ахо, Д. Ульман. – М.: Мир, 1978.
2. Буч Г. Объектно-ориентированное проектирование с примерами применения / Г Буч. – М., 1993.
3. Вирт Н. Алгоритмы+ структуры данных = программы / Н. Вирт.– М.: Мир, 1985.
4. Васюкова Н.Д. Практикум по основам программирования. Язык Паскаль / Н.Д. Васюкова, В.В. Тюляева. – М.: Высш. шк., 1991.
5. Гольденберг В.А. Введение в программирование / В.А. Гольденберг. – Минск: ООО Харвест, 1997.
6. Замулин А. В. Системы программирования баз данных и знаний / А. В. Замулин. – Н.: Наука, 1990.
7. Емелина Е.И. Основы программирования на языке Паскаль / Е.И. Емелина. – М.: Финансы и статистика, 1997.
8. Кауфман В.Ш. Языки программирования. Конценции и принципы /В.Ш. Кауфман. – М.: Радио и связь, 1993.
9. Калинин А. Г. Универсальные языки программирования / А.Г. Калинин, И. В. Мацкевич. – М.: Радио и связь, 1991.
10. Лавров С. Программирование. Математические основы, средства, теории / С. Лавров. – СПб.: БХВ-Петербург, 2001.
11. Пестриков В.М. Программирование в системе Турбо Паскаль 7.0: учеб. пособие / В.М. Пестриков, А.Н. Маслобоев, О.К. Федоров. – СПб.: СПбГТУРП, 2002.
12. Пестриков В.М., Маслобоев А.Н.. Turbo Pascal 7.0: Изучаем на примерах. 2-е изд., перераб. и доп. СПб. Наука и техника. 2004.
Пестриков ВикторМихайлович
Князькова Ольга Викторовна
Козлова ЕкатеринаВалентиновна
ЯЗЫКИ ПРОГРАММИРОВАНИЯ И МЕТОДЫ ТРАНСЛЯЦИИ
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
по выполнению контрольной работы для студентов направления
010500.62 (510200) «Прикладная математика и информатика»
Подп. к печати 27.08.2008 г. |
Формат 60´84 1/16 |
|
Усл. печ. л. 0,89 |
Уч.-изд. л. 1,5 |
Тираж 30 экз. |
Изд. № 002 |
Заказ № 1293 |
РИО СПбГУСЭ, лицензия ЛР № 040849
Член Издательско-полиграфической ассоциации университетов России
Государственный регистрационный номер 2047806003595 от 06.02.2004 г.
СПб государственный университет сервиса и экономики 192171, г. Санкт-Петербург, ул. Седова, 55/1