Присвоение же переменной целого типа выражению вещественного типа запре-щено.




Вычитание, умножение, деление, div, mod.

Определены также операции отношения: равно, не равно, меньше, больше, меньше или равно, больше или равно.

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

 

Таблица.2.1 Стандартные функции в ПАСКАЛЕ

 

МАТЕМАТИЧЕСКАЯ ЗАПИСЬ ЗАПИСЬ ФУНКЦИИ НА РАСКАЛЕ ТИП АРГУМЕНТА ТИП РЕЗУЛЬТАТА
sin x SIN(X) REAL REAL
cos x COS (X) REAL REAL
ln x LN(X) REAL REAL
x SQRT(X) REAL REAL
arctg x ARCTAN(X) REAL REAL
ex EXP(X) REAL REAL
x2 SQR(X) REAL REAL
|x| ABS(X) INTEGER, REAL INTEGER, REAL
  TRUNC(X) INTEGER, REAL INTEGER

 

Определены стандартные функции преобразования значений типа в значения целого типа:

TRUNС(X) - вырабатывает целый результат путем отбрасывания дробной части аргу-мента;

ROUND(X) - вырабатывает целый результат путем округления до ближайшего целого. Пример, если Х = 21.53, то TRUNС(X) = 21, ROUND(X) = 22;

 

если Х = -2.7, то TRUNС(X) = - 2, ROUND(X) = -3.

 

 


Значениями “с имвольного типа “ являются элементы конечного и упорядоченного на-бора знаков. Существуют две стандартные, обратные по отношению друг к другу функции, называемые функциями преобразования:

ORD(X) - дает порядковый номер символа Х в упорядоченном множестве символов. Порядковые номера следуют по возрастанию без пропусков. При конкретной реализа-

ции языка использование функции позволяет получить, например: ORD(‘: ‘) = 58,

ORD(‘ 5 ‘) = 53, ORD(0) = 240, ORD(9) = 249,

Функция CHR(I) - дает символ, стоящий под номером I в упорядоченном множестве символов.

Например: CHR(66) = ‘ B ‘,CHR(57) = ‘ 9 ‘. Очевидно, что CHR(ORD(S)) = S и ORD(CHR(I)) = I.

Над переменными символьного типа определены операции отношения. Пусть С1 и С2 -переменные символьного типа. Отношение C1<C2 истинно тогда и только тогда, когда ORD(C1) < ORD(C2).

К аргументам символьного типа применимы также стандартные функции: PRED(S) и SUCC(S). Функция PRED(S) дает предыдущий символ, а функция SUCC(S) - следующий.

Например: PRED(‘ B ‘) = ‘ A ‘, а SUCC(‘ 9 ‘) = ‘: ‘. Справедливы равенства:

PRED(S) = CHR(ORD(S) - 1) и SUCC(S) = CHR(ORD(S) + 1).

Переменные “ булевского типа “ могут принимать одно из двух значений: TRUE (исти-на) или FALSE (ложь). Над ними определены три логические операции:

NOT (отрицание - НЕ), AND (конъюнкция - И), OR (дизъюнкция - ИЛИ).

Логические операции OR или AND выполняются над двумя величинами, а операция NOT -над одной.

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

Логическое умножение дает истинный результат только в том случае, если обе величи-ны (А или В) истинны. Если хотя бы одна величина (А или В) ложна, то результат также бу-дет ложным.

Логическое отрицание дает ложный результат, если величина имеет истинное значе-ние, и наоборот.

Результаты операций над логическими данными сведены в таблицу 2.3.

Константы символьного типа записываются литерами, заключенными в кавычки (апо-строфы). Символ апострофа записывается двойными кавычками.

Пример записи констант: ‘ B ‘ ‘D ‘ ‘6 ‘

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

Истина, 0 - ложь.

Значение FALSE и TRUE можно рассматривать как упорядоченное множество, состоя-щее из двух элементов. Целый, символьный, булевский типы называются так же дискретны-ми типами, поэтому над ними разрешены операции отношений:

