Содержание
Цель работы - освоение методики проектирования программ для обработки информации, хранящейся в массивах и файлах; разработка программы, реализующей алгоритм обработки двухмерных и одномерных массивов.
Задачи курсовой работы: изучить основные понятия использования массивов; формализовать поставленную задачу; построить модель её решения; реализовать программу на языке программирования Turbo Pascal.
Область применения разрабатываемой программы - как вспомогательная при решении вычислительных задач в которых используются массивы.
Средства выполнения и форма отчетности: работа выполняется с использованием среды разработки Turbo Pascal 7.0.
Персональные компьютеры - это универсальные устройства для обработки информации, они могут выполнять любые действия в этом направлении. Но для этого надо составить для компьютера на понятном ему языке точную и подробную программу.
Информатика и вычислительная техника стали в наши дни неотъемлемыми составными частями всей нашей жизни. В настоящее время трудно себе представить область науки и техники, отрасль народного хозяйства или сферу обслуживания, где бы в той или иной форме не применялись средства вычислительной техники.
ЭВМ стремительно проникла в нашу жизнь, требуя не только от инженера или
техника, но и от студентов и школьников навыков программирования.
Дан двухмерный массив размером M´N. Найти произведение всех элементов каждого столбца массива.
Из первых четырех строк массива сформировать четыре новых вектора (одномерные
массивы). Для каждого вектора определить количество инверсий (т.е. таких пар
элементов, в которых большее число находится слева от меньшего).
Трудно рассказать что-то новое о том, что хорошо известно всем. Действительно, вряд ли найдется в нашей стране программист или просто выпускник средней школы, который не знал бы (или не слышал) об этом языке программирования. Основные концепции языка были разработаны в 1967-1968 г. профессором Николаусом Виртом (Niklaus Wirth) и опубликованы в 1971 году (The Programming Language Pascal Acta Informatica, 1 (Jun 1971), 35-63). Стандарт языка был разработан им в 1974 г. (PASCAL - User Manual and Report, ISO Pascal Standard Kathleen Jensen and Niklaus Wirth) совместно с Кетлин Йенсен (Kathleen Jensen). Паскаль достаточно быстро превратился из средства, предназначенного для обучения студентов программированию, в инструмент, который стали использовать для создания больших программных проектов. Заметим, что ни один из последующих языков, разработанных автором (а Вирт является создателем Модулы и Оберона), не получил такого распространения. Трудно сказать, с чем это связано. Возможно, с тем, что язык удачно сочетает простоту с выразительностью и силой. Возможно, что просто он оказался в нужный момент на нужном месте, поскольку на момент создания языка, получившего свое имя в честь великого французского математика, в распоряжении программистов было весьма и весьма немного языков высокого уровня.
И что самое главное, все они были разработаны для решения конкретных прикладных задач и во многом являлись продуктом «творческого акта», а не результатом серьезного научного труда. Фортран, названный одним из пионеров программирования Дейкстрой (Edsger Dijkstra) инфантильным дезорганизатором, предназначался только для математических расчетов и не выдерживал никакой критики с точки зрения ограничения доступа к данным и отсутствия поддержки структурного программирования. Об интерпретаторе Бейсик (тогда еще без приставки Visual) нельзя было говорить без слез. Кобол был ориентирован на решение экономических задач, a PL/I - чрезмерно сложен и принадлежал скорее к области проблем, чем к области решений. И вот тут появляется язык, на порядок отличающийся от них своим качеством. Основное, что привлекало к нему, - логичность, поддержка концепций структурного и процедурного программирования, работа с динамической памятью, возможность создания своих типов данных. Все это стало теперь настолько привычным, что трудно представить, как можно программировать без использования этих жизненно необходимых возможностей. Строгая типизация позволила сразу же на порядок снизить количество ошибок, появляющихся вследствие невнимательности или банальных опечаток. Кстати, для желающих использовать в своих программах прямой доступ к данным без всяких ограничений язык предоставил возможность создания записей с вариантами, которые можно трактовать в соответствии со своими потребностями. Но при этом программист должен всегда явно указывать, с каким типом данных в конкретной переменной он желает работать. Единственным недостатком языка, существовавшим в то время, было отсутствие поддержки модульности. Программист должен был компилировать весь проект целиком, со всеми входящими в него процедурами и функциями. Но, впрочем, это не удивительно - напомню, что язык-то был предназначен для обучения. Еще одной причиной, которая позволила языку перейти в категорию бестселлеров, стала поддержка разработчиков коммерческого ПО.
И тут мы не можем пройти мимо фирмы Borland (ныне Inprise). Разработанный ею Turbo Pascal во всех его модификациях является в России одним из самых популярных продуктов. Интегрированная оболочка, которая включает в себя редактор, компилятор, компоновщик и отладчик, вместе с интерактивной справочной системой сделали разработку программ на Паскале делом простым и понятным практически любому человеку. Но так было не всегда. Например, в начале восьмидесятых автору довелось поработать с одним из первых компиляторов Паскаля на платформах DEC. В нем сначала нужно было в редакторе создавать программу, затем однопроходный компилятор выдавал код на ассемблере, далее приходилось транслировать его в объектный код, компоновать с системными библиотеками и только после этого запускать программу. Поиск ошибок (без встроенного отладчика, который сейчас просто показывает вам строку, где произошла ошибка) был делом, требующим терпения, и, самое главное, процессом весьма длительным. Кроме создания интегрированной оболочки, Borland ввел в Pascal поддержку модульного программирования, а начиная с версии 5, и поддержку объектно-ориентированного программирования. В настоящее время действуют три стандарта языка. Первый из них - нерасширенный Паскаль (unextended Pascal) был разработан в 1983 году и практически полностью совпадает с описанием языка в нотации Йенсен-Вирта. Второй - Extended Pascal - содержит расширения, касающиеся модульного программирования (раздельная компиляция модулей, импорт-экспорт подпрограмм, интерфейсная часть и реализация), и дополнен рядом процедур и функций (прямой доступ к файлам, работа со строками и т д.) Последний - объектный Паскаль (Object-Oriented Extensions to Pascal), в отличие от первых двух, формально не утвержден, но оформлен в виде отчета (ANSI Technical Report) в 1993 г. Объектный Паскаль поддерживает классы, обладающие свойствами и методами, наследование классов, переопределение методов у потомков (полиморфизм) и ряд других атрибутов объектно-ориентированного программирования.
Элементы языка Турбо Паскаль
Алфавит языка состоит из множества символов, включающих:
Латинские буквы: от A до Z (прописные) и от а до z. (строчные);
Знак подчеркивания _;
Цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
Специальные символы: + - * / (знаки арифметических операций), = <> <= >= (операции отношения), : = (операции присваивания), [ ] . , ( ) : ; { } ^ @ $ # ‘ (ограничители). К спецсимволам относятся служебные слова, смысл которых определен однозначно (begin, end, for, div и т.д.).
Пробел - символ пробела (ASCI1-32) и все управляющие символы кода ASCII (от 0 до 31).
Идентификаторы. Идентификатором называется символическое имя определенного программного объекта. Такими объектами являются имена констант, переменных, типов данных, процедур и функций, программ. Идентификатор - это любая последовательность букв и цифр, начинающаяся с буквы. В Турбо Паскале к буквам приравнивается также знак подчеркивания. Строчные и прописные буквы в идентификаторах и служебных словах не различаются. Например: max, MAX, MaX и mAx - одно и то же имя. Длина идентификатора может быть произвольной, но значащими являются только первые 63 символа.
Комментарии. Конструкции, заключенные в фигурные скобки {} или в скобки вида (* *) являются комментариями, могут занимать несколько строк и игнорируются компилятором.
Строка, начинающаяся с символов {$ или (*$, является директивой компилятора. За этими символами следует мнемоника команды компилятора. Буквы русского алфавита употребляются только в комментариях, в литерных и текстовых константах.[4]
Арифметические операции и выражения
Знаки
операций предназначены для обозначения тех или иных арифметических, логических
или других действий. Они бывают двух типов: состоящие из небуквенных символов
(например, +, -, * и т.д.) и буквенные операции (например, not, mod, div и т.
д.), представляющие собой зарезервированные слова. Операции над данными делятся
на унарные (применимые к одному операнду) и бинарные (применимые к двум
операндам). Приведем примеры бинарных арифметических операций (в таблице буква I
обозначает целые типы, R - вещественные типы):
|
Знак |
Выражение |
Типы операндов |
Тип результата |
Операция |
|
+ |
А+В |
R,R I,I I,R; R,I |
R I R |
Сложение |
|
- |
А-В |
R,R I,I I,R; R,I |
R I R |
Вычитание |
|
* |
А*В |
R,R I,I I,R; R,I |
R I R |
Умножение |
|
/ |
А/В |
R,R I,I I,R; R,I |
R R R |
Вещественное деление |
|
Div |
A div B |
I, I |
I |
Целое деление |
|
Mod |
A mod B |
I, I |
I |
Остаток от деления |
Арифметическое выражение задает порядок выполнения действий над числовыми величинами. Арифметические выражения содержат арифметические операции, функции, операнды, круглые скобки. Одна константа или одна переменная - простейшая форма арифметического выражения.
Порядок выполнения операций в арифметическом выражении подчиняется трем правилам:
Правилу скобок. Оно гласит, что первыми выполняются операции в скобках. Если имеется несколько пар вложенных скобок, вычисления начинаются с самых внутренних скобок.
Правилу учета приоритета операций: вначале вычисляются значения функций, затем выполняются операции умножения и деления и в последнюю очередь - операции сложения и вычитания.
Правилу следования: операции одинакового старшинства (приоритета) выполняются слева направо в порядке их следования.
Пример. Цифрами сверху указан порядок выполнения операций:
Выражение имеет целый тип, если в результате его вычисления получается величина целого типа. Выражение имеет вещественный тип, если результатом его вычисления является вещественная величина. [4]
Стандартные функции
В
качестве операндов в выражении, кроме констант и переменных, можно использовать
стандартные функции. Аргументы функций обязательно заключаются в круглые
скобки. Приоритет выполнения функции выше, чем приоритет выполнения
арифметических операций. Рассмотрим стандартные функции Турбо Паскаля (в таблице
буква I обозначает целые типы, R - вещественные
типы)
|
Обращение |
Тип результата |
Тип действия |
||||
|
pi |
- |
R |
Число π |
|||
|
abs(x) |
I, R |
I, R |
Модуль (абсолютная величина) числа х |
|||
|
sqr(x) |
I, R |
I, R |
Квадрат х |
|||
|
sqrt(x) |
I, R |
R |
Корень квадратный из х (х≥0) |
|||
|
sin(x) |
I, R |
R |
Синус х (х в радианах) |
|||
|
cos(x) |
I, R |
R |
Косинус х (х в радианах) |
|||
|
arctan(x) |
I, R |
R |
Арктангенс х (результат в радианах) |
|||
|
exp(x) |
I, R |
R |
Экспонента е в степени х (е≈2,71828) |
|||
|
ln(x) |
I, R |
R |
Натуральный логарифм х (x>0) |
|||
|
trunc(x) |
R |
I |
Целая часть х |
|||
|
int(x) |
I, R |
R |
Целая часть х |
|||
|
round(x) |
R |
I |
Округление х до ближайшего целого |
|||
|
frac(x) |
I, R |
R |
Дробная часть х |
|||
|
random |
- |
I |
Случайное число [0,1) |
|||
|
random(x) |
I |
R |
Случайное число [0,х) |
|||
|
dec(x,[n]) |
I |
I |
Уменьшение х на n, при отсутствии n - на 1 |
|||
|
inc(x,[n]) |
I |
I |
Увеличение х на n, при отсутствии n - на 1 |
Longint |
Boolean |
true, если значение x нечетное; false, если x четное |
|
ord(x) |
любой порядковый |
Longint |
Порядковый номер значения х в его типе. Если х - символ, то функция возвращает код символа |
|||
|
pred(x) |
любой порядковый |
тот же, что для x |
Предыдущее относительно х значение в его типе |
|||
|
succ(x) |
любой порядковый |
тот же, что для x |
Следующее относительно х значение в его типе |
|||
|
chr(x) |
Byte |
Char |
Определяет символ с указанным кодом (х - число, определяющее код символа) |
Турбо Паскаль не содержит некоторые часто используемые математические
функции, поэтому при их вычислении используют эквивалентные математические
формулы
|
Функция |
Эквивалентная математическая формула |
Запись в программе |
|
ax |
|
|
|
tg(x) |
|
|
|
arcsin(x) |
|
|
|
arccos(x) |
|
|
|
logax |
|
|
При возведении в небольшую целую степень вместо операции возведения в степень рекомендуется использовать операцию умножения, поскольку возведение в степень выполняется на несколько порядков дольше умножения и не позволяет обрабатывать отрицательные аргументы.
Оператор присваивания
Значение переменной может быть задано или изменено с помощью оператора
присваивания, который имеет вид:
<имя>:=<выражение>;
где <имя> - это имя переменной или функции;
:= - знак операции присваивания.
Оператор присваивания позволяет заменить текущее значение переменной, стоящей слева от знака присваивания, новым значением, задаваемым выражением, стоящим справа.
С правой стороны располагается выражение, которое после вычисления дает некоторое
значение. С левой стороны указывается имя переменной, которой это значение
присваивается. Данное обстоятельство позволяет использовать с левой и правой
стороны знака присваивания имя одной и той же переменной. Пусть, например,
имеются следующие операторы:
х, а : real;
. . . . .
х:=2.5;
а:=1.25;
х:=х+а;
После выполнения этих операторов переменная х будет иметь значение 3.75, так как первоначально произойдет вычисление выражения х + а в виде сложения двух констант: 2.5+ 1.25 = 3.75, а затем это значение присваивается переменной х (предыдущее значение х, равное 2.5, заменится новым - 3.75).
Следует обратить внимание на следующее правило: типы переменной и выражения должны быть одинаковыми. Исключение составляет случай, когда выражение имеет целый тип, а переменная - вещественный. [3]
В математике, экономике, информатике часто используются упорядоченные наборы данных, например последовательности чисел, таблицы, списки фамилий. Для обработки наборов данных одного типа вводится понятие массива.
Под массивом понимается совокупность конечного числа данных одного типа. Массив обозначается одним именем. Так, всю совокупность действительных чисел 1.6, 14.9, -5.0, 8.5, 0.46 можно считать массивом и обозначить одним именем, например А. Каждый элемент массива обозначается именем массива с индексом. Элементы массива упорядочены по значениям индекса.