Константы, переменные и ячейки памяти — КиберПедия 

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

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

Константы, переменные и ячейки памяти

2021-10-05 31
Константы, переменные и ячейки памяти 0.00 из 5.00 0 оценок
Заказать работу

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

В состав такого автомата входят:

память, состоящая из отдельных ячеек;

считывающая/записывающая головка;

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

В простейшем случае константой является любое арифметическое число. Например, 12, 0.78, 0, –45.33 и т. д. (Константами могут быть такие строки символов, структуры данных и др.).

                                                                                                   


                                                                                                                     Таблица 1

Название Элемент Комментарий
Процесс Вычислительное действие или последовательность вычислительных действий
Решение Проверка условия
Модификация Заголовок цикла
Предопределенный процесс Обращение к процедуре
Документ Вывод данных, печать данных
Перфокарта Ввод данных
Ввод/Вывод Ввод/Вывод данных
Соединитель Разрыв линии потока
Начало, Конец Начало, конец, пуск, останов, вход и выход во вспомогательных алгоритмах
Комментарий Используется для размещения надписей
Горизонтальные и вертикальные потоки Линии связей между блоками, направление потоков
Слияние Слияние линий потоков
Межстраничный соединитель Нет

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

Переменные имеют буквенно-символьное обозначение. Например, 1, n, a, a1, b, H2 – переменные. Одновременно обозначение переменной является индексом ячейки, в которую будут записываться константы. Любая из таких констант называется значением переменной. Например, Z является переменной и адресом ячейки Z одновременно. С алгоритмической точки зрения понятия “переменная” и “адрес ячейки” памяти являются идентичными.

Запись вида Y = 5.5 следует понимать так: записать константу 5.5 в ячейку с адресом Y (если до этой операции в ячейку была записана константа, то она будет затерта, а на ее место будет помещена константа 5.5). Произносить эту запись следует так: “переменной Y присвоить значение 5.5”.

Запись вида L = M следует понимать так: прочитать константу, расположенную по адресу M и скопировать эту константу в ячейку с адресом L (при этом константа из ячейки M не удаляется, а остается такой, какой она была до чтения). Произносить эту запись нужно так: "переменной L присвоить значение переменной M (или просто: L присвоить M)".

Вопросы для самоконтроля:

1. Что такое алгоритм?

2. Свойства алгоритма?

3. Что такое словесный алгоритм?

4. Что такое псевдокод?

5. Что такое блок-схема?

Рекомендуемая литература:

Основная литература [1-14].

Лекции №7-№8-№9. Виды алгоритмов и способы их описания.

Цель лекции: Дать понятия студентам о видах алгоритмов и способах их описания.

Ключевые слова:   Линейный, Разветвляющийся, Циклические.

1. Линейный алгоритм.

2. Разветвляющийся алгоритм.

3. Циклические алгоритмы.

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

На рис. 5 приведен пример блок-схемы алгоритма вычисления периметра Р и площади S квадрата со стороной длины A.

 

 

Рис унок 5. - Линейный алгоритм

 

Блок-схема алгоритма состоит из шести блоков. Выполнение алгоритма начинается с блока 1 "Начало". Этот блок символизирует включение автомата, настройку его на выполнение алгоритма и выделение памяти под все переменные, которые задействованы в алгоритме. В алгоритме рис. 3 таких переменных три: A, Р, S. Следовательно, под каждую из них алгоритмом будет выделено по одной ячейке памяти. На этом блок 1 будет отработан.

Как видно из рис.5, блок 1 связан вертикальной линией потока с блоком 2. Эта линия не имеет стрелки, указывавшей направление потока. Следовательно, этот поток направлен вниз. Таким образом, после выполнения блока 1 управление будет передано на блок 2. Блок 2 "Перфокарта" (см. табл. 1) показывает, что переменной A следует присвоить значение. Это означает, что в ячейку, отведенную автоматом под эту переменную, нужно поместить константу. На реальном компьютере эта константа может быть введена самыми разными способами. Способ зависит от того, как запрограммирован данный фрагмент. Можно, например, потребовать ввод константы с клавиатуры или получить его из заранее подготовленного файла. Возможно эта константа будет получена через внешние источники данных, например, от физической установки, подключенной к компьютеру.

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

