ЛАБОРАТОРНАЯ РАБОТА №1
Программирование алгоритмов линейной структуры
Цель и задача работы: научиться использовать внутренние функции, освоить понятие “арифметический оператор”, написать программу, вводящую данные с клавиатуры, обрабатывающую их с помощью внутренних функций и выводящую результат на экран дисплея.
Программирование на Турбо-Паскале
Язык программирования Паскаль был разработан Николасом Виртом в начале 70-х годов для обучения программированию. Поэтому он наиболее удобен как первый изучаемый язык программирования.
Семь основных элементов программирования
Большинство программ создаются для решения какой-либо задачи. Решение задачи достигается благодаря обработке информации или данных. Поэтому программист должен знать:
· как ввести информацию в программу (ввод);
· как хранить информацию в программе (данные);
· как указать правильные команды для обработки данных (операции);
· как передать обратно данные из программы пользователю (вывод).
Можно упорядочить команды таким образом, чтобы:
· некоторые из них выполнялись только, если выполняется некоторое условие или ряд условий (условное выполнение);
· другие выполнялись повторно некоторое число раз (циклы);
· третьи выделялись в отдельные части, которые могут быть выполнены в разных местах программы (подпрограммы).
Таким образом, перечислены все семь основных элементов программирования: ввод, данные, операции, вывод, условное выполнение, циклы и подпрограммы. Этот список не является исчерпывающим, однако, он содержит те элементы, которые обычно присущи всем программам (и языкам программирования).
Ниже дается краткое описание каждого элемента.
|
Ввод – считывание значений, поступающих с клавиатуры, с диска или из порта ввода/вывода.
Данные – это константы, переменные и структуры, содержащие числа (целые и вещественные), текст (символы и строки) или адреса (переменных и структур).
Операции осуществляют присваивание значений, их комбинирование (сложение, деление и так далее) и сравнение значений (равные, не равные и так далее).
Вывод – запись информации на экран, на диск или в порт ввода/вывода.
Условное выполнение предполагает выполнение набора команд в случае, если выполняется (является истинным) некоторое условие (если это условие не выполняется, то эти команды пропускаются или же выполняется другой набор команд) или если некоторый элемент данных имеет некоторое специальное значение или значение из некоторого спектра.
Благодаря циклам некоторый набор команд выполняется повторно или фиксированное число раз, или пока является истинным некоторое условие, или пока некоторое условие не стало истинным.
Подпрограммы представляют собой наборы инструкций, которые имеют самостоятельное имя и которые могут быть выполнены из любого места программы при обращении к ним по имени.
Стандарт Турбо Паскаля
Основные символы языка
Турбо Паскаль использует следующие подмножества набора символов кода ASCII:
· Буквы английского алфавита от A до Z и от a до z.
· Цифры – арабские цифры от 0 до 9.
· Шестнадцатиричные цифры – арабские цифры от 0 до 9, буквы от A до F и буквы от a до f.
· Пробелы – символ пробела (ASCII 32) и все управляющие символы кода ASCII (ASCII 0-31), включая символ конца строки или символ возврата каретки (ASCII 13).
|
Специальные символы и зарезервированные слова представляют собой символы, имеющие одно или несколько фиксированных значений. Специальными символами являются следующие одиночные символы:
+ - * / = < > [ ]., ():; ^ @ { } $ #
Следующие пары символов также представляют собой специальные символы:
<= >=:=.. (* *) (..)
Список слов, зарезервированных в Турбо Паскале можно найти в справке программы.
Идентификаторы
Идентификаторами обозначаются имена констант, типов, переменных, процедур, модулей, программ и полей в записях. Идентификатор может иметь любую длину, однако только первые его 63 символа являются значимыми. Идентификатор должен начинаться с буквы и не может содержать пробелов. После первого символа идентификатора можно использовать буквы, цифры и символы подчеркивания В идентификаторах можно использовать как строчные, так и прописные буквы (компилятор их не различает).
Приведем несколько примеров идентификаторов:
Writeln
Exit
Real2String
System.MemAvail
Dos.Exec
WinCrt.WhereX
Числа
Для чисел, представляющих собой константы целого и вещественного типа, используется обычная десятичная запись. Целая константа в шестнадцатиричном формате имеет в качестве префикса знак доллара ($). Научное обозначение (E или е с показателем степени) в вещественных типах читается, как "на десять в степени". Например, 7E-2 означает 7*10‑2, а 12.25E+6 или 12.25E6 оба обозначают 12.25*106.
Числа с десятичными точками или показателями степени представляют собой константы вещественного типа. Остальные десятичные числа обозначают константы целого типа. Они должны принимать значения в диапазоне от –2147483648 до 2147483647.
|
Шестнадцатеричные числа обозначают константы целочисленного типа. Они должны находиться в диапазоне от $00000000 до $FFFFFFFF. Окончательный знак значения определяется шестнадцатеричной записью.
Строки символов
Строка символов представляет собой последовательность, содержащую ноль и более символов из расширенного набора символов кода ASCII, записанную в одной строке программы и заключенную в одиночные кавычки (апострофы). Строка символов, ничего не содержащая между апострофами, называется нулевой строкой. Два последовательных апострофа в строке символов обозначают один символ – апостроф. Атрибут длины строки символов выражается действительным количеством символов между апострофами.
Приведем несколько примеров строк символов:
'TURBO'
'You''ll see'
''''
';'
Комментарии
Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором:
{ любой текст, не содержащий правую фигурную скобку}
(* любой текст, не содержащий звездочку/правую круглую скобку *)
Комментарий, содержащий знак доллара ($) сразу после открывающей скобки { или (*, является директивой компилятора. За символом $ следует мнемоника команды компилятора.
Типы данных
Целочисленный тип
В Турбо Паскале имеется пять предопределенных целочисленных типов: shortint (короткое целое), integer (целое), longint (длинное целое), byte (длиной в байт) и word (длиной в слово). Каждый тип обозначает определенное подмножество целых чисел, как это показано в следующей таблице.
Тип | Диапазон | Формат |
короткое целое (Shortint) | –128.. 127 | 8 бит со знаком |
целое (Integer) | –32768.. 32767 | 16 бит со знаком |
длинное целое (Longint) | –2147483648.. 2147483647 | 32 бита со знаком |
длиной в байт (Byte) | 0.. 255 | 8 бит без знака |
длиной в слово (Word) | 0.. 65535 | 16 бит без знака |
Вещественный тип
Имеются следующие виды вещественных типов: вещественное (Real), с одинарной точностью (Single), с двойной точностью (Double), с повышенной точностью (Extended).
Тип | Диапазон | Значащие цифры | Размер в байтах |
вещественное (real) | от 2.9*10–39 до 1.7*1038 | от 11 до 12 | |
с одинарной точностью (single) | от 1.5*10–45 до 3.4*1038 | от 7 до 8 | |
с двойной точностью (double) | от 5.0*10–324 до 1.7*10308 | от 15 до 16 | |
с повышенной точностью (extended) | от 1.9*10–4951 до 1.1*104932 | от 19 до 20 |
Строковые типы
Значением строкового типа является последовательность символов с динамическим атрибутом длины (в зависимости от действительного числа символов при выполнении программы) и постоянным атрибутом размера в диапазоне от 1 до 255. Текущее значение атрибута длины можно получить с помощью стандартной функции Length.
Операции
После того, как данные получены программой (и присвоены переменным), их нужно каким-то образом обрабатывать, для этого в вашем распоряжении имеются операции.
Большинство операций в Паскале являются бинарными, то есть имеют два операнда; остальные являются унарными, то есть имеют только один операнд. Бинарные операции имеют обычную алгебраическую форму, например, a + b. Унарная операция предшествует своему операнду, например, –b.
В сложных выражениях порядок выполнения операций устанавливается правилами приоритета
Операции | Приоритет | Категории |
@, not | Первый (высший) | унарные операции |
*, /, div, mod, and, shl, shr | Второй | мультипликативные операции |
+, –, or, xor | Третий | аддитивные операции |
=, <>, <, >, <=, >=, in | Четвертый (низший) | операции отношения |
Последовательности операций с одинаковым приоритетом вычисляются слева направо. Выражения, заключенные в скобки, вычисляются первыми независимо от того, каковы предшествующие или последующие операции.
Операция присваивания
Базовой операцией является операция присваивания, например,
A:= B+C. {переменной A присвоить результат выражения B+C}
В Паскале знак присваивания представляет собой комбинацию из двоеточия и знака равенства (:=). В приведенном примере значение B+C справа от знака присваивания присваивается переменной A, которая стоит слева.
Паскаль поддерживает стандартный набор бинарных арифметических операций, которые выполняются над целыми и вещественными значениями:
· умножение (*)
· деление целых чисел (div)
· деление вещественных чисел (/)
· взятие по модулю (остаток от деления целых чисел) (mod)
· сложение (+)
· вычитание (–)
Кроме того, Паскаль поддерживает унарные операции: унарный минус и унарный плюс.
Операции отношений
Операции отношения позволяют сравнивать два значения, возвращая в результате булевское значение Тrue или False.
Ниже приводятся операции отношения, реализуемые в Паскале:
> | больше |
>= | больше или равно |
< | меньше |
>= | меньше или равно |
= | равно |
<> | не равно |
in | есть элемент |
Логические операции
Имеется четыре логические операции – and, xor, or и not, которые хотя и аналогичны поразрядным операциям, но не тождественны им. Логические операции выполняются над логическими значениями (Тrue и False), позволяя комбинировать выражения отношения, булевы переменные и булевские выражения.
Операции над строками
Единственной операцией над строками является операция +, которая используется для объединения двух строк.
Вывод
Может показаться забавным, что о выводе речь идет раньше, чем о вводе, однако программа без вывода информации не представляет никакой пользы. Вывод обычно принимает форму, зависящую от того, куда выводится информация: на экран (слова и изображения), или на запоминающее устройство (гибкие и жесткие диски), или в порт ввода/вывода (последовательный порт или порт печатающего устройства).
Процедура Writeln
Назначение Writeln – выводить информацию на экран. Ее формат прост и гибок в использовании:
Writeln(элемент, элемент,...);
где каждый элемент – это то, что нужно напечатать на экране. Элементом может быть целое или вещественное число (3,42, –1732.3), строка ('Hello, world') или булево значение. Кроме того, им может быть именованная константа, переменная или обращение к функции, если она возвращает значение, которое имеет целый, вещественный, символьный, строковый или булев тип. Все элементы печатаются в одной строке в заданном порядке. После этого курсор устанавливается в начало следующей строки. Если вы хотите оставить курсор на той же строке после последнего элемента, то используйте оператор:
Write(элемент, элемент,...);
Когда распечатываются элементы по оператору Writeln, между ними автоматически не вставляются пробелы; если Вы хотите разделить элементы пробелами, то Вы должны указать их сами, например:
Writeln(элемент,' ',элемент,' ',...);
Поэтому по следующим операторам будет получен указанный вывод:
A:= 1; B:= 2; C:= 3; Name:= 'Frank'; Writeln(A,B,C); Writeln(A,' ',B,' ',C); Writeln('Hi',Name); Writeln('Hi, ', Name,'.'); | 1 2 3 HiFrank Hi, Frank. |
Кроме того, можно использовать спецификаторы для определения ширины поля для данного элемента. В этом случае оператор имеет формат:
Writeln(элемент:ширина,...)
где ширина – целое выражение, определяющее общую длину поля, в котором должен быть записан элемент. Например, рассмотрим следующую программу и полученный в результате вывод:
A:= 10; B:= 2; C:= 100; Writeln(A,B,C); Writeln(a:2,B:2,C:2); Writeln(A:3,B:3,C:3); Writeln(A,B:2,C:4); | 10 2100 10 2100 10 2 100 |
Отметим, что элемент дополняется начальными пробелами слева с тем, чтобы соответствовать указанной длине поля. Само значение выравнивается справа.
Что если ширина поля меньше, чем необходимо? Во втором операторе Writeln из приведенного выше примера для С, имеющего значение 100, ширина поля указана 2, хотя необходима ширина 3. Как Вы видите в выводе, Паскаль увеличил ширину до минимального необходимого размера.
Этот способ выполняется для всех допустимых элементов: целых чисел, вещественных чисел, символов, строк и булевых выражений. Однако, при указании спецификатора ширины поля вещественные числа распечатываются в экспоненциальной форме:
X:= 421.53; Writeln(X); Writeln(X:8); | 4.2153000000E+02 4.2E+02 |
Поэтому Паскаль позволяет добавить второй спецификатор ширины поля:
элемент: ширина: цифры.
Это второе значение указывает распечатать вещественное число в формате с фиксированной точкой и определяет, сколько цифр поместить после десятичной точки:
X:= 421.53; Writeln(X:6:2); Writeln(X:8:2); Writeln(X:8:4); | 421.53 421.53 421.5300 |
Ввод
Стандартный Паскаль имеет две основные функции ввода Read и Readln, которые используются для чтения данных, вводимых с клавиатуры. Общий формат этих операторов следующий:
Read(элемент, элемент,...); или Readln(элемент, элемент,...);
где каждый элемент представляет собой переменную целого, вещественного, символьного или строкового типа. Числа должны отделяться от других значений пробелами или нажатием клавиши "Enter".
Структура программы
Структура программы в Турбо Паскале имеют следующий формат:
program <Имя-программы>;
{раздел описаний}
Begin
{раздел операторов}
End.
Раздел описания состоит из четырех секций описания: label (метки), const (константы), type (типы), var (переменные). Не все секции раздела описания должны присутствовать в каждой программе. Турбо-Паскаль позволяет иметь сколь угодно много секций описания, следующих в любом порядке друг за другом.
Пример программы на Паскале
program First;
Var
a, b, c: real;
Begin
writeln(‘Введите длины катетов a и b’);
readln(a, b);
c:= sqrt(a*a+b*b);
writeln(‘Длина гипотенузы c= ’, с);
end.