ORD(FALSE) = 0; ORD(TRUE) = 1; SUCC(FALSE)= TRUE; PRED(TRUE) = FALSE.

 


Константы не изменяют своего значения в процессе выполнения программы. Она мо-жет быть задана явно своим значением или обозначена именем.

Константы бывают целые, действительные, логические, символьные, строковые.

 

Таблица 2.2

 

Типы аргументов и функций стандартных функций в ПАСКАЛЕ

 

Обращение Выполняемые функции Тип
аргумента функции
ABS(X) SQR(X) |x| x2 REAL или INTEGER REAL или INTEGER
SIN(X) COS(X) EXP(X) LN(X) SQRT(X) ARCTAN(X) sin(x) cos(x) ex Ln(x) x arctg x     REAL или INTEGER     REAL
TRUNC(X) ROUND(X) Выделение целой части числа Округление числа   REAL   INTEGER
  PRED(X) SUCC(X) Нахождение: предыдущего элемента последующего элемента INTEGER или CHAR или BOOLEAN INTEGER или CHAR или BOOLEAN
ORD(X) Определение порядкового номера сим-вола Х в наборе символов CHAR или BOOLEAN INTEGER
CHR(I) Определение символа из набора сим-волов по порядковому номеру i INTEGER CHAR
ODD(X) Определение нечетности числа INTEGER BOOLEAN

 

Таблица 2.3

 

Таблица истинности

 

A B NOT A A OR B A AND B
TRUE TRUE FALSE TRUE TRUE
TRUE FALSE FALSE TRUE FALSE
FALSE TRUE TRUE TRUE FALSE
FALSE FALSE TRUE FALSE FALSE

 

Константы целого и действительного типов являются числами. Они могут иметь по-ложительный или отрицательный знак и записываются числами или именами соответствую-щего типа.

Константы логического типа имеют одно из двух значений - TRUE (истинно) или FALSE (ложно),

Текстовые к онстанты (строки) записываются последовательностью символов (тек-стом), заключенной в кавычки. Имеющиеся в тексте кавычки дублируются. Разрешается ис-пользование последовательности символов, заключенных в апострофы, длиной не более 256 знаков (в зависимости от версии языка ПАСКАЛЬ).

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

 


ПАСКАЛЬ - это последовательность символов, ограниченных слева парой символов (* и справа парой символов * ). Вместо круглых скобок допускается {..}.

(*................*) - для комментария в несколько строк;

{...................} - для комментария, записанного сразу после оператора. Например. (* Определение площади фигуры *)

или { Координаты точки }.

Конструкция языка, задающая порядок выполнения действий над элементами данных называется выражением.

Выражение состоит из операндов - величин и выражений, над которыми производится операция.

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

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

Например:

- А - унарная, А + В - бинарная.

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

Операции одного приоритета выполняются последовательно слева направо. Примеры записи выражений:

Запись на языке ПАСКАЛЬ и Математическая запись

 


0.5+А P-T/A-B

 

( 1,25*SIN(X)+P)/(SQRT(A+B)/X)


а+0,5 рТ

