






























































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
- - -
Tipologia: Notas de estudo
1 / 70
Esta página não é visível na pré-visualização
Não perca as partes importantes!































































O uso de algoritmos é quase tão antigo quanto a matemática. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemática. Com o advento das máquinas de calcular e mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para a solução dos mais variados problemas.
Algoritmo não é a solução do problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é o caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos.
Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens semelhantes às linguagens de programação e outras utilizando formas gráficas.
O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.
_- Copiando algoritmos
_- Construindo algoritmos
A automação é o processo em que uma tarefa deixa de ser desempenhada pelo homem e passa a ser realizada por máquinas, sejam estas dispositivos mecânicos (como as máquinas industriais), eletrônicos (como os computadores), ou de natureza mista (como os robôs).
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 do mesmo. Assim, é necessário que seja especificado com clareza e exatidão o que deve ser realizado em cada uma das fases do processo a ser automatizado, bem como a seqüência em que estas fases devem ser realizadas.
À especificação da seqüência ordenada de passos que deve ser seguida para a realização de um tarefa, garantindo a sua repetibilidade, dá-se o nome de algoritmo.
Embora esta definição de algoritmo seja correta, podemos definir algoritmo, de maneira informal e completa como:
Existem diversas formas de representação de algoritmos, mas não há um consenso com relação à melhor delas.
Algumas formas de representação de algoritmos tratam dos problemas apenas em nível lógico, abstraindo-se de detalhes de implementação muitas vezes relacionados com alguma linguagem de programação específica. Por outro lado, existem formas de representação de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idéia principal, o algoritmo, dificultando seu entendimento.
Dentre as formas de representação de algoritmos mais conhecidas, sobressaltam:
Nesta forma de representação os algoritmos são expressos diretamente em linguagem natural. Como por exemplo, têm-se os algoritmos seguintes:
Esta representação é pouco usada na prática porque o uso de linguagem natural muitas vezes dá oportunidade a más interpretações, ambigüidades e imprecisões.
Por 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 30º no sentido anti-horário”.
É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam ações (instruções, comandos) distintos. Tal propriedade facilita o entendimento das idéias contidas nos algoritmos.
Nota-se que os fluxogramas convencionais preocupam-se com detalhes de nível físico da implementação do algoritmo. Por exemplo, figuras geométricas diferentes são adotadas para representar operações de saída de dados realizadas em dispositivos distintos, como uma unidade de armazenamento de dados ou um monitor de vídeo. A figura 2.1 mostra as principais formas geométricas usadas em fluxogramas.
De modo geral, o 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. Isto pode ser melhor visualizado pelo fato de que, apesar de vários caminhos poderem convergir para uma mesma figura do diagrama, há sempre um único caminho saindo desta. Exceções a esta regra são os símbolos finais, dos quais não há nenhum fluxo saindo, e os símbolos de decisão, de onde pode haver mais de um caminho de saída (normalmente dois caminhos), representando uma bifurcação no fluxo.
Um diagrama de blocos é uma forma de fluxograma usada e desenvolvida por profissionais da programação, tendo como objetivo descrever o método e a seqüência do processo dos planos num computador. Pode ser desenvolvido em qualquer nível de detalhe que seja necessário. Quando se desenvolve um diagrama para o programa principal, por exemplo, seu nível de detalhamento pode chegar até as instruções. Esta ferramenta usa diversos símbolos geométricos, os quais, estabelecerão as seqüências de operações a serem efetuadas em um processamento computacional. Após a elaboração do diagrama de bloco, é realizada a codificação do programa. A figura 2.1 mostra o exemplo de um diagrama de blocos ou fluxogramas.
Figura 2.2 Exemplo de um fluxograma convencional
Média := (N1+N2)/
Média
=
“Aprovado”
“Reprovado”
Início
Fim
O diagrama foi criado por Ned Chapin a partir de trabalhos de Nassi-Shneiderman, os quais resolveram substituir o fluxograma tradicional por um diagrama que apresenta uma visão hierárquica e estruturada da lógica do programa. A grande vantagem de usar este tipo de diagrama é a representação das estruturas que tem um ponto de entrada e um ponto de saída e são compostas pelas estruturas básicas de controle de seqüência, seleção e repartição. Enquanto é difícil mostrar o embutimento e a recursividade com o fluxograma tradicional, torna-se mais simples mostrá-lo com o diagrama de Chapin, bem como codificá-lo futuramente na conversão de código português estruturado ou pseudocódigos. A figura 2.3 apresenta um exemplo do tipo de diagrama de Chapin para o algoritmo de cálculo da média de um aluno.
Fim
Escreva “Aprovado”
Escreva “Reprovado”
Média >= 7 Sim Não
Média ← (N1+N2)/
Início
Leia N1, N
Figura 2.3 Diagrama de Chapin para o algoritmo do cálculo da média de um aluno (^11)
Esta forma de representação de algoritmos, também conhecida como português estruturado ou portugol, é bastante rica em detalhes e, por assemelhar-se bastante à forma em que os programas são escritos, encontra muita aceitação, sendo portanto a forma de representação de algoritmos que será adotada nesta disciplina.
Na verdade, esta representação é suficientemente geral para permitir que a tradução de um algoritmo nela representado para uma linguagem de programação específica seja praticamente direta.
2.4.1 Representação de Um Algoritmo na Forma de Pseudocódigo
A representação de um algoritmo na forma de pseudocódigo é a seguinte:
Algoritmo < nome_do_algoritmo > < declaração_de_variáveis > < subalgoritmos > Início < corpo_do_algoritmo > Fim. onde:
Algoritmo é uma 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 distinguí-lo dos demais.
< declaração_de_variáveis > consiste em uma porção opcional onde são declaradas as variáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos.
< subalgoritmos > consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos.
Início e Fim são respectivamente as palavras que delimitam o início e o término do conjunto de instruções do corpo do algoritmo.
Como exemplo, a seguir é mostrado a representação do algoritmo de cálculo da média de um aluno na forma de um pseudocódigo.
Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos:
A classificação apresentada a seguir não se aplica a nenhuma linguagem de programação específica; pelo contrário, ela sintetiza os padrões utilizados na maioria das linguagens.
São caracterizados como tipos inteiros, os dados numéricos positivos ou negativos. Excluindo-se destes qualquer número fracionário. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1024 entre outros.
São caracterizados como tipos reais, os dados numéricos positivos e negativos e números fracionários. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, -45.987 entre outros.
São caracterizados como tipos caracteres, as seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas (“”). Este tipo de dado também é conhecido como alfanumérico, string, literal ou cadeia. Como exemplo deste tipo de dado, tem-se os valores: “Programação”, “Rua Alfa, 52 Apto 1”, “Fone 574-9988”, “04387- 030”, “ ”, “7” entre outros.
São caracterizados como tipos lógicos os dados com valor verdadeiro e falso , sendo que este tipo de dado poderá representar apenas um dos dois valores. Ele é chamado por alguns de tipo booleano , devido à contribuição do filósofo e matemático inglês George Boole na área da lógica matemática.
ANO1 – correto a casa – errado (contém o caractere branco) SAL/HORA – errado (contém o caractere “/”) SAL_HORA – correto _DESCONTO – errado (não começou com uma letra)
Obviamente é interessante adotar nomes de variáveis relacionados às funções que serão exercidas pela mesmas dentro de um programa.
Outro atributo característico de uma variável é o tipo de dado que ela pode armazenar. Este atributo define a natureza das informações contidas na variável. Por último há o atributo informação , que nada mais é do que a informação útil contida na variável.
Uma vez definidos, os atributos nome e tipo de dado de uma variável não podem ser alterados e assim permanecem durante toda a sua existência, desde que o programa que a utiliza não seja modificado. Por outro lado, o atributo informação está constantemente sujeito a mudanças de acordo com o fluxo de execução do programa.
Em resumo, o conceito de variável foi criado para facilitar a vida dos programadores, permitindo acessar informações na memória dos computadores por meio de um nome, em vez do endereço de uma célula de memória.
Todas as variáveis utilizadas em algoritmos devem ser definidas antes de serem utilizadas. Isto se faz necessário para permitir que o compilador reserve um espaço na memória para as mesmas.
Mesmo que algumas linguagens de programação (como BASIC e FORTRAN) dispensam esta definição, uma vez que o espaço na memória é reservado à medida que novas variáveis são encontradas no decorrer do programa, nos algoritmos usaremos a definição de variáveis por assemelhar-se com as principais linguagens de programação como Pascal e C.
Nos algoritmos, todas as variáveis utilizadas serão definidas no início do mesmo, por meio de um comando de uma das seguintes formas:
VAR < nome_da_variável > : < tipo_da_variável > ou VAR < lista_de_variáveis > : < tipo_das_variáveis >
Exemplos de definição de variáveis:
VAR nome: caracter[30] idade: inteiro salário: real tem_filhos: lógico
No exemplo acima foram declaradas quatro variáveis:
Têm-se como definição de constante tudo aquilo que é fixo ou estável. Existirão vários momentos em que este conceito deverá estar em uso, quando desenvolvermos programas.
É comum definirmos uma constante no início do programa, e a utilizarmos no decorrer do programa, para facilitar o entendimento, a programação ou então para poupar tempo no caso de ter que alterar o seu valor, de modo que alterando uma única vez a declaração da constante, todos os comandos e expressões que a utilizam são automaticamente atualizados.
Nos algoritmos, todas as constante utilizadas serão definidas no início do mesmo, por meio de um comando da seguinte forma:
CONST < nome_da_constante > = < valor >
Exemplo de definição de constantes:
CONST pi = 3. nome_da_empresa = “Enxuga Gelo SA”
5.1.2 Operadores Aritméticos
Os operadores aritméticos se relacionam às operações aritméticas básicas, conforme a tabela abaixo:
Operador Tipo Operação Prioridade
/ Binário Divisão 3 MOD Binário Resto da Divisão 3
DIV Binário Divisão Inteira 3 ** Binário Exponenciação 2
A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expressão.
5.1.3 Operadores Relacionais
Os operadores relacionais são operadores binários que devolvem os valores lógicos verdadeiro e falso.
Operador Comparação
maior que
< menor que
= maior ou igual
<= menor ou igual = igual
<> diferente
Estes valores são somente usados quando se deseja efetuar comparações. Comparações só podem ser feitas entre objetos de mesma natureza, isto é variáveis do mesmo tipo de dado. O resultado de uma comparação é sempre um valor lógico
Por exemplo, digamos que a variável inteira escolha contenha o valor 7. A primeira das expressões a seguir fornece um valor falso, e a segunda um valor verdadeiro:
escolha <= 5 escolha > 5
Com valores string, os operadores relacionais comparam os valores ASCII dos caracteres correspondentes em cada string. Uma string é dita "menor que" outra se os caracteres correspondentes tiverem os números de códigos ASCII menores. Por exemplo, todas as expressões a seguir são verdadeiras:
“algoritmo” > “ALGORITMO” “ABC” < “EFG” “Pascal” < “Pascal compiler”
Observe que as letras minúsculas têm códigos ASCII maiores do que os das letras maiúsculas. Observe também que o comprimento da string se torna o fator determinante na comparação de duas strings, quando os caracteres existentes na string menor são os mesmos que os caracteres correspondentes na string maior. Neste caso, a string maior é dita “maior que” a menor.
5.1.4 Operadores Lógicos
Os operadores lógicos ou booleanos são usados para combinar expressões relacionais. Também devolvem como resultado valores lógicos verdadeiro ou falso.