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

Основы программирования на языке Pascal ( ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ)

Содержание:

Введение

Несколько слов об истории языка Паскаль стал «наследником» Алгола. Алгоритмический язык Алгол был разработан в 1950-60-х годах. Его разработчиком был швейцарский ученый Николаус Вирт, собиравшийся использовать этот язык для обучения своих студентов методом разработки компиляторов. Время рождения языка Паскаль – начало 70-х годов. По сравнению с Алголом Паскаль проще и яснее. У него намного лучше возможности обработки данных и имеются встроенные процедуры ввода-вывода, которых не было в Алголе. Турбо Паскаль фирмы Borland является расширением стандарта языка и содержит, кроме того, интегрированную среду, намного ускоряющие и облегчающий процесс разработки программ. Этот программный продукт прошел 6 версий, прежде чем появился Турбо Паскаль 7.0. [2].

На нынешнем этапе развития общества и информатизации общественных институтов в РК наиболее актуальной и востребованной становится задача подготовки специалистов высокого уровня. Данные приоритеты обозначены в послании Президента РК “Новый Казахстан в новом мире” и конкретизированы и государственный программе развития образования в Республике Казахстан на 2005-2010г. [1].

Запуск программы. Будем считать, что компьютер для работы с Турбо Паскаль настроен так, как это сказано в приложении. Для начала работы с Турбо Паскаль удобнее всего поступить следующим образом:

Запустить Norton Commander;

Зайти в каталог, в котором планируется сохранять файлы с исходными текстами программы, а также вспомогательные файлы вашей программы;

Вызвать горячее меню Norton Commander (нажав клавишу F2);

Выбрать строку "Turbo Pascal 7.0";

Если окно редактирования не открылось, то открыть его через пункт меню "File" (нажать Alt+F, выбрать New). Если у вас уже есть некоторый файл с исходным текстом программы (файл с расширением pas), с которым вы хотите продолжить работу, то достаточно навести на него указатель Norton Commander и нажать Enter. В этом случае запустится Turbo Pascal и сразу откроется текст выбранной вами программы.

Окно среды разработчика. Основной экран интегрированной среды разработчика Turbo Pascal 7.0

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

1) Строка меню

2) Рабочая область

3) Строка состояния

Строка меню активизируется нажатием клавиши F10. В меню содержатся следующие разделы:

File. Позволяет выполнять все основные действия с файлами (создание, открытие, сохранение)

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

Search. Позволяет осуществлять поиск и замену фрагментов текста.

Run. Позволяет запускать программу, в том числе в пошаговом режиме.

Compile. Позволяет осуществлять компиляцию программы.

Debug. Содержит команды, облегчающие процесс поиска ошибок в программе.

Tools. Содержит некоторые дополнительные средства Турбо Паскаль.

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

Window. Позволяет выполнять все основные операции с окнами (открывать, закрывать, перемещать, изменять размер).

Help. Позволяет получить имеющуюся в системе справочную информацию.

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

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

Ctrl+F9 - запуск программы

Alt+F5 - просмотр пользовательского экрана

F2 - сохранение программы

F3 - открытие сохраненной программы

Alt+F3 - закрытие активного окна

Alt+X - выход из Турбо Паскаль

F1 - контекстная помощь

Ctrl+F1 - справка об операторе, на котором установлен курсор

Alt+Backspace - отмена последнего изменения

Ctrl+Y - удаление строки

Shift+стрелки - выделение блока текста

Ctrl+Insert - копирование выделенного блока в буфер

Shift+Insert - вставка из буфера [4].

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

С того дня когда была создана первая программируемая машина, программисты написали более 8,5 тысяч языков программирования, но на этом точку никто не ставит, число языков программирования только растёт. Существуют языки, которыми могут пользоваться исключительно люди которыми он был написан, но многие языки программирования становятся знаменитыми на весь мир. Профессионалы примерно используют от 2 до 5 языков программирования.

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

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

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

Первые языки программирования, были очень примитивны, они ни чем не отличались от обычных единиц и нулей, которые может разобрать компьютер. Использование таких языков программирования, было крайне не удобно, так как программисту приходилось знать машинный код каждой ЭВМ и умело расставить команды, для того чтобы компьютер смог воспроизвести его. Первым языком, который помог облегчить работу программистам был Ассемблер. В этом языке, то что раньше отображалось цифрами, отображалось символами. То есть числа просто на просто, заменили на символы, их на много проще запомнить и работать с ними. Язык Фортран был одним из первых языков программирования, его написали в 50-х годах, и до сих пор он является одним из самых распространённых языков программирования. Этот язык, больше использовали люди работа которых сводилась, к инженерии, строительству, решение задач по физике и многих других наук, где работа велась с вычислением.

Так же для работы с экономическими проблемами был создан язык, под названием Кобол. Был объявлен конкурс в 1968 г. на лучший язык программирования. Язык программирования названый Алгол-68 победил в этом конкурсе, но большой популярностью так он и пользовался. После чего, Никлаус Вирт, это создатель языка Паскаль, создал более простой и быстрый язык программирования. В данное время этот язык является одним из самых распространённых языков программирования.

Для школ был создан ещё более простой язык, с которым можно было вести целый диалог его назвали Бэйсик, на текущее время, его используют для ознакомления с языками программирования. Когда человек вступил на новую ступень программирования, это потребовало написание более сложных программ, которые могли бы управлять работой ЭВМ, что привело к написанию языка программирования Си, он появился в начале 70-х годов. Этот язык является самым универсальным языком программирования. Про язык Си можно сказать одно – он самый простой и универсальный язык для написания программ, программы которые написаны на этом языке по скорости ни чем не уступают программ написанным на языке программирования Ассемблер.

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

