Musala Soft Logo Конкурс по програмиране на Musala Soft и PC Magazine Bulgaria PC Magazine Bulgaria Logo
  Състезателна система
Сезон 2010 - 2011
Сезон 2009 - 2010
Сезон 2008 - 2009
Сезон 2007 - 2008
Сезон 2006 - 2007
Сезон 2005 - 2006
Сезон 2004 - 2005
Сезон 2003 - 2004
Сезон 2002 - 2003
Правила
Задача 1
Задача 2
Задача 3
Задача 4
Задача 5
Задача 6
Класиране
Финален кръг
Сезон 2001 - 2002
Сезон 2000 - 2001
Описание на алгоритъма на задача 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.