• Nenhum resultado encontrado

Computa¸ c˜ ao I – Computa¸ c˜ ao I

N/A
N/A
Protected

Academic year: 2022

Share "Computa¸ c˜ ao I – Computa¸ c˜ ao I"

Copied!
11
0
0

Texto

(1)

Departamento de Ciˆencia da Computa¸c˜ao – IME-USP

Computa¸ c˜ ao I – Computa¸ c˜ ao I

Ciˆencias Moleculares http://panda.ime.usp.br Exerc´ıcio-Programa IV

OCULTAC¸ ˜AO POR MARCA D’ ´AGUA

1. Motivac¸ ˜oes Est´oricas

(Sugere-se bom humor ao ler esta se¸c˜ao de motiva¸c˜oes est´oricas. As instru¸c˜oes do que de fato dever´a ser entregue no EP encontram-se na Se¸c˜ao 5.)

Conta a lenda que um certo imperador romano C´esar Aubushtus cansou de assistir a encena¸c˜oes de faroeste e encantou-se com as est´orias e fantasias das mil e uma noites de Bagd´a. Algumas est´orias descreviam uma esp´ecie rara de um energ´etico ouro negro que reluzia por baixo dos jardins supensos da Babilˆonia, e algumas fantasias falavam de perigosas armas de destrui¸c˜ao de massa. Estas armas eram potencialmente perigosas pois uma eventual destrui¸c˜ao da massa levaria uma fome sem precedentes ao obeso povo romano. De fato, depois que foram abolidas no imp´erio as torturantes divers˜oes a base de p˜ao e circo, o neg´ocio da china fez da massa, tamb´em chamada de pasta ou macarr˜ao, a base alimentar de toda a sociedade romana.

Preocupado em garantir o suprimento de carboidratos e de energia para o seu povo, C´esar Aubushtus decidiu ampliar os dom´ınios do mundo livre do imp´erio romano e levar aos ci- dad˜aos de Bagd´a a liberdade e a pax romanas. Reuniu seus ex´ercitos para invadir aquelas terras e depor o tirano rei local, que geniosamente se recusava a pronunciar as palavras m´agicas: Ave C´esar. Apesar de contar com um arsenal de armas pirot´ecnicas desenvolvidas com as m´agicas tecnologias de seus magos cientistas, os melhores do mundo, C´esar Aubush- tus n˜ao conseguiu livremente impor a pax romana naquelas terras. Isto foi uma verdadeira tortura tanto para C´esar Aubushtus quanto para a popula¸c˜ao da Babilˆonia. A melindrosa Babilˆonia, baseada em hist´oricas desconfian¸cas, preferiu repudiar o infiel imperador a aceitar uma pax de araque.

Uma das desconfian¸cas era o conflito que havia numas terras vizinhas. Durante o Imp´erio de C´esar Aubushtus, duas fam´ılias disputavam entre si e eram lideradas respectivamente por Ari´eu Xar˜ao e Marmudo Abas. Ocorre que o C´esar dava seu apoio a Ari´eu Xar˜ao enquanto que a popula¸c˜ao da Babilˆonia apoiava Marmudo Abas. Assim, C´esar Aubushtus tra¸cou o mapa da estrada para a paz e decidiu dispender suas energias para pacificar as diferen¸cas entre Ari´eu Xar˜ao e Marmudo Abas.

No mundo livre romano e nas terras amigas1 reinava a liberdade. A pax romana garan- tia o desenvolvimento das comunica¸c˜oes atrav´es do emaranhado (chamado carinhosamente de N´eti) das estradas romanas (tamb´em chamadas de linques), estas brilhantemente de- senvolvidas pelos magos cientistas romanos. Pelos linques circulavam os carros romanos, transportando suas diversas mercadorias. Cada mercadoria era contida num inv´olucro cha- mado arquivo. Uma categoria importante de mercadoria era o documento, fosse ele um

1Terras onde se pronunciavam as palavras m´agicas ‘ave C´esar’.

1

(2)

