Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior | ||
c:numeros_racionais_-_malloc [2024/10/07 17:46] – maziero | c:numeros_racionais_-_malloc [2024/10/07 18:26] (atual) – [Script de teste] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Números racionais - alocação dinâmica ====== | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | Este trabalho visa modificar o módulo de [[números racionais]] desenvolvido anteriormente para usar alocação dinâmica de memória. | ||
+ | |||
+ | ===== Atividade ===== | ||
+ | |||
+ | Você deve implementar um programa que manipule números racionais, que são números da forma < | ||
+ | |||
+ | Você deve baixar {{tp3.tgz|este arquivo}} e abri-lo para poder fazer o trabalho, pois irá precisar de todos os arquivos ali contidos: | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | No arquivo '' | ||
+ | |||
+ | Este {{tp3.pdf |enunciado}} foi produzido pelo prof. Castilho para este projeto. | ||
+ | |||
+ | ==== Programa principal ==== | ||
+ | |||
+ | O programa principal ('' | ||
+ | |||
+ | < | ||
+ | leia um valor n tal que 0 < n < 100 | ||
+ | |||
+ | aloque dinamicamente um vetor com n ponteiros para números racionais | ||
+ | |||
+ | preencha o vetor com n números racionais lidos da entrada | ||
+ | (leia o numerador e o denominador de cada racional) | ||
+ | |||
+ | imprima "VETOR = " e os racionais apontados pelo vetor | ||
+ | |||
+ | elimine do vetor os racionais inválidos | ||
+ | imprima "VETOR = " e o vetor resultante | ||
+ | |||
+ | ordene o vetor em ordem crescente | ||
+ | imprima "VETOR = " e os racionais apontados pelo vetor | ||
+ | |||
+ | calcule a soma dos racionais apontados pelo vetor | ||
+ | imprima "SOMA = " e a soma calculada acima | ||
+ | |||
+ | libere os racionais apontados pelo vetor | ||
+ | imprima "VETOR = " e os racionais apontados pelo vetor | ||
+ | |||
+ | libere o vetor de ponteiros | ||
+ | libere o espaço utilizado para fazer o cálculo da soma | ||
+ | |||
+ | retorne 0 | ||
+ | </ | ||
+ | |||
+ | ==== Exemplos de funcionamento ==== | ||
+ | |||
+ | O diretório '' | ||
+ | |||
+ | < | ||
+ | 6 | ||
+ | 2 2 | ||
+ | 6 3 | ||
+ | 1 0 | ||
+ | 4 1 | ||
+ | 1 0 | ||
+ | 1 0 | ||
+ | </ | ||
+ | |||
+ | A saída correspondente deve ser esta (conteúdo de '' | ||
+ | |||
+ | < | ||
+ | VETOR = 1 2 NaN 4 NaN NaN | ||
+ | VETOR = 1 2 4 | ||
+ | VETOR = 1 2 4 | ||
+ | SOMA = 7 | ||
+ | VETOR = NULL NULL NULL | ||
+ | </ | ||
+ | |||
+ | ==== Script de teste ==== | ||
+ | |||
+ | Disponibilizamos um //script shell// para testar seu programa mais facilmente. Neste script fazemos uso de pipes combinado com o comando '' | ||
+ | |||
+ | O uso do //script// é simples: | ||
+ | |||
+ | - '' | ||
+ | - '' | ||
+ | |||
+ | No **teste 1**, seu programa é executado para cada uma das entradas fornecidas no diretório '' | ||
+ | |||
+ | < | ||
+ | 3c3 | ||
+ | < VETOR = 1 2 4 | ||
+ | --- | ||
+ | > VETOR = 1 2 3 | ||
+ | </ | ||
+ | |||
+ | Onde "<" | ||
+ | |||
+ | No **teste 2**, a ferramenta Valgrind executa seu programa e analisa as alocações, | ||
+ | |||
+ | < | ||
+ | All heap blocks were freed -- no leaks are possible. | ||
+ | ... | ||
+ | ERROR SUMMARY: 0 errors from 0 contexts (suppressed: | ||
+ | </ | ||
+ | |||
+ | Caso contrário, seu programa tem vazamentos e as mensagens de erro deverão indicar a causa. Outras mensagens que o Valgrind pode gerar são do tipo: | ||
+ | |||
+ | < | ||
+ | Invalid read of size 8 | ||
+ | Invalid write of size 8 | ||
+ | Conditional jump or move depends on uninitialised value(s) | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | Elas significam que seu programa, embora possa ter passado eventualmente pelo teste 1, ainda tem erros graves de acesso à memória e pode apresentar comportamento instável (pode falhar às vezes). | ||
+ | |||
+ | <note tip> | ||
+ | Caso seu programa apresente erros de memória ou comportamento instável no teste 1, você pode usar o teste 2 para obter mais informações sobre erros, usando o Valgrind. | ||
+ | </ | ||
+ | ===== Entregáveis ===== | ||
+ | |||
+ | Entregue um único arquivo '' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||