Часто используемые языки программирования: Денудационного (математического), Деривационного (аксиоматического), Операционного.

Когда описывается операционный подход исполняется языки программирования с помощью которых интерпретация воображаемых ЭВМ.

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

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

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

Цель курсовой работы заключается в расширении и систематизации теоретических знаний по теме: «Создание ссылочных типов в языке программирования Паскаль».

Задач исследования:

- изучение классификацию языков программирования;

- рассмотреть линейные списочные структуры;

- исследовать операции над списочными структурами;

- рассмотреть использование разрушающих функций.

1. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ПАСКАЛЬ

1.1 Структура программирования на языке Паскаль

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

Сейчас наиболее широко используются традиционные языки. В их число входят FORTRAN, Pascal, C/C++, Ada, Java и т. п. Это совокупность традиционных языков создает ошибочное впечатление о том, что на всех языках программирования почти одинаково [3].

Основные понятия. Как и любой алгоритм, являющийся, как вы помните, последовательностью инструкций, программа на языке Паскаль состоит из команд (операторов), записанных в определенном порядке и формате. Команды позволяют получать, сохранять и обрабатывать данные различных типов (например, целые числа, символы, строки символов, т.д.). Однако кроме команд в записи программы участвуют еще так называемые "служебные слова". Это и есть элементы формальности, организующие структуру программы. Их не так много, но их значение трудно переоценить. Служебные слова можно использовать только по своему прямому назначению. Переопределять их не разрешается. Вам уже известно, что основное назначение компьютера - облегчить человеку работу с большими объемами информации, поэтому подавляющее большинство программ построено по одному, довольно простому принципу: получение данных из внешнего мира (ввод), обработка их по соответствующему алгоритму, хранение необходимой информации и вывод во внешний (по отношению к компьютеру) мир полученных результатов [4].

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

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

Например, определения типов

Word = Array [1..20] of Char;

Man = Record

Name: Word;

Age: Integer

end;

Notebook = array [1..n] of Man;

Необходимо понимать, что связь "данные - управление" состоит не только и не столько в похожести правил их построения, сколько в ориентации структур управления на обработку структур данных. Оператор присваивания использует данные простых типов. Логические данные применяют для определения условий. Скалярные типы, определяемые программистом, используют для описания данных-индексов в массивах и селектора варианта в операторе выбора. Для обработки массивов удобно пользоваться оператором цикла с параметром, а для обработки файлов - операторами While и Repeat. Записи с вариантами естественно обрабатывать операторами варианта. Ссылочные (динамические) структуры естественным образом обрабатываются рекурсивно [5].

1.2 Типы данных

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

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

Стандартные типы:

логические

целые

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

символьный

строковый

адресный

файловые

Типы, определяемые программистом:

Простые:

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

интервальный

адресные

Составные:

массивы

строки

записи

множества

файлы

процедурные типы

объекты

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

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

К величинам логического типа применяются логические операции and, or, xor и not. Они описаны ниже. Для наглядности вместо значения false используется 0, а вместо true — 1.

Таблица 1

a

b

a and b

a or b

a xor b

not a

0

0

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0

Операция and - "логическое ‘И’", логическое умножение. Операция or - "логическое ‘ИЛИ’", логическое сложение. Операция xor - так называемое исключающее ‘ИЛИ’, или операция неравнозначности. Логическое отрицание not является унарной операцией. Кроме этого, величины логического типа можно сравнивать между собой с помощью операций отношения, перечисленных в таблице:

Таблица 2

Операция

Знак операции

больше

>

больше или равно

>=

меньше

<

меньше или равно

<=

равно

=

не равно

<>

Результат этих операций имеет логический тип.

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

Таблица 3

Тип

Название

Размер

Знак

Диапазон

integer

целое

2 байта

есть

-32768..32767(-215..215-1)

shortint

короткое целое

1 байта

есть

-128..127(-27..27-1)

byte

байт

1 байта

Нет

0..255(0..28-1)

word

слово

2 байта

Нет

0..65535(0..216-1)

lonight

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

4 байта

есть

-2147483648..2147483647(-231..231-1)

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

Таблица 4

Операции

Знак операции

сложение

+

вычитание

-

умножение

*

деление

div

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

mod

Кроме этого, к целым величинам можно применять поразрядные операции and, or, xor и not. При выполнении этих операций каждая величина представляется как совокупность двоичных разрядов. Действие выполняется над каждой парой соответствующих разрядов операндов. Например, результатом операции 3 and 2 будет 2, поскольку двоичное представление числа 3 - 11, числа 2 - 10. Для работы с целыми величинами предназначены также и операции сдвига влево shl и вправо shr. Слева от знака операции указывается, с какой величиной будет выполняться операция, а справа - на какое число двоичных разрядов требуется сдвинуть величину. Например, результатом операции 12 shr 2 будет значение 3, поскольку двоичное представление числа 12 — 1100.

Вещественные типы. Вещественные типы данных хранятся в памяти компьютера иначе, чем целые. Внутреннее представление вещественного числа состоит из двух частей - мантиссы и порядка, и каждая часть имеет знак. Например, число 0,087 представляется в виде 0,87*10-1, и в памяти хранится мантисса 87 и порядок -1 (для наглядности мы пренебрегли тем, что данные на самом деле представляются в двоичной системе счисления и несколько сложнее). Существует несколько вещественных типов, различающихся точностью и диапазоном представления данных. Точность числа определяется длиной мантиссы, а диапазон - длиной порядка.