Далее управление по линии потока передается к блоку 3 "Процесс". В этом блоке при выполнении размещенной в ней команды число 4 умножается на константу, помещенную в ячейку А (т. е. 5), и результат (т. е. 20) присваивается переменной Р (т. е. константа 20 записывается в ячейку по адресу Р). После выполнения этих операций управление передается к блоку 4.

В блоке 4 аналогичным образом производится умножение значений переменной А и результат (константа 25) присваивается переменной S (в ячейку по адресу S будет занесена константа 25). После этого выполняется переход к блоку 5.

При выполнении команд блока 5 выводятся (например, на экран, бумагу, во внешний файл и т. д.) значения переменных А, Р, S, которые сохранились в соответствующих ячейках к этому моменту. Понятно, что для конкретного примера А = 5 будут выведена константы 5, 20, 25, т. е. длина сторона квадрата, его периметр и площадь. Далее управление передается последнему блоку 6.

В блоке б “Конец” производится освобождение ячеек памяти, которые были зарезервированы под переменные А, P, S, и алгоритм заканчивает работу.

Понятно, что при новом запуске этого же алгоритма можно получить совсем другие числа. Так, если в блоке 2 переменной А присвоить значение 20, то алгоритм выдаст в блоке 5 константы 20, 80, 400.

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

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

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

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

Для пояснения рассмотрим решение задачи нахождения значения функции z = y/x.

На первый взгляд представляется, что алгоритм решения этой задачи имеет линейную структуру. Однако, если учесть, что делить на нуль нельзя из-за переполнения ячейки, то, во-первых, нужно из вычислений исключить вариант х = 0 и, во-вторых, проинформировать пользователя алгоритма о возникшей ошибке. Если этого не сделать, то при вычислениях может возникнуть аварийный выход до получения результата. В профессиональной практике аварийные завершения крайне нежелательны. т. к. к этому моменту уже может быть накоплено определенное количество результатов, которые окажутся необработанными и попросту пропадут. Можно привести другие примеры, когда аварийный останов компьютера может повлечь куда более серьезные последствия.

Решение задачи представлено блок-схемой рис. 6.

Она состоит из 7 блоков. После начала работы алгоритм в блоке 2 требует ввода аргументов X и Y. Затем в блоке 3 производится проверка условия X = 0. Здесь автомат проверяет равна ли нули константа, введенная в ячейку с адресом X. Результатом такой проверки является ответ "Да" или "Нет". В зависимости от этого ответа выполнение алгоритма пойдет по одной или другой ветви. Если результат проверки окажется отрицательным, то на х можно делить и управление передается блоку 4.

В блоке 4 будет получен результат Z, затем в блоке б значения всех трех переменных будут отпечатаны и в блоке 7 алгоритм закончит работу. Если же ответ окажется положительным, то управление будет передано блоку 4. Выполняя команду блока 4, автомат выведет сообщение "Ошибка" и затем закончит работу в том же блоке 7.

 

Рис унок 6. Разветвляющийся алгоритм

 

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

Различают циклы с наперед известным и наперед неизвестным количеством проходов.

Пример 1. Рассмотрим пример алгоритма с циклом, имеющим наперед неизвестное количество проходов. Для этого решим следующую задачу. Указать наименьшее количество членов ряда натуральных чисел 1, 2, 3,..., сумма которых больше числа К.

 

Рис унок 7. Разветвляющийся алгоритм

 

Блок-схема алгоритма решения этой задачи приведена на рис. 7. Она состоит из восьми блоков.

