MAC 211 - Laboratório de Programação
Exercício-Programa 1: Linguagem de Montagem
- Este é um exercício-programa muito simples que tem como
objetivo praticar os conceitos básicos de linguagem de montagem e
fazer com que você implemente um programa com uma parte em C e uma
parte em linguagem de montagem.
- A parte em linguagem de montagem consiste na implementação
de uma função para rearranjar em ordem crescente um vetor A[1..n],
contendo n elementos inteiros. A função deve executar essa tarefa adotando
o seguinte procedimento: ao analisar um elemento, digamos A[i], compare-o
com o anterior (A[i-1]); se estiverem em ordem correta, avance um elemento
(passe para A[i+1]); caso contrário, troque os elementos de lugar e recue um
elemento (passe para A[i-1]). Condições especiais: se não existir elemento
anterior, avance um elemento; se não existir o próximo elemento, acabou.
- Em um programa em C, o protótipo desta função
será declarado como:
void ordena_vetor (short int *p, short int *r);
- onde p é um apontador para o primeiro elemento do vetor
e r aponta para o último elemento do mesmo (note que n := r - p + 1).
- os elementos do vetor são inteiros de 16 bits.
- A parte em linguagem C consiste na implementação de
um programa que lerá os dados de entrada da entrada padrão
(teclado ou arquivo redirecionado), chamará a função em linguagem
de montagem e imprimirá o resultado na saída padrão. Por exemplo,
se a entrada padrão recebe a seguinte sequência de inteiros:
3 1 3 -7 15 -2 3 -1 0 1 22 2
O programa precisa imprimir na saída padrão a mesma sequência, rearranjada
em ordem crescente:
-7 -2 -1 0 1 1 2 3 3 3 15 22
- O EP deve ser realizado em duplas (em casos excepcionais, trabalhos
individuais serão aceitos). Cada componente da dupla deve
obrigatoriamente participar de todas as etapas
da solução do exercício. Os alunos que fizerem em duplas devem trabalhar lado a lado no mesmo
computador; trata-se de uma das recomendações de uma metodologia de programação, chamada
programação em pares (pair programming).
- Opcional: (vale 1 pontinho extra) Escreva também o mesmo algoritmo em
linguagem C e compare o desempenho das duas implementações do algoritmo para
entradas de tamanho 10, 100, 1000, 10000, 100000 e 1000000.
Faça esta comparação em 3 casos: usando um vetor
previamente ordenado, usando um vetor em ordem inversa e usando um vetor com
valores aleatórios. Neste caso, a saída do programa deve ser uma tabela
bem formatada e legível apresentando os dados obtidos.
- DATA DE ENTREGA: 1 de abril (e não é mentira)
- Observações:
(1) Lembrem-se que os dados serão lidos da entrada padrão. Dessa forma, para testar os programinhas,
criem arquivos
texto contendo os inteiros de 16 bits, separados por espaços. Após a compilação,
linkagem, etc, execute o binário do programa, redirecionando o arquivo de testes:
bash>./meuPrograma.bin < teste1000inteiros.txt
Os dados devem ser impressos na saída padrão (printf).
(2) A ordenação deve ser feita utilizando o algoritmo
descrito neste EP; outros algoritmos (Ex:
Insertionsort , Bubblesort, etc) não serão aceitos, mesmo que a
implementação
funcione
corretamente.
Página de MAC211
Página do Fabio
Página do DCC