в
а (1,25sin(x)+ p

a + b

x


 

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

Выражение 7-2*3 имеет значение 1, а выражение (7-2)*3 - значение 15. Выражение 16/4*2 имеет значение 8, а не 2 так как операции деления и умножения - одного приоритета и выполняются по порядку следования слева направо.

Типы результатов выражений в зависимости от типов операндов и выполняемых опе-раций представлены в таблице 2.4.

Функция ORD(x) -функция для дискретных типов, следовательно для нее определены операции отношений. Так как все символы упорядочены, то для символов x 1 и x 2 справедливо выражение отношения ORD (x 1)< ORD (x 2).

Отношение означает, что порядковый номер символа x 1 меньше, чем x 2. Поэтому ре-зультат выполнения операции отношение имеет тип BOOLEAN.

Отношение ORD (‘ 3 ‘) > ORD (‘6 ‘) имеет результат FALSE, так как цифра 3 располо-жена раньше цифры 6, а следовательно, порядковые номера в отношении записываются как 243>246.

С помощью оператора описываются действия над данными, выполняемые для реализа-ции алгоритма решения задачи. По функциональному назначению операторы языка можно подразделить на группы: присваивания, ввода - вывода, управления, определения функций и процедур (подпрограмм).

Оператор присваивания предназначен для вычисления нового значения некоторой пе-ременной, а также для определения значения, возвращаемого функцией. При выполнения

 

 


оператора присваивания вычисляется выражение стоящее в правой части, и его значение присваивается переменной в левой части.

 

Таблица 2.4 Результаты операций

 

Операция Знак операции Тип
операндов результат
Сложение + REAL или   INTEGER INTEGER, если оба операнда INTEGER, и REAL в противном случае
Умножение *
Вычитание -
Деление / REAL или INTEGER REAL
Деление с отбрасы-ванием остатка DIV     INTEGER     INTEGER
Вычитание остатка при делении чисел MOD
Отрицание NOT   BOOLEAN   BOOLEAN
Дизъюнкция OR
Конъюнкция AND
Сравнение: на равенство на неравенство   = <> Любой тип переменных и констант BOOLEAN
Сравнение: больше меньше больше или равно меньше или равно   > < >= <=   Любой скалярный тип   BOOLEAN

 

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

Общая форма записи оператора V:=А,

где V - имя переменной;:= -знак присвоения;

А - выражение. Например: Т:= 567.78

Присвоение же переменной целого типа выражению вещественного типа запре-щено.

Для преобразования значений типа в значение целого типа предназначены функции TRUNC(X) и ROUND(X).

Операторы ввода - вывода позволяют вводить в основную память исходные данные и на устройствах вывода информации получать результаты вычислений.

Операторы управления организуют управление последовательностью выполнения опе-раторов программы.

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

 

 


По своему составу различают операторы двух типов: простые и структурные.

Простым считается оператор, который не содержит других операторов. К простым опе-раторам относятся операторы присваивания, перехода, процедуры.

Структурным считается оператор, содержащий в качестве компоненты один или не-сколько операторов. К структурным операторам относятся операторы условные, выбора, цикла, составные.

Составной оператор представляет собой последовательность операторов, заключенную в ключевые слова BEGIN и END. В этой конструкции служебные слова BEGIN и END назы-ваются операторными скобками. Слово BEGIN выполняет роль открывающейся скобки, слово END - роль закрывающейся скобки. Составной оператор представляется как единый оператор. Его можно вставить в любое место программы, где допускается один оператор.

Любой из операторов составного оператора, в свою очередь, также может быть состав-ным.

Следует обратить внимание, что после BEGIN и END не ставится точка с запятой; она ставится между операторами.

Форма записи данного оператора: BEGIN

оператор 1; оператор 2;.................... оператор n-1; оператор n

END;

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

A:= B; R:=2 ;;

K:=7.2;

Здесь третий оператор является пустым.

Составной и пустой операторы нередко применяются в условных операторах. Программа на Паскале состоит из трех частей: заголовок программы, раздел описаний и

раздел операторов. Структура программы представлена на рис. 2.1. PROGRAM < имя>;

 

раздел описаний

 

BEGIN

раздел операторов

END.

 

Рис. 2.1. Структура программы на языке Паскаль

 

Заголовок содержит служебное слово PROGRAM, имя программы, задаваемое пользо-вателем-программистом, и при необходимости, в круглых скобках имена стандартных про-цедур для связи программы с внешними устройствами ввода-вывода ЭВМ. Заканчивается заголовок символом “; “ (точка с запятой).

 

 


Раздел описаний предназначен для объявления всех встречающихся в программе дан-ных и их характеристик (имена данных, их тип, возможные значения и др.). Этот раздел со-стоит из следующих разделов:

• объявление меток;

• объявление констант; • объявление типов;

• объявление переменных;

• объявление процедур и функций.

Разделы должны располагаться в строго названном порядке. Объявление процедур и функций является одним разделом. Следует заметить, что не все перечисленные разделы обязательны в каждой программе. После каждого описания ставится символ “; “.

 

Структура программы

 

PROGRAM < имя>; LABEL (раздел меток); CONST (раздел констант); TYPE (раздел типов);

VAR (раздел переменных);

PROCEDURE, FUNCTION (раздел процедур и функций); BEGIN

оператор 1; оператор 2; оператор 3;.................... оператор n-1; оператор n

END.

 

Раздел операторов заключается в операторные скобки вида BEGIN и END, при этом после END ставится точка. В разделе операторов записывается последовательность испол-няемых операторов. Каждый оператор выражает действие, которое необходимо выполнить. Исполняемые операторы отделяются друг от друга символом “; “. Сама же программа запи-сывается в свободной форме, операторы не привязаны к определенной позиции строки в от-личие от многих других языков программирования.

В одной строке можно указывать несколько описаний или операторов. Допускается пе-ренос с одной строки на другую частей описаний или операторов (но не разрешается разде-лять слова, константы и составные символы). В то же время рекомендуется программу запи-сывать в такой форме, чтобы ее можно было легко читает и понимать. Для этого широко ис-пользуются пробелы, пустые строки и комментарии. Рекомендуется смысловые части выде-лять одинаковыми отступами от начала строки. Так, для выделения заголовка программы, раздела описаний и раздела операторов удобно записывать слова PROGPAM, BEGIN, END с одной позиции строки. По отношению к ним соответствующие описания или операторы сдвигаются вправо. Желательно сдвиг делать на одинаковое число позиций от края или по отношению к предыдущему сдвигу.

Все операции ввода/вывода основаны на работе с последовательными файлами. Мы рассмотрим четыре процедуры ввода/вывода: READ, READLN, WRITE, WRITELN, исполь-зующие стандартные файлы ввода/вывода. Стандартный файл ввода имеет имя INPUT, вы-вода - имя OUTPUT. Эти имена передаются в виде параметров в заголовке программы. Как правило, программа без вывода не бывает, поэтому простейшая конструкция заголовка про-граммы имеет вид

PROGRAM <имя>;

 


Ввод в языке ПАСКАЛЬ может быть только бесформатный. Можно вводить данные только целого, и символьного типов. Ввод переменных логического типа не допускается.

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

Для задания переменным их числовых значений можно использовать оператор при-сваивания, например:

А:=9; В:= -6.789;

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

Как только во время выполнения программы встречается оператор READ, ЭВМ оста-навливается и ожидает ввода. Когда значения переменных введены, процесс выполнения программы продолжается. Оператор ввода имеет вид:

READ (a1, а2,...., аn);

где a1, а2,...., аn - переменные, которым последовательно присваиваются вводимые зна-чения.

Числовые значения водятся через пробел, признаком окончания ввода является нажа-тие клавиши Enter. Обратите внимание: числовые значения вводятся после набора на экране дисплея всей программы и после запуска ее на выполнение.

Пусть переменным А, В, С необходимо присвоить значения в процессе выполнения программы: А=4, В=14, С=24.6. Оператор ввода примет вид

READ(А, В, С);

а числовые значения можно ввести следующим образом: 4 14 24,6 Enter.

Оператор READ (a1, а2,...., аn); обеспечивает выбор данных в результате которой имена переменных a1, а2,...., аn получают соответствующее значение.

Если вновь повторить запуск программы, то можно ввести любые другие значения, на-пример: 15 -1.45 -2,6 Enter.

Переменные получат значение А=15, В=-1.45, С=-2.6, при которых будет выполняться программа. Ни один оператор программы в этом случае не изменяется.

Если переменная описана как действительная (REAL), а ее значение является целым числом, то можно вводить число как целое и как действительное. Машина сама преобразует целое число в действительное.

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

Допускается использование оператора ввода без параметров READLN.

Оператор READLN (a1, а2,...., аn); обеспечивает выборку данных из стандартного файла INPUT, что после окончания выборки последней переменной осуществляет переход к началу новой строки файла.

При вводе значений переменного целого и действительного типов READ и READLN пропускает пробелы между значениями, а оператор READLN обеспечивает пропуск одной строки в стандартном файле INPUT и переход к началу новой строки.

Различают различные методы организации ввода чисел: - с использованием одного оператора READ READ(A,B,C);

числа вводятся через пробел;

- с использованием нескольких оператора READ READ(A);

 

 


READ(B); READ(C);

каждое число вводится индивидуально; - комбинированно

READ(A,B); READ(C); READLN(A,B); READLN(C);

Ввод чисел целых и вещественных типов осуществляется одинаково.

Можно выводить данные всех четырех стандартных типов (для булевого типа выводит-ся константа TRUE или FALSE).

Для вывода данных из памяти ЭВМ на экран дисплея предназначен оператор вывода WRITE. Форма записи оператора

WRITE (b1, b2,.., bn);

где - b1, b2,.., bn - имена переменных, подлежащие выводу могут быть либо переменны-ми, либо строкой символов, заключенной в апострофы.

Например, оператор

WRITE (‘ Значение В = ‘, В);

на экран дисплея выводит строку Значение В =

а затем значение переменной В.

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

Оператор WRITE(b1, b2,.., bn); выполняет вывод значений, соответствующие именам b1, b2,.., bn в стандартный выходной файл. Выводимые значения размещаются на одной строке.

Часто используется оператор вывода без параметров WRITELN

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

ку экрана.

Оператор WRITELN(b1, b2,.., bn); выполняет вывод значений, соответствующий, b1, b2,.., bn в стандартный файл и после вывода последнего осуществляет переход к новой строке файла.

Оператор WRITELN; обеспечивает пропуск строки в файле и переход к началу сле-дующей строки.

Имена переменных, записанные в операторе вывода, могут принадлежать целому, дей-ствительному, символьному или логическому типу.

Форма представления выводимых переменных определяется типом переменных: значение величин целого типа выводится в обычной форме;

значение величин действительного типа - в виде нормализованного числа действи-тельного типа с порядком;

значение логического типа - в виде логических значений TRUE или FALSE; значение символьных переменных - в виде соответствующих символов.

Если в операторе вывода указывается общее число позиций (w) и не указывается коли-чество позиций после запятой (d), то число выводится в экспоненциальной форме с шириной поля (w).

Пример:

WRITE(А); Выводится число 6.0Е+02. WRITE(А:8); Выводится число 600. WRITELN(A:m:n); Выводится число 7.12.

где m - поля, отводимые под запись значения, включая десятичную точку и знак числа;

 

 


n - часть поля, отводимое под дробную часть числа.

Если при выводе символьного типа в явном виде не указывается количество позиций, под каждый символ отводится одна позиция.

 

Пример:

WRITELN(' s1= ',s1:5,' s2 = ',s2);

При выводе числа с фиксированной точкой указывается ширина поля, отводимая под все значения и дробную часть числа.

При выводе нескольких значений на каждой строке для наглядности задаются необхо-димым количеством пробелов. Для этого записывают оператор в виде:

WRITE(' ':g);

где g - константа целого типа, указывающая число пробелов.

При выводе значений булевого типа выводится TRUE или FALSE. Пример:

WRITE(A < B:7); Напечатает в отведенных семи позициях слово TRUE, если A<B, или FALSE - в противном случае.

Для ввода в разделе CONST задаются соответствующие значения. При этом тип кон-стант автоматически определяется по содержанию правой части.

Например, фрагмент программы:

 

CONST A=35; X= 9,79; F= - 8.003; Р=234; BEGIN

Y:= A*X+(F*A)/P;.....

END;

Именованным константам А, X, F присваивает вещественный тип, а константе с име-нем Р - целый.

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

Изменять значения констант в программе нельзя.

Если в разделе переменных описываются переменные A, X, F, P, а в разделе операторов им присваиваются соответствующие значения:

 

var

A,X,F,P,Y: real; begin

A:=2.5; X:=7.3; F:=-17.5; P:=544.8; Y:=A*X*X+F/P-X;

...... end.

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

Ввод может быть только бесформатным. Можно вводить данные только вещественно-го целого, и символьного типов. Данные набираются на дисплее, при этом разделителем ме-жду числами служит пробел или ENTER. Разделитель между символами, между числом и символом не нужен.

 

2.1. Алгоритмизация задач

 

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

 

 


Такими этапами являются: 1. Постановка задачи.

2. Математическая формулировка задачи. 3. Выбор численного метода решения.

4. Разработка алгоритма решения задачи. 5. Написание программы.

6. Ввод и отладка программы.

7. Ввод исходных данных (решение контрольного примера). 8. Решение однотипных задач.

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

Рассмотрим подробнее выполнение работ на каждом этапе в процессе подготовки зада-чи к решению.

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

Математическая формулировка задачи. Осуществляет формализацию задачи путем описания ее с помощью формул, определяет перечень исходных данных и получаемых ре-зультатов, начальные условия, точность вычисления. По существу разрабатывается матема-тическая модель решаемой задачи.

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

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

Разработка алгоритма решения задачи. На данном этапе устанавливается необходи-мая логическая последовательность вычислений с учетом выбранного численного метода решения и других действий, с помощью которых будут получены результаты. Алгоритм - некоторая конечная последовательность предписаний (правил), определяющая процесс пре-образования исходных и промежуточных данных в результат решения задачи. Схема алго-ритма представляет собой последовательность блоков, предписывающих выполнение опре-деленных действия, и связи между ними.

 

2.2. Виды и свойства алгоритма

 

При разработке алгоритма решения задачи математическая формулировка задачи явля-ется основой для определения последовательности действий, приводящих к получению ис-комого результата.

Разрабатываемый алгоритм должен обладать следующими свойствами: массовостью, позволяющей решать не одну задачу, а целый класс задач;

детерминированностью, однозначно определяющей выполняемые действия (промежу-точные и окончательные результаты разных пользователей будут одинаковыми при одинако-вых исходных данных);

 

 


результативностью, позволяющей получить результат после конечного числа шагов. Различают следующие типы алгоритмов:

- линейные;

- разветвляющиеся; - циклические.

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

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

Алгоритм циклической структуры - алгоритм, содержащий многократно выполняемые участки вычислительного процесса, называемые циклами. Использование циклов позволяет существенно сократить схему алгоритма. Различают циклы с заданным и неизвестным чис-лом повторений, характеризующиеся последовательным приближением к исходному значе-нию с заданной точностью.

Алгоритм со структурой вложенных циклов - алгоритм, содержащий цикл, внутри ко-торого размещены один или несколько других циклов.

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

Существует 3 способа представления алгоритмов: а) словесный;