Таблица 5

Тип

Название

Размер

Значащих цифр

Диапазон значения

real

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

6

11-12

2.9e-39..1.7e+38

single

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

4

7-8

1.5e-45..3.4e+38

double

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

8

15-16

5.0e-324..1.7e+308

extended

расширенный

10

19-20

3.4e-4932..1.1e+4923

comp

большое целое

8

19-20

-9.22e18..9.22e18(-263..263-1)

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

Стандартные функции. К вещественным величинам можно применять стандартные функции, перечисленные ниже:

Таблица 6

Имя

Описание

Результат

Пояснения

abc

модуль

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

|x| записывается abs(x)

arctan

арктангенс угла

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

arctg x записывается arctan(x)

cos

косинус угла

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

cos x записывается cos(x)

exp

экспонента

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

ex записывается exp(x)

frac

дробная часть аргумента

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

frac(3.1) даст в результате 0.1

int

целая часть аргумента

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

frac(3.1) даст в результате 3.0

ln

натуральный логарифм

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

logex записывается ln(x)

pi

значение числа п

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

3.1415926536

round

округление до целого

Целый

round(3.1) даст в результате 3

round(3.8) даст в результате 4

sin

синус угла

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

sin x записывается sin(x)

sqr

квадрат

Целый

x2 записывается sqr(x)

sqrt

квадратный корень

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

записывается sqrt(x)

trunc

целая часть аргумента

Целый

trunc(3.1) даст в результате 3

Символьный тип. Этот тип данных, обозначаемый ключевым словом char, служит для представления любого символа из набора допустимых символов. Под каждый символ отводится 1 байт. К символам можно применять операции отношения (<, <=, >,>=, =, <>), при этом сравниваются коды символов. Меньшим окажется символ, код которого меньше. Стандартных функций для работы с символами тоже немного:

Таблица 7

Имя

Описание

Результат

Пояснения

ord

порядковый номер символа

Целый

ord('b') даст в результате 98

ord('ю') даст в результате 238

chr

преобразование в символ

Символьный

chr(98) даст в результате 'b'

chr(238) даст в результате 'ю'

pred

предыдущий символ

Символьный

pred('b') даст в результате 'a'

succ

последующий символ

Символьный

pred('b') даст в результате 'a'

upcase

перевод в верхний регистр

Символьный

upcase('b') даст в результате 'B'

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

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

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

к любому порядковому типу могут быть применены стандартные функции Pred и Succ, которые возвращают предыдущее и последующее значения соответственно;

к любому порядковому типу могут быть применены стандартные функции Low и High, которые возвращают наименьшее и наибольшее значения величин данного типа [6].

1.3 Операторы языка

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

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

- оператор присваивания;

- обращение к процедуре;

- оператор безусловного перехода GOTO;

- пустой оператор.

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

X := Y;

Z := А + В;

Res := (I>0) and (I<100);

I := Sqr(J) + I*К;

Оператор безусловного перехода GOTO. Использование меток

Оператор GOTO позволяет изменить стандартный последовательный порядок выполнения операторов и перейти к выполнению заданного оператора. Оператор, на который происходит переход, должен быть помечен меткой. Эта же метка должна быть указана и в операторе GOTO. Метки, используемые в Turbo Pascal, могут быть двух типов:

- целым числом в пределах от 0 до 9999;

- обычным идентификатором.

Все используемые метки должны быть перечислены в разделе объявления меток, начинающемся зарезервированным словом label, например: label 1, 2, Metka;

Одной меткой можно пометить только один оператор. Метка от помеченного оператора отделяется двоеточием. Использовать оператор GOTO следует крайне осторожно. Широкое его применение без особых на то оснований ухудшает понимание логики работы программы. Безусловный переход можно осуществлять далеко не из каждого места программы и не в любое место программы. Так, нельзя с помощью этого оператора перейти из основной программы в подпрограмму или выйти из подпрограммы, не рекомендуется осуществлять переход внутрь структурированного оператора, т. к. он может дать неправильный результат, и т. д.

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

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

К структурированным операторам относятся:

- составной оператор;

- условный оператор IF;

- условный оператор CASE;

- оператор цикла REPEAT;

- оператор цикла WHILE;

- оператор цикла FOR;

- оператор над записями WITH.

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

begin

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

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

. . .

<оператор N>

end;

Он может потребоваться в тех случаях, когда в соответствии с правилами построения конструкций языка можно использовать ОДИН оператор, а выполнить нужно несколько действий. В такой составной оператор входит ряд операторов, выполняющих требуемые действия. В дальнейшем везде, где будет указываться, что можно использовать один оператор, им может быть и составной оператор. Отдельные операторы внутри составного оператора отделяются друг от друга точкой с. Так как завершающее составной оператор слово end не является отдельным предложением, то перед ним точку с запятой можно не ставить, в противном случае компилятор будет считать, что перед словом end стоит пустой оператор. Можно считать, что и само тело программы, т. к. оно заключено в операторные скобки begin и end, тоже является составным оператором.

Условный оператор IF. Оператор IF реализует алгоритмическую конструкцию РАЗВИЛКА и изменяет порядок выполнения операторов в зависимости от истинности или ложности некоторого условия. Существует два варианта оператора:

if S then A

else В; {полная развилка}

и

if S then А; {укороченная развилка}

В этих операторах:

S - Некоторое логическое выражение, истинность которого проверяется;

A - Оператор, который выполняется, если выражение S истинно;

B - Оператор, который выполняется, если выражение S ложно.

Так как условный оператор IF является единым предложением, ни перед then, ни перед else точку с запятой ставить нельзя. Примеры использования оператора:

