Чтение онлайн

на главную - закладки

Жанры

Технологии программирования

Костерин В В

Шрифт:

Write(' от 1 до ', Digits, ' ');

ReadLn(C1.N);

until ((C1.N >= 1) and (C1.N <= Digits));

Цикл оттестирован тремя тестами: C1.N=1; C1.N=3; C1.N=Digits.

Аналогично декомпозируется процесс "Ввод корректного значения числа цифр второго сомножителя".

Шаг 5.3. Детализация СЛЕДОВАНИЯ "Ввод цифр первого сомножителя в порядке от C1.D[C1.N] до C1.D[1]

СЛЕДОВАНИЕ "Ввод цифр первого сомножителя в порядке от C1.D[C1.N] до C1.D[1] декомпозируется

циклом:

{Ввод цифр первого сомножителя в порядке от C1.D[C1.N] до C1.D[1]}

for i:= C1.N downto 1 do begin

{До ввода корректного символа цифры}

repeat

ch:= ReadKey; {Чтение символа клавиатуры}

Val(ch, C1.D[i], InCode); {Преобразование в значение}

until(InCode = 0);

Write(ch);

end;

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

var {Рабочие переменные}

InCode: word;

ch: Char;

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

Аналогично декомпозируется процесс "Ввод цифр второго сомножителя в порядке от C2.D[C2.N] до C2.D[1].

Шаг 5.4. Детализация СЛЕДОВАНИЯ "Вывод результата произведения"

СЛЕДОВАНИЕ "Вывод результата произведения" декомпозируется АЛЬТЕРНАТИВОЙ — РАЗВИЛКА С ДВУМЯ ДЕЙСТВИЯМИ:

{Вывод результата произведения}

if ERROR

then

WriteLn(Ошибка переполнения)

else

begin

{Вывод продукта умножения}

end;

Тесты: ERROR = True; ERROR = False.

Шаг 5.5. Детализация СЛЕДОВАНИЯ "Вывод продукта умножения"

СЛЕДОВАНИЕ "Вывод продукта умножения" декомпозируется циклом:

{Вывод продукта умножения}

for i:= R.N downto 1 do

Write(R.D[i]);

В тестировании нет необходимости.

Шаг 5.6. Детализация СЛЕДОВАНИЯ "Устранение лидирующих нулей"

СЛЕДОВАНИЕ "Устранение лидирующих нулей" декомпозируется циклом:

{Устранение лидирующих нулей}

while ((R.N > 1) and (R.D[i] = 0)) do

Dec(R.N); {R.N:= R.N — 1}

В тестировании нет необходимости.

Шаг 5.7. Детализация СЛЕДОВАНИЯ "Расчет произведения сомножителей"

СЛЕДОВАНИЕ "Расчет произведения сомножителей" декомпозируется циклом:

Вход: C1, C2.

{Расчет произведения сомножителей}

{Цикл задает номер j очередной цифры второго сомножителя}

ERROR:= False;

j:= 1;

R.D[1]:= 0;

while ((j <= C2.N) and

(not(ERROR))) do

begin

{Увеличение
результата на сдвинутый продукт умножения первого сомножителя на j-ю цифру второго сомножителя}

Inc(j); {j:= j + 1}

end;

Выход: R.D, R.N, ERROR

Структура тестировалась на тестах: 390*56; 390*56, но при Digits = 5; 0*0 при C1.N = 0; 1*0 при C1.N = 1 и других тестах.

Шаг 5.8. Детализация СЛЕДОВАНИЯ "Увеличение результата на сдвинутый продукт умножения первого сомножителя на j-ю цифру второго сомножителя

СЛЕДОВАНИЕ детализируется циклом:

Вход: C1, C2.

{Увеличение результата на сдвинутый продукт умножения первого сомножителя на j-ю цифру второго сомножителя}

p:= 0;

i:= 0; {Номер цифры первого сомножителя}

while(((i < C1.N) or (p <> 0)) and (not(ERROR))) do

begin

Inc(i);

{Расчет очередной цифры результата и цифры переноса}

end;

Выход: R.D, R.N, ERROR

Шаг 5.9. Детализация СЛЕДОВАНИЯ "Расчет очередной цифры результата и цифры переноса"

СЛЕДОВАНИЕ детализируется альтернативой:

Вход: i, j, C1.D[i], C2.D[j], p, R.D, Digits.

{Расчет очередной цифры результата и цифры переноса}

{Контролируемый расчет ir — номера очередной цифры результата}

ir:= i + j — 1;

if (ir > Digits) then

ERROR:= True else

begin

{Изменение длины результата R.N}

if (R.N < ir)

then

begin

R.N:= ir;

R.D[ir]:= 0; {Обнуление новой цифры результата}

end;

{Получение очередной цифры C1D первого сомножителя}

if (i <= C1.N) then C1D:= C1.D[i] else C1D:= 0;

{Изменение очередной цифры результата и p}

RD:= р + R.D[ir] + C1D * С2.D[j];

R.D[ir]:= RD mod 10;

p:= RD div 10;

end;

Выход: R.D, R.N, ERROR, p.

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

Поделиться:
Популярные книги

Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй

Ланьлинский насмешник
Старинная литература:
древневосточная литература
7.00
рейтинг книги
Цветы сливы в золотой вазе, или Цзинь, Пин, Мэй

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

70 Рублей - 2. Здравствуй S-T-I-K-S

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
70 Рублей - 2. Здравствуй S-T-I-K-S

Мастер 3

Чащин Валерий
3. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер 3

Лучше подавать холодным

Аберкромби Джо
4. Земной круг. Первый Закон
Фантастика:
фэнтези
8.45
рейтинг книги
Лучше подавать холодным

Имперец. Земли Итреи

Игнатов Михаил Павлович
11. Путь
Фантастика:
героическая фантастика
боевая фантастика
5.25
рейтинг книги
Имперец. Земли Итреи

Адвокат империи

Карелин Сергей Витальевич
1. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.75
рейтинг книги
Адвокат империи

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2

Не грози Дубровскому!

Панарин Антон
1. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому!

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Лолита

Набоков Владимир Владимирович
Проза:
классическая проза
современная проза
8.05
рейтинг книги
Лолита

Энфис 5

Кронос Александр
5. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 5

Опасная любовь командора

Муратова Ульяна
1. Проклятые луной
Фантастика:
фэнтези
5.00
рейтинг книги
Опасная любовь командора

Найди меня Шерхан

Тоцка Тала
3. Ямпольские-Демидовы
Любовные романы:
современные любовные романы
короткие любовные романы
7.70
рейтинг книги
Найди меня Шерхан