Описание на алгоритъма на задача 1 - Компресия: (от
Иван Бобев) |
|
Всеки запис във файла num.cod e от тип byte. Първо от num.inp се прочитат и
преброяват всички цифри на числото. Тъй като броят им е от 1 до 1000 ще са ни нужни
2 байта за да го запишем (типът byte позволява да се се съхранява цяло число от
0 до 255). В първия байт съхраняваме броя на стотиците, а във втория на оставащите
единици на числото отразяващо броя на цифрите (предварително сме отделили двете
части). Цифрите които при прочитането сме съхранили в масив също записваме в num.cod.
Поради това че всички цифри в изображението на даденото число са изрисувани с един
и същ фонт, не е нужно дадено изображение да се съхранява по повече от веднъж. Отделно
кодираме всяка цифра за която още не сме го направили. Първо в num.cod записваме
0 или 1 в зависимост с какво започва изображе- нието и. След това четем следващите
32 реда символ по символ и записваме в num.cod по колко пъти без прекъсване се среща
0 или 1. Ако 0 или 1 се срещат по 255 пъти записваме 255 и след това 0 като указател
за това, че по време на разкодирането трябва да продължим съответно с 0 или 1. Ако
сме кодирали 10 различни цифри то не би могло да има повече и прекратяваме. При
разкодирането първо четем двата първи байта на num.cod и ги преобразуваме в едно
число (първият байт е броя на стотиците, а вторият е оставащите единици). Това число
е броя на цифрите на числото което сме кодирали. След това прочитаме самите цифри
и ги съхраняваме в масив. Декларираме масив font с 10 елемента (по един за всяка
цифра) които са от тип двумерен масив с размери [1..32,1..32] кадето трябва да съхраним
изображенията на цифрите. Четем дали изображението на текущата цифра започва с 0
или 1. Четем колко пъти се среща началната цифра на изображението и записваме в
масива font съотвтно 0 или 1 толкова пъти, след което четем следващата, но сменяме
алтернативно 0 и 1. Ако обаче поредното прочетено число е 0 това е знак че за следващото
прочетено 0 и 1 не трябва да бъдат сменяни. Извършваме това за всяка цифра, която
присъства в числото чието изображение кодираме. Данните от масива font записваме
в изходния файл num.out, като за всяка цифра това правим в последователността и
броят пъти, които се среща в кодираното число. |
За въпроси можете да ни пишете на адрес: konkurs@musala.com.
Supported by Musala Soft Ltd.
Copyright 2000-2010 by Musala Soft Ltd. All rights reserved.
|
|