Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 12.02.2012, 21:29   #1 (permalink)
Kristi2012
Новичок
 
Регистрация: 12.02.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Необходимо написать программу сжимающую картинку

Одной из самых часто встречаемых задач в информатике является задача сжатия данных. Рассмотрим частный случай этой проблемы, а именно — сжатие черно-белых изображений, каждое из которых представляет собой набор пикселей черного и белого цвета. Сжатие такого рисунка происходит следующим образом: изначально набор пикселей разбивается на квадраты размером два на два. Каждый такой квадрат является пикселем нового сжатого изображения, причем он окрашен в черный цвет, если хотя бы два пикселя в исходном квадрате окрашены в черный, и в белый в противном случае. Вам необходимо написать программу, сжимающую картинку.
Формат входного файла

В первой строке входного файла Input.txt находятся два натуральных числа w, h — ширина и высота исходного изображения в пикселях. (1 ≤ w, h ≤ 100). Гарантируется, что во входных тестах оба числа четные. Следующие h строк входного файла содержат по w чисел, каждое из которых равно либо 0, если этот пиксель белый, либо 1, если пиксель — черный.
Формат выходного файла

В первой строке выходного файла Output.txt требуется вывести два числа W, H — ширину и высоту сжатого изображения. Следующие H cтрок должны содержать по W чисел — описание сжатого изображения, в формате, аналогичном формату входного файла.
Kristi2012 вне форума   Ответить с цитированием

Старый 12.02.2012, 21:29
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Отправлю вам топики, которые аналогичны вашей теме

Написать программу. Delphi
Написать программу...

Старый 12.02.2012, 21:31   #2 (permalink)
Kristi2012
Новичок
 
Регистрация: 12.02.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kristi2012 Посмотреть сообщение
Одной из самых часто встречаемых задач в информатике является задача сжатия данных. Рассмотрим частный случай этой проблемы, а именно — сжатие черно-белых изображений, каждое из которых представляет собой набор пикселей черного и белого цвета. Сжатие такого рисунка происходит следующим образом: изначально набор пикселей разбивается на квадраты размером два на два. Каждый такой квадрат является пикселем нового сжатого изображения, причем он окрашен в черный цвет, если хотя бы два пикселя в исходном квадрате окрашены в черный, и в белый в противном случае. Вам необходимо написать программу, сжимающую картинку.
Формат входного файла

В первой строке входного файла Input.txt находятся два натуральных числа w, h — ширина и высота исходного изображения в пикселях. (1 ≤ w, h ≤ 100). Гарантируется, что во входных тестах оба числа четные. Следующие h строк входного файла содержат по w чисел, каждое из которых равно либо 0, если этот пиксель белый, либо 1, если пиксель — черный.
Формат выходного файла

В первой строке выходного файла Output.txt требуется вывести два числа W, H — ширину и высоту сжатого изображения. Следующие H cтрок должны содержать по W чисел — описание сжатого изображения, в формате, аналогичном формату входного файла.
Извините на Паскале, пытаюсь сама разбираться в программирование. Летом в ВУЗ буду поступать, спасибо заранее
Kristi2012 вне форума   Ответить с цитированием
Старый 13.02.2012, 13:09   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Задание достаточно интересное и нестандартное. Под какую именно версию Pascal вам нужно решение?

Дело в том, что работа с графикой в разных версиях отличается, и то, что программа заработает в BP, не гарантирует, что она же без проблем запустится в FreePascal-е и уж, тем более, в PascalABC.
AlexZir вне форума   Ответить с цитированием
Старый 13.02.2012, 18:55   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот, как вариант: сюжет "Серый Волк и Красная Шапочка". Сделано для Турбо-Паскаля, впрочем, графику там можно прицепить любую, алгоритм сохранится. Естественно, пути к файлам можно поменять. Также самостоятельно конфигурируйте параметры процедуры InitGraph. Цвета у меня инвертированы, поскольку используется черный DOS-экран. И еще - для наглядности каждая точка - это квадрат экрана 10х10 пикселей.
Код:
Uses Graph,CRT;
Var
 A,B:Array[1..100,1..100] of byte;
 M,N,i,j,k,l:Byte;
 X0,Y0,X,Y:Word;
 f:Text;
 C:Char;
 Code:Integer;