desenho ou um texto de uma correspondˆencia (muitas vezes chamado de i-meio). Existiam dois amigos (Biu, liderado por Aubushtus, e Levi, liderado por Xar˜ao) que viviam trocando i-meios atrav´es da N´eti. A comunica¸c˜ao por i-meio n˜ao era totalmente segura pois, de vez em quando, alguns saqueadores roubavam mercadorias ou violavam as correspondˆencias exami- nando os arquivos. Estes saqueadores eram muitas vezes chamados R´equers, e costumavam implantar seus bed´eis, tamb´em chamados de Isn´ıfers, para ficar bisbilhotando os arquivos durante o tr´afego nas linques romanas. Certamente parecer´a paradoxal, mas na ˆansia de reduzir o problema dos saqueadores, muitos R´equers eram os pr´oprios soldados romanos que procuravam bisbilhotar os i-meios, de modo a identificar outros saqueadores, que tamb´em usavam i-meios para se comunicar. Como os dois amigos gozavam da liberdade no mundo livre e nas terras amigas, sabiam que o conte´udo de sua comunica¸c˜ao n˜ao era perigoso e nem se preocupavam em garantir a inviolabilidade de seus i-meios.

Para encurtar a est´oria e chegar logo ao desenvolvimento do exerc´ıcio-programa IV, num daqueles dias em que tudo d´a errado, houve um acidente nas manobras militares romanas, Ari´eu Xar˜ao sentiu-se tra´ıdo pelo imperador e iniciou-se uma guerra entre Xar˜ao e o C´esar.

Este foi um dia muito triste, face `a longa amizade e interdependˆencia entre o mundo romano e os familiares de Xar˜ao. Mesmo assim, Biu e Levi continuavam amigos e desejavam trocar seus i-meios pela N´eti, j´a que a pax romana garantira o desenvolvimento e uma grande difus˜ao das linques em suas regi˜oes. Contudo, num mundo em guerra, o conte´udo da amizade e do di´alogo entre ambos poderia ser entendido como trai¸c˜ao aos respectivos l´ıderes, mesmo que de fato esta amizade ajudasse a trazer a paz a que o mapa da estrada n˜ao fˆora capaz de conduzir. Assim decidiram que era o momento de garantir a inviolabilidade da comunica¸c˜ao de seus i-meios. Para tanto, decidiram convidar disc´ıpulos aprendizes da famosa Academia Mole Durares para resolver o problema.

2. Miss˜ao de cada disc´ıpulo da Academia Mole Durares

Suponha que Levi queira mandar um texto de um i-meio para Biu (poderia ser o contr´ario), atrav´es de um arquivo. Levi sabe que haver´a Isn´ıfers implatados por R´equers na beira das estradas romanas, as linques, xeretando os arquivos. Para n˜ao levantar suspeitas, o arquivo deve conter algum documento aparentemente banal, mas deve portar, de forma codificada, o texto do i-meio que Levi deseja mandar de forma inviolada para Biu.

3. Ocultac¸˜ao por marcas d’´agua

Cientes do problema, seus gregos mestres deram as linhas gerais de um esquema de co- difica¸c˜ao a ser usado nos i-meios entre Levi e Biu, e bolaram este Exerc´ıcio-Programa IV.

Este esquema viria a ser chamado deoculta¸c˜ao por marcas d’´agua devido `a semelhan¸ca com as t´ecnicas de marcas d’´aguas usadas para autenticar documentos escritos nos papiros de ent˜ao. Um eventual disc´ıpulo n˜ao deve estranhar se seus gregos mestres come¸carem a falar na l´ıngua grega, muitas vezes tamb´em chamada de linguagem C.

Enquanto filosofava sobre um eventual esquema de codifica¸c˜ao, um dos mestres teve o seu momento de eureka ao observar um papiro real que continha uma marca d’´agua. As- sim foi decidido que o documento portador do texto codificado seria um desenho. Sendo complacentes com seus disc´ıpulos, os mestres gregos decidiram que os desenhos n˜ao seriam coloridos, mas seriam obtidos atrav´es de v´arios tons de cinza (at´e 256, que s˜ao os n´umeros representados por um byte com 8 bits) variando do negro (0) ao branco (255). Num desenho

2

(3)

feito com esta cinzenta t´ecnica, uma marca d’´agua verdadeira era obtida ao enegrecer muito ligeiramente as regi˜oes do desenho onde se quisesse que aparecesse a tal da marca d’´agua. Tal enegrecimento poderia ser obtido ao se subtrair um valor pequenov, por exemplo v = 10, a cada ponto cuja cor pertencesse `a regi˜ao da marca d’´agua. (Naturalmente que os resultados seriam ajustados de forma a n˜ao se permitirem resultados negativos.) Se este valor pequeno fosse v = 1, a marca d’´agua era quase impercept´ıvel devido `a sutileza da diferen¸ca entre os dois n´ıveis de cinza. Assim foi decidido que os b bits menos significativos (tipicamente, b = 1) de cada tom de cinza de cada ponto do desenho seriam reservados para codificar o texto a ser ocultado. No caso de uma marca d’´agua falsa, que oculta um texto T, diversos pontos do desenho original s˜ao escolhidos para receber a marca d’´agua falsa e tˆem seus b bits menos significativos alterados. Diferentemente da marca d’´agua verdadeira, a estes b bits menos significativos do ponto do desenho, s˜ao somados b bits provenientes do textoT e os 8−b bits mais significativos do ponto do desenho n˜ao s˜ao de forma alguma alterados.

