Sie sind auf Seite 1von 4

ÁREA II – CCEN / UFPE

Disciplina: IF 165 – Computação Eletrônica – 2º Exercício Escolar 2014.2 Data: 25/11/ 2014
Nome legível do aluno: ................................................................................................. Turma .........
Observações gerais:
1) Preencher os dados do cabeçalho do bloco de provas e na folha de questões o nome e a turma;
2) Ao final da prova entregar ao professor ou fiscal a folha de questões e o caderno de prova;
3) Cada quesito vale cinco pontos.

1º quesito: Uma empresa de tecnologia deseja criar um detector de padrões para imagens médicas, a fim
de realizar o diagnóstico automatizado de algumas doenças. Uma imagem coletada de um paciente é
representada por uma matriz de números inteiros com dimensão 1000 x 1000. O padrão a ser detectado
nesta imagem é também representado por uma matriz quadrada de números inteiros, uma sub-imagem
com dimensões 3x3 contendo os valores abaixo:

Você deverá implementar um protótipo deste detector na linguagem C, usando as orientações abaixo:

a) Implementar uma função int Detectar(int imagem[1000][1000], int subimagem [3][3]) que
possui como parâmetros de entrada uma matriz representando a imagem do exame e a matriz
representando a sub-imagem (padrão a ser detectado na imagem). Esta função retornará 1 se a
sub-imagem estiver contida na imagem e 0 caso contrário;
b) Na função int main(), o programa deverá:
i. Ler do teclado os valores para a matriz imagem;
ii. Imprimir na tela em formato matricial a imagem lida;
iii. Depois da leitura das matrizes, a função Detectar deverá ser chamada, passando como
argumentos a imagem e a sub-imagem. Caso o retorno da função seja verdadeiro (ou seja,
a sub-imagem está contida na imagem), deverá ser impresso na tela a seguinte mensagem
"Doença detectada!". Caso o valor retornado seja 0, deve ser impresso: "Doença não
detectada!".
Exemplo de matriz de imagem e sub-imagem detectada:

IMAGEM SUB -IMAGEM


#include <stdio.h>
#define IMAGEM_N 1000
#define SUBIMAGEM_N 3

int Detectar(int imagem[IMAGEM_N][IMAGEM_N], int subimagem[SUBIMAGEM_N][SUBIMAGEM_N]) {

int i, j;
int is, js;
int encontrado;

for (i=0; i<=IMAGEM_N-SUBIMAGEM_N; i++) {


for (j=0; j<=IMAGEM_N-SUBIMAGEM_N; j++) {
encontrado = 1;

for (is=0; is<SUBIMAGEM_N && encontrado; is++)


for (js=0; js<SUBIMAGEM_N && encontrado; js++) {
if (imagem[i+is][j+js]!=subimagem[is][js]) {
encontrado = 0;
} Critério de correção
} • Declaração das matrizes 0,5 pt.
if (encontrado) • Função detectar 2,5
return 1; • Leitura da matriz imagem.................................0,5
} • Impressão da matriz de entrada 0,5
} • Chamada da função 0,5
return 0;
• Impressão da mensagem 0,5
}
Subtrair até 1.5 pontos referentes a erros na estrutura
int main() geral do programa e nas definições de variáveis
{
int imagem[IMAGEM_N][IMAGEM_N];
int subimagem[SUBIMAGEM_N][SUBIMAGEM_N] = {{1,1,1}, {1,1,1}, {2,2,2}};
int i, j;

for (i=0; i<IMAGEM_N; i++)


for (j=0; j<IMAGEM_N; j++) {
printf("Digite o valor da imagem na posicao [%d][%d]:", i, j);
scanf("%d", &imagem[i][j]);
}

printf("Imagem lida: \n");


for (i=0; i<IMAGEM_N; i++) {
for (j=0; j<IMAGEM_N; j++) {
printf("%d\t", imagem[i][j]);
}
printf("\n");
}

if (Detectar(imagem, subimagem) == 1) {
printf("Doenca detectada!");
} else {
printf("Doenca nao detectada!");
}

return 0;
}
2º quesito: A Cifra de César é uma das mais simples e conhecidas técnicas de criptografia. É um tipo de
codificação de substituição na qual cada letra do texto é substituída por outra, por exemplo, através de
um deslocamento de n letras a mais ou a menos. Por exemplo, a mensagem “CASA” codificada com um
deslocamento de +3 letras, se transformaria em “FDVD”. Nesse caso, a senha seria então o
deslocamento realizado, ou seja, o valor de n. Em C cada caractere é representado internamente por um
número, isto permite que qualquer caractere seja "somado" com valores numéricos resultando outro
caractere. Ex.:

char c = 'A' + 1 //atribui o caractere 'B' para a variável c.

Com isso, é possível programar o mesmo tipo de codificação fazendo um deslocamento no código ASCII
de cada letra da mensagem (somando-se n). Para decodificar, conhecendo-se o valor de n, basta desfazer
o deslocamento. Considerando o que foi exposto:

a) Crie a função void codifica(char texto[], int senha) para codificar uma mensagem
com a Cifra de Cesar. A função recebe como parâmetro uma string (a mensagem) e um inteiro (a
senha) e codifica a mensagem gravando o resultado na própria string da mensagem recebida
como parâmetro;
b) Crie a função void decodifica(char codigo[], int senha) para decodificar uma
mensagem. A função recebe como parâmetro uma string (a mensagem codificada) e um inteiro
(a senha) e decodifica a mensagem gravando o resultado sobre a própria string recebida como
parâmetro;
c) Utilizando as funções acima, faça um programa em C para:
i) Declare um vetor de char com capacidade para até 30 caracteres e um inteiro para
armazenar a “senha”;
ii) Em uma estrutura de laço, o programa deve solicitar que usuário digite a
mensagem e a senha para criptografa-la, armazenando-as no vetor de char e
variável de senha. Após a leitura a mensagem original deve ser impressa na tela;
iii) A mensagem deve ser codificada na função Main(), utilizando a função “codifica”
e sua versão codificada exibida na tela, também a partir da função Main();
iv) A mensagem deve ser decodificada na função Main() utilizando a função
“decodifica” e sua versão decodificada exibida na tela, também a partir da função
Main();
v) O laço termina caso o usuário digite a palavra “fim” como mensagem a ser
codificada.

Obs.: A função strlen() definida em string.h permite verificar o tamanho de uma String.

#include <stdio.h>
#include <string.h> Critério de correção
• Função codifica 1,0 pt.
void codifica(char texto[], int senha) {
for (int i=0; texto[i]!='\0'; i++) { • Função decodifica 1,0
texto[i] = texto[i] + senha; • Estrutura de repetição e parada.............................1,0
} • Leitura dos dados 0,5
} • Chamada das funções 1,0
• Impressão dos resultados 0,5
void decodifica(char codigo[], int senha) {
for (int i=0; codigo[i]!='\0'; i++) { Subtrair até 1.5 pontos referentes a erros na estrutura
codigo[i] = codigo[i] - senha; geral do programa e nas definições de variáveis
}
}

int main()
{
char mensagem[31];
int senha;
int i = 0;
do {
printf("\nDigite uma mensagem para ser codificada: ");
fflush(stdin);
scanf("%30[^\n]", mensagem[i]);

if (strcmp(mensagem, "fim")==0) {
break;
}

printf("\nDigite uma senha: ");


fflush(stdin);
scanf("%d", &senha);

printf("\n\nMensagem original: %s\n", mensagem);

codifica(mensagem, senha);
printf("\nMensagem codificada: %s\n", mensagem);

decodifica(mensagem, senha);
printf("\nMensagem decodificada: %s\n", mensagem);

} while (1);

return 0;
}

Das könnte Ihnen auch gefallen