if X < 0 then X := -Y;

if X < 1.5 then Z := X + Y else Z := 1.5;

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

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

Оператор цикла FOR. Оператор цикла FOR организует выполнение одного оператора заранее известное число раз. Существует два варианта оператора:

for <переменная цикла>:=<начальное значение> to <конечное значение> do <оператор>;

for <переменная цикла>:=<начальное значение> downto <конечное значение> do <оператор>;

В этих операторах:

<переменная цикла> - переменная порядкового типа;

<начальное значение> - выражение (порядкового типа), определяющее начальное значение переменной цикла;

<конечное значение> - выражение (порядкового типа), определяющее конечное значение переменной цикла (при этом значении тело цикла (т е <оператор>) выполняется последний раз);

<оператор> - выполняемый оператор.

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

Цикл действует таким образом:

- Сначала вычисляются и запоминаются начальное и конечное значения.

- Далее переменной цикла присваивается начальное значение.

- Затем значение переменной цикла сравнивается с конечным значением.

Причём, пока параметр цикла меньше или равен конечному значению (в первом варианте оператора) или больше или равен конечному значению (во втором варианте), выполняется очередная итерация; в противном случае происходит выход из цикла. Выполнение очередной итерации включает в себя сначала выполнение <оператора>, а затем

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

Естественно, что, если в первом варианте <начальное значение> больше чем

<конечное значение> или во втором варианте меньше чем <конечное значение>,

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

Использование стандартных процедур Break и Continue в операторах циклов REPEAT, WHILE и FOR. В версии 7.0 в циклах REPEAT, WHILE и FOR можно использовать две стандартные процедуры

- Break и Continue. Процедура Break позволяет досрочно выйти из цикла, не дожидаясь выполнения условия выхода. Процедура Continue позволяет начать новую итерацию цикла, даже если предыдущая не завершена [7].

2. КЛАССИФИКАЦИЯ КОМПЬЮТЕРНЫХ ИГР

Виды компьютерных игр

Компьютерные и видеоигры могут быть классифицированы по двум признакам: жанр и количество игроков. Классификация игр по жанру. Четкая классификация затруднена из-за того, что подчас трудно отнести игру к какому-нибудь конкретному жанру. Игра может представлять собой как смешение существующих жанров, так и не относиться ни к одному из них. Несмотря на это, в ходе развития компьютерных игр сложилась следующая классификация. [8].

3D Shooter (3D-шутеры, "бродилки"). Название произошло от понятия 3D - 3 dimensions (три измерения) и shooter (англ. «стрелок»). Основной принцип состоит в изображении виртуального пространства и предметов посредством игровой программы, исполняемой на компьютере. При этом игрок может воздействовать на виртуальную игровую среду. Применяется для обозначения всех видов компьютерных игр, содержащих элементы боя в виртуальном трехмерном пространстве. В основном используется техника «шутер от первого лица» - при этом изображение на экране монитора компьютера имитирует вид из глаз игрока. С точки зрения организации игры различаются Singleplayer и Multiplayer - игра в одиночку против компьютера и игра с другими игроками.

Примеры: Doom, Quake, Counter-strike, Half-life, Unreal, Tomb Raider

Arcade (аркада). Игры, в которых игроку приходится действовать быстро, полагаясь в первую очередь на свои рефлексы и реакцию. Аркады характеризуются развитой системой бонусов: начисление очков, постепенно открываемые элементы игры и т.д. Термин «аркада» по отношению к компьютерным играм возник во времена игровых автоматов, которые устанавливались в торговых галереях (arcades). Игры на них были простыми в освоении (чтобы привлечь побольше играющих). Впоследствии эти игры перекочевали в игровые приставки и до сих пор являются основным жанром на них.

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

Примеры: Mortal Combat, Street Fighter, Tekken

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

Примеры: серия Need for Speed, Descent III, Aviator

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

пошаговые стратегические игры (Turn-Based Strategy, TBS). Игроки поочерёдно делают ходы, и каждому игроку отводится неограниченное или ограниченное (в зависимости от типа и сложности игры) время на свой ход.

стратегические игры в реальном времени (Real Time Strategy, RTS). Все игроки выполняют свои действия одновременно, и ход времени не прерывается.

Примеры: WarCraft, StarCraft, Dune

Sport (спортивные). Как и следует из названия - имитация какой-либо спортивной игры, например футбола.

Примеры: FIFA, NBA, Tennis

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

Примеры: Space Quest; Myst, Мор. Утопия

Puzzle (головоломки, логические)

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

Примеры: Сапёр (Minesweeper); Sokoban.

Классификация игр по количеству игроков.

Одиночные (single player). Рассчитаны на игру в одиночку, против компьютера.

Многопользовательские (multiplayer). Рассчитаны на игру нескольких человек (обычно до 32) по локальной сети, модему или Интернету.

Массовые (MMO, Massively Multiplayer Onine). Массовые игры по Интернету. Наиболее часто встречающиеся жанры - настольные и ролевые игры (т.н. MMORPG, или Massively Multiplayer Online RPG). Среди них различают также браузерные игры (игры, не требующие установки какого-либо клиента), а также текстовые онлайновые игры – жанр MUD.

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

Для языков программирования, которые пользуются большим спросом создаются стандарты. Эти организации проводят, проверки, обновления и публикации специальных и формальных видов языка. [2, с.27]

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

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

В данный момент развитие берёт проблемно – ориентированные и визуальные языки программирования.

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

Машинный язык

