Académique Documents
Professionnel Documents
Culture Documents
Ponti Junior
Trabalho 08
Implemente sua atividade sozinho sem compartilhar, olhar cdigo de seus colegas, ou buscar na Internet. Esse trabalho necessita de tempo para ser implementado. Comece a pensar e trabalhar nele o quanto antes.
Maisculas e minsculas:
culas. representam a mesma palavra.
A escolha de m:
m
100.000
palavras diferentes
45
(CORMEN et al, 2002; SEDGEWICK, 1998) dividir o nmero mximo de elementos por 5 ou 3 e tomar um nmero primo prximo do resultado.
A funo hash:
achar melhor.
Em aula foram apresentadas vrias funes diferentes que podem ser o programa dever manter cada lista encadeada ordenada
As m listas encadeadas:
alfabeticamente pela palavra. Voc poder escolher como realizar essa ordenao. Isso ser importante para obter a sada (ordenada) posteriormente. arquivo que possuam: alfabtica.
A sada (resultado): a sada do programa ser composta de todas as palavras no 3 ou mais caracteres e 3 ou mais ocorrncias no texto, uma
A sada dever estar em ordem
pneumonoultramicroscopicsilicovolcano-
coniosis,
com 45 letras. Essa palavra foi inventada em 1935 propositalmente para ser a maior palavra
Entrada
A entrada ser composta por um arquivo texto contendo uma srie de palavras em ingls conforme descrito na seo anterior. Palavras vlidas para contagem sero aquelas compostas por 3 ou mais caracteres separados por: aspas simples, espaos em branco, parnteses, sinais de maior e menor, e pontuao, ou seja: Exemplo de arquivo texto:
' .
, ; :
? ( ) < >.
In computer science, a hash table or hash map is a data structure that uses a hash function to map identifying values, known as keys, to associated values (e.g., map a name into a telephone number). Thus, a hash table implements an associative array. The hash function is used to transform the key into the index (the hash) of an array (table) element.
Aps a informao do arquivo texto a entrada composta de operaes na tabela hash. H quatro tipos de operaes:
search, count,
max.
Exemplo:
search
deve ser seguido por uma palavra a consultar e o programa dever gerar
search array.
count
deve ser seguido por um nmero inteiro e o programa dever retornar todas as palavras com aquela contagem, em ordem alfabtica seguida da sua frequncia. Exemplo:
count 3. max:
seguido da palavra com
max
delete deve ser seguido por uma palavra e o programa dever apenas remover essa
palavra da tabela. Sero mostrados exemplos de sada na prxima seo. Exemplo de entrada aps o arquivo:
search map search into search or count 3 max delete array search array
Sada
A sada ser composta, incialmente pela impresso das palavras (em ordem alfabtica) que atendam aos requisitos denidos na seo anterior seguido por um espao em branco
e pela contagem das suas ocorrncias, uma por linha. Exemplo de lista impressa aps aleitura do arquivo:
0.
Note
que, no exemplo, a palavra into, apesar de possuir quatro caracteres, no foi impressa na primeira lista completa, pois aparece apenas 2 vezes no texto, mas ao ser consultada o programa exibiu a palavra com valor
2.
possui o mnimo de trs caracteres e por isso no dever mostrar ocorrncias. como array que foi deletada antes da consulta.
Ser fornecido o conjunto de arquivos relativo ao exemplo descrito nesse texto. No havero casos de teste adicionais disponveis. Os alunos devero criar seus prprios casos de teste para vericar a corretude do programa.
de texto, sem armazenar a contagem de palavras, apenas ler corretamente cada palavra no arquivo e depois cada comando na consulta, inicialmente sem realizar
2.
3.
Implementao da impresso inicial, gerando as sadas completa e ordenada. Implementao das operaes de consulta, tratando cada comando possvel.
Instrues e observaes
O projeto ser avaliado principalmente levando em considerao: 1. Processamento correto das entradas e sadas do programa; 2. Realizao das tarefas descritas; 3. Bom uso das tcnicas de programao (estruturas de controle, memria, funes, etc.); 4. Bom uso de estruturas de dados e algoritmos (escolha dos algoritmos e seus parmetros, estruturas de dados, etc.); 5. Boa endentao, clareza do cdigo e uso de comentrios relevantes.
Sobre a avaliao
1. Um dos objetivos da disciplina de ICC2 o aprendizado individual dos conceitos de programao. A principal evidncia desse aprendizado est nos trabalhos, que so individuais neste curso. Voc dever desenvolver seu trabalho sem copiar trechos de cdigo de outros alunos, nem codicar em conjunto. Portanto, compartilhem idias, solues, modos de resolver o problema, mas no o cdigo. O plgio vai contra o cdigo de tica da USP. Quando autores e copiadores combinam, esto ludibriando o sistema de avaliao.
O trabalho em grupo e a cooperao entre colegas em geral benco e til ao aprendizado. Para ajudar um colega voc pode lhe explicar estratgias e idiar. Por exemplo, pode explicar que preciso usar dois loops para processar os dados, ou que para poupar memria basta usar uma certa estrutura de dados, etc. O que voc no deve fazer mostrar o seu cdigo. Mostrar/compartilhar o cdigo pode prejudicar o aprendizado do seu colega:
depois de o seu colega ter visto o seu cdigo, ser muito mais difcil para ele imaginar uma soluo original e prpria; o seu colega no entender realmente o problema: a compreenso passa pela prtica da codicao e no pela imitao/cpia.
Um colega que tenha visto a sua soluo pode eventualmente divulg-la a outros colegas, deixando voc numa situao muito complicada, por tabela.
~mac2166/plagio/,
http://www.ime.usp.br/
2. Todos os cdigos fontes sero comparados por um (ou mais) sistema(s) de deteco de plgio, e os trabalhos com alta similaridade detectada tero suas notas zeradas, tanto aqueles relativos ao cdigo de origem quanto do cdigo copiado. 3. A avaliao incluir a porcentagem de acertos vericada pelo SQTPM e tambm a anlise do seu cdigo, incluindo endentao, comentrios, bom uso da memria e prticas de programao. Portanto faa seu cdigo com cuidado, da melhor forma possvel.
system(PAUSE)).
getchar()
6. O erro de Violao de Memria signica acesso indevido memria ou arquivo. Use compilao com cdigo com erro. Exemplo 1 de violao de memria:
-g
e o programa
valgrind
char *array = (char *)malloc(sizeof(char) * N); scanf("%s", &filename); // acesso indevido, violacao de memoria free(array);
int **mat = (int **)malloc(sizeof(int *) * 3); mat[0] = (int *)malloc(sizeof(int)*10); for (i = 1; i < 3; i++) { // apenas a posicao 0 de mat foi alocada as outras nao // portanto esta liberando regiao nao alocada // gerando violacao de memoria free(mat[i]); }
int A[N]; int B[N]; int j = 0, i = 5; while (j < N){ A[i] = B[j]; // como j e i sao indices diferentes j++; // quando j = (N-1) i = (N-1)+5 e i++; // havera escrita indevida em A }