б) операторный; в) графический.

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

выполнение определенных действий, и связи между ними.

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

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

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

Ввод программы и исходных данных выполняется с помощью клавиатуры.

Отладка программ. представляет собой процесс обнаружения и устранения синтакси-ческих и логических ошибок.

Синтаксические ошибки, связанные с неправильной записью конструкции языка, выяв-ляются самой ЭВМ. Логические ошибки появляются в результате нарушения последователь-ности вычислений и отсутствия необходимых данных для ЭВМ. Для выявления логических ошибок используют контрольные вычисления, выполненные другими средствами и метода-ми.

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

Рассмотрим пример составления алгоритма.

 


Задача. Определить площадь треугольника по длине сторон.

1. Математическая формулировка задачи. Для определения площади треугольника воспользуемся формулой Герона

 

s = p ∗(pa)∗(pb)∗(pc)),

где a, b, c - длины сторон;

p=(a+b+c)/2 - полупериметр треугольника,

 

2. Алгоритм решения задачи.

• Ввод исходных данных a,b, c. • Вычисление р.

• Вычисление s.

• Вывод результата s. 3. Блок-схема программы.

 

начало

 

ввод данных

 

вычисление Р

 

вычисление S

 

вывод результата конец

 

Рис. 2.2. Блок-схема примера.

 

