Você está na página 1de 4

Algoritmos e Programao I Exerccio-Programa 3

Marcelo Hashimoto 19 de maro de 2013

Introduo

Neste Exerccio-Programa voc vai implementar um codicador e decodicador hexadecimal, baseado principalmente nos conceitos de vetores e strings. No permitido o uso de qualquer conceito que tenha sido ensinado depois da Semana 11 de aula. Parte da correo deste exerccio ser feita automaticamente, portanto fundamental que a entrada e a sada do seu programa sejam exatamente como a especicao pede.

Caracteres como inteiros

Conceitualmente, variveis do tipo char armazenam caracteres como a, b e c. Tecnicamente, no entanto, o que elas armazenam so cdigos numricos que representam caracteres. Voc pode facilmente descobrir que cdigos so esses se atribuir o valor de um char a um int. char c; int i; c = a; i = c; printf("%d\n", i); Se voc executar o programa acima, poder vericar que ele imprime o cdigo 97. Substituindo a por b, ele imprime 98. Os cdigos para todas os caracteres do alfabeto latino podem ser vistos na tabela abaixo. A B C D E F G H I J K L M 65 66 67 68 69 70 71 72 73 74 75 76 77 N O P Q R S T U V W X Y Z 78 79 80 81 82 83 84 85 86 87 88 89 90 a b c d e f g h i j k l m 97 98 99 100 101 102 103 104 105 106 107 108 109 n o p q r s t u v w x y z 110 111 112 113 114 115 116 117 118 119 120 121 122

Inteiros como caracteres

Repare que todos os cdigos numricos acima esto entre 0 e 255. Para qualquer inteiro n nesse intervalo, existem dois inteiros, x e y , entre 0 e 15 tais que n = 16x + y.

Descobrir esses dois inteiros fcil: ao dividir n por 16, obtemos x como quociente e y como resto. Considere agora a seguinte representao dos inteiros entre 0 e 15 como caracteres: 0 1 2 3 4 5 6 7 representado representado representado representado representado representado representado representado por por por por por por por por 0; 1; 2; 3; 4; 5; 6; 7; 8 9 10 11 12 13 14 15 representado representado representado representado representado representado representado representado por por por por por por por por 8; 9; A; B; C; D; E; F.

Podemos concluir que, sob o esquema acima, qualquer inteiro entre 0 e 255 pode ser representado por dois caracteres dentro do conjunto H = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}.

Codicao
A partir das duas sees anteriores, considere a seguinte sequncia de transformaes: caractere latino inteiro entre 0 e 255 dois inteiros entre 0 e 15 dois caracteres em H. Alguns exemplos dessa sequncia so dados a seguir: A R i z 65 82 105 122 4 5 6 7 e e e e 1 2 9 10 4 5 6 7 e e e e 1 2 9 A

Decodicao
Analogamente, podemos considerar a sequncia inversa de transformaes: dois caracteres em H dois inteiros entre 0 e 15 inteiro entre 0 e 255 caractere latino. Exemplos anlogos aos anteriores so dados a seguir: 4 5 6 7 e e e e 1 2 9 A 4 5 6 7 e e e e 1 2 9 10 65 82 105 122 A R i z

Especicao
Seu programa deve executar exatamente as seguintes operaes. 1. Imprime a string "Digite 1 para codificar e 2 para decodificar: espao no nal e no deve haver quebra de linha. ". Deve haver exatamente um

2. Recebe um inteiro do usurio atravs da funo scanf com %d. Voc pode supor que o usurio de fato digitar 1 ou 2, sem se preocupar em repetir o pedido ou corrigir a entrada. 3. Executa o cdigo a seguir, que ser explicado em aula: do { scanf("%c", &c); } while(c != \n);

4. Imprime a string "Digite o texto: quebra de linha.

". Deve haver exatamente um espao no nal e no deve haver

5. Recebe uma linha de texto do usurio atravs da funo fgets. (a) Se o inteiro recebido no Item 2 foi 1, voc pode supor que o usurio digitar uma linha de texto com no mximo 25 caracteres sem contar a quebra de linha. Alm disso, pode supor que cada um desses caracteres ser ou um dos 52 latinos da Seo 2 ou um dos seis abaixo. ! " 32 33 34 , . ? 44 46 63

(b) Se o inteiro recebido no Item 2 foi 2, voc pode supor que o usurio digitar uma linha de texto com no mximo 50 caracteres sem contar a quebra de linha. Alm disso, pode supor que cada um desses caracteres ser do conjunto H e que o total ser par. 6. Imprime uma linha de texto. (a) Se o inteiro recebido no Item 2 foi 1, essa linha impressa a codicao da linha que o usurio digitou, segundo o processo descrito na Seo 4. A quebra de linha deve ser desconsiderada. (b) Se o inteiro recebido no Item 2 foi 2, essa linha impressa a decodicao da linha que o usurio digitou, segundo o processo descrito na Seo 5. A quebra de linha deve ser desconsiderada. 7. Termina.

Exemplos
Seguem dois exemplos de execuo. Os trechos em vermelho indicam entrada do usurio. Digite 1 para codificar e 2 para decodificar: 1 Digite o texto: Hello World! 48656C6C6F20576F726C6421 Digite 1 para codificar e 2 para decodificar: 2 Digite o texto: 48656C6C6F20576F726C6421 Hello World!

Detalhes de entrega
Este exerccio deve ser feito individualmente ou em grupo de 2 a 3 alunos. O programa deve ser entregue pelo Blackboard at as 23:50 do dia 11 de maio. Entregue apenas um arquivo de cdigo-fonte, como anexo e com extenso c.

O enunciado foi projetado para um prazo menor do que o estabelecido acima. Voc pode entregar em cima da hora, mas problemas tcnicos do Blackboard no sero aceitos como justicativa para atrasos.

Critrios de correo
Ao entregar seu trabalho, verique se nenhum dos problemas abaixo ocorre. Grupo com mais de 3 alunos: nota zero. Entrega atrasada: nota zero. Arquivos a mais: nota zero. Entrega no anexo: nota zero. Entrega no tem extenso c: nota zero. Erro durante compilao: nota zero.

Aviso durante compilao: desconto de 1.0 ponto por aviso. Uso de conceito ensinado depois da Semana 11: nota zero. Uso de conceito que no foi ensinado: nota zero. No cumpre requisitos do enunciado: nota zero. Se qualquer tipo de plgio for constatado, todos os membros de todos os grupos envolvidos no mnimo recebero nota zero. Outras punies adicionais ainda podero ser estabelecidas posteriormente pela coordenao.

Você também pode gostar