BEGIN
 Assign(f,'D:\Input.txt');
 Reset(f);
 Readln(f,N,M);
 For i:=1 to M do
  Begin
   For j:=1 to N do
    begin
     Read(f,C);
     Val(C,A[i,j],Code);
    end;
   Readln(f);
  End;
 Close(f);
 InitGraph(...);
 ClearDevice;
 X0:=(GetMaxX-N*10) div 2;
 Y0:=(GetMaxY-M*10) div 2;
 For i:=1 to M do
  For j:=1 to N do
   For k:=0 to 9 do
    For l:=0 to 9 do
     Begin
      X:=X0+j*10+k;
      Y:=Y0+i*10+l;
      If A[i,j]=0 then
       PutPixel(X,Y,Black)
      else
       PutPixel(X,Y,White);
     End;
 ReadKey;
 Assign(f,'D:\Output.txt');
 Rewrite(f);
 N:=N div 2;
 M:=M div 2;
 Writeln(f,N,' ',M);
 For i:=1 to M do
  Begin
   For j:=1 to N do
    begin
     B[i,j]:=A[2*i-1,2*j-1]+A[2*i,2*j-1]+A[2*i-1,2*j]+A[2*i,2*j];
     If B[i,j]>1 then B[i,j]:=1 else B[i,j]:=0;
     Write(f,B[i,j]);
    end;
   Writeln(f);
  End;
 Close(f);
 ClearDevice;
 X0:=(GetMaxX-N*10) div 2;
 Y0:=(GetMaxY-M*10) div 2;
 For i:=1 to M do
  For j:=1 to N do
   For k:=0 to 9 do
    For l:=0 to 9 do
     Begin
      X:=X0+j*10+k;
      Y:=Y0+i*10+l;
      If B[i,j]=0 then
       PutPixel(X,Y,Black)
      else
       PutPixel(X,Y,White);
     End;
 ReadKey;
END.
Миниатюры
wolf01.jpg   wolf02.jpg  
Вложения
Тип файла: txt INPUT.TXT (1.5 Кб, 598 просмотров)
Тип файла: txt Output.txt (407 байт, 584 просмотров)
Vladimir_S вне форума   Ответить с цитированием
Старый 13.02.2012, 22:58   #5 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

да. и правда интересная программа. Вот почему нам не дают такого? вЛицее к примеру... хотя бы как факультатив...
kreol вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 14.02.2012, 04:16   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Владимир, это же псевдографика, а топикстартеру надо сжать именно рисунок, скорее всего, формата bmp.
AlexZir вне форума   Ответить с цитированием
Старый 14.02.2012, 09:54   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Владимир, это же псевдографика, а топикстартеру надо сжать именно рисунок, скорее всего, формата bmp.
Ну тогда это точно не мой уровень, а "высший пилотаж". Вы вроде как, помнится, с такими задачками возились. Я-то понял по-простому: есть входной файл Input.txt с нулями да единицами, и надо по определенному алгоритму соорудить выходной файл Output.txt, что я, собственно, и сделал. А графика - это так, просто иллюстрация для наглядности.
А Вы думаете, тут требуется BMP-изображения считывать, декодировать, ужимать и потом обратно преобразовывать? Тогда я точно - пас.
Vladimir_S вне форума   Ответить с цитированием
Старый 14.02.2012, 10:36   #8 (permalink)
Rossomaxa
Лесник
 
Аватар для Rossomaxa
 
Регистрация: 11.10.2011
Сообщений: 338
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 771
По умолчанию

Цитата:
Сообщение от AlexZir Посмотреть сообщение
Владимир, это же псевдографика, а топикстартеру надо сжать именно рисунок, скорее всего, формата bmp.
В задании же написано
Цитата:
Сообщение от Kristi2012 Посмотреть сообщение
выходного файла Output.txt
и
Цитата:
Сообщение от Kristi2012 Посмотреть сообщение
входного файла Input.txt
значит все верно сделано
Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
тут требуется BMP-изображения считывать, декодировать, ужимать и потом обратно преобразовывать
В том то и прелесть формата bmp, что он без сжатия. Можно читать как бинарный файл, структура простая
Rossomaxa вне форума   Ответить с цитированием
Старый 14.02.2012, 10:40   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Rossomaxa Посмотреть сообщение
В том то и прелесть формата bmp, что он без сжатия. Можно читать как бинарный файл, структура простая
"Ужимать" - в смысле применить указанный в задаче алгоритм.
Vladimir_S вне форума   Ответить с цитированием
Старый 14.02.2012, 14:28   #10 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Извиняюсь, не вчитался в задание. Вы совершенно правы, задание на псевдографику, просто вместо символов белых и черных прямоугольников по тексту 1 и 0.
AlexZir вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:20.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.