После начала работы в блоке 2 вводится значение числа К. Далее в блоке 3 переменная i получает значение 1, т. е. значение, с которого начнется отсчет натуральных чисел. Переменная S, предназначенная для накопления сумма этих чисел, перед началом суммирования получает значение 0. После этого управление передается блоку 5.

В нем при выполнении команды S = S+i производится сложение содержимого ячеек S и i, а результат записывается в ячейку S. Поскольку до операции сложения было S = 0, i = 1, то после операции будет S = 1. При записи нового значения старое содержимое ячейки S (нуль) стирается, а на его место записывается число 1.

Нужно обратить внимание на то, что если бы до этой операции в блоке 3 не была выполнена команда S = 0 (записать нуль в ячейку S), то при нахождении суммы S + 1 возникла бы ошибка, поскольку из ячейки S была бы извлечена константа, которая оказалась там после распределения памяти.

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

Если условие 6 не выполнится, то производится переход к блоку 4, где при выполнении операции значение переменной увеличивается на 1 и становится равным 2. Теперь алгоритм вновь вернется к блоку 5 и к старому значении суммы добавит новый член 2. После этого сумма станет равной 3. В блоке б вновь проверяется условие получения требуемой суммы и т. д. Цепочка блоков 5-4 будет обрабатываться вновь и вновь до того момента, когда однажды при определенном значении переменной i, наконец, выполнится условие S>К, т. е. когда накапливаемая в таком цикле сумма впервые превысит заданное значение К. Переменная i, значение которой при очередном проходе цепочки этих блоков увеличивается на 1, играет роль счетчика этого цикла.

Далее производится переход к блоку 7, где отпечатается значение количества членов ряда (извлечено и отпечатано число из ячейки i, которое там хранится в момент выполнения условия), суммы S и в блоке 8 алгоритм закончит работу.

Пример 2. Теперь приведем пример алгоритма, содержащего цикл с наперед известным количеством проходов (повторений). Алгоритм решает задачу накопления суммы положительных элементов одномерного массива Z длины N (под длиной массива понимается количество его элементов). Блок-схема алгоритма дана на рис. 8.

Рис унок 8. Циклический алгоритм

 

Вначале в блоке 2 производится ввод двух переменных N и Z. Первая из них представляет одну ячейку. В нее записывается одна константа – число, равное количеству элементов массива Z. Именно такое количество ячеек объединяет другая переменная – Z.

Следует подчеркнуть, что если бы ввод этих переменных в блоке 2 производился в противоположном порядке, то это привело бы к ошибке. Действительно, невозможно заполнить N ячеек массива Z, когда самое N еще не известно (оно будет введено позже Z). Далее в блоке 3 переменной S присвоено начальное значение 0. Это сделано для того, чтобы приготовить ячейку к дальнейшему накоплению необходимой суммы.

Блоки 4-6 представляет собой сам цикл, в котором накапливается сумма.

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

Как видно из рис. 9, цикл состоит из заголовка и тела. Всякий цикл обязательно имеет свой счетчик.

На рис. 10, где показана структура и параметры заголовка цикла, роль такого счетчика выполняет переменная i. Внутри заголовка после счетчика и символа "=" через запятую указывает начальное и конечное значения счетчика и шаг его изменения (на рис. 8 их роль выполняют переменные j, k, l соответственно). Если значение шага l = l, то его можно не указывать.

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

 

 

Рис унок 9. Структура цикла                              Рис унок 10. Структура заголовка цикла


Внутри заголовка счетчику первоначально присваивается значение i=j. Затем выполняются блоки, образующие тело цикла. Обработка блоков внутри цикла производится по часовой стрелке. В результате после первого выполнения тела цикла управление вновь передается заголовку. Здесь к текущему значению счетчика добавится шаг. Теперь, если новое значение счетчика не вышло за свои пределы (т. е. не стало больше своего конечного значения при положительном шаге или меньше конечного значения – при отрицательном шаге), то снова выполняется тело цикла, вновь после возврата к заголовку к счетчику добавляется шаг. Так цикл будет выполняться до тех пор, пока значение счетчика однажды не выйдет за предписанный предел. Как только такой предел будет преодолен, произойдет выход из цикла и управление будет передано блоку, который следует сразу за циклом.