O processo de oculta¸c˜ao do texto por marca d’´agua propriamente dito era assim descrito pelos mestres gregos:

Sejam inteiros positivos m > 0 e n > 0 e seja um desenho representado por uma matriz D de dimens˜oes m ×n. Cada elemento da matriz ´e um inteiro que codifica um tom de cinza (que varia de 0 para preto a 255 para branco). Seja T um texto com k ≥ 0 letras, onde cada letra ´e representada por um byte (8 bits)2. Queremos obter uma matriz D0, de dimens˜oesm×n, que represente o desenho com a marca d’´agua falsa que oculta o textoT. Sejam os inteiros b e d parˆametros arbitrariamente escolhidos. Um ponto do desenho com marca d’´agua falsa ser´a reservado para portar informa¸c˜ao relativa aos parˆametros b e d. Se por um lado o texto for muito comprido comparado com o n´umero de pontos do desenho (o que equivale a dizer que 8k > mn−1), mais de um bit menos significativo por ponto deve ser usado para codificar o texto T. Assim o parˆametro b designa o n´umero de bits menos significativos a ser usado no desenho com marca d’´agua falsa que oculta T e deve satisfazer

`

as seguintes restri¸c˜oes:

(mn−1)b≥8k (1)

b = 0 ou b ´e divisor positivo de 8.

(2)

Se por outro lado o texto for bastante pequeno face `as dimens˜oes da matriz, nem todos os pontos do desenho receber˜ao marca d’´agua falsa. ´E poss´ıvel, no caso, espa¸car os pontos que receber˜ao a marca d’´agua falsa. Assim, define-se d como o espa¸camento entre linhas e colunas dos pontos do desenho que recebem a marca d’´agua falsa e as coordenadas dos pontos de D que receber˜ao a marca d’´agua falsa s˜ao, na ordem:

(d−1, d−1), (d−1,2d−1), . . . , (d−1,bndcd−1), (2d−1, d−1), (2d−1,2d−1), . . . , (2d−1,bndcd−1),

... ... . .. ...

(bmdcd−1, d−1), (bmdcd−1,2d−1), . . . , (bmdcd−1,bndcd−1).

2A codifica¸c˜ao mais comumente encontrada para os caracteres ´e a dado pela tabela ASCII, que de fato define apenas c´odigos de 0 a 127 (7 bits). Existem v´arias extens˜oes, como a isolatin1, que codificam letras acentuadas nos n´umeros de 128 a 255.

3

(4)

Observe-se que teremos3 bmdcbndc pontos do desenho, cada um deles ocultando b bits de informa¸c˜ao em seus b bits menos significativos, o que resulta em bmdcbndcb bits dispon´ıveis para oculta¸c˜ao. Para permitir a identifica¸c˜ao n˜ao amb´ıgua dos parˆametros b e d durante a fase de decodifica¸c˜ao, os b bits menos significativos da posi¸c˜ao (d−1, d−1) do desenho dever˜ao ocultar o valor4 de b. Assim, precisaremos ocultar um total de 8k +b bits. Se observarmos que

bm dcbn