У каждого компьютера имеется свой машинный язык, который является индивидуальным, машинные языки являются командными. Но бывают такие виды компьютеров такие как «IMB, 370, EC ЭВМ» имеют единый язык для компьютеров у которых мощность отличается друг от друга. [14, с.27]

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

На самом компилируемом языке специальная программа под названием «компилятор» преобразует действие под машинный код, после чего записывается в исполнимый модуль, так же он может быть запущен совершенно отдельно. Одним словом, компилятор осуществляет перевод с языка высокого уровня на язык который распознаёт двоичный процессор.

Если же программа написана на языке под названием «интерпретатор», то перевод осуществлён не будет, а сразу перейдёт к выполнению. Но при этом без запуска интерпретатора программу нельзя будет запустить. Сам процессор компьютера, по сути и есть интерпретатор машинного кода.

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

Само разделение языков на «Компилируемые» и «Интерпретируемые» называется условным. Например для языка «Паскаль» будет возможно написать интерпретатор, так как язык считает традиционным в направлении программирования. Современные интерпретаторы например не посредственно не выполняют условия языка, происходит компиляция в промежуточное время. [1, с.7]

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

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

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

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

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

Интерпретируемые программы по работоспособности уступают программам прошедшим компилятор, да и без дополнительных программ они могут вообще не работать. [5, с.2]

Такие языки как: Java и С#, они стоят между интерпретируемым и компилируемым языком. То есть эти языки компилируются не в машинный язык, а в независимый машинный код низкого уровня (байт-код). После (байт-код ) чего он проходит виртуальную машину. Для того чтобы получить байт-код нужно пройти интерпретацию, хотя некоторые его части могут быть интерпретированы в машинный код сразу во время выполнения работы для её ускорения, это всё происходит по теории компиляции «на лету».

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

Машинно-ориентированные языки

Машинно-ориентированные языки – это язык у которого набор операторов будет работать в зависимости от того какова производительность компьютера.

Языки программирования, рассчитаны на использование всех символов ASCII, это необходимо для написания любого языка. Управляющие символы могут использоваться в ограниченном порядке, имеются исключения для следующих символов символ CR, для возврата «Каретки», горизонтальная табуляция HT, перевод строки CF.

Языка возникшие в эпоху 6-битных символов очень ограниченный набор символов. Так называемый алфавит Фортрана имеет всего 49 символов. Исключение имеет лишь язык APL, в нём имеется множество символов специализирующих какую либо функцию.

От реализации зависит использование кода на языках «Юникод», KOI8-R, это разрешается только в комментариях, строковых константах, символьных. Во время СССР был написан язык, в котором все символы состояли из русских букв, но особого признания такой язык не получил, единственное исключение для встроенного языка 1C:Предприятие.

Так как проекты по написанию языков сдерживаются международным стандартом, этим и задерживается число используемых символов. Если бы каждый писал свой код, на своём языке было бы очень сложно писать программы. [6, с.27]

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

Машинно-ориентированные языки подразделяются на классы.

Машинно-независимые языки

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

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

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

.Языки символического кодирования

Язык символического кодирования, так же относится к командным языкам. Коды представляют собой либо двоичную либо восьмеричную систему исчисления, эти коды используются для написания программ. Индикаторы заменены на коды, что помогает и облегчает написание программ, да и после легко запомнить смысл операции. [7, с.52]

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

.Автокоды

Автокод – это язык, который включает в себя все возможности программирования «языка символического кодирования», это выполняется путём введения макрокоманд - это уже называется автокод.

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

  1. Расстановка
  2. Генерирование.

Содержание «Остов» так называемые серии команд, исполняют функцию требуемую макрокомандой. Макрокоманды необходимы для передачи параметров, которые путём подстановки в «остов», преобразуют её в программу для ЭВМ.

Специальные программы помогают анализировать макрокоманду, эти программы выявляют последовательность команд и выполняют работу по их реализации. [22, с.27]

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

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

Макрос

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

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

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

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

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

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

Одно из предназначений «Макроса» это, то что он выполняет функцию сокращения исходной программы. Компонент отвечающий за работоспособность программы называется макропроцессором.

Макрос может работать как с программами так и с данными.

Диалоговые языки

С появлением новых как технических так и механических возможностей, программистам была поставлена задача создать программу которая обеспечила бы, оперативное взаимодействие между человеком и ЭВМ, позднее было дано название «Диалоговые языки».

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

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

Для того чтобы произвести взаимодействие с пользователем, нужно было сохранение в памяти ЭМВ копии программы даже уже после того как была получена программа. После изменений в программе с помощью диалоговых окон и специальных таблиц, устанавливало взаимосвязь с объектом программы. Это и помогало выполнять изменения в корне программы. [17, с.27]

Допустим одним из диалоговых языков является «Бэйсик».

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

Непроцедурные языки

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

Всё это позволяет чётко описывать как задачу так и все действия по её решению, тем самым таблицы получают функцию определения, и после чего видно какие действия могут быть выполнены в первую очередь, перед тем как преступить к выполнению. [23, с.27]

Компилятором является код который переводит всё в машинный язык. Суть компилятора заключается в том, что он читает язык программирования и переводит его на понятный машине язык. Строение программы выполняет компилятор. Если программировать на языке Турбо Бэйсик,то нужно следить за периодом прогона и периодом компилирования. Чем интерпретируемые программы, компилируемые работают от 4 до 10 раз быстрее. А если вы хорошо постараетесь то работоспособность программ увеличится в 100 раз. А так как большинство программистов работают лишь над вознёй с файлами, то не могут продемонстрировать работоспособность программы.

Табличные методы могут осваиваться без всякого труда вне зависимости от того по какой профессии вы работаете. [12, с.27]

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

