Векторное представление заключается в описании элементов изображения математическими кривыми с указанием их цветов и заполняемости (например, круг и окружность – разные фигуры). Красный эллипс на белом фоне будет описан всего двумя математическими формулами – прямоугольника и эллипса соответствующих цветов, размеров и местоположения. Очевидно, такое описание займет значительно меньше места, чем в первом случае. Еще одно преимущество – качественное масштабирование в любую сторону. Увеличение или уменьшение объектов производится увеличением или уменьшением соответствующих коэффициентов в математических формулах. К сожалению векторный формат становится невыгодным при передаче изображений с большим количеством оттенков или мелких деталей (например, фотографий). Ведь каждый мельчайший блик в этом случае будет представляться не совокупностью одноцветных точек, а сложнейшей математической формулой или совокупностью графических примитивов, каждый из которых, является формулой. Это приводит к утяжелению файла. Кроме того, перевод изображения из растрового в векторный формат (например, программой Adobe Strime Line или Corel OCR-TRACE) приводит к наследованию последним невозможности корректного масштабирования в большую сторону. От увеличения линейных размеров количество деталей или оттенков на единицу площади больше не становится. Это ограничение накладывается разрешением вводных устройств (сканеров, цифровых фотокамер и др.).
Var n,t,s,d,e:integer; begin writeln(''); repeat writeln('Введите сумму в рублях<=1000'); readln(n); until (n>0) and (n<=1000); t:=n div 1000; n:=n-t*1000; s:=n div 100; n:=n-s*100; d:=n div 10; if d<>1 then begin n:=n-d*10; e:=n; end; case t of 1:write('тысяча '); end; if s>=0 then case s of 1:write('сто '); 2:write('двести '); 3:write('триста '); 4:write('четыресто '); 5:write('пятьсот '); 6:write('шестьсот '); 7:write('семьсот '); 8:write('восемьсот '); 9:write('девятьсот '); end; if d>=0 then case d of 1: case n of 10: write('десять '); 11: write('одиннадцать '); 12: write('двенадцать '); 13: write('тринадцать '); 14: write('четырнадцать '); 15: write('пятнадцать '); 16: write('шестнадцать '); 17: write('семнадцать '); 18: write('восемнадцать '); 19: write('девятнадцать '); end; 2:write('двадцать '); 3:write('тридцать '); 4:write('сорок '); 5:write('пятьдесят '); 6:write('шестьдесят '); 7:write('семьдесят '); 8:write('восемьдесят '); 9:write('девяносто '); end; if e>=0 then case e of 1:write('один '); 2:write('два '); 3:write('три '); 4:write('четыре '); 5:write('пять '); 6:write('шесть '); 7:write('семь '); 8:write('восемь '); 9:write('девять '); end; if (e=1) then write('рубль ') else if (e=0)or(e>4) then write('рублей ') else write('рубля '); end.
Можно либо циклы в общем цикле (коротко и красиво):
использовать Робот
алг
нач
нц пока снизу свободно
вниз
нц пока справа свободно
вправо
кц
нц пока снизу свободно
вниз
кц
нц пока слева свободно
влево
кц
кц
кон
То же самое ещё понятнее и короче выглядит, если малые циклы в строчку записать:
использовать Робот
алг
нач
нц пока снизу свободно
вниз
нц пока справа свободно; вправо кц
нц пока снизу свободно; вниз кц
нц пока слева свободно; влево кц
кц
кон
Либо просто несколько циклов друг за другом (длинно и уныло):
использовать Робот
алг
нач
нц пока справа свободно
вправо
кц
нц пока снизу свободно
вниз
кц
нц пока слева свободно
влево
кц
вниз
нц пока справа свободно
вправо
кц
нц пока снизу свободно
вниз
кц
нц пока слева свободно
влево
кц
кон