Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab1_2.doc
Скачиваний:
4
Добавлен:
22.04.2019
Размер:
494.59 Кб
Скачать

Практика по программированию - 2012 ПЗ - II курс

Занятие №1

Тема: Программирование линейных алгоритмов.

Краткие теоретические сведения:

Алфавит языка.

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

Итак, алфавит языка Паскаль составляют:

1) буквы латинского алфавита;

2) арабские цифры;

3) специальные знаки:

Символ

Предназначение

.

конец программы, разделение целой и дробной частей вещественного числа (десятичная точка), разделение полей в переменной типа Record;

,

разделение элементов списков;

..

указание диапазона;

:

используется в составе оператора присваивания, а также для указания формата вывода в операторе Writeln;

;

отделяет один раздел программы от другого, разделяет операторы;

'

используется для ограничения строковых констант;

- + * / ( )

арифметические знаки (используются по своему назначению);

< >

знаки отношений;

=

используется в составе оператора присваивания, в разделах описаний констант и типов, используется как знак отношения (равно);

@

имя специального оператора определения адреса переменной, подпрограммы;

^

используется для именования динамических переменных;

{}

ограничение комментариев в программе;

[ ]

заключают в себе индексы элементов массивов;

_

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

#

обозначение символа по его коду;

$

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

Идентификаторы.

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

  • идентификатор должен быть уникальным, то есть одним и тем же именем разные объекты не могут быть названы;

  • идентификатор имеет ограничение по длине (зависит от конкретной реализации языка на компьютере);

  • идентификатор может состоять только из символов латинского алфавита, цифр и знака подчеркивания ("_"); идентификатор не может начинаться с цифры.

Константы и переменные. Типы.

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

Вообще говоря, в Паскале константами являются любые явно заданные в программе данные (например, 7493, 'привет', 54.899). Константы вещественного типа (числа с дробной частью) изображаются с десятичной точкой: 12.3; -1.5; -0.75 или в показательной форме: -0.45E5; 6.7E-10; 0.355.

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

<Идентификатор>=<значение>;

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

К базовым типам относятся:

тип целых чисел

Integer

тип "длинных" целых чисел

Longint

тип действительных (вещественных) чисел (то есть с дробной частью)

Real

тип неотрицательных целых чисел от 0 до 255

Byte

тип неотрицательных целых чисел от 0 до 65535

Word

символьный тип

Char

строковый тип

String

логический тип

Boolean

Физически типы данных отличаются друг от друга количеством ячеек памяти (байтов), отводимых для хранения соответствующей переменной. Логическое же отличие проявляется в интерпретации хранящейся информации. Например, переменные типа Char и типа Byte занимают в памяти по одному байту. Однако в первом случае содержимое ячейки памяти интерпретируется как целое беззнаковое число, а во втором - как код символа.

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

Раздел описания переменных начинается служебным словом Var, после которого следуют записи следующего вида:

<Список имен переменных>:<Название типа>;

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

Описание стандартных типов данных

Целый тип

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

Тип

Диапазон

Байт

Shortlnt - короткое целое со знаком

-128 .. 127

1

Integer - целое со знаком

-32 768 .. 32 767

7

Longlnt - длинное целое со знаком

-2 147483648.. ..2 147483 647

4

Byte - короткое целое без знака

0..255

1

Word - целое без знака

0.. 65 535

2

В последней колонке таблицы показано, что числу из каждого диапазона отводится фиксированное количество разрядов в памяти ЭВМ. Это позволяет эффективно использовать память и влиять на скорость вычислений. Все целые типы являются упорядоченными, поэтому к их значениям применимы две специальные функции Succ(i) и Pred(i), где i - целое, возвращающие следующее и предшествующее i целое число. Определены также две константы Maxlnt и MaxLonglnt, значениями которых являются числа 32767 и 2147483647, т.е. верхние границы двух соответствующих диапазонов.

Чаще всего целые числа используются в простых арифметических выражениях и выступают в программах в качестве различных счётчиков и значений индексов. Над ними определены пять основных операций:

+

сложение

-

вычитание

*

