Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основы программирования на языке Pascal (Алгоритм, свойства алгоритма)

Содержание:

ВВЕДЕНИЕ

Целью данной курсовой работы является теоретическое и практическое рассмотрение основ программирования на языке Pascal. Для реализации практической задачи используется среда разработки PascalABC.NET.

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

В 1970 году в области программирования произошло значимое событие - появился новый язык программирования, названный швейцарским ученым Никлаусом Виртом в честь Блеза Паскаля - великого французского математика, физика, философа и литератора XVII века. Язык Паскаль оказался подходящим языком для обучения основам программирования и за счет своей компактности, логичности и четкости надолго занял свою нишу, являясь при том и языком для создания серьезных приложений и разработки программных средств в промышленном программировании.

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

Задачами теоретической части курсовой работы являются:

  • определение понятия и свойств алгоритма;
  • рассмотрение алфавита, выражений и типов данных;
  • подробный анализ операторов языка Pascal, то есть операторов присваивания, ввода/вывода, условного оператора if, циклов for, while и repeat..until, а также операторов, прерывающих выполнение циклов.

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

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

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

Алгоритм, свойства алгоритма

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

Таким образом, для решения задачи необходимо:

  1. Осуществить ввод исходных данных.
  2. Преобразовать эти данные в результат.
  3. Вывести полученный результат вычислений.

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

Для создания алгоритма нужно знать следующее:

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

Полученный в результате алгоритм или программа должны обладать следующими свойствами:

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

Алфавит языка Паскаль

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

Латинские буквы

от A до Z (прописные) и от а до z (строчные)

Цифры

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Шестнадцатеричные цифры

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, E, F

Специальные символы

+ — * / = < > [ ] . , ( ) : ; { } ^ @ $ #

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

:= знак присваивания;

<= меньше или равно;

>= больше или равно;

(* *) ограничители комментариев;

<> не равно;

(..) эквивалент [].

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

Данные и величины, типы данных, выражения

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

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

Константа — это неизменяемая величина. Переменные могут менять свои значения по ходу выполнения программы, и представлены символическими именами — идентификаторами. Любая переменная, как и константа, занимает ячейку памяти, а значение этой величины определено двоичным кодом, хранящимся в этой ячейке.

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

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

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

Целые типы

Если использовать целочисленные числа, следует помнить о вложенности типов. Это означает, что тип с меньшим диапазоном может быть вложен в тип с большим диапазоном. Так, тип Byte может быть вложен во все типы, которые требуют для хранения 2 и 4 байта, и в тоже время тип Short Int, который занимает 1 байт, не может быть вложен в тип Word, потому что не имеет отрицательных значений.

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

Примеры:

2358.8395

0.23588395*104

0.23588395*E4

Могут быть выделены 5 вещественных типов:

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

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

Рассмотрим символьный тип Char - значениям символьного типа являются 256 символов из множества символов, допустимых кодовой таблицей используемого компьютера. Диапазон от 0 до 127 представляет начальную область этого множества и соответствует множеству кодов ASCII, содержащих символы арабских чисел, алфавита и набора специальных символов. Символы данного диапазоны всегда присутствуют на клавиатуре персонального компьютера, а старшая область является альтернативной и содержит символы национального алфавита, некоторые специальные символы и символы псевдографики, которые не соответствуют кодам ASCII.

Переменная символьного типа занимает один байт в оперативной памяти, в программе значение такой переменной заключается в апострофы. Так же значение может быть задано в виде ASCII-кода, тогда перед числом, задающим код символа следует поставить знак #.

Var

C: Char;

C := ’A’;

C := #65;

В логическом (булевском) типе имеются два значения: Истина (True) и Ложь (False). Переменная логического типа задается служебным словом Boolean. Значение булевского типа занимает один байт в оперативной памяти. Значениям Истина и Ложь ставятся в соответствие числовые значения 1 и 0.

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

В таблице ниже представлены основные математические операции языка Паскаль.

Символ операции

Название операции

Пример

*

умножение

2*3 (результат: 6)

/

деление

30/2 (результат: 1.5E+01)

+

сложение

2+3 (результат: 5)

-

вычитание

5-3 (результат: 2)

div

целочисленное деление

5 div 2 (результат: 2)

mod

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

5 mod 2 (результат: 1)

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

  • NOT - логическое отрицание ("НЕ")
  • AND - логическое умножение ("И")
  • OR - логическое сложение ("ИЛИ")
  • XOR - логическое "Исключающее ИЛИ"

В таблице истинности представлены результаты логических операций над переменными A и B на всех возможных наборах значений:

A

B

not A

A and B

A or B

A xor B

true

true

false

true

true

false

true

false

false

true

true

false

true

true

false

true

true

false

false

false

false

false

Операциями отношения в Паскаль являются следующие операции:

> - больше

< - меньше

= - равно

<> - не равно

>= - больше или равно

<= - меньше или равно

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