dcb≤ mn d2 , resulta ent˜ao que d deve satisfazer `as desigualdades abaixo:

bm dcbn

dcb≥8k+b (3)

d≤ b

r bmn 8k+bc (4)

1≤d≤min(m, n) (5)

Quanto aos bits de T a serem ocultados, s˜ao considerados primeiramente os b bits menos significativos da letra5T[0], depois osbbits seguintes6, at´e que finalmente tenhamos ocultado os b bits mais significativos de T[k − 1]. Para permitir a identifica¸c˜ao n˜ao amb´ıgua dos parˆametros b e d durante a fase de decodifica¸c˜ao, os bits de T a serem codificados devem ser precedidos do n´umero b, que certamente pode ser representado com b bits. Usando a suposi¸c˜ao de que b ´e um divisor de 8, a seq¨uˆencia de n´umeros de b bits a ser ocultada nas falsas marcas d’´agua ´e7:

b,

T[0]

20 mod 2b, T2[0]b mod 2b, . . . , 2T8−b[0] mod 2b,

T[1]

20 mod 2b, T2[1]b mod 2b, . . . , 2T8−b[1] mod 2b,

... ... . .. ...

T[k−1]

20 mod 2b, T[k−1]2b mod 2b, . . . , T2[k−1]8−b mod 2b.

Observe que se x ´e o tamanho desta seq¨uˆencia, os bmdcbndc − x ultimos pontos de´ D escalados para receber a marca d’´agua falsa permanecer˜ao inalterados.

Daremos um exemplo da oculta¸c˜ao debbits propriamente dita. Sejamx, z∈ {0,1, . . . ,255}

e y∈ {0,1, . . . ,2b−1} n´umeros inteiros tais que:

• x´e um tom de cinza de um ponto a receber marca d’´agua no desenho D;

• y´e o n´umero inteiro formado por b bits de T e;

• z ´e um tom de cinza de um ponto no desenho D0 que recebeu uma marca d’´agua.

3Relembramos que, dadoxum real qualquer,bxcdenota omaior inteiro menor ou igual ax. Assim, bmdcdenota o quociente inteiro da divis˜ao dempord. Em C, isto coincide com a divis˜ao de duas vari´aveis inteiras n˜ao negativas.

4Certamente,b pode ser representado combbits.

5Este exerc´ıcio programa IV requer o conhecimento do tipo char, vetores e matrizes. Em C,T[i]denota o i-´esimo termo da seq¨encia armazenada no vetorTeD[i][j]denota o elemento dai-´esima linha ej-´esima coluna da matrizD. As enumera¸oes come¸cam com ´ındice 0. Cada letra deT´e armazenada num byte atrav´es de um n´umero que codifica esta letra. Por exemplo,’B’vale 66. Assim, como 66 em bin´ario ´e 01000010, os 2 bits menos significativos de’B’ao 10.

6Continuando o exemplo, os 2 bits seguintes de’A’ao 00.

7mod (%em C) ´e o operador bin´ario que calcula o resto da divis˜ao inteira.

4

(5)

Observe que, dados dois valores entrex, y e z, sempre ´e poss´ıvel determinar o terceiro. Em particular, pode-se verificar que

z =bx

2bc2b+ ((x+y) mod 2b) (6)

y = (z−x+ 256) mod 2b. (7)

Na Tabela 1 temos alguns valores poss´ıveis de x, y, ez.

x y z

1101 0110 0100 1101 1010 0101 1010 0101 0101 1111 0101 1011 0101 0101 0000 1011 0011 0000 1011 0011

Tabela 1. Exemplos de oculta¸c˜ao de y num tom de cinza x resultando no tom z (b= 4, n´umeros em nota¸c˜ao bin´aria).

4. Formato PGM

Neste EP utilizaremos o formato PGM para armazenar imagens em arquivos. Segundo este formato, o arquivo deve conter um cabe¸calho e a matriz correspondente `a imagem. Veja exemplo a seguir.

P2 5 4 16

9 4 5 0 8 10 3 2 1 7 9 1 6 3 15 1 16 9 12 7

A primeira linha do arquivo cont´em uma palavra-chave “P2” que ´e obrigat´oria. A segunda linha cont´em dois n´umeros que correspondem ao n´umero de colunas e linhas da matriz, respectivamente. A terceira linha cont´em um n´umero que ´e o maior n´umero da imagem (MaxVal). Para fins deste EP, MaxVal ´e no m´aximo 255. Os demais n´umeros do arquivo correspondem aos tons de cinza da imagem armazenados em forma de uma matriz de inteiros.

Cada tom de cinza ´e um n´umero entre 0 e MaxVal, com 0 indicando “negro” e Maxval indicando “branco”.

O formato PGM tamb´em permite colocar coment´arios. Caracteres ap´os o caractere ‘#’

at´e o pr´oximo fim de linha (caractere ‘\n’) s˜ao coment´arios e s˜ao ignorados. Um exemplo de imagem com coment´arios:

P2

# imagem: exemplo.pgm 5 4

16

9 4 5 0 8 10 3 2 1 7 9 1 6 3 15 1 16 9 12 7

5

(6)

5. Detalhes da miss˜ao de um disc´ıpulo

