Ребят, есть интересные идеи, спасибо. Буду думать, сейчас вообще запутался со своим алгоритмом, наверное буду заново все переписывать.
И еще, вдруг кто-то тоже захочет размять мозги, поэтому предлагаю мини-конкурс -)) Победителю - всяческие регардсы и гридзы )))
Дано:
1) файл numbers.bin, содержащий в себе изображения 10-ти символов. Каждый символ имеет размерность 28x28 пикселей. Каждый пиксель занимает в файле 1 байт и значение этого байта указывает на цвет пикселя. Учесть, что если байт равен 0 - то цвет пикселя череый, если больше нуля - белый.
2) простейшая программа на Turbo/Borland/Virtual/Free Pascal'е, которая отображает на экране в текстовом виде любой из 10 символов из вышеописанного файла. Программа - просто для лучшего понимания формата файла.
Задание:
1) Преобразовать исходный файл numbers.bin в другой файл с минимальным размером. Учесть, что простым преобразованием оригинального файла в битовое представление (8 пикселей = 1 байт, 28x28=784 байт / 8 бит =>98 байт) каждый символ занимает 98 байт, а файл - 98x10 символов = 980 байт. Таким образом, получившийся выходной файл должен быть меньше 980 байт.
2) Написать простую программу, которая работает с получившемся ужатым файлом и позволяет вывести на экран любой из 10 символов.
Вышеобозначенная програмка:
Const
num = 0; {Номеp символа, котоый нужно вывести, от 0 до 9}
Var
f : File;
buf : Array [1..28,1..28] of Byte; {Массив для одного символа}
x,
y : Byte; {Пеpеменные циклов по x и по y}
Begin
assign(f,'numbers.bin');
reset(f,1); {Откpываем файл}
If IOResult <> 0 then {Если файл не найден}
Begin {Выводим сообщение об ошибке}
Writeln('File numbers.bin not found');
Halt(1); {и завеpшаем погpамму}
End;
Seek(f,784*num); {Смещаемся по файлу к нужному символу}
BlockRead(f,buf,784); {Читаем 28x28 байт в буффеp}
close(f); {Закываем файл}
For x := 1 to 28 do {Двигаемся по стокам}
Begin
For y := 1 to 28 do {Двигаемся по столбцам}
If Buf[x,y] > 0 then {Если байт больше 0, значит}
Write('1') {это белый цвет, выводим 1}
else
Write(' '); {Если pавен нулю - цеpный цвет}
WriteLn; {После завешения pисования стоки}
{пеpеводим куpсоp на следующую стоку}
End;
WriteLn('Press ENTER to exit...'); {Что-бы окно не сазу закывалось}
ReadLn; {Ждем нажатия ENTER}
End.
В архиве файл numbers.bin, простейшая програмка для просмотра файла numbers.bin.