Você está na página 1de 10

INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO

DESENVOLVIMENTO DE ALGORITMOS

Profa. Dra. Erica Regina Marani Daruichi Machado


Departamento de Matemática

Departamento de Matemática 1
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

CAPÍTULO 1- ALGORITMOS

1. INTRODUÇÃO
AUTOMAÇÃO É o processo em que uma tarefa é desempenhada por
máquinas, sejam estes dispositivos mecânicos, eletrônicos (computadores) ou
de natureza mista.

REPETIBILIDADE: Para que a automação de uma tarefa seja bem-sucedida


é necessário que a máquina que passará a realizá-la seja capaz de desempenhar
cada uma das etapas constituintes do processo a ser automatizado com
eficiência, de modo a garantir a repetibilidade.

1.1. DEFINIÇÃO - ALGORITMO


É a especificação da seqüência ordenada de passos que deve ser seguida para a
realização de uma tarefa, garantindo a sua repetibilidade.

 O conceito de algoritmo não foi criado para satisfazer às necessidades da


computação. Programação de computadores é apenas uma das aplicações.

A palavra algoritmo, à primeira vista, parece-nos estranha. Embora possua designação


desconhecida, fazemos uso constantemente de algoritmos em nosso cotidiano: os passos utilizados por
uma pessoa ao tomar banho constituem um algoritmo. Outros algoritmos freqüentemente encontrados
são:
• Instruções para se utilizar um eletrodoméstico;
• Uma receita para preparo de algum prato;
• Guia de preenchimento para declaração do imposto de renda;
• A regra para determinação de máximos e mínimos de funções por derivadas sucessivas;
• A maneira como as contas de água, luz e telefone são calculadas mensalmente, etc.

1.2. POR QUE PRECISAMOS DE ALGORITMOS?


Vejamos o que algumas pessoas importantes, para a Ciência da Computação, disseram a respeito de
algoritmo:
“A noção de algoritmo é básica para toda a programação de computadores”.
[KNUTH - Professor da Universidade de Stanford, autor da coleção “The art of computer programming”].

“O conceito central da programação e da ciência da computação é o conceito de algoritmo”.


[WIRTH - Professor da Universidade de Zurique, autor de diversos livros na área e responsável pela
criação de linguagens de programação como ALGOL, PASCAL e MODULA-2].

A importância do algoritmo está no fato de termos que especificar uma seqüência de passos lógicos
para que o computador possa executar uma tarefa qualquer, pois o mesmo por si só não tem vontade
própria, faz apenas o que o instruímos a fazer.

Com uma ferramenta algorítmica podemos conceber uma solução para um dado problema,
independentemente de uma linguagem específica, até mesmo do próprio computador.

Departamento de Matemática 2
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

1.3. CARACTERÍSTICAS
Todo algoritmo deve apresentar algumas características básicas:
• Ter fim;
• A ordem dos passos deve ser precisamente determinada;
• Não dar margem à dupla interpretação (não ambíguo);
• Capacidade de receber dado(s) de entrada do mundo exterior;
• Poder gerar informações de saída para o mundo externo ao do ambiente do algoritmo;
• Ser efetivo (todas as etapas especificadas no algoritmo devem ser alcançáveis em um tempo
finito).

PROGRAMA É um algoritmo escrito numa forma compreensível pelo computador.

1.4. FORMAS DE REPRESENTAÇÃO DE ALGORITMOS


Existem diversas formas de representação de algoritmos, mas não há consenso com relação à
melhor delas. As formas de representação de algoritmos mais conhecidas são:
• Descrição Narrativa;
• Fluxograma Convencional;
• Pseudocódigo ou Linguagem Estruturada.

1.4.1. DESCRIÇÃO NARRATIVA


Os algoritmos são expressos diretamente em linguagem natural.

Receita de bolo Troca de um pneu furado Cálculo da média de um aluno


Misture os ingredientes Afrouxar ligeiramente as porcas Obter as notas da primeira e da
Unte a forma com manteiga Suspender o carro segunda prova.
Despeje a mistura na forma Retirar as porcas e o pneu Calcular a média aritmética entre
Se houver côco ralado Colocar o pneu reserva as duas
então despeje sobre a mistura Apertar as porcas Se a média for maior ou igual a 7
Leve a forma ao forno Abaixar o carro então o aluno foi aprovado
Enquanto não corar Dar o aperto final nas porcas Caso contrário
deixe a forma no forno o aluno foi reprovado
Retire do forno
Deixe esfriar
Esta representação é pouco usada na prática:
 O uso de linguagem natural muitas vezes dá oportunidade a más interpretações, ambigüidades e
imprecisões.

Exemplo: A instrução “afrouxar ligeiramente as porcas” no algoritmo da troca de pneus está sujeita
a interpretações diferentes por pessoas distintas.
 Uma instrução mais precisa seria: “afrouxar a porca, girando-a de 30o no sentido anti-
