Файл: 1. Устройство компьютера. Оперативная память, процессор, регистры процессора. Аппаратный стек.pdf

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

Категория: Не указан

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

Добавлен: 03.02.2024

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

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

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

Если для разработки алгоритма используется метод пошаговой детализации, то первоначально продумывается и фиксируется общая структура алгоритма без детальной проработки отдельных его частей, но при этом также используются лишь основные структуры алгоритмов. Блоки, требующие дальнейшей детализации, обозначаются пунктирной линией. Далее прорабатываются (детализируются) отдельные блоки, не детализированные на предыдущем шаге, т.е. на каждом шаге разработки уточняется реализация фрагмента алгоритма (или программы), и, таким образом, на каждом шаге мы имеем дело с более простой задачей. Полностью закончив детализацию всех блоков, мы получим решение всей задачи в целом.
В некоторых случаях, стремление, во что бы то ни стало, остаться в рамках структурного подхода приводит к необоснованному усложнению программы и потере ее наглядности и естественности. Если учесть, что структурное программирование имеет целью не подчинить программы каким-то правилам, а сделать их более удобными для восприятия, то в ряде случаев оказывается целесообразным отдать предпочтение ясности и естественности программы.
Составим в качестве примера алгоритм вычисления суммы квадратов целых чисел от 1 до N (N не меньше 1,N должно быть задано перед выполнением программы или алгоритма.)
Такая сумма называется накапливающейся.
Для вычисления накапливающейся суммы полезно знать следующее:
S = 0 – т.е. начальное значение суммы обнуляется;
S = S + i – текущее значение суммы считается через предыдущее, т.е. новое значение равно предыдущему значению суммы плюс текущее значение переменной (i), в которой лежит текущее слагаемое.
Начальное значение накапливающейся суммы всегда равно нулю, т.к. 0 – это единственное число, которое, являясь слагаемым, не изменит общую величину суммы.
Решение этой задачи можно представить как последовательное выполнение следующих простых шагов
(рис 4.3):
1.
Ввести значение переменной N (блок 1).
2.
Проверить выполнение условия, наложенного на значение переменной N. Для этого сравнить введенное число с 1 (блок 2).
Если условие N>1 не выполняется, то возврат за новым значением N, предварительно распечатав на экране дисплея сообщение (блок 3), т.к. введенное N не удовлетворяет требованиям задачи. Если условие N>1верно, перейти к блоку 4.
3.
Присвоить S значение 0 (блок 4).
4.
Присвоить i значение 1 (блок 5).
5.
Далее выполнять операцию S=S+ i2 (блок 6), увеличивая значение i после очередного её выполнения на 1 - i=i+l

(блок 7).
6.
Чтобы обеспечить сложение точно N чисел, после каждого изменения i на 1 будем проверять условие i<=N (блок 8). Если условие выполняется, то не все N сложений выполнены, и необходимо повторить действия, начиная с операции, помеченной
(6).
7.
Блоки 6-8 выполняются многократно и образуют цикл.
Рис. 4.3. Алгоритм вычисления суммы квадратов чисел от 1 до N
3.5. Понятие переменной
Алгоритм состоит из команд исполнителю. Исполнитель может, в свою очередь, командовать другими исполнителями. Компьютер можно рассматривать как универсальный исполнитель, который управляет другими исполнителями. Рассмотрим, к примеру, автомобиль с инжекторным двигателем. В нем работой двигателя управляет компьютер (его иногда называют микропроцессорный блок). Компьютер получает данные от разнообразных датчиков (датчики положения коленчатого вала и дроссельной заслонки, температуры охлаждающей жидкости, скорости, детонации, кислорода и др.) и отдает приказания исполняющим системам двигателя - модулю зажигания, бензонасосу, форсункам двигателя, регулятору холостого хода, системе продувки адсорбера и т.д.
Таким образом, и датчики, и исполняющие системы двигателя управляются компьютером, который выступает в роли универсального исполнителя.
Запись алгоритма для универсального исполнителя может включать команды, адресованные ему непосредственно, а также команды, которые нужно передать подчиненным исполнителям. В чем разница между универсальным и простейшими подчиненными исполнителями?
Как правило, универсальный исполнитель имеет собственную память, и выполнение им команд может приводить не к каким-либо внешним действиям,
а к изменению его внутреннего состояния. Например, используя сигналы от датчика фазы, компьютер автомобиля вычисляет текущие обороты двигателя
(которые показывает на тахометре). Используя эти данные и информацию, поступающую от датчика скорости автомобиля, компьютер может вычислить, какая передача включена в определенный момент времени. Далее вычисляется текущая нагрузка на двигатель и устанавливается, какой должна быть смесь бензина и воздуха, подаваемая в цилиндры двигателя. В зависимости от этого подаются команды на открытие форсунок. От степени обогащения смеси зависит момент зажигания - чем богаче смесь, тем позже момент зажигания; таким образом, подаче команды модулю зажигания предшествуют достаточно сложные вычисления.
Таким образом, компьютер автомобиля, управляющий работой двигателя, хранит в любой момент времени в своей памяти текущие скорость, передачу,