умножение

div

деление нацело

mod

остаток от деления

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

При делении с точностью до целых получается два результата - частное и остаток. Операция div обозначает целочисленное деление. Знак резуль­тата берётся по обычным правилам, а полученный остаток игнорируется.

Например, 15 div 2 = 7; 3 div 7 = 0; (-9) div 4 = -2; (-9) div (-4 ) = 2. Операция mod даёт остаток при делении двух целых чисел. 15 mod 2 = 1; 3 mod 7 = 3; (-9) mod 4 = -1; 9 mod 3 = 0. Операции *, div, mod имеют одинаковый более высокий ранг, а операции + и - также имеют одинаковый, но более низкий ранг. Над целыми определено и обычное деление. Оно обозначается косой чертой "/" и дает частное вещественного типа.

Вещественный тип

Областью значений вещественного типа является подмножество мно­жества всех вещественных чисел. Оно не является упорядоченным. Для представления чисел из широкого диапазона, от очень маленьких до очень больших привычное представление с фиксированной запятой не подхо­дит, т.к. любой вещественный тип в ЭВМ должен иметь ограничение на количество знаков. Если выводятся числа шириной 12 знаков, то, напри­мер, число 2 001 000 000 000 555 уже не будет изображено. Поэтому ве­щественные числа представляются в ЭВМ в форме с плавающей точкой, называемой экспоненциальной. Они имеют цифровую часть (мантиссу) и порядок, следующий за знаком е. Приведенное выше число примет вид 2.001е+15. Ясно, что такая форма представления чисел дает возможность выполнять операции над вещественными числами только приближённо. Вообще, нельзя предполагать точное равенство никаких двух чисел с плавающей точкой. Количество цифр в мантиссе характеризует точность. Чем больше цифр имеет мантисса, тем погрешность меньше.

Тип

Диапазон

Цифр

Байт

Real - стандартный

2.9е-39.. 1.7е+38

11-12

6

Single - одинарной точности

1.5е-45 .. 3.4е+38

7-8

4

Double - двойной точности

5.0е-324..1.7е+308

15-16

8

Extended - повышенной точности

3.4е-4932.. 1.1е+4932

19-20

8

Соmр - 64-битное целое

-9.2е+18..9.2е+18

19-20

8


Новый знак ( / ) вводится только для операции деления вещественных чисел, причём результат операции всегда вещественный, даже когда оба операнда целые числа.

Математические функции

Функция

Тип аргумента

Тип значения

Матем. запись

Odd (x)

целый

логический

2k+1, k -целое

Pi

-

вещественныи

π

Abs (x)

цел / вещ

цел / вещ

| x |

Sqr (x)

цел / вещ

цел / вещ

x 2

Sqrt (x)

цел / вещ

цел / вещ

√x

Sin (x)

вещественный

вещественныи

Sin x

Cos (x)

вещественный

вещественный

Cos x

ArcTan (x)

вещественный

вещественный

arctgx

Exp (x)

вещественный

вещественный

ех

Ln(x)

вещественный

вещественный

ln x

Int(x)

вещественный

вещественный

[x], х≥0

Frac (x)

вещественный

вещественный

{x}, x≥0

Trunc (x)

вещественный

Longlnt

Round (x)

вещественный

Longlnt

Random

-

[0,1 )- вещ

Random(x)

Word

[0,х)- Word


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

Примечание. Значение угла для тригонометрических функций задается в радианах. 1 радиан  570.

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

  • нельзя делить на нуль;

  • не существует квадратный корень из отрицательного числа;

  • не существует логарифм числа, которое меньше или равно нуля.

Функции Int(x) и Frac(x) похожи на математические функции [х] и {х}, обозначающие соответственно целую и дробную части числа, но совпадают с ними только на множестве неотрицательных чисел. Если аргумент отрицательный, то они просто отбрасывают дробную или целую часть. [-5,8] = -6, Int (-5.8) = -5; {-5,8}= 0,2, Frac(-5.8) = -0.8.

Функция Trunc(x) отличается от Frac(x) типом возвращаемого значения. Round(x) - функция округления. Odd(x) возвращает логическое значение true, если аргумент х — нечётное число.