Универсальные языки

Создание универсальных языков, было необходимо для того, чтобы ими могли пользоваться не только программисты, но и широкий круг пользователей, а конкретно для коммерческих, научных и т.д. Первый универсальный язык, был написано фирмой IBM, позднее он получил название Пл/1. После него был написан язык Алгол-68, он является вторым по мощности. Этот язык позволяет работать как с числами, так и с плавающей запятой. В языке Пл/1 более развитая система которая без труда управляет форматами, что позволяет работать с полями переменной длины, с данными структуры, а так же для использования каналов связи. [3, с.27]

Компилирование в Пл/1 происходит в автоматическом режиме. В этом языке собраны многие возможности, которые есть и в таких программах как Алгола, Кобола, Фортрана, но в отличии от них в Пл/1 можно выполнить статистическое распределение памяти.

Динамическая память – это оперативная память компьютера, предоставляемая программе при ее работе. Размер динамической памяти может изменяться, потому как динамическая память может обрабатывать массивы данных больших размеров. Динамические, переменные вызываются по адресу. Чтобы вызвать ячейку, обращение идёт по имени. Переменные устанавливаются комприлятором в памяти и подставляют свои адреса ячеек и команды. С помощью указателя осуществляется обращение к динамическим переменным. Указатель – это переменная, которая в качестве своего значения содержит адрес байта памяти. [25, с.27]

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

Выделить память под динамическую переменную;

Инициализировать указатель;

Освободить память после использования динамической переменной. (см. рис. 1).

Рис.1.Освобождение памяти

Линейные списки относятся к динамическим структурам данных. Объекты данных могут обладать динамической структурой, если его размер изменяется в процессе выполнения программы. [24, с.36]

Операции которые мы можем делать с линейными списками:

  1. Получение доступа к списку, для анализа и изменения.
  2. Для включения нового узла.
  3. Исключение какого либо узла.
  4. Возможность объединения списка.
  5. Разбиение линейных списков.
  6. Возможность копировать линейные списки.
  7. Определение узлов в списке.
  8. Сортировка узлов в каком либо порядке.
  9. Нахождение какого либо узла.

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

Списком - называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом (односвязный или однонаправленный список) и, возможно, с предыдущим (двусвязный или двунаправленный список). Если последний элемент связать указателем с первым, получится кольцевой список.

Все элементы списка хранят:

  1. Хранит информацию любого вида.
  2. Указывает следующий элемент списка.

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

Рис.2.Данные динамической структуры

Однонаправленный и двунаправленный список

Этот метод заключается в том, что его изменение может проходит на любом промежутке списка. [20, с.27]

Направление однонаправленного списка отличает от двунаправленного в том, их различие только в связи. Получается, что в однонаправленном изменения в списке можно производить только в одном направлении, а уже в двунаправленном в любом порядке. [15, с.27]

Первый рисунок является однонаправленным, а второй двунаправленным (см. рис 3-4).

5

4

2

1

3

Рис.3. Двунаправленный список

Рис.4. Двунаправленный список

5

3

1

2

4

В двунаправленном списке, как ниже показано на рисунке, осуществляется удаление и добавление элемента. Когда добавляется новый элемент между 2 и 3 , связь которая была теряется в участке 3 и 4 (см. рис 5).

4

N

5

3

1

2

Рис.5.Связь между 3 и 4

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

Очередь

Существуют списки под названием «Очередь» - это так называемые линейные списки, где включение может происходить только одном конце списков, но исключения которые возможны производятся на другом конце. «Очередь» - это такой тип данных, где данные могут располагаться только в порядке поступления, а данные которые поступили в список первыми будут проходить обработку в первую очередь (см. рис. 6).

Рис.6.Очередеь

Начало

Второй

Третий

Конец

Исключить

Включить

Само правило этого списка, подобно живой очереди, первым стоял, первым будешь обслужен, а уже при добавлении будет увеличиться число в списке. У любой очереди имеется как голова, так и хвост. Те элементы, которые добавляются в список оказываются в хвосте, а объект удаляемый из этой очереди находится в голове списка. [18, с.27]

Новый элемент в очереди, может добавляться только с одной стороны, а удаление его будет происходить на другом конце. В подобных случаях может быть только 4 элемента (см. рис 7).

Рис.7.Новый элемент очереди

Начало

Второй

Третий

Конец

Новый

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

Стек

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

Стек – временная память, которая занимает часть ОЗУ, памяти компьютера, то что использует микропроцессор. При таком режиме работы, работает функция «запоминания байтов». Принцип этого списка, последним войдя, первым уйдёшь. Данные списки проще всего организовать, и быстрота операций на много лучше. Эти функции включаются при помощи «Регистра», если же на любой части этого стека, будет повреждение то это приведёт к неработоспособности списка (см. рис 8).

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

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

Второй сверху

Включить или исключить

Верх

Низ

Третий сверху

Рис.8. Регистра

Сами стеки очень часто могут встречаться на практике, например когда мы стоим какой либо список состоящий из каких либо событий, и выстраиваем порядок их обработки, после обработки мы возвращаемся к следующей обработке данных. [8, с.27]

Тем самым мы подчищаем список, где уже видно нужные и не нужные объекты. Но это можно делать как в «стеке» так в «очереди». Допустим стек работает как мозг, в нём удобнее производить анализ, то есть когда решается какая либо проблема, мы просто её удаляем, то же самое и выполняет «стек».

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

Дек

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

Рис.9. Стек, представленный в виде железнодорожного разъезда

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

Рис.10.Дек с «ограниченным входом»