нагрузку на двигатель, температуру охлаждающей жидкости, требуемую степень обогащенности смеси и многие другие параметры. Эти параметры периодически перевычисляются на основании сигналов от разнообразных датчиков. В зависимости от значений параметров, компьютер передает те или иные сигналы управляющим системам двигателя.
Значение каждого параметра хранится в определенном участке памяти компьютера и может меняться в процессе выполнения алгоритма. Такой участок памяти компьютера называется переменной. Понятие переменной - важнейшее понятие алгоритмического языка. Переменные встроены в конструкцию универсального исполнителя.
Каждой переменной присваивается имя. В рассмотренном примере используются переменные "
скорость ", "
обороты двигателя ", "
передача ",
"
нагрузка ", "
температура ", "
обогащенность смеси ", "
угол опережения зажигания " и другие. С каждой переменной связан ее тип, т.е. множество значений,
которое она может принимать. Например, "
передача " принимает целые значения от
1
до
5
(обратная и первая передачи не различаются), тогда как "
скорость ",
а также "
обогащенность смеси " принимают вещественные значения (скорость измеряется в м/сек, обогащенность смеси может измеряться либо соотношением кислорода и паров бензина в единице объема, либо в процентах относительно стехиометрической смеси 14/1, соответствующей полному сгоранию паров бензина).
С переменной можно выполнять два действия:
1.
прочитать текущее значение переменной;
2.
записать новое значение в переменную или, как говорят программисты, присвоить новое значение переменной.
В алгоритмическом языке чтение значения переменной выполняется в результате использования ее имени в любом выражении. Запись нового значения переменной выполняется с помощью так называемого оператора присваивания. Он выглядит следующим образом:
имя переменной = выражение;
Знак
=
читается как присвоить значение.
При выполнении оператора присваивания сначала вычисляется значение выражения в правой части, затем оно записывается в переменную, имя которой указано в левой части. Старое значение переменной при этом стирается. Например, скорость автомобиля вычисляется по количеству импульсов от датчика скорости в единицу времени: датчик скорости посылает 6 импульсов на каждый пройденный метр.
скорость = число импульсов от датчика скорости);

// (6 * интервал времени);
Переменная "
число импульсов от датчика скорости " в течение каждого интервала времени суммирует число импульсов. В начале каждого интервала она обнуляется. Полученная в результате скорость выражается в м/с. Если нужно получить скорость в км/час, то дополнительно выполняется следующее действие:
скорость = скорость * 3600 / 1000;
Здесь переменная "
скорость " входит как в правую, так и в левую части оператора присваивания. В правой части используется старое значение этой переменной, вычисленное в м/сек. Поскольку час содержит 3600 секунд, то при домножении на 3600 получается расстояние в метрах, проходимое за 1 час;
после деления на 1000 получается расстояние в километрах. Вычисленное значение затем присваивается переменной "
скорость ".
Суммируем сказанное выше:
1.
универсальный исполнитель, или компьютер, - это исполнитель, который может управлять другими исполнителями. Запись алгоритма для универсального исполнителя может включать команды, которые он должен передать подчиненным исполнителям, и команды, изменяющие внутреннее состояние самого универсального исполнителя;
2.
внутреннее состояние универсального исполнителя определяется состоянием его памяти. Память - это материальный носитель (лента машины
Тьюринга, ламповая или ферритовая память первых компьютеров, полупроводниковая память современных компьютеров), который хранит информацию. Эту информацию можно читать и перезаписывать;
3.
переменная - это область памяти универсального исполнителя, хранящая порцию информации. Любая переменная имеет имя и тип. Тип переменной определяется множеством всех значений, которые она может принимать. Память универсального исполнителя можно рассматривать как набор переменных;
4.
с переменной можно выполнять два действия: прочитать ее текущее значение и записать в нее новое значение (старое теряется). В алгоритмическом языке значение переменной читается, когда ее имя используется в любом выражении, значение которого надо вычислить. Для записи нового значения в переменную применяется оператор присваивания, который имеет вид:
имя переменной = выражение;
При его выполнении сначала вычисляется значение выражения справа от знака присваивания
=
, затем оно записывается в переменную. Выражение в правой части может включать имя переменной в левой части. В этом случае при вычислении выражения используется старое значение переменной.

Тема 4. Типы переменных. Целые и вещественные переменные, представление целых и вещественных чисел в компьютере
Содержание темы:
типы переменных, целочисленные и вещественные переменные, символьные переменные, логические переменные и выражения, массивы, текстовые строки
Цели и задачи изучения темы:
получить знания об основных типах переменных, о представлении целых и вещественных чисел в компьютере
Изучая тему, необходимо акцентировать внимание на следующих понятиях:
·
тип переменной – определяется множеством значений, которое она может принимать;
·
целочисленная переменная – может хранить числа от нуля до 2 в 32-й степени минус 1;
·
вещественная переменная – представляется в компьютере в так называемой экспоненциальной, или плавающей, форме;
·
символьная переменная – представляется целочисленным кодом в некоторой фиксированной кодировке;
·
логические или условные выражения – используются в качестве условия в конструкциях ветвления;
·
массив переменных – объединение определенного числа однотипных данных, называемых элементами массива;
·
текстовая строка – представляется массивами символов
4.1. Типы переменных
Тип переменной определяется множеством значений, которое она может принимать. Кроме того, тип определяет операции, которые возможны с переменной. Например, с численными переменными возможны арифметические операции, с логическими - проверка, истинно или ложно значение переменной, с символьными - сравнение, с табличными (или массивами) – чтение или запись элемента таблицы с заданным индексом и т.п. Как правило, в любом современном языке имеется базовый набор типов и несколько конструкций, которые позволяют строить новые типы из уже созданных. Наборы базовых типов и конструкций различаются для разных языков. В описании неформального алгоритмического языка будут использоваться типы и конструкции,