Apresentamos agora alguns exemplos mais espec´ıficos dos fragmentos dos textos em C que estes mestres gregos resolveram grafar em sua l´ıngua nativa, ao descrever a miss˜ao. Um disc´ıpulo da Academia Mole Durares interessado em cumprir sua miss˜ao deve obedecer `as especifica¸c˜oes abaixo8:

Por simplicidade, supomos que os i-meios trocados por Levi e Biu n˜ao contˆem letras acentuadas e contˆem apenas caracteres da tabela ASCII.

Adote

#define MAX 800

#define MAX2 640000

#define FNMAX 200

#define cinza int

1) Escreva em C uma fun¸c˜ao LeDesenho de prot´otipo

int LeDesenho( char nomearq[FNMAX], cinza M[MAX][MAX], int *pm, int *pn, int *pmax );

A stringnomearqguarda o nome de um arquivo em formato PGM. Devem ser devolvidos em

*pm,*pn, e *pmax os valores do n´umero de linhas, de colunas e o valor m´aximo que codifica um tom de cinza do arquivo de nomenomearq, respectivamente. O desenho que est´a contido no arquivo deve ser devolvido na matrizM. A fun¸c˜ao deve retornar 0 se n˜ao houver qualquer erro, e deve retornar 1 caso algum erro tenha sido encontrado (ou por conta da manipula¸c˜ao do arquivo, ou por conta do valor de MAXser insuficiente).

2) Escreva em C uma fun¸c˜ao LeTextode prot´otipo

int LeTexto( char nomearq[FNMAX], char T[MAX2], int *pk );

A string nomearqcont´em o nome de um arquivo. O texto presente nele dever´a ser devolvido em T. Deve-se devolver em *pk o n´umero de caracteres lidos e armazenados em T. A fun¸c˜ao deve retornar 0 se n˜ao houver erro algum, e deve retornar 1 caso algum erro tenha sido encontrado (ou por conta da manipula¸c˜ao do arquivo, ou por conta do valor de MAX2 ser insuficiente).

3) Escreva em C uma fun¸c˜ao BeDeu de prot´otipo

int BeDeu( int k, int m, int n, int *pb, int *pd);

A fun¸c˜ao deve calcular os parˆametros do processo de oculta¸c˜ao por marcas d’´agua de um texto de kcaracteres atrav´es de um desenho de dimens˜oes m porn. O n´umero de bits menos significativos b a ser usado no desenho com marca d’´agua ´e devolvido em *pb. Dentre as diversas op¸c˜oes poss´ıveis que satisfa¸cam as equa¸c˜oes (2) e (1), deve-se escolher aquela que

8Segundo alguns papir´ologos, os textos abaixo escritos com tipografia de m´aquina de escrever s˜ao a translitera¸ao dos originais gregos encontrados em s´ıtios arqueol´ogicos rec´em-descobertos durante as obras civis atualmente em curso na cidade de Atenas, em sua prepara¸ao `as Olimp´ıadas de MMIV.

6

(7)

minimiza b de forma que o desenho com marca d’´agua falsa fique o mais fiel poss´ıvel ao desenho original9. O espa¸camento entre linhas e colunas d´e devolvido em*pd. Para tornar a marca d’´agua o mais impercept´ıvel poss´ıvel, busca-se espalhar ao m´aximo os pontos com marca d’´agua. Assim, uma vez escolhidobm´ınimo, deve-se escolherdm´aximo dentre aqueles que satisfazem `as equa¸c˜oes (3) e (5). N˜ao ´e dif´ıcil verificar que um tal d m´aximo satisfar´a

`

a equa¸c˜ao (4) e ser´a relativamente pr´oximo ao limitante superior dado por esta equa¸c˜ao10. A fun¸c˜ao BeDeu deve retornar 0, se for poss´ıvel encontrar parˆametros que satisfa¸cam as restri¸c˜oes necess´arias e deve retornar 1 caso n˜ao seja poss´ıvel.

Na Tabela 2 temos os exemplos de alguns valores obtidos para b e d em fun¸c˜ao de k, m, e n. No ´ultimo exemplo, n˜ao h´a valores b e d que satisfazem as restri¸c˜oes necess´arias.

m n k b d

7 7 0 0 7

7 7 1 1 2

7 14 1 1 2

7 15 1 1 3

7 7 2 1 1

7 7 6 1 1

7 7 7 2 1

7 7 12 2 1

7 7 13 4 1

7 7 24 4 1

7 7 25 8 1

7 7 48 8 1

7 7 49 — —

Tabela 2. Exemplos de c´alculos de b e d pela fun¸c˜aoBeDeu

