Сёмов Основы разработки алгоритмов и программ. Учебное пособие для студентов факультета дистанционных форм обучения миигаик москва 2020 2 Рецензенты
Скачать 391.34 Kb.
|
Раздел описания переменных начинается со слова Var (variables — переменные), за которым идет список имен переменных через запятую. Тип указывается после двоеточия. В стандарте языка Паскаль существует два типа числовых данных: вещественный и целый. Слово 27 integer обозначает целый тип (является идентификатором целого типа). Вещественный тип обозначается словом real. Например, раздел описания переменных может быть таким: Var a, b : integer; с, d : real; Идентификаторы переменных составляются из латинских букв и цифр; первым символом обязательно должна быть буква, Раздел операторов — основная часть программы. Начало и конец раздела операторов программы отмечаются служебными словами begin (начало) и end (конец). В самом конце программы ставится точка. begin < операторы > end. < операторы > программы следует записывать с отступом в два пробела от вертикали, с которой записывают служебные слова begin end. Ввод исходных данных с клавиатуры происходит по оператору read (read — читать) или readln (read line — читать строку). Формат операторов: read ( При выполнении команды ввода компьютер ожидает действий пользователя. Пользователь набирает на клавиатуре значения переменных в том порядке, в каком они указаны в списке, отделяя их друг от друга пробелами. Одновременно с набором данных на клавиатуре они появляются на экране. В конце нажимается клавиша <ВВОД> или readln экранный курсор перемещается в начало новой строки, а по оператору read этого не происходит. Вывод результатов происходит по оператору write (write — писать) или writeln (write line — писать в строку). Формат оператора: write ( Результаты выводятся на экран компьютера в порядке их перечисления в списке. Элементами списка вывода могут быть константы, переменные, выражения. Разница в выполнении операторов writeln и write состоит в том, что после выполнения вывода по оператору writeln экранный курсор перемещается в начало новой строки, а по оператору write этого не происходит. Арифметический оператор присваивания на Паскале имеет следующий формат: 28 <числовая переменная> : = <выражение>; Арифметическое выражение может содержать числовые константы и переменные, знаки арифметических операций, круглые скобки. Кроме того, в арифметических выражениях могут присутствовать функции. Знаки основных арифметических операций записываются так: + сложение - вычитание * умножение / деление Запись арифметических выражений на Паскале похожа на обычную математическую запись. В отличие от математики, где часто пропускается знак умножения (например, пишут 2а), в Паскале этот знак пишется обязательно: 2*а. Например, математическое выражение на Паскале записывается так: а*а + b*b- 12*с. Это же выражение можно записать иначе: SQR(a) + SQR(b) - 12*с. Здесь использована функция возведения в квадрат — SQR. Аргументы функций всегда пишутся в круглых скобках, Последовательность выполнения операций определяется по их приоритетам (старшинству). К старшим операциям относятся умножение «*», деление «/». Операции сложения и вычитания — младшие. В первую очередь выполняются старшие операции. Несколько операций одинакового старшинства, записанные подряд, выполняются в порядке их записи слева направо. Круглые скобки в арифметических выражениях влияют на порядок выполнения операций. Как и в математике, в первую очередь выполняются операции в скобках. Если имеются несколько пар вложенных скобок, то сначала выполняются операции в самых внутренних скобках. Необходимо строгое соблюдение правописания (синтаксиса) программы. В частности, в Паскале однозначно определено назначение знаков пунктуации. Точка с запятой «;» ставится в конце заголовка программы и в конце каждого оператора программы. Точка с запятой является разделителем операторов. Перед словом end точку с запятой можно не ставить. Запятая является разделителем элементов во всевозможных списках: список переменных в разделе описания, список вводимых и выводимых величин. Строгий синтаксис в языке программирования необходим потому, что компьютер является формальным исполнителем программы. Если, разделителем в списке переменных должна быть запятая, то любой другой знак будет восприниматься как ошибка. Так как точка 29 с запятой является разделителем операторов в Паскале, то в качестве оператора компьютер воспринимает всю часть текста программы от одной точки с запятой до другой. Если программист забыл поставить «;» между какими-то двумя операторами, то компьютер будет принимать их за один с неизбежной ошибкой. В программу на Паскале можно вставлять комментарии. Комментарий — это пояснение к программе, которое записывается в фигурных скобках. В комментариях можно использовать русские буквы. На исполнение программы комментарий никак не влияет. Заметим, что в Паскале нет различия между строчными и прописными буквами. Разница только внешняя. Например, для Паскаля тождественны следующие варианты записи слова: begin, Begin, BEGIN, BeGiN. Использование строчных или прописных букв — дело вкуса программиста. 4.2. Подробнее о типах данных В Турбо-паскаль(ТП)-программе все переменные должны быть описаны. Описать переменную - это значит указать её тип. Понятие типа - одно из фундаментальных понятий ТП. Тип определяет, во-первых, способ внутреннего представления объекта в памяти ЭВМ и, во- вторых, действия, которые разрешается над ним выполнять. Рассмотрим следующие простые типы: INTEGER - целочисленные данные; во внутреннем представлении занимают 2 байта; диапазон возможных значений - от -32768 до +32767; данные представляются точно. REAL - вещественные данные; занимают 6 байт; диапазон возможных значений модуля от 2.9Е-39 до 1.7Е+38; точность представления данных - 11...12 значащих цифр. CHAR - символ, занимает 1 байт. STRING - строка символов; занимает МАХ+1 байт, где МАХ-максимальное количество символов в строке. BOOLEAN - логический тип; занимает 1 байт и имеет два значения: FALSE (ложь) и TRUE (истина). Тип константы определяется способом записи ее значения, например: Const c1 = 17; c2 = 5.2; c3 = ‘A’; c4 =’ 3.14’; c5 = false; 30 Первая константа относится к типу INTEGER, вторая - к типу REAL, третья к CHAR, четвертая к STRING и последняя к BOOLEAN. Признаком, позволяющим отнести константу к INTEGER или к REAL, является отсутствие или наличие десятичной точки в ее значении. Разумеется, константы С2 и С4 относятся к разным типам: С2 к REAL (в константе есть десятичная точка), а С4 к STRING (константа обрамлена апострофами). В качестве значений объявляемых констант в ТП допускаются выражения. Выражения должны в этом случае содержать только константы, в том числе и ранее объявленные, а также знаки математических операций, скобки и стандартные функции. Например: Const x = (127 * 3) div z; y = x + 17; ArraySize = 800 * SizeOf(Real); При описании переменных за именем переменной (идентификатором) ставится двоеточие и кодовое слово – имя типа. Несколько однотипных переменных можно объединять в список, разделяя их запятыми. В начале раздела описания переменных должно стоять кодовое слово VAR (от англ. Variables - переменные). Например: Var sigma : real; a, b, c, d : char; text1 : string15]; text2 : string; flag : boolean; Как уже говорилось, тип данных определяет длину внутреннего представления соответствующих переменных. В частности, длина внутреннего представления переменных типа STRING (строка символов) зависит от максимального количества символов, которые могут составлять строку. В приведенном выше примере переменная TEXT1 описана с указанием ее максимальной длины (15 символов), а в описании переменной TEXT2 максимальная длина не указана и компилятор установит для нее предельно допустимую в ТП длину-255 символов. Рассмотрим еще одну несложную программу. Ее назначение - ввести с клавиатуры два целых числа, найти отношение первого ко второму и вывести полученный результат на экран. Program MySecondProgram; { Программа вводит два целых числа и выводит частное от деления 1-го на 2-е } var 31 n1, n2 : integer; {n1 и n2 – вводимые целые} x : real; {x – результат} Begin write( ‘ n1=’); Readln(n1); {вводится n1} write(‘n1=’); Readln(n1); {вводится n2} x := n1/n2; {найти результат} writeln(‘n1/n2=’,x); {вывести х} End. В программе указаны поясняющие комментарии. Комментарий в ТП - это произвольная последовательность любых символов, обрамленная фигурными скобками. Комментарий разрешается вставлять в любое место программы, где по смыслу может стоять пробел Для вычисления отношения введенных чисел используется один из основных операторов ТП – оператор присваивания. В его левой части всегда указывается имя переменной, правая часть представляет собой выражение того же типа, что и переменная. Пара символов ":=" означает "присвоить значение". 4.3. Преобразование типов и действия над ними Тип переменной позволяет не только установить длину ее внутреннего представления, но и контролировать действия, которые осуществляются над ней в программе. В ТП почти невозможны неявные (автоматические) преобразования типов. Исключение сделано только в отношении констант и переменных типа INTEGER, которые разрешается использовать в выражениях типа REAL. Рассмотрим пример: var x : integer; y : real; …..; y := x + 2; Если, переменные X и Y описаны, как показано в примере, то оператор будет синтаксически правильным, хотя справа от знака присваивания стоит целочисленное выражение, а слева – вещественная переменная - компилятор сделает необходимые преобразования автоматически. В то же время оператор х := 2.0 будет неверным, так как автоматическое преобразование типа REAL к типу INTEGER в ТП запрещено. 32 Разумеется, запрет на автоматическое преобразование типов еще не означает, что в ТП нет средств преобразования данных. Для преобразования данных в языке существуют встроенные функции, которые получают в качестве параметра значение одного типа, а возвращают результат в виде значения другого типа. В частности, для преобразования от REAL к INTEGER имеются даже две встроенные функции такого рода: ROUND округляет REAL до ближайшего целого, a TRUNC усекает REAL путем отбрасывания дробной части. Для преобразования данных типа CHAR (символ) в целое число используется функция ORD, обратное преобразование от INTEGER к CHAR – функция CHR. 4.4. Арифметические операции В ТП есть все четыре арифметическиe операции над переменными REAL и INTEGER (Табл. 6). Таблица 6 + сложение – вычитание; * умножение; / деление вещественное; div деление целочисленное mod получение остатка от целочисленного деления Целочисленное деление DIV выполняется над целыми числами или переменными и отбрасывает дробную часть результата. Для данных типа INTEGER в ТП есть еще одна операция деления - MOD, т.е. получение остатка от целочисленного деления, например: 5 mod 2=1, В ТП отсутствует операция возведения в степень, но существует встроенная функция SQR, возвращающая квадрат от значения параметра, причем тип результата определяется типом параметра. Пример оператора, вычисляющего значение переменной Y, равное квадрату значения переменной X: Y := SQR ( X ); В ТП отсутствует операция извлечения корня, но существует встроенная функция SQRT, возвращающая корень квадратный от значения параметра. Пример оператора, вычисляющего значение переменной Y, равное корню квадратному из значения переменной X: Y := SQRT ( X ); 33 В ТП над символами и строками символов определена единственная операция – сцепление двух строк. Операция обозначается символом "+". Например, программа: Var s : string; Begin s := ‘Турбо’+’–’+’Паскаль’ ; Writeln(s); End. – напечатает строку "Турбо-Паскаль". 4.5. Программирование диалога с компьютером Если вы исполняли рассмотренные выше программы на компьютере, то почувствовали определенное неудобство при работе с машиной. Во-первых, непонятно, когда машина начинает ожидать ввода данных, какие данные и в каком порядке нужно вводить (это ведь можно и забыть). Во-вторых, результаты получаются в виде чисел на экране, без всяких пояснений их смысла. Ясно, что люди между собой так не общаются. Любую программу составлять нужно так, чтобы ее исполнение имитировало диалог между компьютером и пользователем в понятной для человека форме. Прежде, чем начать составление программы, нужно продумать сценарий такого диалога. Например, составим сценарий работы программы, вычисляющей сумму двух целых чисел. На экране компьютера последовательно должны появляться следующие строчки (для примера предположим, что будем вводить числа 237 и 658): Введите первое слагаемое: А= 237 Введите второе слагаемое: В= 658 А + В = 895 Пока Здесь курсивом записаны символы, которые выводит компьютер по программе, а прямым жирным шрифтом — символы, вводимые пользователем. Любой вывод на экран происходит по оператору вывода, записанному в программе. Следовательно, с помощью оператора вывода на экран выносятся не только результаты решения задачи, но и все элементы диалога со стороны компьютера. Вот программа, которая реализует наш сценарий: Program Summa; Var А, В : integer; 34 Begin write('Введите первое слагаемое: А= '); readln(A); write('Введите второе слагаемое : В= '); readln(B) ; writeln; writeln( ‘ A + B = ', А+В ); writeln('Пока!') end. В этой программе используется возможность включать в список вывода символьные строки, заключенные в апострофы, и арифметические выражения. Выражение А+В сначала вычисляется, а потом полученное число выводится на экран. Конечно, для вычисления суммы можно было написать отдельный оператор присваивания, но можно и так, как в этом примере, Еще обратите внимание на оператор writeln без списка вывода. Он обеспечивает пропуск строки на экране. При вводе вещественных чисел целая и дробная часть числа отделяется десятичной точкой Составляя программу, вы сами организуете интерфейс компьютера с пользователем вашей программы. Этот интерфейс обязательно должен быть дружественным. Содержание диалога должно быть ясным и, непременно, вежливым! 4.6. Вопросы и упражнения 1. Когда появился язык Паскаль и кто его автор? 2. Как записывается заголовок программы на Паскале? 3. Как записывается раздел описания переменных? 4. С какими типами числовых величин работает Паскаль? 5. Как записываются операторы ввода и вывода в Паскале? 6. Что такое оператор присваивания? 7. Как записываются арифметические выражения? 8. По каким правилам определяется порядок выполнения операций в арифметическом выражении? 9. Какая задача решается по следующей программе? 35 Program Test; Var A, B, C: integer; begin readln(A,B ); C := (A+B)*(B-A) writeln( С); end. 10. Составьте программу, которая вычисляет длину окружности,, площадь круга и объем шара заданного радиуса. 11. Составьте программу, вычисляющую периметр и площадь прямоугольного треугольника по двум катетам. 12. Составьте программу, вычисляющую по координатам трех вершин некоторого треугольника, его площадь и периметр. 13. Составьте программу, вычисляющую дробную часть среднего геометрического двух заданных вещественных чисел. (Используйте функцию TRUNC). 14. Составьте программу, вычисляющую площадь кольца, если в качестве исходных данных задаются внешний диаметр кольца и отношение внешнего радиуса кольца к внутреннему. 4.7. Логические переменные и выражения Для описания логической переменной используется стандартный тип ТП BOOLEAN. Переменные такого типа могут принимать только два значения – True(истина), или False(ложь). True и False являются логическими константами ТП. Логические переменные используются в логических выражениях. Рассмотрим пример программы: Var l : boolean; {Описание логической переменной } Begin l := True; { Логический оператор присваивания } WriteLn(‘Значение логической переменной l= ’,l ); {Вывод значения логической переменной} End. 36 Логическим переменным значение может быть присвоено только в логическом операторе присваивания. В логических операторах присваивания справа от операции присваивания может располагаться любое логическое выражения, а слева должна стоять логическая переменная. Оператор Read (ReadLn) для ввода значения логической переменной не используется. В тоже время, для вывода значения логической переменной используется оператор Write (WriteLn). Над данными, типа REAL, INTEGER, CHAR, STRING, BOOLEAN определены следующие операции отношения (сравнения) (Табл. 7). Таблица 7. |