Baixe o app para aproveitar ainda mais
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; }
Compartilhar