4) Escreva em C uma fun¸c˜ao ProximosBBitsde prot´otipo

int ProximosBBits( char T[MAX2], int b, int *pik, int *pib);

A fun¸c˜ao recebe o texto T e devolve o inteiro formado pelos pr´oximos b bits (b= b) do texto T. Estes pr´oximos b bits s˜ao obtidos da seguinte forma: descartam-se os *pib bits menos significativos de T[*pik] e tomam-se os pr´oximos11 b bits menos significativos de T[*pik]. Os valores de*pike*pibdever˜ao ser devidamente atualizados para apontar para os pr´oximos b bits a serem extra´ıdos do texto T. A fun¸c˜ao deve retornar o n´umero bin´ario com b bits extra´ıdo do texto T.

Na Tabela 3 temos exemplos de alguns valores devolvidos pela fun¸c˜ao. Em todos os casos, o caractere representado por T[0] ´e a letra ’g’, ou seja, 103 = 0110 0111 de acordo com a tabela ASCII. O valor retornado pela fun¸c˜ao aparece na coluna proximos.

9Observe que b= 0 se e s´o sek= 0.

10O uso desta informa¸ao pode acelerar o c´alculo dedmas n˜ao ´e necess´ario.

11Seb ao fosse um divisor de 8, poderia ocorrer que a um certo momento teriam restado emT[*pik]

um n´umerorde bits menor que b. Neste caso, estes rbits seriam os menos significativos e os demaisbr bits seriam osbrbits menos significativos deT[*pik + 1].

7

(8)

Entrada Sa´ıda

b *pik *pib *pik *pib proximos

1 0 0 0 1 1

1 0 2 0 3 1

1 0 3 0 4 0

1 0 7 1 0 0

2 0 0 0 2 3

2 0 2 0 4 1

2 0 4 0 6 2

2 0 6 1 0 1

4 0 0 0 4 7

4 0 4 1 0 6

8 0 0 1 0 103

Tabela 3. Exemplos de valores calculados pela fun¸c˜aoProximosBBits

5) Escreva em C uma fun¸c˜ao Codificade prot´otipo void Codifica( cinza D[MAX][MAX], int m, int n,

char T[MAX2], int k,

cinza Dl[MAX][MAX], int b, int d, int modo);

A fun¸c˜ao recebe um desenho representado pela matriz D, de dimens˜oesm por n, recebe um textoTdekletras, recebe embe em dos parˆametrosb ed acima descritos e recebe emmodo o modo de opera¸c˜ao corrente (se verborr´agico ou n˜ao). Esta fun¸c˜ao deve calcular um desenho com marca d’´agua falsa que codifica Te armazen´a-lo na matrizDl, de dimens˜oesm porn. Se o modo de opera¸c˜ao corrente for verborr´agico, deve imprimir alguns dados (descritos mais adiante) durante o processo de codifica¸c˜ao.

6) Escreva em C uma fun¸c˜ao Maximo de prot´otipo cinza Maximo( cinza D[MAX][MAX], int m, int n);

A fun¸c˜ao recebe o desenho representado pela matriz D, de dimens˜oes m por n, e que retorna o m´aximo da matriz.

7) Escreva em C uma fun¸c˜ao EscreveDesenho de prot´otipo

int EscreveDesenho( char nomearq[FNMAX], cinza M[MAX][MAX], int m, int n, int max);

Ela recebe em nomearquma string com o nome de um arquivo, abre-o para escrita e coloca no arquivonomearqo desenho da matrizMcommlinhas encolunas, usando o formato PGM.

O valor maxcorresponde ao m´aximo valor de um tom de cinza e deve ser este o valor a ser escrito no arquivo PGM na linha correspondente. A fun¸c˜ao deve retornar 0 se n˜ao houver erro algum e 1 caso algum erro tenha sido encontrado por conta da manipula¸c˜ao do arquivo.

8

(9)

8) Escreva em C uma fun¸c˜ao DeBeDeude prot´otipo

void DeBeDeu( cinza D[MAX][MAX], cinza Dl[MAX][MAX], int m, int n, int *pb, int *pd);

A fun¸c˜ao recebe dois desenhos representados pelas matrizes D e Dl, ambas de tamanho m por n. Sabe-se queDl foi obtida de D atrav´es de uma oculta¸c˜ao de texto por marca d’´agua.

