Ход отладки программы и контрольный пример
Содержание
Введение
1. Теоретическая часть
1.1. Постановка задачи
1.2. Описание языка программирования
2. Экспериментальная часть
2.1. Описание структурной схемы алгоритма
2.2. Описание программного кода
2.3. Ход отладки программы и контрольный пример
Заключение
Список литературы
Приложение(листинги программ)
Введение
Персональные компьютеры – это универсальные устройства для обработки информации, они могут выполнять любые действия в этом направлении. Но для этого надо составить для компьютера на понятном ему языке точную и подробную программу. Информатика и вычислительная техника стали в наши дни неотъемлемыми составными частями всей нашей жизни. В настоящее время трудно себе представить область науки и техники, отрасль народного хозяйства или сферу обслуживания, где бы в той или иной форме не применялись средства вычислительной техники. ЭВМ стремительно проникла в нашу жизнь, требуя не только от инженера или техника, но и от студентов и школьников навыков программирования.
Современные информационные технологии позволяют с максимальной эффективностью решать в наше время задачи, для решения которых человеку в совсем недалеком прошлом требовалось затрачивать огромное количество времени, сил и средств. Применение компьютерной техники в работе инженера дает возможность свести к минимуму, а то и полностью исключить, тяжелую рутинную работу. Это, в свою очередь, приводит к значительному сокращению времени, проходящего с момента зарождения идеи в мозгу человека до ее реального практического воплощения в жизни, что в конечном итоге ведет к значительному повышению уровня развития общества в целом.
Современные сетевые технологии позволяют, не вставая со своего рабочего места (или не выходя из дома вовсе) получать самую свежую информацию о последних событиях в мире, достижениях науки и техники. Благодаря им возможно решение сложных научных и других проблем ведущими специалистами, находящимися в различных точках планеты, в любой области человеческой деятельности. Для создания программного обеспечения человеку необходимо добиться взаимопонимания между программистом и машиной. Именно в этих целях создаются языки программирования (алгоритмические языки), которые одинаково понятны как человеку, так и машине.
1 Теоретическая часть.
1.1 Постановка задачи.
Дан двумерный массив размером M x N. Преобразовать его по правилу - все элементы каждого столбца матрицы умножить на минимальный элемент этого столбца. Из первых четырех строк массива сформулировать четыре новых вектора (одномерные массивы). для каждого вектора найти сумму и произведение элементов массива расположенных между между первым и вторым нулевыми элементами.
1.2. Описание языка программирования
Алгоритмический язык высокого уровня Паскаль был разработан в конце 60-х годов профессором Н.Виртом. Он был создан специально для обучения программированию. К основным достоинствам языка Паскаль следует отнести гибкость и надежность, простоту и ясность конструкций, возможность удовлетворения требованиям структурного программирования, наличия набора структурированных типов данных: массивов, записей, записей с вариантами, файлов, множеств, возможность построения новых типов данных.
На базе стандартного Паскаля фирма Borland разработала семейство Паскаль-систем, называемых Турбо Паскалем. Турбо Паскаль пользуется широкой популярностью среди массовых пользователей и профессиональных программистов. Это объясняется наличием очень удобной интегрированной среды и тем, что в его основе лежит мощный язык программирования, представляющий собой расширенную версию языка Паскаль.
Всего фирма Borland разработала и выпустила на рынок около шести модификаций этой системы. Каждая из них представляет собой усовершенствование предыдущей. Непрерывное совершенствование системы Турбо Паскаля породило в конце концов очень мощную по своим возможностям систему программирования, отвечающую самым взыскательным требованиям. С помощью Турбо Паскаля можно создавать многие программы — от программ, предназначенных для решения простейших вычислительных задач, до сложных современных систем управления базами данных и операционных систем.
И вместе с тем Турбо Паскаль остается простым в изучении, что позволяет начинающему программисту на его основе изучить методы и способы эффективного программирования.
В своей простейшей форме программа Borland Pascal состоит из заголовка программы, который именует программу, и основного программного блока, выполняющего назначение программы. В основном программном блоке находится секция кода, заключенная между ключевыми словами begin и end. Простейшая программа, иллюстрирующую эти принципы:
program Privet;
begin
Writeln('Добро пожаловать в Borland Pascal');
end.
Первая строка – это заголовок программы, который именует данную программу. Остальная часть программы – это исходный код, который начинается ключевым словом begin и заканчивается end. Хотя данная конкретная программа содержит только одну строку, их может быть много. В любой программе Borland Pascal все действия выполняются между begin и end.
Исходный код между begin и end содержит операторы, которые описывают выполняемые программой действия. Это называются операторной частью программы.
Приведем примеры операторов:
A := B + C; { присвоить значение }
Calculate(Length, Height); { активизировать процедуру }
if X < 2 then { оператор условия }
Answer := X * Y;
begin
X := 3;
Y := 4;
Z := 5;
end;
while not EOF(InFile) do { оператор цикла }
begin
ReadLn(InFile, Line);
Process(Line);
end;
Элементы языка.
Алфавит.
Алфавит языка программирования (ЯП) представляет собой набор неделимых конструкций, которые рассматриваются компилятором как единое целое.
Алфавит языка Турбо Паскаль включает буквы, цифры, в том числе шестнадцатеричные, специальные символы, пробелы, зарезервированные слова и стандартные директивы.
Буквы — это буквы латинского алфавита от а до z и от А до Z, а также знак подчеркивания _ (ASCII-код 95). В Турбо Паскале нет различия между прописными и строчными буквами алфавита, если только они не входят в символьные и строковые выражения.
Цифры — арабские цифры от 0 до 9.
Каждая шестиадцатеричная цифра имеет значение от 0 до 15. Первые 10 значений обозначаются арабскими цифрами 0...9, остальные шесть — латинскими буквами A...F или a...f.
Специальные символы Турбо Паскаля:
+ -*/ = ,'.:;<>[] (){}Л@$# К специальным символам относятся также следующие пары символов:
<> <= >= := (* *) (. .)
В программе эти пары символов нельзя разделять пробелами, если они используются как знаки операций отношения или ограничители комментария. Символы (. и .) могут употребляться соответственно вместо символов [ и ].
Особое место в алфавите языка занимают пробелы, к которым относятся любые ASCII-символы в диапазоне кодов от 0 до 32. Эти символы рассматриваются как ограничители идентификаторов, констант, чисел, зарезервированных слов. Несколько следующих друг за другом пробелов считаются одним пробелом (последнее не относится к строковым константам).
В Турбо Паскале имеются следующие зарезервированные слова:
and end
asm file
array for
begin function of to
case goto
const if
constructor implementation procedure until
destructor in
div inline
do interface repeat while
downto label
else mod shl xor
Зарезервированные слова используются для описания операторов, данных и других языковых конструкций. Они придают тексту программы более «читабельный» вид, приближая его к тексту, написанному на естественном английском языке.
Зарезервированные слова не могут использоваться в качестве идентификаторов.
Стандартные директивы первоначально связаны с некоторыми стандартными объявлениями в программе. К стандартным директивам относятся:
absolute far near
assembler forward private
external interrupt virtual
Как и зарезервированные слова, стандартные директивы в окне редактора Турбо Паскаля выделяются цветом, тем не менее вы можете переопределить любую стандартную директиву, то есть объявить одноименный идентификатор. Стандартные директивы private и virtual действуют только в пределах объявления объектов.
Идентификаторы.
Идентификаторы в Турбо Паскале — это имена констант, переменных, меток, типов, объектов, процедур, функций, модулей, программ и полей в записях. Идентификаторы могут иметь произвольную длину, но значащими (уникальными в области определения) являются только первые 63 символа.
Идентификатор всегда начинается буквой, за которой могут следовать буквы и цифры. Напомню, что буквой считается также символ подчеркивания, поэтому идентификатор может начинаться этим символом и даже состоять только из одного или нескольких символов подчеркивания. Пробелы и специальные символы алфавита не могут входить в идентификатор. Примеры правильных идентификаторов:
а
ALPHA
MyProgramlsBestProgram
date_27_sep_39
external {Это - стандартная директива!}
_beta
Примеры неправильных идентификаторов:
Program {начинается цифрой}
blocktl {содержит специальный символ}
My Prog {содержит пробел}
mod {зарезервированное слово}
Константы.
В качестве констант в Турбо Паскале могут использоваться целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки символов, конструкторы множеств и признак неопределенного указателя NIL.
Целые числа записываются со знаком или без него по обычным правилам и могут иметь значение от -2 147 483 648 до +2 147 483 647. Следует учесть, что если целочисленная константа выходит за указанные границы, компилятор выдает сообщение об ошибке. Такие константы должны записываться с десятичной точкой, то есть определяться как вещественные числа.
Вещественные числа записываются со знаком или без него с использованием десятичной точки и/или экспоненциальной части. Экспоненциальная часть начинается символом е или Е, за которым могут следовать знак + (плюс) или - (минус) и десятичный порядок. Символ е (Е) означает десятичный порядок и имеет смысл «умножить на 10 в степени». Например:
3 .14Е5 — 3.14 умножить на 10 в степени 5;
-17е-2— минус 17 умножить на 10 в степени минус 2.
Если в записи вещественного числа присутствует десятичная точка, перед точкой должна стоять хотя бы одна цифра. Если используется символ экспоненциальной части е (Е), за ним должна следовать хотя бы одна цифра десятичного порядка.
Шестнадцатеричиое число состоит из шестнадцатеричных цифр, которым предшествует знак доллара $ (ASCII-код 36). Диапазон шестнадцатеричных чисел — от $00000000 до $FFFFFFFF.
Логическая константа — это либо слово False (ложь), либо слово True (истина).
Символьная константа — любой символ ПК, заключенный в апострофы:
' z' — символ z;
' Ф' — символ Ф.
Если необходимо записать собственно символ апострофа, он удваивается: ""-символ ' (апостроф).
Допускается запись символа указанием его внутреннего кода, которому предшествует символ # (код 35), например:
#97 — символ а;
#90 — символ Z;
#39— символ ';
#13 — символ CR (возврат каретки).
Строковая константа — любая последовательность символов (кроме символа возврата каретки CR), заключенная в апострофы. Если в строке нужно указать сам символ апострофа, он удваивается, например:
'Это — строка символов'
'That' 's string'
Строка символов может быть пустой, то есть не иметь никаких символов в обрамляющих ее апострофах. Строку можно составлять из кодов нужных символов с предшествующими каждому коду символами #, например, следующие две строки эквивалентны:
#83#121#109#98#11#108
'Symbol'
Наконец, в строке можно чередовать части, записанные в обрамляющих апострофах, с частями, записанными кодами. Таким способом можно вставлять в строки любые управляющие символы, в том числе символ CR (код 13), например:
#7'Ошибка !'#13'Нажмите любую клавишу ...'#7 .
Конструктор множества — список элементов множества, обрамленный квадратными скобками, например:
[1,2,2..7,12] [blue, red]
[]
[true]
В отличие от стандартного Паскаля, в Турбо Паскале разрешается в объявлении констант использовать произвольные выражения, операндами которых могут быть ранее объявленные нетипизированные константы, имена типов и объектов, а также следующие функции от них:
abs lo ptr swap
chr odd round trunc
hi ord sizeof
length pred succ
Например:
const
MaxReal = Maxlnt div SizeOf(real);
NumChars = ord('Z') - ord('a') + 1;
LnlO - 2.302585092994;
LnlOR = 1 / LnlO;
Выражения.
Основными элементами, из которых конструируется исполняемая часть программы, являются константы, переменные и обращения к функциям. Каждый из этих элементов характеризуется своим значением и принадлежит к какому-либо типу данных. С помощью знаков операций и скобок из них можно составлять выражения, которые фактически представляют собой правила получения новых значений.
Частным случаем выражения может быть просто одиночный элемент, то есть константа, переменная или обращение к функции. Значение такого выражения имеет, естественно, тот же тип, что и сам элемент. В более общем случае выражение состоит из нескольких элементов (операндов) и знаков операций, а тип его значения определяется типом операндов и видом примененных к ним операций.
Примеры выражений:
У
21
(а + b) * с
sin(t)
а > 2
not Flag and (a = b)
NIL
[1, 3..7] * setl
Операции.
В Турбо Паскале определены следующие операции:
- унарные операции: not, @;
- мультипликативные операции: *, /, div, mod, and, shl, shr;
- аддитивные операции: +, -, or, xor;
- операции отношения: =, о, <, >, <=, >=, in.
Приоритет операций убывает в указанном порядке, то есть высшим приоритетом обладают унарные операции, низшим — операции отношения. Порядок выполнения нескольких операций равного приоритета устанавливается компилятором из условия оптимизации кода программы и не обязательно слева направо. При исчислении логических выражений операции равного приоритета всегда вычисляются слева направо, причем не обязательно все: при установленном в среде Турбо Паскаля флажке Options - Compiler - Complete boolean eval вычисляются все операции отношения, при неустановленном — только те, которые достаточны для получения результата.
Структура программы.
Структура любой программной единицы (программы, модуля, процедуры или функции) должна быть такой:
«Объявление программной единицы>
{Раздел описаний}
begin
(Раздел исполняемых операторов)
end<символ конца программной единицы>
Здесь <Объявление программной единицы> — заголовок программы, модуля, процедуры или функции (заголовок программы можно опускать без каких-либо последствий для программы, а для модуля, процедур и функций наличие заголовка обязательно); <символ конца программной единицы> — символ точки (.) для программы и модуля или символ точки с запятой (;) для процедуры и функции.
Любой из двух разделов программной единицы (раздел описаний и раздел исполняемых операторов) или оба одновременно могут быть пустыми, то есть не содержать никаких описаний или исполняемых операторов.
В разделе описаний должны содержаться описания всех идентификаторов, используемых в разделе исполняемых операторов. Исключением являются идентификаторы, определенные в интерфейсных частях программных модулей (библиотек), а также глобальные для процедуры или функции идентификаторы. Если в программной единице используется идентификатор из интерфейсной части какого-либо модуля, в начале программы в предложении uses необходимо указать имя этого модуля. Последнее не относится к идентификаторам, определенным в стандартном модуле System, то есть имя этого модуля в предложении uses указывать не нужно. Более того, модуль System считается предварительно объявленным, поэтому следующее объявление компилятор расценит как попытку двойного объявления модуля System и выдаст соответствующее сообщение об ошибке:
uses System;
В разделе описаний объявляются идентификаторы типов, объектов, констант, переменных, а также метки, процедуры и функции. Описанию типов и объектов должно предшествовать зарезервированное слово type, описанию констант — const, переменных — var и меток — label, например:
type
DigType = set of ' 0'..'9';
StrType = String [40]; const
N = IOC-EPS = le-9; var
x,y : real;
st :.StrType; label
lbl, lb2;
В отличие от стандартного Паскаля, разделы type, const, var, label могут следовать друг за другом в любом порядке и встречаться в разделе описаний сколько угодно раз.
2 Экспериментальная часть
2.1. Описание структурной схемы алгоритма
Рис. 1. Блок – схема алгоритма поиска минимального элемента столбца матрицы и умножение всех элементов этого столбца на найденное значение
Рис. 2. Блок – схема алгоритма вычислений в векторах.
Рис. 3. Блок – схема программы
2.2. Описание программного кода
Разработанная программа состоит из одного модуля KURS1.1.PAS.
Рассмотрим его состав.
Константы:
k=10 – максимальная размерность матрицы.
Типы:
vektor=array[1..k] of integer - одномерный массив целых чисел.
matric=array[1..k,1..k] of integer - двумерный массив целых чисел.
Глобальные переменные:
A,B – матрицы до и после преобразований, matric.
G – вектор, vektor.
Ch - номер режима работы с программой, Char.
GD,GM – графический драйвер, графический модуль, integer
TecDeystvie – номер активного пункта, integer.
i,j – номер столбца, строки, integer.
M,N – количество строк, столбцов, integer.
Min – минимальный элемент, integer.
Sum – сумма, integer.
Proizv – произведение, integer.
Процедура SlowText(x,y,c,s) – вывод текста на экран.
Х,у - координаты, integer.
C – расстояние межу символами, integer.
S – выводимый текст, string.
Процедура Menu - вывод меню.