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 18:11] – [Exemplos de funcionamento] 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 '' | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||