Дек это так называемый двунаправленный список.

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

1

2

3

4

N

N

Если система обнаруживает беспорядок, то она выполнит операцию по установлению порядка. [16, с.27]

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

Если же имеются элементы которые не были оговорены, то это уже будет двусторонний связной список (см. рис. 11).

Элемент 5

Элемент 4

Элемент 3

Элемент 2

Элемент 1

L0 + 5c:

L0 + 4c:

L0 + 3c:

L0 + 2c:

L0 + c:

Элемент 5

Элемент 4

Элемент 3

Элемент 2

Элемент 1

Л

E

D

C

B

Л:

E:

D:

C:

B:

Последовательное распределение

Адрес

Содержимое

Связанное распределение

Адрес

Содержимое

Рис.11. Двусторонний связной список

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

Какую либо связь можно указать стрелкам, так как без разницы какую клетку наймёт клиент (см. рис. 12).

Рис.12. Элементы

Элемент 1

Элемент 2

Элемент 3

Элемент 4

Элемент 5

FIRST

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

Операции над списочными структурами

В машинной памяти списки представляются в виде комбинации каким

либо образом связанных между собой или с полями в которых есть два поля (см рис 13).

Рис.13.Комбинации

Количество элементов может ссылаться на другой какой либо элемент или произвольное. Имя может иметь значение как и списочный элемент. Все имена которые хранит программа, находятся в постоянной работе, которые строены в таблицу программы. Так же они могут и не иметь имён, но в этом случае они будут работать на ограниченном промежутке. [21, с.27]

Структуры памяти

Списки – это такая совокупность атомов, что позволяет связывать специальные элементы, то есть в информационной науке это называется cons-ячейки или списочные ячейки. [4, с.27]

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

Рис.14.Ячейки указывают на атомы

Бывает, что обе ячейки указывают на атомы, это записывается как (см. рис 14).

Представления списков через списочные ячейки

Содержание одного атома, записывается следующим образом (см.рис 15):

Рис.15. Содержание одного атома

На конце списка указывается NIL

Вместо nil пишут - \.