Вопросы для самоконтроля:

1) Что такое линейный алгоритм? Приведите пример.

2) Что такое разветвляющийся алгоритм? Приведите пример.

3) Что такое циклический алгоритм? Приведите пример.

Рекомендуемая литература:

Основная литература: [1-14].

 

 

МОДУЛЬ 3. Программирование на базовом процедурно-ориентированном алгоритмическом языке.

Лекция №10-№11. Составные части языка.

Цель лекции: Дать понятие студентам о составных частях языка Паскаль.

Ключевые слова: Константа, Переменные, Литерная константа.

1. Типы данных. Данные целого типа. Арифметические и логические выражения.

2. Порядок выполнения операций.

 

1. Константа целого типа - любое число, записанное без точки. Формат объявления констант: CONST имя:= значение; Пример: const A:= 8;

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

Var имя: тип;

Пример:    Var a,b: integer;

 

В данном примере обьявлены переменные a и b. Они принадлежат к целому типу. Над данными целого типа можно выполнить следующие арифметические операции:

1. Сложение (+);

2. Вычитание (-);

3. Умножение (*);

4. Деление с отбрасыванием дробной части (div);

5. Получение целого остатка при делении целого данного на целое (mod);

ü Заметьте, что над данными целого типа недопустима такая операция как деление (\)!

Данные действительного типа

В языке паскаль они могут быть двух видов:

1. С фиксированной точкой (изображается десятичным числом с дробной частью, которая может быть и нулевой; например: 7,8)

2. С плавающей точкой (изображается в виде двух чисел разделенных латинской буковой E, обозначающей число 10. Число, стоящее перед E, называется мантиссой, а число, стоящее после E, - порядок.) В общем виде число с плавающей точкой представляет собой обычное число (мантиссу), умноженное на десять(E) в некоторой степени(порядок) и выглядит вот так: mEp, где m - мантисса, E - десять, p - порядок.

Например число 4*10-5 записывается так: 4E-5;

                    0,62*104 -------> 0.62E+4

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

Данные логического типа

В языке Pascal имеются две логические константы: ИСТИНА(FALSE) и ЛОЖЬ(TRUE). Для их описания в разделе переменных используется слово Boolean:

    Var a,b,c: boolean;


В данном примере объявлены переменные a, b и с. Они принадлежат к логическому типу.

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

1. Меньше (<);

2. Меньше или равно (<=);

3. Равно (=);

4. Не равно (<>);

5. Больше или равно (>=);

6. Больше (>);

Над логическими данными допускаются следующие операции:

1. Логическое сложение (or);

2. Логическое умножение (and);

3. Логическое отрицание (not);

 

 

Таблица вычисления результата логического выражения:

A true true false false
B true false true false
not A (B) false (true) false (true) true (false) true (false)
A or B true true true false
A and B true false false false

 

Данные символьного типа (литерная константа)

Литерная константа - любой символ языка, заключенный в апострофы. Для обьявления переменых символьного типа в разделе переменных используется слово CHAR. Пример:

  var k1: char

К символьным данным применимы операции сравнения, т.к. символы языка Pascal упорядочены.

Первый оператор, с которым мы познакомимся,- оператор присваивания.

Оператор присваивания - основной оператор любого языка программирования. Общая форма записи оператора:

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

Например, V:=A; или V:=A+1;

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

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

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

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

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

· выражение должно быть записано в виде линейной цепочки символов;

· используемые операции приведены в таблице:

 

 

· нельзя опускать знаки операций, например писать 5b. Для записи произведения чисел 5 и b надо писать 5*b;

· аргументы функций (sin, cos и др.) как и аргументы вспомогательных алгоритмов, записываются в круглых скобках, например sin(x), cos(4*x).

 