Существует определенный порядок вычисления выражения в соответствии с приоритетом (старшинством) содержащихся в нем операций. В языке Паскаль установлене следующий приоритет операций:

  • унарная операция логического отрицания not, унарный минус -, взятие адреса @
  • операции умножения (в том числе логического):  *  /  div  mod  and
  • операции сложения (в том числе логического):  :  +  -  or  xor
  • операции отношения:  =  <>  <  >  <=  >=  in

Можно переопределить порядок выполнения операций с помощью скобок. Так, 2*6+11 равно 23, но 2*(6+11) равно 34.

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

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

переменная:=выражение

В качестве переменной может выступать простая переменная, разыменованный указатель, переменная с индексом или поле переменной типа запись (record). Символ := называется знаком присваивания. Выражение справа должно быть совместимым по присваиванию с переменной в левой части. Оператор присваивания заменяет текущее значение переменной значением выражения.

Например, следующая запись увеличивает значение переменной i на 1:

i:=i + 1;

Процедура ввода с клавиатуры имеет следующий формат:

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

где <список ввода> представляет собой последовательность имен переменных, разделенных запятыми. Read является оператором обращения к стандартной процедуре ввода.

image073

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

В примере ниже объявим три переменные вещественного, целого и символьного типа:

image074

Набираем на клавиатуре значения, которые будут присвоены объявленным переменным:

image075

Другой вариант оператора ввода с клавиатуры имеет вид:

image078

Где слово ReadLn означает выражение read line — читать строку. Отличие этого оператора от Read заключается в том, что после считывания последнего значения в списке для одного оператора ReadLn данные для следующего оператора будут читаться с начала новой строки.

Оператор вывода на экран является обращением к стандартной процедуре вывода и имеет следующий формат:

image081

Здесь элементами списка вывода могут являться выражения различных типов (например, константы и переменные):

image082

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

Второй вариант процедуры вывода на экран выглядит так:

image084

Слово WriteLn — write line — как и случае с ReadLn означает выражение писать строку. Отличие этого оператора от Write заключается в том, что после вывода последнего значения в списке происходит перевод курсора к началу следующей строки. Оператор WriteLn, записанный без параметров, осуществляет перевод строки.

Условный оператор

Оператор условного перехода в Паскаль имеет следующий вид:

if условие then оператор 1 else оператор 2;

http://studlab.com/pictures/ci/operator_if.gif

условие - это логическое выражение, в зависимости от которого происходит выбор одной из двух альтернативных ветвей алгоритма. Если значение условия равно TRUE (истинно), тогда будет выполнен оператор 1, который записан после ключевого слова then. Иначе будет выполнен оператор 2, идущий за словом else, при этом исполнение оператора 1 пропускается. После выполнения указанных в той или иной ветке операторов программа передает управление команде, следующей непосредственно за оператором if.

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

Else - часть условного оператора if может отсутствовать:

if условие then оператор 1;

Тогда, если логическое условие не выполняется, управление сразу переходит к оператору, идущему в программе после условной конструкции if.

Синтаксис языка Паскаль разрешает запись только одного оператора после ключевых слов then и else, в связи с этим группа инструкций обязательно должна быть объединена в составной оператор, ограниченный операторными скобками begin ... end. Если этого не сделать, возникнет логическая ошибка программы, когда компилятор не выдает ошибку, но программа будет работать неправильно.

Примеры.

if z > 0 then modul := z else modul := -z;

if num > 0 then WriteLn('num – положительное число');

if min > max then begin

temp := min;

min := max;

max := temp;

end;

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

http://www.intuit.ru/EDI/15_08_14_1/1408051090-15574/tutorial/681/objects/2/files/2_4.jpg

Его формат выглядит следующим образом:

case выражение of

вариант : оператор;

...

вариант : оператор;

end;

или

case выражение of

вариант : оператор;

...

вариант : оператор;

else оператор

end;

Выражение, записываемое после ключевого слова case, называется селектором и может быть любого перечисляемого типа. Вариант может состоять из одной или большего количества констант или диапазонов, разделенных между собой запятыми. Они должны быть того же типа, что и селектор. Из указанного множества операторов выбирается только тот, перед которым вариант совпадает со значением селектора. Если ни один такой вариант не найден, выполняется оператор, идущий за словом else (если такой присутствует в структуре оператора).

Пример:

case symb of

'A'..'Z', 'a'..'z' : Write('Это буква');

'0'..'9' : Write('Это цифра');

'+', '-', '*', '/' : Write('Это оператор');

else Write('Это спецсимвол')

end;

6 Операторы цикла

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

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

В итерационном цикле происходит проверка выполнения некоторого условия, и по результату этой проверки происходит либо повторение операторов в теле цикла, либо выход из цикла. Если условие проверяется перед выполнением блока операторов, то такой итерационный цикл является циклом с предусловием (цикл "пока"), а если проверка реализуется после выполнения тела цикла, то это цикл с постусловием (цикл "до").

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

6.1 Цикл с параметром

Синтаксис:

for переменная := значение 1 to значение 2 do оператор

или

for переменная := значение 1 downto значение 2 do оператор

Оператор for передает управление оператору, находящемуся после слова do, по одному разу для каждого значения в диапазоне от значения 1 до значения 2.

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

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

