Buscar

prova com Gab - 2ºEE

Prévia do material em texto

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 
Á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 ......... 
 
 
#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; 
 } 
 } 
 if (encontrado) 
 return 1; 
 } 
 } 
 return 0; 
} 
 
int main() 
{ 
 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> 
 
void codifica(char texto[], int senha) { 
 for (int i=0; texto[i]!='\0'; i++) { 
 texto[i] = texto[i] + senha; 
 } 
} 
 
void decodifica(char codigo[], int senha) { 
 for (int i=0; codigo[i]!='\0'; i++) { 
 codigo[i] = codigo[i] - senha; 
 } 
} 
 
 
 
 
int main() 
{ 
 char mensagem[31]; 
 int senha; 
 int i = 0; 
 do { 
 printf("\nDigite uma mensagem para ser codificada: "); 
 fflush(stdin); 
 scanf("%30[^\n]", mensagem); 
 
 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; 
}

Continue navegando