В приведенной программе сначала вычисляются значения полупериметра р, а затем значение s, при вычислении которого используется р. Это позволяет избежать повторения вычисления одной и той же величины, а следовательно, уменьшить время вычисления зада-чи. На блок-схеме блоки расположены в той последовательности, в которой они должны вы-полняться. Любая перестановка блоков приведет к невозможности решения задачи.

4. Определение переменных участвующих в решении задачи. Исходные данные: a, b, c - стороны треугольника, см (REAL); Промежуточные данные:

p- полупериметр треугольника (REAL); Выходные данные:

s - площадь треугольника (REAL). 5. Листинг программы: PROGRAM PR1;

VAR

a, b, c, p, s: REAL; BEGIN

WRITE(‘Введите a,b,c в см’); READLN(a,b,c);

p:=(a+b+c)/2;

s:=SQRT(p*(p-a)*(p-b)*(p-c));

WRITELN (‘ Площадь S= ’, s:8:3,‘ кв. см‘); END.

 


2.3. Стандартные функции

 

При составлении программы часто используются стандартные функции. Рассмотрим их использование.

Пример1. Даны числа х и a. Определить стандартные функции. PROGRAM PR2;

VAR X,A,Y1,Y2,Y3,Y4,Y5,Y6:REAL;

BEGIN

