• Nenhum resultado encontrado

Um algoritmo é uma série orde nada de passos não-ambíguos,

ou até mesmo na forma de um circuito eletrônico. Em todos esses casos, o algoritmo em questão é sempre o mesmo; só as suas representações é que diferem.

A distinção entre um algoritmo e sua representação apresenta um problema quando tentamos comunicá-lo. Um exemplo comum refere-se ao nível de detalhe no qual um algoritmo deve ser descrito. Para os meteorologistas, a instrução converta a leitura da temperatura de graus Celsius para Fahrenheit pode ser suficientemente clara, mas um leigo pode requerer uma explicação melhor, com a justificativa de que tal instrução é para ele ambígua. Note-se que o problema não é que o algoritmo subjacente seja ambíguo, mas que a sua representação não está suficientemente bem formulada para um leigo. Assim, neste caso, a ambigüidade está na representação, e não no próprio algoritmo. Na próxima seção, veremos como o conceito de operação primitiva pode ser utilizado para eliminar da representação dos algoritmos tais problemas de ambigüidade.

Finalmente, ainda tema de algoritmos e suas representações, também devemos esclarecer a dife- rença entre dois outros conceitos inter-relacionados — programas e processos. Um programa é uma representação de um algoritmo. De fato, cientistas da computação utilizam o termo programa para se referir a uma representação formal de um algoritmo, projetada para aplicação de computador. Definimos processo no Capítulo 3 como a atividade de executar um programa. Note-se, porém, que, se executar um programa corresponde a executar o algoritmo representado por ele, então o processo pode ser igualmen- te definido como a atividade de executar um algoritmo. Concluímos então que processos, algoritmos e programas são entidades distintas, embora relacionadas. Um programa é a representação de um algorit- mo, enquanto um processo é a atividade de executar um algoritmo.

Q

UESTÕES

/E

XERCÍCIOS

1. Resuma a diferença entre os conceitos de processo, algoritmo e programa.

2. Dê alguns exemplos de algoritmos com os quais você está familiarizado. Eles são realmente algoritmos no sentido exato?

3. Identifique alguns pontos deixados vagos na nossa definição informal de algoritmo, apresentada na Seção 0.1.

4. Em que sentido os passos descritos na seguinte lista de instruções não constituem um algoritmo?

Passo 1. Tirar uma moeda do seu bolso e colocá-la sobre a mesa. Passo 2. Retornar ao passo 1.

4.2 A representação de algoritmos

Nesta seção, trataremos de assuntos relativos à representação de um algoritmo. Nossa meta é introduzir os conceitos básicos de pseudocódigo e de operações primitivas (ou, simplesmente, primiti- vas), bem como estabelecer um sistema de representação para nosso uso.

Primitivas

A representação de um algoritmo requer alguma forma de linguagem. No caso dos seres humanos, esta pode ser a tradicional linguagem natural (inglês, russo, japonês) ou talvez a das figuras, conforme mostra a Figura 4.2, que descreve um algoritmo para construir um pássaro por meio de dobradura de papel. Em geral, estes meios naturais de comunicação conduzem a enganos, às vezes porque a termino- logia utilizada apresenta mais de um significado. Em inglês, a frase Visiting grandchildren* can be nerve-

?

racking tanto poderia significar que os netos causam pro-

blemas quando vêm fazer uma visita, como também po- deria indicar que é problemático ir visitar os netos. Mal- entendidos também podem resultar da inadequação entre os níveis de detalhe exigido pelo leitor e o utilizado na formulação das frases. Poucos leitores sabem construir um pássaro com dobraduras de papel seguindo as ins- truções descritas na Figura 4.2, embora um estudante de origami o faça sem a menor dificuldade. Em suma, problemas de comunicação surgem quando a linguagem utilizada para a representação de um algoritmo não es- tiver definida com precisão, ou quando a informação não for adequadamente detalhada.

A Ciência da Computação trata estes problemas estabelecendo um conjunto bem-definido de elementos funcionais básicos com os quais podem ser construídas representações de algoritmos. Diz-se que cada bloco cons- trutivo é uma operação primitiva, ou, simplesmente, primitiva. Ao definir rigorosamente estas primitivas, eliminam-se muitos problemas de ambigüidade, e ao exi- gir que algoritmos sejam descritos em termos destas pri- mitivas estabelece-se um padrão uniforme para o nível de detalhe. Um conjunto de primitivas, juntamente com um de regras, estabelecendo de que maneira as primiti- vas podem ser combinadas para representar idéias mais complexas, constitui uma linguagem de programação.

Cada primitiva consiste em duas partes: sua sin- taxe e sua semântica. Sintaxe refere-se à representação simbólica da primitiva, e semântica, ao conceito repre- sentado, ou seja, ao significado da primitiva. A sintaxe da palavra ar consiste em dois símbolos, enquanto a sua semântica é uma substância gasosa que envolve o mun- do. Como exemplo, a Figura 4.3 apresenta algumas das primitivas usadas em origami.

Para se obter uma coleção de primitivas para uso na representação de algoritmos para serem executados em computadores, poderíamos retornar às instruções bá- sicas, projetadas para serem executadas independente- mente pela máquina. Se um algoritmo for expresso nes- te nível de detalhe, certamente teremos um programa expresso de forma adequada para ser executado pelo

computador. Entretanto, é tedioso expressar algoritmos neste nível, por isso, geralmente se utiliza um conjunto de primitivas de nível mais alto, cada qual formando com seus elementos uma ferramenta abstrata, construída a partir das primitivas de baixo nível, provenientes da linguagem de máquina. O resultado é uma linguagem de programação formal, na qual os algoritmos podem ser expressos em uma forma conceitualmente mais alta do que na linguagem básica de máquina. Discutiremos tais linguagens de programação no próximo capítulo.

Representação de algoritmos