Ход отладки программы и контрольный пример



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Содержание

 

Введение                                                                                                      5

1. Теоретическая часть                                                                               6

1.1. Постановка задачи                                                                               6

1.2. Описание языка программирования                                                  6

2. Экспериментальная часть                                                                    16

2.1. Описание структурной схемы алгоритма                                        16

2.2. Описание программного кода                                                          20

2.3. Ход отладки программы и контрольный пример                            21

Заключение                                                                                      23

Список литературы                                                                         24

Приложение(листинги программ)                                                 25

 

 

 

 

 

 

 

 

 

Введение

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

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

Современные сетевые технологии позволяют, не вставая со своего рабо­чего места (или не выходя из дома вовсе) получать самую свежую информа­цию о последних событиях в мире, достижениях науки и техники. Благодаря им возможно решение сложных научных и других проблем ведущими специа­листами, находящимися в различных точках планеты, в любой области челове­ческой деятельности. Для создания программного обеспечения человеку необходимо добиться взаимопонимания между программистом и машиной. Именно в этих целях создаются языки программирования (алгоритмические языки), которые одинаково понятны как человеку, так и машине.

 

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                              nil                           shr

asm                        file                              not                          string

array                      for                              object                      then

begin                     function                      of                            to

case                     goto                            or                            type

const                      if                                packed                    unit

constructor            implementation           procedure               until

destructor              in                                 program                 uses

div                        inline                           record                     var

do                        interface                      repeat                     while

downto                 label                            set                           with

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 - вывод меню.