Структура программы. Описание типов данных. Любая программа,все равно на каком языке программирования, состоит из 2-х частей

Вид материалаПрограмма

Содержание


Лекция 9 Приближенные методы вычисления определенных интегралов.
Приложение 2. Границы применения различных описаний.
Стандартные типы (см.приложение 2)
CONST Директива CONST
1.Перечисляемый тип
Описания типа record.
Read(a,b,c) вводит данные с дисплея,вводимые через пробел
Арифметические операции
Операция Действие Тип операнда Тип результата
Вещественный Вещественный
Boolean, Longbool
Булевские операции
Операции со строками
Операция Действие Типы операндов
Операции отношения
Сравнение простых типов
Сравнение строк
Сравнение множеств
Проверка на принадлежность к множеству
Операторы перехода
...
Полное содержание
Подобный материал:
  1   2   3   4   5



МГВМИ






Московского государственного

вечернего металлургического института


составитель

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

кафедры «Информатика»

Мирзоев Т А.


Зав.кафедры проф.Сорокин М.Н.


2006 г.


Содержание


Лекция 1 Структура программы. Описание типов данных.

Лекция 2 Арифметические и логические операции.

Лекция 3 Операторы.

Лекция 4 Процедуры и функции.

Лекция 5 Массивы, векторы и матрицы.

Лекция 6 Запись (тип record).

Лекция 7 Файлы и использование.

Лекция 8 Алгоритмизация и блок-схема программы.

Лекция 9 Приближенные методы вычисления определенных интегралов.

Лекция 10 Примеры составления программ для различных задач.

Приложение 1. Коды ошибок

Приложение 2. Границы применения различных описаний.

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


Лекция 1

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

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


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

В случае языка Паскаль структура программы в общем случае записывается следующим образом:

program MyProg;

{1-ый символ не должен быть цифрой; небязательная строка}


uses

WinCrt;

{ обязательный системный модуль для транслятора}

{разрешает транслировать и использовать операторы ввода-вывода Writeln, Readln и др. Можно добавлять свои модули}

..............

область применения описательных конструкций

здесь применяются описания type,const,var,label


begin

{исполнительная часть программы}

.............

Writeln('привет - это турбо-паскаль');

{оператор вывода сообщений на дисплей}


...........

end. {end. -конец программы}


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


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


Это символический адрес, состоящий из любой комбинации

(не более 63) символов.

Например:

Ad1, ident1, MyName, flag, const11, type22, varR и т.д.

Важны следующие ограничения:
  • идентификатор не должен начинаться с цифры или спецзнаков.
  • идентификаторы пишутся в латинском алфавите и не должны

совпадать с резервируемыми словами языка Турбо-Паскаля

(например, const, var, begin, end, label, for и т.д.)
      • Диапазон букв от a..Z,a..z,0..9. Допускается спецсимвол _ (подчеркивание)..
  • при написании идентификоторов не имеет значения, прописная это буква или строчная; транслятор регистр не различает.



Описания типов


Паскаль требует указывать типы применяемых числовых значений и их область применения. Нельзя писать, как это делается в обычной арифметике, 4*5=20, не указав, откуда взялось 4 и 5. Разгадка простая: все делается в компьютере через память, а указания данных в памяти компьютера требует специального описания.


Стандартные типы (см.приложение 2)

(*т.е. не требующие специальной директивы type*)


integer,byte,word,longint,shortint-------описания целого

real,double,extended,singlе ---------------вещественный тип

boolean,longbool-----------------------------логический тип

char,pchar,string-----------------------------символьный тип


Для указания типа используются резервируемые слова: type,var,const.


Директива VAR

Для указания формального идентификатора используется var и в этом случае идентификатор называется переменной, значения которой указываются в исполнительной части программы. Фактическое значение идентификатор принимает при использовании резервированного слова const. Фактическое значение указывается в описательной части программы.


Напр.

Var

ss : real;

i, j : integer;


Директива CONST

Директива CONST используется в описательной части и описывает фактические значения переменных, так что можно использовать константы вместо формальных переменных типа var. Турбо-Паскаль имеет 2 вида описания констант:
  • простая константа;
  • типизированная константа.

Примеры.

Const

d = 1; Это простые константы. В исполнительной

r1= 0.9; части программы менять нельзя!!

s1 =’константа’ ;

Name : string[20]=’Иванов А.Е.’;

Real1: real=3.1478; Это типизированные константы.

i, j, k : byte = 1; Их можно использовать вместо

формальных переменных var


Директива Type.


Применятся для описания следующих типов описаний данных:
  • векторов, массивов, матриц (array);
  • перечисляемых типов (set);
  • структуированных записей (record,object);
  • указательных типов (pointer);
  • процедурных типов;
  • строковый тип (string,char,pchar);
  • интервальный тип ( ‘a’..’z’; 1..999).
  • файловый тип (file,text).

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

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


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