Функции Random, Random(x) и сопутствующая им процедура Randomize предназначены для получения псевдослучайных чисел.

Некоторые полезные формулы

Символьный тип данных (тип char).

Обозначение char - это сокращение слова character (символ).

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

Пример: 'A', 'a', '8', '''' (апостроф пишется дважды).

В таблице ASCII заданы как большие, так и малые латинские буквы, причем их последовательность непрерывная.

Над переменными символьного типа определены следующие функции:

1) функции преобразования:

ord (s) - дает порядковый номер символа s в упорядоченном множестве символов:

ord (‘5’)=53.

chr (i) - дает символ, стоящий под номером i в упорядоченном множестве символов:

chr (66)=‘B’.

Очевидно, что

chr ( ord ( ch ) ) = ch ; ord ( chr ( k ) ) = k .

В последнем случае должно быть k = 0 .. 255 .

Функции ord и chr никакого преобразования содержимого байта не производят; они лишь разрешают программе по-разному трактовать это содержимое (как символ или как число).

2) операции отношения (см. выше):

Считается, что ch1 < ch2, если ord(ch1) < ord(ch2).

3) стандартные функции:

pred (s) - возвращает предыдущий символ.

succ (s) - возвращает следующий символ.

Логический тип (тип boolean).

Логическое значение - это одно из двух значений истинности, которые обозначают предописанными именами false и true (false эквивалентно значению 0, true - значению 1 в алгебре логики; использование имен false и true вызвано стремлением отличать в программе логические значения от числовых значений 0 и 1).

Логический тип определен так, что false < true.

Операции отношения всегда дают логический результат. Например, отношение x + 1<y при x = 0, y = 0 дает false; при x = 0, y = 10 - значение true.

Для переменных логического типа в Турбо Паскале определены четыре логические операции:

1) отрицание not;

2) логическое умножение and;

3) логическое сложение or;

4) исключающее ИЛИ (отрицание равнозначности, сложение по модулю 2) xor.

Исключающее ИЛИ определяется следующей таблицей операций:

0  0 = 0

0  1 = 1

1  0 = 1

1  1 = 0

Пример логического выражения:

((x + 1 < y) and not (x > 5)) or ((y > 0) and true) .

Вычислим значение этого выражения при x = 5, y = 5 :

((6 < 1) and not (5 > 5)) or ((5 > 0) and true)  ( false and not false ) or ( true and true ) 

 ( false and true ) or ( true and true )  false or true  true .

Существуют несколько предописанных логических функций, т.е. функций, которые дают логический результат. В частности, при обработке целочисленных переменных применяется функция odd(x), которая дает значение true, если целое x - нечетное, и значение false, если x - четное. Другие логические функции будут рассмотрены позже.

Перечисляемый тип

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

Задается перечислением тех значений, которые может получать переменная этого типа. Нумерация в списке значений начинается с 0, т.е. первое значение имеет номер - 0, а второе - 1 и т.д.

Пример.

Type Color = (White,Red,Blue,Yellow,Green,Gray,

Orange,Brown,Black);

Operator = (Plus,Minus,Times,Divide);

Metall = (Fe,Cu,Al,Sn,Pb,Ni,Mo,Zn,Ag,Au,Pt,Na);

Другими словами, значения перечисляемого типа - это синонимы констант.

Ко всем перечисляемым типам применимы операции отношения, а также предописанные функции pred, succ, ord.

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

Оператор присваивания. Арифметические выражения.

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

<Имя переменной>:=<Выражение>;

Выражение, указанное справа от знака ":=", должно приводить к значению того же типа, какого и сама переменная, или типа, совместимого с переменной относительно команды присваивания. Например, переменной типа Real можно присвоить значение типа Integer или Word (впрочем, наоборот делать нельзя). Выражение будет сначала вычислено, затем, его результат будет положен в ячейки памяти, отведенные для переменной.

Рассмотрим сначала выражения арифметические, то есть те, результатом которых является число.

В состав арифметического выражения на языке Паскаль могут входить:

  • числовые константы;

  • имена переменных;

  • знаки математических операций;

  • математические функции и функции, возвращающие число;

  • открывающиеся и закрывающиеся круглые скобки.

Приоритет выполнения математических операций при вычислении значения выражения

Ниже приведены операции в порядке убывания их приоритета, причем операции в одной строке имеют одинаковый приоритет:

NOT

*, /, MOD, DIV, AND

+, -, OR

<, >, <=, >=, <>, =

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

Арифметические операции выполняются слева направо согласно старшинству операций (приоритету):

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

  • операции вычисления функций;

  • операции умножения, деления, div, mod;

  • операции сложения, вычитания;

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

Преобразование типов

Целое значение можно преобразовать в вещественное; присвоив вещественной переменной целое выражение. Например: А: =3+5.

Противоположное преобразование выполняется при помощи стандартных функций:

Trunc(X) - целая часть аргумента;

Round(X) – аргумент, округленный до ближайшего целого.

ВОПРОС. Чему равно:

а)TRUNC(3.6); б)ROUND(3.6); в)TRUNC(36)?

Целочисленные значения можно присваивать вещественным переменным, а присваивание вещественного значения целочисленной переменной является ошибкой программирования. Вещественные значения в последнем случае преобразовывают в целочисленные с помощью одной из предназначенных для этого встроенных функций: Trunc(x) или Round(x). Операции div и mod не могут употребляться с вещественными числами.

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

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

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

1. Раздел меток;

2. Раздел констант;

3. Раздел типов;

4. Раздел переменных;

5. Раздел процедур и функций;

6. Раздел операторов.

Раздел операторов заключается в операторные скобки begin ... end. В нем указывается последовательность действий, которые должны выполняться ЭВМ. Все остальные разделы носят описательный характер.

Заголовок программы

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

Основная программа

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

В любое место программы могут быть включены комментарии. При этом смысл программы не меняется. Комментарии включаются в фигурные скобки.

С оставной оператор

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

Формат (общий вид) составного оператора таков:

Begin

<Оператор 1>;

<Оператор 2>;

......

<Оператор N>

End;

Обратите внимание на то, что точка с запятой перед End может не ставиться.

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

Операторы ввода и вывода информации

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

Сначала операторы ввода (форматы операторов):

Read(<Список ввода>);

Readln(<Список ввода>);

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

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

Для вывода информации в Паскале также есть две команды:

Write(<Список вывода>);

Writeln(<Список вывода>);

Такой формат использования Write и Writeln позволяет выводить на экран монитора данные из списка вывода. Элементами списка вывода могут являться имена переменных, выражения, константы. Прежде чем вывести на экран компьютер значения выражений сначала вычислит. Элементы списка, также как и в операторах ввода, разделяются запятыми.

Различие между двумя операторами вывода таково: после выполнения оператора Writeln (от Write line) происходит переход на новую строчку, а после выполнения инструкции Write, переход на новую строчку не происходит и печать по последующим командам вывода Write или Writeln будет происходить на той же строчке. При вызове оператора Writeln без параметров просто происходит переход на новую строчку.

Пример 1. Вычислить значение выражения:

Б

Программа:

Program Zad1;

Var

t,z:real;

Begin

Write('t=');Readln(t);

z:=pi*sqrt(7-sqr(t))+abs(t-8);

Writeln('z=',z:6:3);

Readln;

End.

лок-схема:

Пример 2. Вычислите площадь и периметр прямоугольника, если известны его длина и ширина.

Б

Программа: Program SP;

Var

a,b,s,p:real;

Begin

Write('a=');Readln(a);

Write('b=');Readln(b);

p:=2*(a+b);

s:=a*b;

Writeln('p=',p:5:3);

Writeln('s=',s:5:3);

Readln;

End.

лок-схема:

Лабораторная работа №1

Программирование алгоритмов линейной структуры

Цель: Формирование навыков и умений записи арифметических выражений на языке Turbo Pascal. Формирование навыков и умений составление программ линейной структуры при решении задач на языке программирования Turbo Pascal.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]