Я подобные вещи обычно делаю со строками. Код писать не буду, потому что задание, но расскажу свой подход.
Строки заключаются в двойные кавычки. Вывод строки s я обычно делаю с помощью writeline(default, s). Соединение строк a, b, …, z: cat(a, b, …, z).
В принципе, разные типы данных можно преобразовывать в строки с помощью функции convert(qqq, string), но результат не всегда тот, который хочется. Например, вещественные числа норовят представиться в экспоненциальном виде. Поэтому я бы предложил этой опцией не пользоваться, а самому написать процедуры, которая вещественное число превращает в строку. По логике их должно быть две: одна записывает число точно, другая — с заданным числом десятичных знаков (при необходимости округляя или добавляя нули в конце).
Первая процедура совсем простая. В качестве «заготовки» преобразуем в строку целое число floor(abs(a)) — это то, что стоит до запятой (без знака); floor — целая часть. Если дробная часть abs(a) ненулевая, то добавляем запятую и далее по одному — десятичные знаки, пока число не кончится. (Наверно, имеет смысл поставить ограничение на максимально допустимую длину). После этого ставим перед дробью „-‟, если число отрицательное.
Для задаваемого числа десятичных знаков я тоже сначала выделял целую часть модуля, затем дробную часть умножал на 10 в нужной степени и округлял. Дальше — дело техники.
Имея эти процедуры, ваше задание выполнить легко: надо в цикле записать что-то вроде writeline(default, cat(str(a, 1), " + ", str(b, 1), " = ", str(a + b, 1)): (Вывод блокируется, потому что writeline выдаст длину получившейся строки. Конечно, ничто не мешает написать процедурку для вывода, в конце которой поставить NULL.)
|