Type

Season=(‘весна’,’лето’,’осень’,’зима’);

Ord11=(0,1,2,3,4,5,6,7,8,9);

Digits=set of 0..9;

Соответственно для формальной переменной описание будет выглядеть так

Var

myseason:season;

HisNumber:ord11;

Dd1:digits;

Ff: 0..9;

X: (a,b,c,d);


Описания массивов, матриц и векторов.

Type

Int = array[1..100] of integer; Это одномерный массив (вектор) 100 целых

чисел.

Realx = array[1..3,1..5] of real; Здесь матрица размером 3*5,состоящая из

3 строк и 5 элементов в каждой строке.

Обращение будет вглядить так:

Var

Vector : int;

Matrix : realx;

Отметим, что Турбо-Паскаль допускает использование в качестве формальных

переменных типа var применение array, set без предварительного описания в директиве type.


Описания типа record.

Это структуированная запись и формируется так:

Type Person = record

Hisname : string[20];

Age : byte;

End;

В такой записи в памяти резервирутся строка из 20 символов переменной hisname и переменной age. Обращение такое

Var base:person;

а в случае обращения в программе переменная пишется так:

base.hisname и base.age


Операторы ввода вывода на дисплей.

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

Read(a,b,c) вводит данные с дисплея,вводимые через пробел,

без перехода новую строку

Readln(x,y,z) вводит данные с дисплея,вводимые через пробел,

с переходом новую строку




При вводе данных следует соблюдать описание переменных а,b,c


Для вывода используются две стандартные процедуры:
  • Write(‘Привет’) без перехода на новую строку;
  • WriteLn(‘Число рспечатывают так ’,a:5:2); с переходом

на новую строку.

Примеры составления программ

1.Вычислить объем полого цилиндра:



где: pi=3.14,

h высота цилидра.

r1 – внешний радиус.

r2 – внутренний радиус.

Program volume; {необязательный параметр }

Uses Wincrt; {обязательный параметр Системный модуль}

Const

Pi=3.14;

{простая константа. В программе изменять нельзя!}

Var r1,r2,h,v:real;

begin

Writeln(’Введите радиус большого цилиндра r1’);

Readln(r1);

Writeln(’Введите радиус малого цилиндра r2’);

Readln(r2);

Writeln(’Введите высоту цилиндра h’);

Readln(r2);

If r1>r2 then

begin

V:=pi*h*(r1*r1-r2*r2);

Writeln(’Обьем цилиндра v=’,v:5:2);

{обратите внимание:число выводится на дисплей с указанием чисел 8 и 2}

{первое число 8 означает общее число цифр }

{второе число 2 указывает на число цифр после запятой }

end

Else

Writeln(’Ошибка! r2>r1’);

end;

End.


Среда Турбо-Паскаль.

Исходные модули всегда имеют тип .pas.Чистый бланк для записи новой программы открывается через File-New на панели ТPW. При этом на панели Турбо-Паскаль появлятся чистый бланк с именем noname00.pas.

После набивки программы следует записать ее в свою директорию, используя команды меню File – Save as.При сообщении о записи можно ввести собственное имя с сохранением типа .pas. Окончательные модули оттранслированной программы через команды меню Run—run или (ctrl+f9) записываются в то же самую директорию с приращением .exe. Модули с приращением .exe можно запустить из своей директории без обращения к транслятору TPW.


Лекция 2


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


Выражения

Выражения состоят из операций и операндов. Большинство операций в языке Паскаль являются бинарными, то есть содержат два операнда. Остальные операции являются унарными и содержат только один операнд. В бинарных операциях используется обычное алгебраическое представление, например: a+b. В унарных операциях операция всегда предшествует операнду, например: -b.

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

Старшинство операций

Операция

Приоритет

Вид операции

@, not

первый (высший)

унарная операция

*, /, div, mod,

and, shl, shr

второй

операция умножения,

деления, сдвига...

+, -, or, xor

=, <>, <, >,

<=, >=, in

третий

четвертый (низший)

операция сложения

операция отношения

Для определении старшинства операций имеется три основных правила:

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

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

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

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


Операции

Операции подразделяются на арифметические операции, логические операции, операции со строками, операции над множествами, операции отношения и операцию @ (операция получения адреса).


Арифметические операции

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


Бинарные арифметические операции

Операция Действие Типы операндов Тип результата

+ Сложение Целый Целый

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

- Вычитание Целый Целый

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

* Умножение Целый Целый

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

/ Деление Целый Вещественный

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

div Целочисленное

деление Целый Целый

mod Остаток Целый Целый

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


Унарные арифметические операции

Операция Действие Тип операнда Тип результата

+ Сохранение знака Целый Целый

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

- Отрицание знака Целый Целый

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