WRITE(‘ Введите Х и А’): READLN(X,A); Y1:=COS(X); Y2:=SIN(X);

Y3:=Y2/Y1; Y4:=EXP(X); Y5:=LN(X); Y6:=EXP(X*LN(A));

WRITELN(‘ Ответ cos(x) = ‘,Y1:8:3,’ радиан’); WRITELN(‘ Ответ sin(x) = ‘,Y2:8:3,’ радиан’); WRITELN(‘ Ответ tg(x) = ‘,Y3:8:3,’ радиан’); WRITELN(‘ Ответ еx = ‘,Y4:8:3);

WRITELN(‘ Ответ Ln(x) = ‘, Y5:8:3); WRITELN(‘ Ответ ax = ‘,Y6:8:3); END.

Пример2. Дано: а и b - два неотрицательных числа и b0. Определить частное и оста-ток, возникающий при делении а на b с остатком.

17 div 3 = 5, 8 div 2 = 4, 1 div 5 = 0,

17 mod 3 = 2, 8 mod 2 = 0, 1 mod 5 = 1.

 

 

Пример 3. Дано действительное число А. Определить - число А четное или нечетное. Воспользуемся стандартной функцией ODD, возвращающей значение логического типа

TRUE или FALSE.

 

PROGRAM PR16; VAR

