СОДЕРЖАНИЕ
Введение
Глава I. Основные логические конструкции в системе программирования Паскаль
1.1. Краткая история становления языка программирования Паскаль
1.2. Основные команды языка программирования Паскаль
1.3. Использование функций и процедур языка Паскаль
Глава II. Постановление и решение задач механики в среде системы Паскаль
2.1. Задачи статики, решаемые с помощью языка Паскаль
2.2. Задачи кинематики, решаемые посредством языка Паскаль
3. Задачи динамики, решаемые в среде системы Паскаль
Заключение
Литература
ВВЕДЕНИЕ
Информатика - научная дисциплина, изучающая структуру и общие свойства информации, а также закономерности всех процессов обмена информацией при непосредственном устном и письменном общении специалистов до формальных процессов обмена посредством различных носителей информации. Значительную часть этих процессов составляет научно-информационная деятельность по сбору, переработке, хранению, поиска и распространению информации.
Актуальность курсового проекта на тему «Приложения технологии языка программирования паскаль в прикладной механике» обусловлена широким внедрением компьютерных технологий во все сферы деятельности человека.
Объектом курсовой работы служит процесс внедрения новых информационных технологий в сферу науки и образования.
Предметом курсового исследования является освоение процесса решения задач прикладной механики посредством языка программирования высокого уровня Паскаль.
Целью курсового проектирования является изучение полного спектра функциональных возможностей языка программирования Паскаль для решения задач прикладной механики.
Гипотеза курсового проектирования заключается в следующем. Овладение полным спектром функциональных возможностей языка программирования Паскаль способствует повышению эффективности решения задач прикладной механики.
Задачами курсовой работы являются:
1) освоение полного спектра функциональных возможностей языка программирования Паскаль;
2) постановка и решение задач прикладной механики традиционным способом;
3) решение задач механики в среде языка программирования Паскаль.
Методами, которыми решаются задачи курсового исследования, являются:
1) теоретический анализ научно-технической литературы по языку программирования Паскаль;
2) математическое моделирование задач прикладной механики;
3) компьютерное решение задач прикладной механики.
Практическая значимость выполненной курсовой работы на тему «Приложения технологии языка программирования паскаль в прикладной механике» заключается в том, что каждый пользователь компьютера, решая задачи статики, кинематики и динамики сможет пользоваться свободно предложенными в работе методиками.
ГЛАВА I. ОСНОВНЫЕ ЛОГИЧЕСКИЕ КОНСТРУКЦИИ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ ПАСКАЛЬ
1.1. КРАТКАЯ ИСТОРИЯ СТАНОВЛЕНИЯ ЯЗЫКА ПРОГРАММИРОВАНИЯ ПАСКАЛЬ
Язык Pascal был создан как учебный язык программирования в 1968 - 1971 году Никлаусом Виртом. В настоящее время этот язык имеет более широкую сферу применения, чем предусматривалось при его создании.
Язык программирования Pascal (назван в честь выдающегося французского математика и философа Блеза Паскаля (1623 - 1662)), разработан в 1967 - 1971гг. Никлаусом Виртом, профессором, директором института информатики Швейцарской высшей политехнической школы. Язык Pascal, созданный первоначально для обучения программированию как систематической дисциплине, скоро стал широко использован для разработки программных средств в профессиональном программировании.
Широкой популярностью Pascal среди программистов способствовали следующие причины:
· благодаря своей компактности, удачному первоначальному описанию Паскаль оказался достаточно лёгким для обучения.
· язык программирования Pascal, отображает фундаментальные и наиболее важные идеи алгоритмов в очевидной и легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.
· язык Pascal позволяет чётко реализовать идеи структурного программирования и структурной организации данных.
· он сыграл большую роль в развитии методов аналитического доказательства правильности программ и позволил реально перейти от методов отладки программ к системам автоматической проверки и правильности программ.
· применения языка Pascal значительно подняло «планку» надёжности разрабатываемых программ за счёт требований Pascal, к описанию используемых в программе переменных при компиляции без её выполнения, использование в Паскале простых и гибких структур управления: ветвлений, циклов.
1.2. ОСНОВНЫЕ КОМАНДЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ
ПАСКАЛЬ
Условные операторы предназначены для выбора к исполнению одного из возможных действий (операторов) в зависимости от некоторого условия (при этом одно из действий может быть пустым, т.е. отсутствовать) В качестве условий выбора используется значение логического выражения. В Turbo Pascal имеются два вида условных операторов: if и case.
Оператор условия if. Оператор условия if является одним из самых
популярных средств, имеющих естественный порядок выполнения операторов программы.
Операторы условия if выполняются следующим образом. Сначала выражается выражение, записанное в условии. В результате его вычисления получается значение булевского типа. В первом случае, если значение выражения есть true (истина), выполняется, указанный после слова then (то).
Условный оператор позволяет осуществить ветвление программы только по двум направлениям, одно из которых соответствует выполнению проверяемого условия. Если для переменной необходимо осуществить ряд действий, зависящих от других условий, то надо записывать, либо вложенные условные операторы, либо несколько операторов подряд. Для такой операции удобно использовать оператор варианта.
Вход в структуру содержит вычисление или ранее полученное значение переменной (индекса варианта). Это значение может совпасть с меткой, стоящей перед оператором на одной из ветвей переключаются. В таком случае выполняется оператор, помеченный этой меткой, и происходит выход из структуры. Оператор бывает простым или составным, ограниченным операторными скобками begin … end; Если значение индекса варианта не совпало ни с одной из меток, то выполняется оператор с номером n + 1 из строки else. Если оператор варианта содержит строку else , то это - полная форма оператора, если такой строки нет, то используется сокращённая форма оператора варианта. Метки оператора варианта могут быть константами любого типа. Их тип должен совпадать с переменной индекса варианта. Возможно, чтобы индекс варианта должен быть как именем переменной, так и выражением соответствующего типа.
Существуют задачи в которых по одной из ветки ветвления нужно рассмотреть ещё одно условие.
Рассмотрим задачу: сравнить 3 целых числа и вывести на печать максимальное.
Program chisla;
Var a, b, c: integer;
Begin
Writeln (`Введите три числа);
Read (a, b, c);
If ac then writeln (` максимально число , a)
Else if b>c then writeln (b максимально число, b)
Else writeln (`c максимальное число, c);
End.
1.3. ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ И ПРОЦЕДУР ЯЗЫКА ПАСКАЛЬ
1.3.1. Алгоритм.
Слово алгоритм происходит от algorithmic - латинской формы написания имени латинского математика IX в. Аль-Хорезми, который сформулировал правила выполнения четырёх арифметических действий над многозадачными числами. В дальнейшем алгоритм стали называть описание любой последовательности действий, которую следует выполнить для решения заданной задачи.
Алгоритм может быть ориентирован на исполнение его человеком или автоматическим устройством. Алгоритмы, предназначены для выполнения компьютерами, обычно называют компьютерными программами или просто программами.
Алгоритмом называется точное предписание, определяющее последовательность действий исполнителя, направленных на решение поставленной задачи. В роли исполнителя алгоритмов могут выступать люди, роботы, компьютеры.
Используются разные способы записи алгоритмов. Широко распространенный словесный способ записи: это записи рецептов приготовления различных блюд в кулинарной книге, инструкции по использованию технических устройств, правила правописания и многие другие. Наглядно представляется алгоритм языком блок-схем.
Свойства алгоритма. При составлении алгоритма необходимо обеспечить, чтобы он обладал рядом свойств.
Однозначность алгоритма, под которой понимается единственность толкования исполнителем правил выполнения действий и порядка их выполнения. Чтобы алгоритм обладал этим свойством, он должен быть записан командами из системы команд исполнителя.
Для нашего примера исполнитель алгоритма должен понимать такую запись действий, как сложность числа А и В. Конечность алгоритма - обязательность завершения каждого из действий, составляющих алгоритм, и конец выполнения каждого алгоритма в целом.
Результативность алгоритма, предполагающая, что выполнение алгоритма должно завершится получением определенных результатов.
Массовость, т.е. возможность применения данного алгоритма для решения целого класса задач, отвечающих общей постановки задачи. Так как алгоритм, показанный на рисунке, позволяет правильно подсчитать сумму не только чисел 2 и 3, но любой другой пары целых чисел, он обладает свойством массовости.
Для того чтобы алгоритм обладал свойством массивности, следует составлять алгоритм, используя обозначения величин и избегая конкретных значений. Правильность алгоритма, под которой понимается способность алгоритма давать правильные результаты решения поставленных задач. Представленный в примере алгоритм обладает свойством правильности, так как в нём использована правильная формула сложения целых чисел, и для любой пары целых чисел результат выполнения алгоритма будет равен их сумме.
Компьютерная программа - это план будущих работ, составленный в расчёте на его выполнение компьютером.
Чтобы компьютер смог выполнить программу, она должна быть записана в специальной форме, доступной компьютеру; должна быть записана в соответствии со специальным набором правил.
Набор записи компьютерной программы называется «алгоритмическим языком».
Вычислительный процесс называется линейным (не разветвляющимся), если направление его продолжения на любом этапе вычислений является единственным. Алгоритм линейного вычислительного процесса описывает действия, последовательность выполнения которых не зависит от исходных данных и результатов промежуточных вычислений, т.е является постоянной.
Этот процесс является наиболее простым видом вычислений. Линейный процесс (как и другой вычислительный процесс) можно представить в виде следующих этапов: первый - задание исходных данных; второй реализация вычислений; третий - вывод результатов счёта и поясняющей информации. Этапы отображаются на блок-схеме, а затем реализуются в ПК в указанной последовательности.
Алгоритм деления отрезка АВ пополам:
1) поставить ножку циркуля в точку А;
2) установить раствор циркуля равным длине отрезка АВ;
3) провести окружность;
4) поставить ножку циркуля в точку В;
5) провести окружность;
6) через точки пересечения окружностей провести прямую;
7) отметить точку пересечения этой прямой с отрезком АВ;
Каждое указание алгоритма предписывает исполнителю выполнить одно конкретное значения действий. Исполнитель не может перейти следующей операции, не завершив полностью предыдущую. Предписания алгоритма надо выполнять последовательно одно за другим, с соответствии с порядком их записи. Следование всем предписаниям гарантирует правильное решение задачи. Данный алгоритм совершенно ясен исполнителю
Блок-схема - алгоритм, выраженный с помощью логических блоков. Блок-схема служит для того, чтобы наглядней представлять те или иные формы организаций действий. Каждое действие алгоритма, кроме проверки условия, будем помещать в прямоугольник, а вопрос о том, выполняется ли некоторое условие, - в ромб. Еще существуют: параллелограмм, овал, оборванный листок.
В рассмотренных до сих пор алгоритмах и программах все команды выполнялись последовательно одна за другой в том порядке, в каком они были записаны. Однако таким образом может быть построен алгоритм для решения далеко не всякой задачи. В практике известны задачи, дальнейший ход решения которых зависит от выполнения каких либо условий.
Ветвление - это такая форма организаций действий, при которой в зависимости от выполнения или невыполнения некоторого условия совершатся либо одна, либо другая последовательность действий.
1. Процедуры ввода-вывода. Почти каждая программа должна общаться с пользователем, то есть выводить результаты своей работы на экран и запрашивать у пользователя информацию с клавиатуры. Для того чтобы это стало возможным, в Турбо-Паскале имеются специальные процедуры (то есть небольшие вспомогательные программы), называются он процедурами ввода-вывода. Для того чтобы заставить процедуру работать в нашей программе, нужно написать её имя, за которым в скобках, через запятую перечислить параметры, которые мы хотим ей передать. Для процедуры вывода информации на экран параметрами могут служить числа или текстовые сообщения, которые должна печатать наша программа на экран.
Опишем назначение этих процедур:
write (p1, p2, ... pn); - (выводит на экран значения выражений p1, p2, ... pn, количество которых (n) неограниченно. Выражения могут быть числовые, строковые, символьные и логические. Под выражением будем понимать совокупность некоторых действий, применённых к переменным, константам или литералам, например: арифметические действия и математические функции для чисел, функции для обработки строк и отдельных символов, логические выражения и т.п. Возможен форматный вывод, т.е. явное указание того, сколько выделять позиций на экране для вывода значения.
Пример для вещественных типов:
write (r+s:10:5); - (вывести значение выражения r + s с выделением для этого 10 позиций, из них 5 (после запятой).
Для других типов все несколько проще:
write (p:10); - (вывести значение выражения p, выделив под это 10 позиций. Вывод на экран в любом случае производится по правому краю выделенного поля.
Writeln (p1, p2, ... pn); - (аналогично write, выводит значения p1, p2, ... pn, после чего переводит курсор на новую строку. Смысл параметров (тот же, замечания о форматном выводе остаются в силе.
Существует вариант writeln; (без параметров), что означает лишь перевод курсора на начало новой строки.
readln (v1, v2, ...vn); (ввод с клавиатуры значений переменных v1,...vn.
Переменные могут иметь строковый, символьный или числовой тип. При вводе следует разделять значения пробелами, символами табуляции или перевода строки (т.е., нажимая Enter).
read (v1, v2, ...vn); (по назначению сходно с readln; отличие состоит в том, что символ перевода строки (Enter), нажатый при завершении ввода, не «проглатывается», а ждет следующего оператора ввода. Если им окажется оператор ввода строковой переменной или просто readln; то строковой переменной будет присвоено значение пустой строки, а readln без параметров не станет ждать, пока пользователь нажмет Enter, а среагирует на уже введенный.
Пример. Программа просит пользователя ввести с клавиатуры два целых числа и печатает на экране их сумму:
Program PrintSum;
var a,b: integer;
begin
write (Введите два числа:);
readln (a,b);
writeln (Сумма a и b равна ,a+b);
readln;
end.
1.3.2. Функции числовых параметров.
Название |
Значение |
|
abs(x) |
модуль x |
|
cos(x) |
косинус x |
|
frac(x) |
дробная часть x |
|
int(x) |
целая часть x (т.е. ближайшее целое, не превосходящее x) |
|
pi |
|число |
|
round(x) |
x, округлённое до целого |
|
sin(x) |
синус x |
|
sqr(x) |
квадрат x |
|
sqrt(x) |
квадратный корень из x |
|
1. Оператор if.
Иногда требуется, чтобы часть программы выполнялась не всегда, а лишь при выполнении некоторого условия (а при невыполнении этого условия выполнялась другая часть программы). В этом случае пользуются оператором условного выполнения, который записывается в следующем виде:
if then else;
Под оператором понимается либо одиночный оператор (например, присваивания, вызова процедуры), либо такой составной оператор, состоящий из нескольких простых операторов, помещённых между словами begin и end. Важно заметить, что перед else не ставится точка с запятой. Часть else может и отсутствовать.
Пример 1: пусть требуется найти число m=max(a,b). Этой задаче
соответствует следующий фрагмент программы на Паскале:
if a>b then m:=a else m:=b;
Пример 2: (без else) пусть дано целое число i. Требуется оставить его
без изменения, если оно делится на 2, и вычесть из него 1, если это не так.
var i: integer;
if i mod 2 = 1 then i:=i-1; {else - ничего не делать}
Пример 3: (с использованием составного оператора). Пусть даны две переменные типа real. Требуется поменять местами значения этих переменных, если a1>a2.
var a1,a2,buf :real;
if a1>a2 then begin
buf:=a1;
a1:=a2;
a2:=buf;
end;
Пример при подсчете суммы натуральных чисел от 1 до 100:
Var i,sum: integer;
begin
sum:=0; i:=0;
repeat
i:=i+1;
sum:=sum+i;
until i=100;
writeln (Сумма равна: ,sum);
readln;
end.
Важно заметить, что операторы стоящие внутри цикла repeat (иначе в теле цикла) выполняются хотя бы один раз (только после этого проверяется условие выхода).
Этот цикл записывается так: while do . (Пока условие истинно, выполнять оператор). Суть в следующем: пока условие истинно, выполняется оператор (в этом случае оператор может не выполниться ни разу, т.к. условие проверяется до выполнения).
1. Символьный тип
Тип данных, переменные которого хранят ровно один символ (букву, цифру, знак препинания и т.п.) называется символьным, а в Паскале -- char. Объявить переменную такого типа можно так: var ch: char;. Для того чтобы положить в эту переменную символ, нужно использовать оператор присваивания, а символ записывать в апострофах, например: ch:=R;. Для символьных переменных возможно также использование процедуры readln, например:
write(`Выйти из игры? (Да/Нет)); readln(ch);
if ch=Д then ... {выходить}...
else ...{продолжать}...;
Символьные переменные в памяти компьютера хранятся в виде числовых кодов, иначе говоря, у каждого символа есть порядковый номер. К примеру, код пробела равен 32, код `A -- 65, `B -- 66, `C -- 67, код символа `1 -- 48, `2 -- 49, `. -- 46 и т. п. Некоторые символы (с кодами, меньшими 32) являются управляющими, при выводе таких символов на экран происходит какое-либо действие, например, символ с кодом 10 переносит курсор на новую строку, с кодом 7 -- вызывает звуковой сигнал, с кодом 8 -- сдвигает курсор на одну позицию влево. Под хранение символа выделяется 1 байт (байт состоит из 8 бит, а бит может принимать значения 0 или 1), поэтому всего можно закодировать 28 = 256 различных символов. Кодировка символов, которая используется Турбо-Паскале, называется ASCII (American Standard Code for Information Interchange -- американский стандартный код для обмена информацией).
Для того чтобы получить в программе код символа нужно использовать функцию chr, например:
var i: byte; {число, занимающее 1 байт, значения -- от 0 до 255}
ch: char;
...
readln(i); writeln (символ с кодом ,i, -- это ,chr(i));
Если в качестве кода используется конкретное число, а не выражение и не переменная, то можно использовать символ «#», скажем так: ch:=#7;. Для того перехода от кода к символу используется функция ord (от слова ordinal -- порядковый). Имеющиеся знания позволяют нам написать программу, которая выдаёт на экран таблицу с кодами символов:
program ASCII;
var ch: char;
begin
for ch:=#32 to #255 do write(ord(ch),-->,ch, );
readln;
end.
В этой программе в качестве счётчика цикла была использована символьная переменная, это разрешается, поскольку цикл for может использовать в качестве счётчика переменные любого типа, значения которого хранятся в виде целых чисел.
С использованием кодов работают ещё две функции, значения которых символьные:
1. succ (от succeedent -- последующий), она выдаёт символ со следующим кодом.
2. pred (от predecessor -- предшественник), выдаёт символ с предыдущим кодом.
Если попытаться в программе получить succ(#255) или pred(#0), то возникнет ошибка. Пользуясь этими функциями можно переписать предыдущую программу и по-другому:
ch:=#32;
while ch<>#255 do begin
write(ord(ch),-->,ch, );
ch:=succ(ch);
end;
Сравнение символов. Также как и числа, символы можно сравнивать на =, <>, <=, >=. В этом случае Паскаль сравнивает не сами символы, а их
коды. Таблица ASCII составлена таким образом, что коды букв (латинских и большинства русских) возрастают при движении в алфавитном порядке, а коды цифр расположены по порядку: ord(`0)=48, ord(`1)=49, ... ord(`9)=57. Сравнения символов можно использовать везде, где требуются логические выражения: в операторе if, в циклах и т.п.
2. Строковый тип
Для хранения строк (то есть последовательностей из символов) в Турбо Паскале имеется тип string. Значениями строковых переменных могут быть последовательности различной длины (от нуля и более, длине 0 соответствует пустая строка). Объявить строковую переменную можно двумя способами: либо var s: string; (максимальная длина строки -- 255 символов), либо var s: string[n]; (максимальная длина -- n символов, n -- константа или конкретное число).
Для того чтобы положить значение в строковую переменную используются те же приёмы, что и при работе с символами. В случае присваивания конкретной строки, это строка должна записываться в апострофах (s:=Hello, world!). Приведём простейший пример со строками: программа спрашивает имя у пользователя, а затем приветствует его:
Program Hello;
var s: string;
begin
write(Как Вас зовут: );
readln(s);
write(Привет, ,s,!);
readln;
end.
Хранение строк. В памяти компьютера строка хранится в виде последовательности из символьных переменных, у них нет индивидуальных имён, но есть номера, начинающиеся с 1). Перед первым символом строки имеется ещё и нулевой, в котором хранится символ с кодом, равным длине строки. Нам абсолютно безразлично, какие символы хранятся в байтах, находящихся за пределами конца строки. Рассмотрим пример. Пусть строка s объявлена как string [9], тогда после присваивания s:=Привет; она будет хранится в следующем виде:
Номер байта |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
Содержимое |
|#6 |
`П |
`р |
`и |
`в |
`е |
`т |
`ю |
`s |
`% |
|
Для того чтобы в программе получить доступ к n-му символу строки используется запись s[n]. Если поменять значение s[0] то это отразится на длине строки. В следующем примере из строки Привет мы сделаем Привет!:
s[0]:=#7; s[7]:=!;.
Сравнение строк. Строки сравниваются последовательно, по символам. Сравниваются первые символы строк, если они равны -- то вторые, и т. д. Если на каком-то этапе появилось различие в символах, то меньшей будет та строка, в которой меньший символ. Если строки не различались, а затем одна из них закончилась, то она и считается меньшей. Примеры: ананас<кокос, свинья>свинина, <A, hell<hello.
Склеивание (конкатенация) строк. К строкам можно применять операцию «+», при этом результатом будет строка, состоящая из последовательно записанных «слагаемых». Пример: после действия s:= abc+def+ghi; переменная s будет содержать `abcdefghi.
Процедуры и функции для работы со строками. Наиболее часто употребляется функция length(s: string): integer (после двоеточия записан тип значения, возвращаемого функцией, в нашем случае -- целое число). Эта функция возвращает длину строки s.
3. Перечисляемый тип
Предположим, что нам требуется переменная для хранения дня недели. В этом случае можно воспользоваться целым типом (например byte) и хранить дни недели в виде чисел 1, 2, ... 7, но это будет не очень наглядно. Турбо Паскаль предоставляет более удобный вариант, а именно создание перечислимого типа, например, такого:
type Days = (Mon, Tue, Wed, Thu, Fri, Sat, Sun);
После этого можно завести переменную этого типа (var day: Days;) и использовать её. Ниже приведены примеры использования:
day:=Wed;
...
if day>Fri then writeln(Сегодня выходной);
...
if day=Mon then writeln(Началась рабочая неделя);
Как вы уже заметили значения перечислимого типа можно сравнивать, при этом меньшим считается то, которое объявлено раньше (левее) в определении типа.
Для переменных перечисляемых типов возможно применение функций succ и pred, например, succ(Wed) дает Thu, Pred(Sun) дает Sat. Если попытаться написать Pred(Mon) или Succ(Sun), то уже на этапе проверки программы компилятором произойдет ошибка.
Хранение значений перечисляемого типа устроено внутри довольно просто: хранятся целые числа от 0 до n, в нашем случае n = 6. Существует функция Ord, которая позволяет получить то число, в виде которого хранится какое-либо значение перечисляемого типа, например Ord(Wed) дает
При необходимости можно получить значение перечисляемого типа по его численному представлению, например, Days(1) есть Tue. После всего сказанного можно заметить, что при сравнении величин перечисляемого типа в действительности сравниваются их порядковые номера (Ord).
Пример использования перечисляемых типов:
Пусть корабль может двигаться только по четырем направлениям: на север, на запад, на юг и на восток, то есть текущее направление движения определяется переменной типа Directions = (North, West, South, East);. Этому кораблю можно подавать приказы следующих типов: вперёд, назад, влево, вправо, то есть любой приказ задать переменной типа Orders = (Ahead, Back, Left, Right);. Пусть корабль двигался по направлению d1, после чего ему дали приказ p. Программа должна определить, в каком направлении корабль будет двигаться после выполнения приказа.
Program Ship;
type Courses = (North, West, South, East);
Orders = (Ahead, Back, Left, Right);
var d1, d2: Courses;
p: Orders;
i: integer;
s: string;
begin {Запрашиваем у пользователя информацию о курсе и приказе}
writeln(Введите первоначальный курс корабля );
write((0-север, 1-запад, 2-юг, 3-восток) );
readln(i);
d1:=Courses(i);
writeln(Введите приказ, данный кораблю );
write((0-прямо, 1-назад, 2-влево, 3-вправо) );
readln(i);
p:=Orders(i); {Определяем новый курс}
case p of
Ahead : d2:=d1;
Back : d2:=Courses((ord(d1)+2) mod 4);
Left : d2:=Courses((ord(d1)+1) mod 4);
Right : d2:=Courses((ord(d1)+3) mod 4); {-1 - нельзя, так как (Ord(North)-1) mod 4 = -1}
end; {Выводим результат на экран}
case d2 of
North : s:=север;
West : s:=запад;
South : s:=юг;
East : s:=восток;
end;
writeln(Теперь корабль движется на +s);
readln;
end.
4. Ограниченный тип
Этот тип также рассмотрим на примере. Пусть в некоторой переменной нужно хранить текущее число, то есть номер дня в месяце. В Турбо Паскале можно задать тип DaysInMonth = 1..31;. Переменные и константы этого типа могут принимать только такие значения, если попытаться задать что-либо другое, то компилятор выдаст ошибку. В качестве границ могут употребляться и отрицательные числа, например Temperature = - 60..50;
В качестве базового типа (то есть типа, из которого выбирается диапазон значений) могут использоваться почти все порядковые типы, то есть те, которые хранятся в виде целых чисел. К порядковым типам относятся: все целые типы (byte, integer, и т. п.), char, boolean, перечисляемые типы и ограниченные типы. В качестве базового типа нельзя использовать лишь сам ограниченный тип (трудно представить, как это можно сделать). С учетом этого правила допустимы такие объявления типов:
type SmallLatin = a..z; {малые латинские буквы}
MyBoolean = True..False; {хотя это и бессмысленно}
Holidays = Sat..Sun; {выходные}
Нельзя в качестве базового типа употребить какой-либо вещественный тип, следующее объявление приведет к ошибке:
type Wrong = -1.25..1.25;
Заметим, что функции Ord, Succ и Pred могут применяться к любым порядковым типам, и, в частности, к ограниченным.
Для вывода текста на экран используются две процедуры:
1. OutText(s: string). Эта процедура выводит строку s начиная с текущей позиции, то есть левый верхний угол выводимой строки находится в текущей позиции (по умолчанию это так). Текущая позиция задаётся, например, с помощью MoveTo.
2. OutTextXY(x,y: integer; s: string). Используется для вывода строки в конкретной позиции.
Если требуется вывести какие либо числа, то предварительно требуется преобразовать их в строку, например, с помощью процедуры Str.
Пример:
var r: integer;
s: string;
Str(r,s);
OutTextXY(100,200,Результат=+s);
Турбо Паскаль позволяет использовать несколько различных шрифтов для вывода текста. Кроме того, можно менять направление вывода текста, а также размер символов. В этих целях используется процедура SetTextStyle(Font, Direction, CharSize: word). Перечислим возможные константы и значения для параметров этой процедуры.
Font (шрифт):
DefaultFont (шрифт 8x8 (по умолчанию)
TriplexFont (полужирный шрифт);
SmallFont (тонкий шрифт);
SansSerifFont (шрифт без засечек);
GothicFont (готический шрифт);
Direction (ориентация и направление вывода символов):
0 (привычный вывод слева направо
1 (снизу вверх (надпись «положена на бок»)
2 (слева направо, но «лежачими» буквами.
Size (размер шрифта (целые числа от 0 до 10).
Другая возможность при работе с текстом (это выравнивание его относительно задаваемых координат вывода. Для этого используется процедура SetTextJustify(horiz,wert: word). Horiz указывет как текст расположен относительно заданной позиции по горизонтали, а vert (по вертикали. Возможные константы:
для horiz:
LeftText (указанная позиция является левым краем строки);
CenterText (позиция является серединой выводимой строки);
RightText (правым краем строки);
для vert:
BottomText (позиция находится на нижнем крае изображения);
CenterText (по центру);
TopText (позиция является верхним краем изображения);
Процедура (последовательность действий (записанных на Паскале), названная каким-либо именем. Для того чтобы выполнить эту последовательность, нужно в соответствующем месте программы указать её имя (так, например, для очистки экрана при работе с графикой мы указываем ClearDevice;). Кроме того, что программа становится при использовании процедур короче и понятнее, процедуры можно вызывать из разных мест программы (в противном случае пришлось бы повторять в тексте программы одинаковые последовательности действий несколько раз).
Те действия, которые входят в процедуру, записываются до начала основной программы в следующем виде:
program ...
const ...
type ...
var ...
procedure MyProc;
begin {действия}
end;
begin {основная программа}
end.
Рассмотрим пример нахождения максимума из трёх чисел:
Program Max1;
var a,b,c,m: integer;
begin
write(Введите a: ); readln(a);
write(Введите b: ); readln(b);
write(Введите c: ); readln(c);
if a>b then m:=a else m:=b;
if c>m then m:=c;
writeln(Максимум = ,m);
readln;
end. {Перепишем его с использованием процедуры:}
program Max2;
var a,b,c,m: integer;
procedure FindMax;
begin
if a>b then m:=a else m:=b;
if c>m then m:=c;
end;
begin
write(Введите a: ); readln(a);
write(Введите b: ); readln(b);
write(Введите c: ); readln(c);
FindMax;
writeln(Максимум = ,m);
readln;
end.
Этот вариант можно улучшить. Пока наша процедура может искать минимум только среди значений конкретных переменных a, b и c. Заставим её искать минимум среди любых трёх целых чисел и помещать результат в нужную нам переменную, а не всегда в m. Чтобы была видна польза от такой процедуры, рассмотрим пример программы для поиска максимума среди чисел a+b, b+c и a+c:
Program Max3;
var a,b,c,m: integer;
procedure FindMax(n1,n2,n3: integer; var max: integer);
begin
if n1>n2 then max:=n1 else max:=n2;
if n3>max then max:=n3;
end;
begin
write (Введите a: ); readln(a);
write (Введите b: ); readln(b);
write (Введите c: ); readln(c);
FindMax (a+b,b+c,a+c,m);
writeln (Максимум из сумм = ,m);
readln;
end.
В скобках после имени процедуры (в её описании) записаны так называемые параметры. Эта запись обозначает, что внутри процедуры можно использовать целые числа, обозначенные n1, n2 и n3, а также заносить значения в переменную типа integer, которая внутри процедуры называется max (а реально во время работы программы все действия производятся над переменной m). Параметры, в которых хранятся числа (n1,n2,n3) называются параметрами-значениями; а те, которые обозначают переменные (max) (параметрами-переменными, перед ними в описании ставится слово var. Параметры, на которые имеются ссылки внутри процедуры (n1, n2, n3, max), называются формальными, а те, которые реально используются при вызове (a+b, b+c, a+c, m) -- фактическими.
Процедуры последнего вида оказываются достаточно удобными. Можно один раз написать такую процедуру, убедиться в её работоспособности и использовать в других программах. Примерами таких процедур являются процедуры для работы со строками, встроенные в Турбо Паскаль.
В нашем примере можно переписать программу и по-другому. Максимум из трёх чисел определяется по ним однозначно, или, говоря математическим языком, является функцией этих трёх чисел. Понятие функции есть также и в Паскале. Рассмотрим такую программу:
Program Max4;
var a,b,c,m: integer;
function Max(n1,n2,n3: integer) : integer;
var m: integer;
begin
if n1>n2 then m:=n1 else m:=n2;
if n3>m then m:=n3;
Max:=m;
end;
begin
write (Введите a: ); readln(a);
write (Введите b: ); readln(b);
write (Введите c: ); readln(c);
writeln (Максимум = ,Max(a+b,b+c,a+c));
readln;
end.
Нам уже известно как вызывать функцию из программы (например sqrt, sin и т. п.). Рассмотрим описание функции. Оно очень похоже на описание процедур, но есть два отличия:
1. После имени функции и списка параметров (если есть) через двоеточиезаписывается тип значения функции (возможны не только числовые типы, но и логические, строковые, символьные);
2. Среди операторов в теле функции наиболее важными являются операторы присваивания значения функции (в нашем случае это строчка Max:=m;).
В записанной выше функции используется так называемая локальная переменная m, то есть переменная, которая «видна» только нашей функции, а другие процедуры и функции, а также главная программа её «не видят». Кроме локальных переменных в Турбо Паскале можно определять локальные константы и типы.
! | Как писать курсовую работу Практические советы по написанию семестровых и курсовых работ. |
! | Схема написания курсовой Из каких частей состоит курсовик. С чего начать и как правильно закончить работу. |
! | Формулировка проблемы Описываем цель курсовой, что анализируем, разрабатываем, какого результата хотим добиться. |
! | План курсовой работы Нумерованным списком описывается порядок и структура будующей работы. |
! | Введение курсовой работы Что пишется в введении, какой объем вводной части? |
! | Задачи курсовой работы Правильно начинать любую работу с постановки задач, описания того что необходимо сделать. |
! | Источники информации Какими источниками следует пользоваться. Почему не стоит доверять бесплатно скачанным работа. |
! | Заключение курсовой работы Подведение итогов проведенных мероприятий, достигнута ли цель, решена ли проблема. |
! | Оригинальность текстов Каким образом можно повысить оригинальность текстов чтобы пройти проверку антиплагиатом. |
! | Оформление курсовика Требования и методические рекомендации по оформлению работы по ГОСТ. |
→ | Разновидности курсовых Какие курсовые бывают в чем их особенности и принципиальные отличия. |
→ | Отличие курсового проекта от работы Чем принципиально отличается по структуре и подходу разработка курсового проекта. |
→ | Типичные недостатки На что чаще всего обращают внимание преподаватели и какие ошибки допускают студенты. |
→ | Защита курсовой работы Как подготовиться к защите курсовой работы и как ее провести. |
→ | Доклад на защиту Как подготовить доклад чтобы он был не скучным, интересным и информативным для преподавателя. |
→ | Оценка курсовой работы Каким образом преподаватели оценивают качества подготовленного курсовика. |
Курсовая работа | Деятельность Движения Харе Кришна в свете трансформационных процессов современности |
Курсовая работа | Маркетинговая деятельность предприятия (на примере ООО СФ "Контакт Плюс") |
Курсовая работа | Политический маркетинг |
Курсовая работа | Создание и внедрение мембранного аппарата |
Курсовая работа | Социальные услуги |
Курсовая работа | Педагогические условия нравственного воспитания младших школьников |
Курсовая работа | Деятельность социального педагога по решению проблемы злоупотребления алкоголем среди школьников |
Курсовая работа | Карибский кризис |
Курсовая работа | Сахарный диабет |
Курсовая работа | Разработка оптимизированных систем аспирации процессов переработки и дробления руд в цехе среднего и мелкого дробления Стойленского ГОКа |