Пусть Чертёжник стоит в точке (0,0). Выполняя программу, Чертёжник нарисует цифры 1-9 и 0, в таком виде, как они пишутся на почтовых конвертах (см. рисунок). В фигурных скобках - комментарии, они не выполняются.
использовать Чертежник алг Циферки нач {рисуем 1} поднять перо сместиться в точку (2, 1) опустить перо сместиться в точку (2, 3) сместиться в точку (1, 2) {рисуем 2} поднять перо сместиться в точку (3, 3) опустить перо сместиться в точку (4, 3) сместиться в точку (4, 2) сместиться в точку (3, 1) сместиться в точку (4, 1) {рисуем 3} поднять перо сместиться в точку (5, 3) опустить перо сместиться в точку (6, 3) сместиться в точку (5, 2) сместиться в точку (6, 2) сместиться в точку (5, 1) {рисуем 4} поднять перо сместиться в точку (7, 3) опустить перо сместиться в точку (7, 2) сместиться в точку (8, 2) поднять перо сместиться в точку (8, 3) опустить перо сместиться в точку (8, 1) {рисуем 5} поднять перо сместиться в точку (10, 3) опустить перо сместиться в точку (9, 3) сместиться в точку (9, 2) сместиться в точку (10, 2) сместиться в точку (10, 1) сместиться в точку (9, 1) {рисуем 6} поднять перо сместиться в точку (12, 3) опустить перо сместиться в точку (11, 2) сместиться в точку (11, 1) сместиться в точку (12, 1) сместиться в точку (12, 2) сместиться в точку (11, 2) {рисуем 7} поднять перо сместиться в точку (13, 3) опустить перо сместиться в точку (14, 3) сместиться в точку (13, 2) сместиться в точку (13, 1) {рисуем 8} поднять перо сместиться в точку (15, 3) опустить перо сместиться в точку (15, 1) сместиться в точку (16, 1) сместиться в точку (16, 3) сместиться в точку (15, 3) поднять перо сместиться в точку (15, 2) опустить перо сместиться в точку (16, 2) {рисуем 9} поднять перо сместиться в точку (17, 1) опустить перо сместиться в точку (18, 2) сместиться в точку (18, 3) сместиться в точку (17, 3) сместиться в точку (17, 2) сместиться в точку (18, 2) {рисуем 0} поднять перо сместиться в точку (19, 1) опустить перо сместиться в точку (19, 3) сместиться в точку (20, 3) сместиться в точку (20, 1) сместиться в точку (19, 1) {возвращаемся в начало} поднять перо сместиться в точку (0, 0) кон
Function BigNum(n: integer): string; {Генератор случайного числа из n цифр} var c, s: string; i, k: integer; begin Randomize; k := Random(9) + 1; Str(k, c); s := c; for i := 1 to n - 1 do begin k := Random(10); Str(k, c); s := s + c end; BigNum := s end;
function SumDig(s: string): integer; {Сумма цифр в числе} var i, n, sum, err: integer; begin sum := 0; for i := 1 to length(s) do begin Val(s[i], n, err); sum := sum + n end; SumDig := sum end;
function Residue(s: string): integer; {Возвращает остаток от деления числа в s на 18} var n, sd, res9, res2, err: integer; odd1, odd2: Boolean; begin sd := SumDig(s); res9 := sd mod 9; Val(s[length(s)], n, err); res2 := n mod 2; odd1 := (res9 mod 2) <> 0; odd2 := (res2 <> 0); if (odd1 and not odd2) or (not odd1 and odd2) then Residue := res9 + 9 else Residue := res9 end;
var c: string;
begin c := BigNum(1000); writeln(c,#13#10,'Остаток от деления на 18 равен ', Residue(c)) end.
Тестовое решение:
3221915424975322923399502460812524529225375712837996380372955560234189270702379062282513315737071547764862568890398237871186353362182139742995552543884367658741829560716949497663481958872557099007598172783497999536087178826984948006420926538455756301942035589845898211516063937013863606448533769355643489588909747508128286297239467146038312854988616013646629224854150056080633230962334349031818700972765003200339826241970102416293235810632014869208245809165359601700391661996623220804842575428230306880758380343212880696782613365631634904645222111534961009813502561157888605055040272066063419013375096375636695376322940418437858178995380732947703268032557794787741637094210757062359003544768695429616517382280063142873709333561422845574162136379545354590728371075722857860156305301616725485589016055779858443331207045899737128103925063276738104327107115503162033931614476906153279190680955900379416370372010844088284335066847563774690881756900181208508120442555717049830267806565535426556043820118314 Остаток от деления на 18 равен 2
использовать Чертежник
алг Циферки
нач
{рисуем 1}
поднять перо
сместиться в точку (2, 1)
опустить перо
сместиться в точку (2, 3)
сместиться в точку (1, 2)
{рисуем 2}
поднять перо
сместиться в точку (3, 3)
опустить перо
сместиться в точку (4, 3)
сместиться в точку (4, 2)
сместиться в точку (3, 1)
сместиться в точку (4, 1)
{рисуем 3}
поднять перо
сместиться в точку (5, 3)
опустить перо
сместиться в точку (6, 3)
сместиться в точку (5, 2)
сместиться в точку (6, 2)
сместиться в точку (5, 1)
{рисуем 4}
поднять перо
сместиться в точку (7, 3)
опустить перо
сместиться в точку (7, 2)
сместиться в точку (8, 2)
поднять перо
сместиться в точку (8, 3)
опустить перо
сместиться в точку (8, 1)
{рисуем 5}
поднять перо
сместиться в точку (10, 3)
опустить перо
сместиться в точку (9, 3)
сместиться в точку (9, 2)
сместиться в точку (10, 2)
сместиться в точку (10, 1)
сместиться в точку (9, 1)
{рисуем 6}
поднять перо
сместиться в точку (12, 3)
опустить перо
сместиться в точку (11, 2)
сместиться в точку (11, 1)
сместиться в точку (12, 1)
сместиться в точку (12, 2)
сместиться в точку (11, 2)
{рисуем 7}
поднять перо
сместиться в точку (13, 3)
опустить перо
сместиться в точку (14, 3)
сместиться в точку (13, 2)
сместиться в точку (13, 1)
{рисуем 8}
поднять перо
сместиться в точку (15, 3)
опустить перо
сместиться в точку (15, 1)
сместиться в точку (16, 1)
сместиться в точку (16, 3)
сместиться в точку (15, 3)
поднять перо
сместиться в точку (15, 2)
опустить перо
сместиться в точку (16, 2)
{рисуем 9}
поднять перо
сместиться в точку (17, 1)
опустить перо
сместиться в точку (18, 2)
сместиться в точку (18, 3)
сместиться в точку (17, 3)
сместиться в точку (17, 2)
сместиться в точку (18, 2)
{рисуем 0}
поднять перо
сместиться в точку (19, 1)
опустить перо
сместиться в точку (19, 3)
сместиться в точку (20, 3)
сместиться в точку (20, 1)
сместиться в точку (19, 1)
{возвращаемся в начало}
поднять перо
сместиться в точку (0, 0)
кон
а дальше составляй число
{Генератор случайного числа из n цифр}
var
c, s: string;
i, k: integer;
begin
Randomize;
k := Random(9) + 1;
Str(k, c);
s := c;
for i := 1 to n - 1 do
begin
k := Random(10);
Str(k, c);
s := s + c
end;
BigNum := s
end;
function SumDig(s: string): integer;
{Сумма цифр в числе}
var
i, n, sum, err: integer;
begin
sum := 0;
for i := 1 to length(s) do
begin
Val(s[i], n, err);
sum := sum + n
end;
SumDig := sum
end;
function Residue(s: string): integer;
{Возвращает остаток от деления числа в s на 18}
var
n, sd, res9, res2, err: integer;
odd1, odd2: Boolean;
begin
sd := SumDig(s);
res9 := sd mod 9;
Val(s[length(s)], n, err);
res2 := n mod 2;
odd1 := (res9 mod 2) <> 0;
odd2 := (res2 <> 0);
if (odd1 and not odd2) or (not odd1 and odd2) then Residue := res9 + 9
else Residue := res9
end;
var
c: string;
begin
c := BigNum(1000);
writeln(c,#13#10,'Остаток от деления на 18 равен ', Residue(c))
end.
Тестовое решение:
3221915424975322923399502460812524529225375712837996380372955560234189270702379062282513315737071547764862568890398237871186353362182139742995552543884367658741829560716949497663481958872557099007598172783497999536087178826984948006420926538455756301942035589845898211516063937013863606448533769355643489588909747508128286297239467146038312854988616013646629224854150056080633230962334349031818700972765003200339826241970102416293235810632014869208245809165359601700391661996623220804842575428230306880758380343212880696782613365631634904645222111534961009813502561157888605055040272066063419013375096375636695376322940418437858178995380732947703268032557794787741637094210757062359003544768695429616517382280063142873709333561422845574162136379545354590728371075722857860156305301616725485589016055779858443331207045899737128103925063276738104327107115503162033931614476906153279190680955900379416370372010844088284335066847563774690881756900181208508120442555717049830267806565535426556043820118314
Остаток от деления на 18 равен 2