Список получается как операция (cons 'a nil)

Список из двух элементов (b a)

Правое поле указывается на cdr хвост списка.

Левое должно поле, на саr голову списка.

Соответствием списка занимается списочная ячейка.

Если в списке нет ни одного уровня (a (b c) d), тогда каждому элементу списка должна соответствовать списочная ячейка. Причем саr это поле второй списочной ячейки может указывать на вложенный список.

Представления списков через точечную пару

Абсолютно любой список возможно записать в точечной нотации.

(a) <=> (a.nil)

(a b c) <=> (a.(b.(c.nil)))

Выражение которое представленно в точечной нотации нужно привести к списочной в том случае, если cdr поле является списком.

(a.(b c)) <=> (a b c)

(a.(b.c)) <=> (a b.c)

Списочная ячейка и базовые функции

Результатом какого либо действия функции car может быть значение левого поля первой списочных ячеек

* (сar '(a (b c) d)

a

Результатом любого действия функции cdr будет значение либо правого поля либо первой списочной ячейки.

* (сdr '(a (b c) d)

((b c) d)

CONS создает новые списочные ячейки, car поле которых указывает на первый элемент, а уже cdr на второй (cons 'x '(a b c))

или

LIST * (list 'a '(b c)) (a (b c))

Такие списки представляются в этом виде.

Это всё получается следующим образом:

1. Создается списочная ячейка где для каждого аргумента функции.

2. В car поле должен ставится указатель на соответствующий элемент.

3. В cdr поле должен ставится указатель на следующую списочную ячейку.

Переменные и списки

Рассмотрим данное выражение:

(setq y '(a b c))

Где переменная Y должна иметь значение '(a b c)

Использование данной переменной , в функции обеспечивает доступ к структуре.

(setq x (cons 'd y))

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

Если в функции идёт присвоение списков задается явно, то под него должны отводится новые списочные ячейки т.е.

(setq z '(a b c))

Допустим переменная z будет иметь значение '(a b c).

Использование разрушающих функций

Разрушающую функцию необходимо использовать при работе с очень большими списками, чтобы не увеличивать расход памяти к примеру использовать nconc вместо append. [11, с.27]

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

Так же можно получить бесконечные списки:

* (setq v1 '(a b c))

(a b c)

* (setq v2 v1)

(a b c)

* (setq v2 (nconc v1 v2))

(a b c a b c....)

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

3. ИГРЫ НА ЯЗЫКЕ ПАСКАЛЬ

3.1 Угадай число

Задача:

Отгадать целое число, которое "загадал" компьютер в определенном диапазоне.

Описание переменных:

x – число, "загаданное" компьютером;

y – Очередное число, вводимое пользователем.

Алгоритм решения задачи:

Программа генерирует псевдослучайное число, которое записывается в переменную x. Пока число x не совпадет с числом y, пользователю будет предлагаться ввести очередное число. При этом, если x > y, то на экран будет выдаваться сообщение "Ваше число меньше задуманного". Иначе будет проверяться условие x < y. При его положительном значении появится сообщение "Ваше число больше задуманного", иначе сообщение "Вы угадали".

Не трудно понять, что если y не больше и не меньше x, то значит оно равно x. В таком случае логическое выражение при while вернет false, и цикл прервется.

Программа на языке Паскаль:

Program Ugaday_chislo;

label 1,2;

var x,y,k: ineger;

begin

writeln ('Компьютер задумал число от 1 до 10, угадай это число');

writeln ('У тебя есть 5 попыток');

k:=5; randomize; x:=random (10);

2: writeln ('Введи число от одного до десяти');

readln (y); if k<>0 then begin

if x=y then begin writeln ('Вы угадали!');

goto 1;

end

else begin if y>x then

writeln ('Ваше число больше задуманного')

else writeln ('Ваше число меньше задуманного');

k:=k-1;

goto 2;

end

else begin writeln ('Число попыток истекло');

goto 1;

end;

1:readln;

end.

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

3.2 Тир

Программа “Тир” представляет с собой игровую программу. Мишень в “тире” имеет круглую форму. Программа выводит приглашение: «Добро пожаловать в тир». После этого пользователю предлагается сделать выстрел, т. е. ввести значимое x и y. Выводит сообщение: «Ваш выстрел, введи значимое x, y». Если это значение удовлетворяет условию x2+y2<=R2, то пользователь попадет в мишень, иначе нет. При промахе программа выводит сообщение о промахе: «Промах, попробуйте еще раз» и предлагает пользователю сделать выстрел еще раз. Программа на языке Pascal:

Program Tir;

Label 1,2;

Var R,x,y:integer;

Begin

Writeln (‘Добро пожаловать в тир’);

2:writeln (‘Ваш выстрел, введи значимое x, y’);

Readln(x, y); R:=10;

If SQR(x) + SQR(y)<R*R then begin

Writeln (‘Попадание, вы выиграли’);

Goto1; end Else begin writeln (‘Промах? Попробуй еще раз’);

Goto 2; end; 1Readln; End.

ЗАКЛЮЧЕНИЕ

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

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

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

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

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

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

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

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

Учебная литература

  1. Алексеев Е.Г., Богатырев С.Д. Информатика. Мультимедийный электронный учебник.2012
  2. Альфред Ахо, Джон Хопкрофт, Джеффри Ульман, «Структуры данных и алгоритмы» - Москва: Диалектика-Вильямс, 2013, С. 56-289
  3. Б.В. Керниган, Д. Ритчи, А. Фьюэр 1984г. «Язык программирования Си».
  4. Бабичев А. В., «Распознавание и спецификация структур данных» - Москва: Ленанд, 2013, С. 100-112
  5. Бакнелл Дж., «Фундаментальные алгоритмы и структуры данных в Delphi. Библиотека программиста» - Санкт Петербург: Питер, 2012, С. 313-332
  6. Брайан Керниган, Деннис Ритчи , «Язык программирования C» - Москва: Вильямс, 2012, С. 130-143
  7. Бьярн Страуструп, «Программирование. Принципы и практика использования C++» - Москва: Вильямс, 2014, С. 745-755
  8. Виноград Т. Программа, понимающая естественный язык. М.: №гр, IS76, 294 с.
  9. Джулиан Бакнелл, «Фундаментальные алгоритмы и структуры данных в Delphi» - Санкт Петербург: Питер, 2012, С. 443-460
  10. Костюкова Н. И., «Графы и их применение. Комбинаторные алгоритмы для программистов» - Санкт Петербург: СПб:Питер, 2013, С. 113-137
  11. Костюкова Н. И., «Графы и их применение. Комбинаторные алгоритмы для программистов» - Санкт Петербург: СПб:Питер, 2014, С. 44-67
  12. Костюкова Н. И., «Программирование на C++» - Санкт Петербург: СПб:Питер, 2013, С. 212-223
  13. Магда Ю. 2014г. Использование ассемблера для оптимизации программ на C++.
  14. Малютин Э.А., Малютина Л.В., «Языки программирования».
  15. Никлаус Вирт, «Алгоритмы и структуры данных» - Москва: ДМК Пресс, 2014, С. 146-221
  16. Никлаус Вирт, «Алгоритмы и структуры данных» - Москва: ДМК Пресс, 2014, С. 146-221
  17. Окулов С. М., «Графы и алгоритмы. Структуры данных. Модели вычислений» - Москва: ИНФРА-М ,2013,С. 10-135.
  18. П. Терренс; «Языки программирования: разработка и реализация».
  19. Павловская Т.А., «Программирование на языке высокого уровня» - Санкт Петербург: Питер, 2013, С. 134-149
  20. Роберт Лафоре «Структуры данных и алгоритмы в Java. Классика Computers Science. 2-е изд.» - Санкт Петербург: Питер, 2014, С. 80-112
  21. С. В. Глушаков, Т. В. Дуравкина, «Структуры и алгоритмы обработки данных: объектно-ориентированный подход и реализация на С++» - Санкт Петербург: АСТ, 2013, С. 200-286
  22. С. Окулов, «Основы программирования» - Москва: Бином. Лаборатория знаний, 2012, С. 174-185
  23. Т.А. Павловская 1982 г. «C/C++ Программирование на языке высокого уровня».
  24. Финогенов К., «Структуры данных и проектирование программ» - Москва: Бином. Лаборатория знаний, 2012, С. 600-739
  25. Янг С. 1986 «Алгоритмические языки реального времени».

Электронная литература

  1. Динамические структуры данных на C++ [Электронный ресурс].
  2. URL: http://khpi-iip.mipk.kharkiv.edu/library/datastr/book_sod/kgsu/oglav.html

(дата обращения:05.12.2014).

  1. Динамические структуры данных : Списки
  2. [Электронный ресурс].
  3. URL: http://comp-science.hut.ru/Progr_new/release_01/cpp8_1.html
  4. (дата обращения: 08.12.2014).
  5. Программирование на языке Си [Электронный ресурс].
  6. URL: http://wm-help.net/books-online/book/93964/93964.html
  7. (дата обращения: 15.12.2014).739