Что такое трассировочная таблица

от admin

1.Что такое трассировка алгоритма? 2.Что такое трассировочная таблица?
3 Что моделирует трассировочная таблица?
Ответьте правильно дам 30 баллов​

1. Трассировка алгоритма — некий метод (процесс) неавтоматизированного (ручного) моделирования выходных данных кода. Это позволяет проверить правильность работы самого алгоритма перед его компиляцией.

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

3. Трассировочная таблица моделирует работу процессора в общем во время выполнения алгоритма (программы).

Анализ программ с помощью трассировочных таблиц

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

Применяют следующие виды трассировочной таблицы:

  1. Таблицы, всякая строчка которых отображает итог другого действия;
  2. Таблицы, всякая строчка которых отображает итог осуществления совокупности действий.

Пример 1

Узнаем значения переменных c и d, которые получаются в итоге осуществления такой программы:

var c, d: integer;

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

Номер этапа Команда или условие Значение выражения c d
1 c := 5 6 5
2 d := 1 1 1
3 d <= c Да
4 d := d + 1 2 2
5 c := c – 1 5 4
6 d <= c Да
7 d := d + 1 3 3
8 c := c – 1 3 3
9 d <= c Да
10 d := d + 1 4 4
11 c := c – 1 2 2
12 d <= c Нет
13 writeln(c) 2
14 writeln(d) 4

По такой таблице можно понять, что в итоге работы переменные c и d стали равняться 2 и 4 соответственно.

Пример 2

Узнаем значение переменной m, которое получается в итоге осуществления такой программы:

var m, i, p: integer;

for i := 5 to 10 do

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

Считается, что контрольная точка или КТ установлена на строчке m := m + p.

Итог в КТ i m p
Первоначальные значения 0 10
1 5 10
2 6 20
3 7 30
4 8 40
5 9 50
6 10 60

В итоге функционирования программы переменная m равняется 60.

Пример 3

Узнаем значение переменной m, которое получается в итоге осуществления такой программы:

var m, k, b: integer;

for k := 1 to 3 do

for b := 3 downto k do

Трассировочная таблица будет выглядеть следующим образом:

Итог в КТ k b m
Первоначальные значения 0
1 1 3 4
2 2 7
3 1 9
4 2 3 14
5 2 18
6 3 3 24
Итог: 24

Пример 4

Узнаем, какую функцию выполняет такая программа:

m: integer; md: string;

writeln(‘Впишите натуральное число’);

if m mod 2 = 1 then md := ‘1’ + md

Для начала следует взглянуть на то, что в ней помимо переменной n целого типа применяется строчка md, где знак + означает процедуру соединения строк. Первоначальное значение m вводится с клавиатуры, потому оно задаётся случайно. К примеру, m = 12.

Программа оценки машинного нуля.

Программа оценки машинного нуля. В вычислительных задачах при программировании итерационных алгоритмов, завершающихся при достижении заданной точности, часто нужна оценка «машинного нуля», т.е. числового значения, меньше которого невозможно задавать точность данного алгоритма. Абсолютное значение «машинного нуля» зависит от разрядной сетки применяемой ЭВМ, от принятой в конкретном трансляторе точности представления вещественных чисел и от значений, используемых для оценки точности. Следующая программа оценивает абсолютное значение «машинного нуля» относительно близких (по модулю) к единице переменных типа float:

В строках программы слева помещены порядковые номера, которых нет в исходном тексте. Номера добавлены только для удобства ссылок на операторы. Строка 1 — комментарий с названием программы. Комментарии в строках 4, 5, 6 поясняют назначение переменных. Объяснить работу программы проще всего с помощью трассировочной таблицы (табл. 2.1).

Читать:
Почему не включается стиральная машина miele

Во втором столбце таблицы указаны номера строк с исполняемыми операторами. Значения переменных даны после выполнения соответствующего оператора. Только что измененное значение переменной в таблице выделено. После подготовительных присваиваний (строки 6, 7) циклически выполняются операторы 8-11 до тех пор, пока истинно отношение el>1.0, проверяемое в условном операторе. При каждой итерации значение переменной е уменьшается вдвое, и наконец, прибавление (в строке 9) к 1.0 значения е не изменит результата, т.е. el станет равно 1.0.

При использовании компилятора Turbo С получен следующий результат:

При использовании в строке 5 для определения переменных е, el типа double, т.е. при использовании двойной точности, получен иной результат:

Оба результата не хуже значений, приведенных в Приложении 2, для предельных констант FLT_EPSILON и DBL_EPSILON.

Что такое трассировочная таблица

Трассировка

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

Пример 6.4.
Вычисление суммы чисел от 6 до 10

Program Test.4;
var
N: integer; < Это будет счетчик цикла for >
S: integer;
begin
S:=0;
for N:=6 to 10 do
S:=S + N;
writeln(‘Сумма чисел=’, S:6);
readln
end.

Рис. 6.3. Блок-схема алгоритма вычисления суммы чисел от 6 до 10

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

Таблица 6.1. Трассировка программы из примера 6.4

Оператор

Условие

N

S

Примечание

S:=0

0

for N:= 6 to 10 do

Да

6

S:=S + N

6

0+6-6

For N:= 6 to 10 do

Да

7

S:= S + N

13

6 + 7 = 13

For N:= 6 to 10 do

Да

8

S:= S + N

21

13 + 8 = 21

For N:= 6 to 10 do

Да

9

S:= S + N

30

21 + 9 = 30

For N:= 6 to 10 do

Да

10

S:= S + N

40

30 + 10 = 40

For N:=6 to 10 do

Нет

11

writeln (‘Сумма чисел’,S:3)

.

На экране: Сумма чисел=40

Для операторов, выполняющих проверку условий (if, for и т. п.) в столбце «Условие» принято указывать результат проверки. В данном случае в цикле for проверяется условие продолжения цикла.
Символы «. » подчеркивают, что значение счетчика цикла по выходе из цикла считается неопределенным.

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

Вычисление суммы ряда

Рассмотрим задачу вычисления суммы ряда:
1/(1*1) + 1/(2*2) + 1/(3*3) + 1/(4*4) + 1/(5*5)

Здесь мы имеем ряд дробей, у которых в знаменателях записаны квадраты чисел от 1 до 5.
Рассмотрим каждую дробь как произведение двух дробей, например:
1/(3*3) = 1/3 * 1/3

В общем виде это можно записать так:
1/(N * N) = 1/N * 1/N

Блок-схема алгоритма решения задачи представлена на рис. 6.4.

Задание 6.5.
Написать программу вычисления n! (факториал числа n), где n положительно. Определение факториала:

Другими словами, n! — это произведение первых n натуральных чисел.

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

Получаем общий вид выражения: Р = Р * k (то есть воспользуемся рекуррентной формулой вычисления факториала: n! = (n — 1)! * n).

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

Задание 6.6.
Написать программу вычисления суммы ряда S=1 + 2 + 3 + 4 + 5 + 6. Нарисовать блок-схему и заполнить таблицу трассировки. Убедиться при трассировке, что сумма равна 21.

Таблица 6.2. Заготовка для таблицы трассировки алгоритма из задания 6.6

Related Posts