Ferramentas do usuário

Ferramentas do site


prog2:verificador_ortografico

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
prog2:verificador_ortografico [2019/04/04 17:17]
maziero
prog2:verificador_ortografico [2019/04/09 13:39] (atual)
maziero
Linha 1: Linha 1:
 +====== Verificador ortográfico ======
 +
 +Este projeto visa implementar um verificador ortográfico,​ que recebe um texto como entrada e produz o mesmo texto na saída, com as palavras potencialmente incorretas indicadas entre colchetes ([...]). Uma palavra é considerada potencialmente incorreta se não for encontrada em um arquivo de dicionário.
 +
 +===== Atividade =====
 +
 +Construa um programa para verificar a ortografia das palavras de um texto lido da entrada padrão (//​stdin//​). A saída padrão (//​stdout//​) deve **reproduzir fielmente o texto de entrada**, mas colocando as palavras que não estão no dicionário entre colchetes. O dicionário está disponível no arquivo ''/​usr/​share/​dict/​brazilian''​ (em distribuições Linux populares).
 +
 +Consideram-se palavras como sequências contíguas de letras (A-Z, a-z) com ou sem acentos; os demais caracteres (números, espaços e outros símbolos) não fazem parte de palavras.
 +
 +Por exemplo, para esta entrada:
 +
 +<​code>​
 +Para que o pocessador possa interromper a execução de uma tarefa
 +e retornar a ela mais tarde, sem corromper seu estado interno,
 +é necessário definir operações para salvar e restaurrar o
 +contexto da tarefa.
 +
 +O ato de salvar os valores do contexto atual em seu TCB e
 +possivelmente restaurar o contexto de outra tarefa, previamente
 +salvo em outro TCB, é denominado "troca de contexto"​.
 +</​code>​
 +
 +O programa deve gerar esta saída:
 +
 +<​code>​
 +Para que o [pocessador] possa interromper a execução de uma tarefa
 +e retornar a ela mais tarde, sem corromper seu estado interno, ​
 +é necessário definir operações para salvar e [restaurrar] o
 +contexto da tarefa.
 +
 +O ato de salvar os valores do contexto atual em seu [TCB] e
 +possivelmente restaurar o contexto de outra tarefa, previamente
 +salvo em outro [TCB], é denominado "troca de contexto"​.
 +</​code>​
 +
 +Forma de chamada:
 +
 +<​code>​
 +./​ortografia < entrada.txt > saida.txt
 +</​code>​
 +
 +Exemplos de arquivos de texto com erros de ortografia (baixe com "​salvar como", para evitar conversões de caracteres indesejadas):​
 +
 +  * {{plutao.txt|}}
 +  * {{memoria.txt|}}
 +  * {{bigfile.txt|}}
 +
 +<note important>​
 +Os arquivos acima e o dicionário estão no formato [[https://​en.wikipedia.org/​wiki/​ISO/​IEC_8859-1|ISO-8859-1]],​ que usa um byte por caractere para representar letras e sinais gráficos na tabela ASCII estendida (com 256 caracteres). Se for usar outros textos, assegure-se de que também estejam no formato ISO-8859-1, para facilitar seu trabalho.
 +</​note>​
 +
 +A implementação deve atender os seguintes requisitos:
 +
 +  * funcionar corretamente com os exemplos desta página m(
 +  * ler o dicionário de ''/​usr/​share/​dict/​brazilian''​ (não copiar o arquivo para seu diretório);​ no Ubuntu e derivados, esse arquivo é provido pelo pacote //​wbrazilian//​.
 +  * o dicionário deve ser totalmente carregado em memória RAM antes de ser usado
 +  * ler a entrada de //stdin// e escrever a saída em //stdout//
 +  * a localização das palavras no dicionário deve usar um algoritmo de [[https://​en.wikipedia.org/​wiki/​Binary_search_algorithm|busca binária]]
 +  * o executável deve se chamar ''​ortografia''​
 +  * <​del>​usar ''​Makefile''​ com ao menos os alvos ''​all'',​ ''​clean''​ e ''​purge''</​del>​
 +  * não gerar //​warnings//​ ao compilar com a opção ''​-Wall''​
 +  * processar o arquivo ''​bigfile.txt''​ em **menos de 2 segundos**.
 +
 +Para medir o tempo de execução do programa, use o comando ''​time'':​
 +
 +<​code>​
 +time ./​ortografia < bigfile.txt > output.txt
 +</​code>​
 +
 +Arquivos a entregar ao professor:
 +
 +  * ''​ortografia.c''​ : programa principal
 +  * ''​dicionario.c''​ : funções relativas ao dicionário (carregar o dicionário na memória, verificar se uma palavra está no dicionário,​ etc);
 +  * ''​dicionario.h''​ : interface (protótipos) das funções implementadas em ''​dicionario.c'';​
 +  * <​del>''​Makefile''</​del>​
 +
 +**Dica**: as funções da biblioteca C padrão (StdLib) podem facilitar a implementação de seu programa:
 +
 +  * Acesso a arquivos: ''​fopen'',​ ''​fclose'',​ ''​fgetchar''​ ''​fscanf'',​ ''​feof'',​ ''​rewind'',​ ...
 +  * Manipulação de strings: ''​strcpy'',​ ''​strlen'',​ ''​strchr'',​ ''​index'',​ ''​strpbrk'',​ ''​strstr'',​ ...
 +  * Busca binária: ''​bsearch''​
 +
 +Consulte as páginas de manual para aprender a usar essas funções.
 +
 +Sugestão de pseudocódigo para o programa:
 +
 +<​code>​
 +ler o dicionário
 +
 +c = ler caractere
 +
 +enquanto não for o fim da entrada faça
 +  ​
 +  // avançar até encontrar uma letra ou o fim da entrada ​
 +  enquanto (c não for uma letra) e (não for o fim da entrada) faça
 +    escrever c
 +    c = ler caractere
 +  fim enquanto
 +
 +  // encontrou uma letra, ler a palavra ​
 +  palavra = ""​
 +  enquanto (c for uma letra) e (não for o fim da entrada) faça
 +    palavra = palavra + c
 +    c = ler caractere
 +  fim enquanto
 +
 +  // tratar a palavra encontrada ​
 +  se palavra <> ""​ então
 +    se minuscula(palavra) está no dicionario então
 +      escrever palavra
 +    senão
 +      escrever "​[",​ palavra, "​]"​
 +    fim se
 +  fim se
 +
 +fim enquanto
 +</​code>​
  
prog2/verificador_ortografico.txt · Última modificação: 2019/04/09 13:39 por maziero