Файл: Основы программирования на языке Pascal ( Машинный язык ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 82

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

.Стек

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

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

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

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

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

Верх

Низ

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

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

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

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

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

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

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

2.4. Дек

Деком называется линейный список, где изменения делаются на обоих концах списка. Дек похож на колоду карт, чем стек, он имеет больше возможностей. Дек бывает с «ограниченным входом» или «ограниченным выходом», но в этих случаях исключения происходят только на одном конце(см. рис. 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

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


Глава 3. Операции над списочными структурами

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

(a) <=> (a.nil)

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

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

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

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

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

Результатом какого либо действия функции 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 поле должен ставится указатель на следующую списочную ячейку.

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

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

(setq y '(a b c))

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

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

(setq x (cons 'd y))

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

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

(setq z '(a b c))

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

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

Разрушающую функцию необходимо использовать при работе с очень большими списками, чтобы не увеличивать расход памяти к примеру использовать 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....)

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

Заключение

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

Как показывает время, с момент создания жизни на земле, всё что человек не изобретал и о чём бы он не думал, всё доводиться до конца. Порой это имеет, может и не хорошие тенденции, допустим в плане программирования, бывают злоумышленники, которые хотят навредить чужим компьютерам, или взломать какую либо систему, что может поставить под угрозу работы, банков, больниц и многих организаций. Такие языки программирования как Паскаль, Бэйсик, Си, Ассемблер на сегодняшнее время являются самыми распространёнными, и ходовыми в промышленности программирования. Если бы люди создавшие эти языки, не написали их, то возможно, что человек так бы и не смог работать с ЭВМ. Написанная мною работа, рассказывает о том, как долго и упорно идёт развитие программирование языков. Языки программирования классифицируются на много подразделений, одни служат для создания архитектурных или математических программ. Другие же, для моделирования или создания 3-х мерной графики так называемой «3D». Создание 3D фильмов тоже вывело программирование на новый уровень, что позволило увеличить спросы на кинотеатры.

Говоря о 2-й главе списке, это очень тонкая вещь, которая так же как и программирование, не терпит ошибок. Всего лишь одна буква может изменить хоть действия. Как описывалось ранее, то существует множество видов списков таких как (Стек, дек, очередь, динамические списки, линейные списки, графы и т.д) их очень много. Каждый список отвечает за свою работу, выполнить чужую работу или не запрограммированную по смыслу он не сможет. Со времён их создания они играют важную роль в программировании. Жизненно важно научиться правильно работать с информацией, которую делает ЭВМ. Чтобы добиться хорошей работы, нужно правильно выстраивать списки, их поочередность и информацию касающуюся работы списка. Даже таблица выполненная в простейшей форме, может уже быть линейным списком. Допустим если усложнить процесс, то линейный список преобразуется в список с двухмерным массивом.