horário.
VANTAGENS:
• O português é bastante conhecido por nós;

DESVANTAGENS:
• Imprecisão;
• Pouca confiabilidade (a imprecisão acarreta a desconfiança);
• Extensão (normalmente, escreve-se muito para dizer pouca coisa).

Departamento de Matemática 3
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

1.4.2. FLUXOGRAMA CONVENCIONAL


Diagramas de fluxo fornecem uma representação gráfica de um procedimento passo-a-passo
necessário para resolver um problema, isto é, para construir um algoritmo. Tal representação torna uma
seqüência complexa de eventos fácil para se ver e compreender. É uma representação gráfica de
algoritmos onde formas geométricas diferentes implicam ações (instruções, comandos) distintas.
Tal propriedade facilita o entendimento das idéias contidas nos algoritmos e justifica sua
popularidade.
 É a forma intermediária entre a descrição narrativa e o pseudocódigo
Um fluxograma se resume a um único símbolo inicial, por onde a execução do algoritmo começa, e
um ou mais símbolos finais, que são pontos onde a execução do algoritmo se encerra.
Partindo do símbolo inicial, há sempre um único caminho orientado a ser seguido, representando a
existência de uma única seqüência de execução das instruções e um único fim deverá ser atingido.
Os símbolos mais comuns nos fluxogramas convencionais.

Início e final do fluxograma

Entrada de dados

Operações de atribuição e
chamada ou retorno de
subalgoritmo

Saída de dados

Decisão

Conector

Subprograma Externo

VANTAGENS:
• Uma das ferramentas mais conhecidas;
• Figuras dizem muito mais que palavras;
• Padrão mundial
DESVANTAGENS:
• Faz com que a solução do problema esteja amarrada a dispositivos físicos;
• Pouca atenção aos dados, não oferecendo recursos para descrevê-los ou representá-los;
• Complica-se à medida que o algoritmo cresce.

Departamento de Matemática 4
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

Um fluxograma pode ser construído envolvendo maiores ou menores quantidades de detalhes.


Entretanto, todos eles podem se reduzir a dois tipos básicos: o diagrama de fluxo orientado para o homem
(mais grosseiro, menos detalhado) e o diagrama de fluxo orientado para a máquina (mais refinado e
detalhado).

Um diagrama de fluxo orientado para o homem é considerado bom se ele pode ser entendido por
uma pessoa com conhecimento na área onde se enquadra o problema, porém sem experiência de
programação de computadores. Um bom diagrama de fluxo orientado para a máquina é aquele em que o
programa praticamente pode ser escrito diretamente sem codificação intermediária, exceto para comandos
de entrada e saída e comandos declarativos.

OBSERVAÇÃO: No fluxograma é representada apenas a lógica do programa e as variáveis utilizadas.


O USO DE TEXTOS NO FLUXOGRAMA NÃO É OBRIGATÓRIO e os TIPOS das Variáveis não são
declarados.

1.4.2.1. Exemplo: Cálculo da média de um aluno

Início

nota1
nota2

Media=(nota1
As variáveis nota1, nota2 e media
+nota2)/2 são inteiras ou reais?

 No fluxograma as variáveis não


V “Aprovado”
são declaradas.
Media ≥7

“Reprovado”

Fim

1.4.2.2. Leitura Complementar: Diagramas de Nassi-Shneiderman


Os diagramas de Nassi-Shneiderman foram apresentados em 1973 e facilmente adaptados para
serem aplicados a qualquer linguagem de programação.
Estes diagramas são uma alternativa para diagramas de fluxo. Eles são muito fáceis para se ler e
podem ser usados durante a formulação do programa.
A grande vantagem dos diagramas de Nassi-Shneiderman é que eles ilustram as três construções
básicas sempre usadas, universalmente, nas linguagens de programação: o bloco de processamento, o
bloco de repetição e o bloco de decisão.
Todas as três construções básicas usadas nas linguagens de programação são mostradas nos
diagramas de Nassi-Shneiderman da seguinte maneira:

Departamento de Matemática 5
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

• Um bloco retangular significando “faça alguma coisa”;

• Um bloco retangular dividido em três triângulos representado uma decisão;

F V

• Um retângulo dividido em dois espaços, um L invertido e um pequeno retângulo,


significando “faça alguma coisa enquanto alguma outra coisa for verdade”.

No diagrama de Nassi-Shneiderman, todos os três retângulos encontram-se internos a um retângulo


maior.

1.4.2.3. PSEUDOCÓDIGO
Esta forma de representação de algoritmos é rica em detalhes como, por exemplo, a definição dos
tipos das variáveis usadas no algoritmo. Assemelhar-se à forma em que os programas são escritos e
encontra muita aceitação. Forma geral da representação por pseudocódigo:

Algoritmo < nome_do_algoritmo>

declaração_de_variáveis
subalgoritmo
Início
corpo_do_algoritmo
Fim do Algoritmo

Algoritmo é a palavra que indica o início da definição de um algoritmo em forma de


pseudocódigo.
<nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a finalidade de distingui-lo
dos demais.
<declaração_de_variáveis> consiste em uma porção opcional onde são declaradas as variáveis
usadas no algoritmo principal e, eventualmente, nos subalgoritmos.

<corpo_do_algoritmo> conjunto de instruções ordenadas que solucionam o problema proposto.

Início e Fim do Algoritmo são respectivamente as palavras que delimitam o início e o término do
conjunto de instruções do corpo do algoritmo.

VANTAGENS:
• Independência física da solução (solução lógica apenas);
• Usa o português (linguagem natural) como base;
• Permite a definição de quais e como os dados vão estar estruturados;
• Permite a passagem quase imediata do algoritmo para uma linguagem de programação
qualquer.

Departamento de Matemática 6
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

DESVANTAGENS:
• Exige a definição de uma linguagem não real para trabalho;
• Não é padronizado universalmente como o fluxograma.

1.4.2.4. Exemplo: Cálculo da média de um aluno


Algoritmo media_aluno
Real nota1, nota2, Media
Início
Escreva ‘Digite as notas do aluno’
Leia nota1, nota2
Media = (nota1+nota2)/2
Se Media ≥ 7 então
Escreva ‘o aluno foi aprovado’
Caso contrário
Escreva ‘o aluno foi reprovado’
Fim da decisão
Fim do algoritmo

OBSERVAÇÃO: Para que se tenha um bom pseudocódigo recomenda-se o uso de frases antes da
leitura de qualquer variável para orientar o usuário sobre os dados que deverão ser inseridos via teclado.

1.5. EXERCÍCIOS
1) Faça um algoritmo para realizar a troca de uma lâmpada a uma altura de 2,5m do chão, (utilize
a representação narrativa).

2) Considere três recipientes A, B e C. (representação narrativa)


- O recipiente A está vazio e comporta 8 litros;
- O recipiente B contém 5 litros
- O recipiente C contém 3 litros.
O que fazer para deixar os barris A e B com 4 litros cada e o C vazio?

3) Faça um algoritmo para verificar se uma pessoa é maior de idade. (fluxograma e


pseudocódigo).

4) Faça o pseudocódigo e o fluxograma:


Determine a velocidade média de um veículo que parte de uma cidade A e vai para uma cidade B.
O tempo do percurso é de T horas. A está no Km KA. B está no KB e T=H horas.

1.6. PROJETO DE REFINAMENTOS SUCESSIVOS – TOP-DOWN DESIGN


Quando se elabora um algoritmo para um problema simples, uma solução pode ocorrer
repentinamente depois de uma rápida análise do problema como um todo. Entretanto, aplicações práticas
de computador não são assim tão simples, pois programadores profissionais escrevem programas que
contém milhares de instruções de computador.
Projetar um programa desta proporção pode ser tão complicado como projetar uma máquina
constituída de milhares de peças. A fim de que esta máquina trabalhe a contento e atinja os objetivos para
a qual foi projetada, todas as peças devem se ajustar nos seus devidos lugares formando uma unidade
organizada e operacional.
O projeto de refinamentos sucessivos é um processo para projetar um algoritmo. Ele pode ser usado
para você organizar o seu trabalho e também para organizar o seu algoritmo, principalmente quando se
pretende desenvolver um programa estruturado.

Departamento de Matemática 7
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

Existem muitas definições de programação estruturada, algumas apresentam algo de diferente e


outras são muito abstratas. O elo comum na maioria destas definições pode ser resumido na frase
“técnicas para codificar, depurar e modificar de modo fácil, rápido e a baixo custo através de programas
mais simples”. Existem várias técnicas propostas para fazer isto e, conseqüentemente, estruturar o seu
programa. Umas das mais importantes técnicas para simplificar a lógica de seu programa é usar o projeto
de refinamentos sucessivos – uma técnica que flui do início ao fim do programa, de modo claro e
organizado.

1.6.1. Exemplo de projeto de refinamentos sucessivos


Como ilustração, considere um algoritmo para resolver um problema de álgebra (algoritmo A). No
início temos alguma idéia do que ele vai fazer, mas com certeza, não temos muita idéia das instruções
específicas e detalhadas. Neste estágio, o conceito do Algoritmo A é a única entidade ou bloco único.

À medida em que são obtidas mais informações sobre o problema, podemos dividi-lo em três
partes menores. Então, são esquematizadas a Parte 1, depois a Parte 2 e, finalmente, a Parte 3. Isto é o
projeto de refinamentos sucessivos, como mostrado na seguinte figura:

Feito isto, pode ser que ainda não se tenha um algoritmo detalhado, porém algum progresso já foi
feito. Em vez de um único grande problema tem-se agora três pequenos problemas para resolver.
Continuando a análise, verifica-se que a Parte 1 pode ser dividida em três subproblemas: Parte 1A,
Parte 1B e Parte 1C; e que as Partes 2 e 3 também podem ser subdivididas. O projeto passa então para um
segundo nível de refinamento:

Se o algoritmo for complicado, o processo pode ser realizado em outro nível de refinamento. Ao
final do projeto de refinamentos sucessivos, tem-se um plano bem detalhado que permitirá escrever o
algoritmo em linguagem de computador.
Uma preocupação constante que se deve ter no desenvolvimento de algoritmos é sua validade
quando à exatidão. Em cada estágio do processo de refinamentos sucessivos, o algoritmo deve ser
analisado para assegurar que ele está correto para a solução do problema proposto.

Departamento de Matemática 8
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

1.6.1.1. Exemplo de ilustração


Para ilustrar o processo de refinamento sucessivo, considere o problema para calcular a média de
um conjunto de números dados e fornecer o resultado.

Primeiro nível Segundo nível Terceiro nível Passo 1.1


Leia cada número. À medida que se lê, calcule a soma
acumulada dos números e conte a quantidade dos
números.
Calcular a média
Calcular a média de
Calcule a média, usando a soma e a quantidade dos
um conjunto de números, do passo anterior.
números e fornecer o
Passo 1 Passo 1.2
resultado.
Imprimir a média

Passo 2
1.7. TESTE DE MESA
Um passo importante na construção de algoritmos é a verificação de sua veracidade.
No exemplo anterior podemos fazer as seguintes verificações:
• É possível realizar o Passo 1.1?
• É possível realizar o Passo 1.2?
• Estes dois passos juntos calculam a média desejada do Passo1?
Você pode fazer uma prova matemática, conhecida como TESTE DE MESA para verificar se o algoritmo
é válido, ou seja, se não foi cometido nenhum engano durante a construção do mesmo.
Ao validar o Passo 1.2, deve-se verificar se a quantidade dos números não é zero, pois ao calcular a
média deve-se dividir a soma acumulada pela quantidade de números.
O teste de mesa consiste no teste e validação de todos os passos de todos os níveis.

1.8. LEITURA COMPLEMENTAR


A sintaxe é o ramo da linguística que estuda os processos generativos ou combinatórios das frases
das línguas naturais, tendo em vista especificar a sua estrutura interna e funcionamento. Os primeiros
passos da tradição européia no estudo da sintaxe foram dados pelos antigos gregos, começando com
Aristóteles, que foi o primeiro a dividir a frase em sujeitos e predicados. Um segundo contributo
fundamental deve-se a Frege que critica a análise aristotélica, propondo uma divisão da frase em função e
argumento. Deste trabalho fundador, deriva toda a lógica formal contemporânea, bem como a sintaxe
formal. No século XIX a filologia dedicou-se, sobretudo, à investigação nas áreas da fonologia e
morfologia, não tendo reconhecido o contributo fundamental de Frege, que só em meados do séc. XX foi
verdadeiramente apreciado.
• Sintaxe – a forma ou estrutura das expressões, instruções e programas.
• Semântica – o significado das expressões, instruções e programas.
• Uma frase é uma seqüência de caracteres de um dado alfabeto
• Uma linguagem é um conjunto de frases
• Um lexema é a unidade sintática de mais baixo nível de uma linguagem (p.ex. *, begin, call).
• Um token é uma categoria de lexemas (p.ex. Identificador).
Sintaxe: Semântica:
Se (<expressão>) então “Se o valor de expressão for verdadeiro... então
<instrução> faça <instrução>”
Fim SE Finalize a estrutura

Sintaxe: mais fácil de descrever que a semântica. Existe uma notação concisa e universalmente aceita
para a descrição da sintaxe, mas não ainda para a semântica.

Departamento de Matemática 9
Profa. Dra. Erica R. M. Daruichi Machado
INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO - DESENVOLVIMENTO DE ALGORITMOS

1.9. EXERCÍCIO: ENTREGAR NA PRÓXIMA AULA

1) Considere que uma calculadora comum, de quatro operações, está com as teclas de divisão e
multiplicação. Escreva algoritmos que resolvam as expressões matemáticas a seguir usando
apenas as operações de adição e subtração.

a)12 * 4

b) 23*11

c)10÷2

d) 175÷7

e)28

f) X*Y

g) X÷Y

Departamento de Matemática 10
Profa. Dra. Erica R. M. Daruichi Machado