A fun¸c˜ao deve detectar o espa¸camento entre linhas e colunas d que foi usado na oculta¸c˜ao e devolvˆe-lo em *pd. Da mesma forma, a fun¸c˜ao deve detectar o n´umero de bits menos significativos b que foi usado no processo e devolvˆe-lo em *pb. Sugest˜ao: calcule o menor i para o qual a diferen¸caDl[i][i]-D[i][i] n˜ao seja nula.

9) Escreva em C uma fun¸c˜ao DeCodifica de prot´otipo

int DeCodifica( cinza D[MAX][MAX], cinza Dl[MAX][MAX], int m, int n, int b, int d,

char T[MAX2], int modo );

DeCodifica recebe na matriz D, de dimens˜oes m por n, um desenho que sofreu altera¸c˜oes por um processo de oculta¸c˜ao de texto por marca d’´agua de forma a obter o desenho rece- bido na matriz Dl, tamb´em de dimens˜oes m por n. Os parˆametrosb e d usados no processo de oculta¸c˜ao s˜ao recebidos embe emd, respectivamente. Se o modo de opera¸c˜ao recebido em

modo for verborr´agico, a fun¸c˜ao

deve imprimir alguns dados (descritos mais adiante). Esta fun¸c˜ao deve devolver em T o texto que foi codificado e deve retornar k, o n´umero de letras que foram originalmente codi- ficadas. OBS: para evitar ambiguidades, podemos supor que o texto ocultado n˜ao termina com o caractere ’\0’.

10) Escreva em C uma fun¸c˜aoEscreveTexto de prot´otipo

int EscreveTexto( char nomearq[FNMAX], char T[MAX2], int k );

A string nomearq cont´em o nome de um arquivo, que dever´a receber uma c´opia do texto T de k letras. A fun¸c˜ao deve retornar 0 se n˜ao houver qualquer erro, e deve retornar 1 caso algum erro tenha sido encontrado por conta da manipula¸c˜ao do arquivo.

11) Escreva em C um programa que pe¸ca uma das seguintes opera¸c˜oes abaixo descritas e as executa. Isto deve ser feito repetidamente at´e que a opera¸c˜ao 0 seja solicitada.

A opera¸c˜ao 0 termina o programa.

A opera¸c˜ao 1 pede, na ordem:

(1) o nome de um arquivo que cont´em um desenho D;

(2) o nome de um arquivo que cont´em um texto T;

(3) o nome de um arquivo que dever´a conter o desenho D0 com marca d’´agua falsa.

Este desenhoD0 ´e o desenho obtido a partir deDatrav´es da oculta¸c˜ao do textoT por marca d’´agua. No arquivo em formato PGM que cont´em D0, o valor do m´aximo valor de um tom de cinza deve ser o m´aximo entre: o valor correspondente no arquivo PGM que foi lido e

9

(10)

cont´em o desenho D; e o m´aximo inteiro da matriz D0. Observe que os desenhos D e D0 ser˜ao idˆenticos se e s´o o texto T n˜ao tiver letra alguma.

A opera¸c˜ao 2 pede, na ordem:

(1) o nome de um arquivo que cont´em um desenho D;

(2) o nome de um arquivo que cont´em o desenhoD0 com marca d’´agua falsa;

(3) o nome de um arquivo que dever´a conter um texto T obtido da decodifica¸c˜ao de D eD0.

A opera¸c˜ao 3 pede o nome de um arquivo que cont´em um texto e imprime o texto na tela.

A opera¸c˜ao 4 deve trocar o modo de opera¸c˜ao para verborr´agico. Uma nova opera¸c˜ao 4 faz voltar ao modo de opera¸c˜ao normal.

Para facilitar a corre¸c˜ao, algumas impress˜oes na tela devem ser feitas:

(1) Toda vez que um desenhoD (ouD0) for lido com sucesso, os valores demen devem ser impressos, nesta ordem;

(2) Toda vez que os parˆametrosb e d forem calculados com sucesso, os mesmos dever˜ao ser impressos, nesta ordem;

(3) Toda vez que um texto T for lido com sucesso de um arquivo ou decodificado, o n´umero k de suas letras deve ser impresso.

Se o modo de opera¸c˜ao for verborr´agico, e somente neste caso,algumas impress˜oes na tela devem ser feitas em uma ´unica linha, e nesta ordem, toda vez que forem extra´ıdos alguns bits de texto a partir de um ponto que recebeu uma marca d’´agua:

(1) A posi¸c˜ao do desenho escolhida que recebeu a marca d’´agua;

(2) Cada inteiro que codifica os b bits do texto que foram ocultados;