Если оба операнда в операциях +, -, *, div или моd являются операндами целого типа, то тип результата будет таким же, как общий тип обоих операндов.

Если один или более операндов в операциях +, -, или * имеют вещественный тип, то тип результата будет вещественным. Если при использовании операции сохранения знака или операции отрицания знака операнд имеет целый тип, то результат будет тоже целого типа. Если операнд вещественного типа, то тип результата будет вещественным (real) или типом с повышенной точностью (extended).

Значение выражения x/y всегда будет вещественного типа (real) или с повышенной точностью (extended), независимо от типов операндов. Если y равно 0, то результат будет ошибочным.

Значение выражение i div j представляет собой математическое частное от i/j, округленное в меньшую сторону до значения целого типа. Если j равно 0, результат будет ошибочным.

Например 18 div 5 = 3

Операция mod возвращает остаток, полученный путем деления двух ее операндов, то есть:

i mod j = i - (i div j) * j

например 18 mod 5 =3, 23 mod 4 =3

Знак результата операции mod будет тем же, что и знак i. Если j равно нулю, то результатом будет ошибка.


Логические операции

При использовании этих операций используется описание Boolean, Longbool, которые имеют только 2 значения: True(истина) или False(ложь), соответственно: 1 или 0.

Для примера 4<5 истина

100<20 ложь

Для описания можно применять типизированную константу var:

Const bb:Boolean=false;

Var flag:Boolean;


Типы логических операций показаны в ниже приведенной таблице:

Логические операции




Операция Действие

Типа операндов

Тип

результата

Целый

Целый

Целый

Целый

Целый

Целый




not Отрицание (битовое)

and И (битовое)

or ИЛИ (битовое)

xor Исключающее ИЛИ

(битовое)

shl Сдвиг влево

shr Сдвиг вправо

Целый

Целый

Целый

Целый

Целый

Целый

Примечание: Операция not является унарной операцией.

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

Если оба операнда в операциях or, and или xor целого типа, то тип результата будет таким же, как тип обоих операндов.

Операции i shl j и i shr j сдвигают значение i влево или вправо на j бит. Тип результата будет таким же, как тип i.


Булевские операции

Типы операндов и результат для булевских операций показаны в таблице

Булевские операции




Операция Действие

Типы операндов

Тип результата


Булевский

Булевский

Булевский


Булевский




not Отрицание

and Логическое И

or Логическое ИЛИ

xor Логическое

исключающее ИЛИ

Булевский

Булевский

Булевский

Булевский

Примечание: Операция not является унарной операцией.

Приведем примеры

1 and 1=1 1 or 1=1 1 xor 1=0 not 1 = 0 1 - True

1 and 0=0 1or 0=1 1 xor 0=1 not 0 = 1 0 - False

0 and 1=0 0 or 1=1 0 xor 1=1

0 and 0=0 0 or 0=1 0 xor 0=0

Результаты этих операций соответствуют обычной булевой логике. Например, выражение a and b является истинным (принимает значение Тruе) только в том случае, если оба операнда a и b имеют истинное значение (Тruе).

В Турбо Паскале поддерживаются две различные модели генерации кода для операций or и and - полное вычисление и вычисление по короткой схеме (частичное вычисление).

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


Операции со строками

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


Операция Действие Типы операндов Тип результата

+ Конкатенация Строковый, Строковый

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

упакованный строковый

Турбо Паскаль позволяет использовать операцию + для объединения двух строковых операндов. Результатом операции s + t, где s и t имеют строковый тип, символьный тип или упакованный строковый тип, будет конкатенация s и t. Результат будет совместим с любым строковым типом (но не с символьным и не с упакованным строковым типом). Если длина результирующей строки превышает 255 символов, то она усекается до 255 символов.

Напр. ’Соловьев-’+’Седой’=’Соловьев-Седой’


Операции над множествами

При использовании описываются типами set, перечислимый или интервальный.Например:

Var den1:(‘пон’,’вт’,’ср’);

X:1..5;

den2:(‘чт’,’пт’,’сб’);

y:1..10;

den1:=den1+den2=(‘пон’,’вт’,’ср’,’чт’,пт’’,’суб’)

у:=y-x означает,что для y интервал сокращается до 6..10


Типы операндов для операций над множествами показаны в таблице:


Операция Действие Типы операндов

+ Объединение Множества с совместимыми типами

- Разность Множества с совместимыми типами

* Пересечение Множества с совместимыми типами

Результаты операций соотвествуют правилам логики работы с множествами:

1. Перечислимое значение c содержится в a+b только тогда, когда оно содержится в a или в b.

2. Перечислимое значение c содержится в a-b только тогда, когда оно содержится в a и не содержится в b.

3. Перечислимое значение c содержится в a*b только тогда, когда он содержится в обоих множествах a и b.

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