Escolar Documentos
Profissional Documentos
Cultura Documentos
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:
int i, j;
int is, js;
int encontrado;
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.:
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;
}
codifica(mensagem, senha);
printf("\nMensagem codificada: %s\n", mensagem);
decodifica(mensagem, senha);
printf("\nMensagem decodificada: %s\n", mensagem);
} while (1);
return 0;
}