(3) O tom de cinza do desenho original;

(4) O tom de cinza do desenho com a marca d’´agua falsa.

As impress˜oes dos tons de cinza devem ser feitas com formato%02x, para impress˜ao de inteiro em formato hexadecimal12.

Nas impress˜oes do modo verborr´agico na codifica¸c˜ao, usar formato %02x.

O programa deve come¸car com o modo de opera¸c˜ao verborr´agico desativado.

6. Observac¸ ˜oes finais (1) N˜ao esque¸ca de colocar o cabe¸calho no seu EP.

(2) O programa a ser entregue ´e o c´odigo-fonte em linguagem C (extens˜ao.c). Programas com extens˜ao.cpp ou execut´aveis receber˜ao nota ZERO.

(3) Programas com WARNING ter˜ao desconto de um (1.0) ponto.

(4) O programa deve ser feito individualmente. Programas copiados receber˜ao nota −4.

12Em nota¸ao hexadecimal, os n´umeros s˜ao denotados em base 16. Tipicamente, os digitos hexadecimais ao os d´ıgitos de 0 a 9 mais as letras de a a f

10

(11)

(5) Um visualizador Windows para um arquivo em formato PGM que recomendamos ´e aquele dispon´ıvel em<http://www.irfanview.com/>. Vale a pena dar uma compa- rada entre os arquivos original e com marca d’´agua.

(6) N˜ao ´e necess´ario, mas se algu´em quiser, pode usar as fun¸c˜oes da biblioteca descritas em math.h.

(7) Durante a execu¸c˜ao de uma opera¸c˜ao, quando uma fun¸c˜ao retornar c´odigo de erro, alguma mensagem adequada deve ser impressa, a opera¸c˜ao deve ser cancelada, mas n˜ao o programa. Este deve esperar que o usu´ario entre com uma nova opera¸c˜ao.

(8) Haver´a arquivos para testes e arquivo execut´avel deste EP (em vers˜ao linux) dis- pon´ıveis em <http://www.ime.usp.br/~alair/ccm118/ep4/>.

(9) Haver´a informa¸c˜oes complementares a este EP dispon´ıveis em <http://www.ime.

usp.br/~alair/ccm118/ep4/adendo.html>.

7. Arquivos: Leitura e Escrita

Recentes descobertas arqueol´ogicas descobriram fragmentos de alguns papiros contendo a transcri¸c˜ao completa das fun¸c˜oes que manipulam arquivos (fazem leitura ou escrita):

LeDesenho, LeTexto, EscreveDesenho e EscreveTexto. Os disc´ıpulos da Academia Mole Durares costumavam realizar suas competi¸c˜oes ol´ımpicas durante um ano inteiro. Ap´os a maratona, os melhores colocados tinham preferˆencia na escolha da sua grande ´area, ou carreira. Estas fun¸c˜oes abaixo fornecidas foram premiadas com medalha de ouro nestas ma- ratonas. A grande vantagem ´e que elas n˜ao est˜ao ocultas em desenhos e podem ser colocadas diretamente no seu programa. Elas est˜ao dispon´ıveis em

<http://www.ime.usp.br/~alair/ccm118/ep4/arquivos.c>.

11

Referências

Documentos relacionados

Aos trinta dias do mês de julho de dois mil e treze, às quatorze horas, na Sala de Reuniões do Prédio da Administração do Centro de Ciências Humanas e

3259 21 Animação e dinamização de actividades lúdico-expressivas - expressão musical 50 3260 22 Animação e dinamização de actividades lúdico-expressivas -

Noex ® (budesonida) é indicado para pacientes com rinites não-alérgica e alérgica perenes e alérgica sazonal, tratamento de pólipo nasal e prevenção de pólipo nasal

Chora Peito Chora Joao Bosco e Vinicius 000 / 001.. Chão De Giz Camila e

O objetivo, tal como visto anteriormente, era traçar um modelo de quadro descritivo para a emissão da ‘Opinião Desfavorável’ em português do Brasil que pudesse servir de suporte

O regime jurídico do abono de ajudas de custo e transporte ao pessoal da Administração Pública, quando deslocado em serviço público em território nacional, encontra-se fixado há

6 Consideraremos que a narrativa de Lewis Carroll oscila ficcionalmente entre o maravilhoso e o fantástico, chegando mesmo a sugerir-se com aspectos do estranho,

O desenvolvimento das interações entre os próprios alunos e entre estes e as professoras, juntamente com o reconhecimento da singularidade dos conhecimentos