Порядок выполнения операций

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

· вычисляет значение всех алгоритмов-функций и стандартных функций;

· выполняет справа налево все операции возведения в степень;

· выполняет слева направо все операции умножения и деления;

· выполняет слева направо все операции сложения и вычитания.

В нашем случае сначала переменной number1 присваивается значение равное 3 и переменной number2 присваивается значение равное 4, затем вычисляется значение выражения (number1 + number2) и оно присваивается переменной rezult.

Сумма чисел посчитана.

Теперь надо вывести ее значение на экран. Для этого используют оператор Write - записать (вывести) на экран значение переменной, записанной в скобках. В нашем случае значение переменной number1, затем символ +, далее значение переменной number2, символ = и, наконец, значение результата rezult.

И, наконец, в конце раздела операторов стоит служебное слово End, после которого стоит точка.

Задание. Наберите текст программы на компьютере и выполните ее (для запуска программы воспользуйтесь комбинацией клавиш Ctrl и F9).

Внимание! Не забывайте о порядке на дискете и в файле:

· имя программы должно соответствовать ее содержанию,

· имя файла должно быть таким же, как и имя программы,

· файлы, содержащие программы, относящиеся к одной теме, должны находиться в одном каталоге,

· название этого каталога должно отражать его содержание.    

В Турбо Паскале логический тип данных носит название BOOLEAN. Значением логического типа может быть одна из двух констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:

Ord(false)=0
Ord(true)=1
False<true
Succ(false)=true
Pred(true)=false

Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0 содержали только один логический тип данных Boolean, элементы которого могут принимать лишь два логических значения: True (истина) и False (ложь). В Turbo Pascal версии 7.0 добавлены еще три логических типа данныхByteBool, WordBool и LongBool.

 

Название логического типа данных Значению False соответствует Значению True соответствует Размер памяти для логического типа данных
Boolean Число 0 1 1 байт
ByteBool Число 0

Любое число, отличное от 0

1 байт
WordBool Число 0 в обоих байтах 2 байта
LongBool Число 0 во всех байтах 4 байта

 

Отметим, что новые логические типы данных были введены для обеспечения совместимости разрабатываемых программ с Windows, в которой значению False соответствует 0, а значению True – любое, отличное от 0, число.

· Логические переменные должны быть описаны предложением:

Var <имя_переменной>: boolean;

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

Пример переменных с булевым значением

X:=true;
y:=5>3

Логические выражения (условия) – это выражения, которые могут принимать лишь одно из двух значений: true (истина) или false (ложь). Для построения логических выражений используются операции отношения, которые обозначаются знаками: = (отношение на равенство), <> (отношение на неравенство), < (отношение меньше), > (отношение больше), <= (отношение меньше или равно), >= (отношение больше или равно).

Сложные условия составляются из простых с помощью логических операций: and (логическое «И»), or (логическое «ИЛИ») и not (логическое «НЕ»). При составлении сложных условий операнды логического выражения берутся в скобки (это важно!).

Пример логических выражений:

5>3;
2<=6;
(x<2)and(x>=0)
2*x+5<>0

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

Вопросы для самоконтроля:

1. Что такое типы данных?

2. Зачем они используются?

3. Какие типы данных знаете?

Рекомендуемая литература:

Основная литература: [1-14].

 

 

Лекции №12-№13.  Классификация операторов языка TP.

 

Цель лекции: Рассказать про классификацию операторов языка ТР.

Ключевые слова: Оператор,арифметические действия, программа.

1. Оператор управления.

2. Организация ввода и вывода данных.

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

· Оператор присваивания: (:=)

Оператор присваивания служит для присваивания значений переменным, например: x:=1; a:=5. 02; b:= 32*a+Sin(x); S:= 'Иван Иваныч';

· Составной оператор: Begin "операторы"; End;

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


Поделиться с друзьями:

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

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.176 с.