Как и при использовании условного оператора, необходимо помнить, что синтаксис языка разрешает запись только одного оператора после ключевого слова do, поэтому, если в цикле нужно выполнить выполнить группу операторов, обязательно надо заключить их в операторные скобки begin ... end.

Пример 1. Квадраты чисел от 2-х до 15-и.

for i:=2 to 15 do WriteLn(i*i);

Пример 2. Латинский алфавит из заглавных букв.

for symb:='A' to 'Z' do Writeln(symb);

Пример 3. Использование цикла с downto.

for k:=20 downto 1 do WriteLn(k);

Пример 4. Использование составного оператора.

for arg:=1 to 8 do

begin

z:=4*arg+2;

WriteLn('f(',arg,')=',z);

end;

6.2 Итерационные циклы с условием

http://tvd-home.ru/images/prog/p9_1_1.gif

а) Итерационные циклы с предусловием

Синтаксис:

while выражение do оператор

Оператор после do будет выполняться, пока логическое выражение является истинным (принимает значение True).

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

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

Пример.

eps:=0.0001;

while num > eps do num:=num/2;

б) Итерационные циклы с постусловием

Синтаксис:

repeat

оператор;

until выражение

Оператор между ключевыми словами repeat и until повторяются, пока логическое выражение является ложным (False). Как только логическое выражение принимает значение True (истина), происходит выход из цикла.

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

Пример.

repeat

WriteLn('Введите отрицательное число');

ReadLn(x);

until x<0;

6.3 Операторы завершения цикла

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

В версии Турбо Паскаль 7.0 определены стандартные процедуры:

Break

Continue

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

Процедура Continue обеспечивает переход к началу новой итерации цикла.

7 Пример разработки программы на языке Паскаль

Рассмотрим решение следующей задачи: определение параметров движения тела (определить расстояние, пройденное физическим телом за время t, если тело движется с постоянным ускорением а и имеет в начальный момент времени скорость V0).

7.1 Блок-схема

курсач.png

7.2 Текст программы

var

V0, a, t, s : real;

begin

writeln('***************************************************************');

writeln('Определить расстояние, пройденное физическим телом за время t,');

writeln(' если тело движется с постоянным ускорением а');

writeln(' и имеет в начальный момент времени скорость V0');

writeln('***************************************************************');

repeat

writeln('Введите скорость в начальный момент времени V0, м/с');

write('->');

readln(v0);

until V0 > 0;

repeat

writeln('Введите время t, сек.');

write('->');

readln(t);

until t > 0;

repeat

writeln('Введите постоянное ускорение a, м/с^2');

write('->');

readln(a);

until a > 0;

s := V0 * t + (a * sqr(t) / 2);

writeln('***************************************************************');

writeln('Ответ: за время ', t, ' сек. точка при постоянном ускорении ', a,

' м/с^2 и начальной скорости ' , V0,

' м/с пройдет расстояние: ', s, ' м');

readln;

end.

7.3 Пошаговая работа программы

1) Приглашение к вводу значения скорости

2) Ввод значения скорости

3) Приглашение к вводу значения времени

4) Ввод значения времени

5) Приглашение к вводу значения ускорения

6) Ввод значения ускорения

7) Результат

8) Попытка ввода отрицательных и нулевых значений для физических величин

ЗАКЛЮЧЕНИЕ

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

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

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

Средства используемой среды PascalABC.NET позволяют осуществить достаточно полный контроль правильности использования данных различных типов и программных объектов, как на этапе трансляции программы, так и на этапе ее выполнения.

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

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

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

СПИСОК ЛИТЕРАТУРЫ

    1. Абрамян М.Э., Михалкович С.С. Основы программирования на языке Паскаль: Скалярные типы данных, управляющие операторы, процедуры и функции. Ростов-на-Дону: ООО «ЦВВР», 2004. 198 с.
    2. Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. М.: Наука, 1988. 317 с.
    3. Бежанова М.М. Практическое программирование: структуры данных и алгоритмы: учеб. для вузов. М.: Логос, 2001. 223 с.
    4. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. Харьков: Фолио, Ростов н/Д: Феникс, 1997. 309 с.
    5. Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание программ. М.: Мир, 1981. 425 с.
    6. Вирт Н. Алгоритмы и структуры данных. М.: Мир, 1991. 358 с.
    7. Вольфенгаген В.Э. Конструкции языков программирования. Приёмы описания. М.: Центр ЮрИнфоР, 2013. 268 с.
    8. Грогоно П. Программирование на языке Паскаль. М.: Мир, 1982. 167 с.
    9. Емелина Е.И. Основы программирования на языке Паскаль. М.: Финансы и статистика, 1997. 208 с.
    10. Касаткин В. Н. Информация. Алгоритмы. ЭВМ. М.: Просвещение, 2001. 199 с.
    11. Опалёва Д.А. Языки программирования и методы трансляции. СПб: БХВ-Петербург, 2004. 480 с. 
    12. Пратт Т. Языки программирования: реализация и разработка СПб.: Питер, 1997. 704 с.
    13. Себеста Р.У. Основные концепции языков программирования 3-е изд. М.: Вильямс, 2012. 672 с.