а: INTEGER; c:boolean;

BEGIN

WRITE(‘Введите число А ‘); READLN(a);

c:=odd(а); WRITELN(с);

END.

 

2.4. Трассировка программы

 

 


Отображение (на бумаге или на экране) того, что происходит при выполнении каждого оператора, называется трассировкой программы.

Трассировку программы удобно выполнять в таблице трассировки. Структура таблицы:

• в первой колонке записываются номера строк, соответствующие операторам, и именно в том порядке, в каком они выполняются;

• во второй колонке записываются входы и выходы в различные части программы, помет-ки о выполняемых операторах. Эти сведения называются информацией об управлении.

• каждая их остальных колонок соответствует переменной программы и используется для прослеживания значений этой переменной.

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

1. Program summa; 2. var a,b,c: integer; 3. begin

4. read (a,b); 5. c:=a+b; 6. write (c); 7. end.

 

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

 

Таблица трассировки программы summa. Входные данные а=4, b=17.

 

Строка Ход выполнения a b c
  вход в summa ? ? ?
         
         
  вывод: 21      
  выход из summa      

 

При входе в программу - строка 3 (begin) переменные уже созданы, но еще не приобре-ли своих значений - еще не определены, этот факт отражается в таблице трассировки вопро-сительными знаками в соответствующих колонках. Выполнение оператора ввода read (a,b) в строке 4 привело к тому, что переменные a и b приобрели соответственно значения 4 и 17, а выполнение <



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-07-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: