Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila de Algoritimos
Apostila de Algoritimos
Neste texto de maneira sucinta são apresentadas três destas formas, porém dando-se mais ênfase a
duas delas. É importante salientar que o estudo de algoritmos exige do estudante um esforço quanto
à realização de exercícios, de modo que não se pode aprendê-lo apenas lendo textos.
Sendo assim, procurem realizar os exercícios que são passados em sala de aula.
Conceito de Algoritmo
- Algoritmo é a especificação de uma sequência ordenada de passos que deve ser seguida com o
intuito de realizar uma tarefa, garantindo a sua repetibilidade.
Obs.: repetibilidade – permite que esta sequência possa ser repetida toda vez que a tarefa tiver que
ser realizada.
Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo
a passo, numa forma compreensível pela máquina, utilizando aquilo que se chama de programa.
Neste sentido, um programa de computador nada mais é que um algoritmo escrito numa forma
compreensível pelo computador.
Formas de Algoritmos
É uma representação gráfica de algoritmos, onde formas geométricas diferentes implicam em ações
(instruções ou comandos) distintas. Esta forma facilita o entendimento das idéias contidas nos
algoritmos.
De modo geral, o fluxograma são símbolos dispostos em uma determinada sequência, em que há um
único caminho orientado a ser seguido, representando a sequência de execução daquelas instruções.
Dos diversos símbolos existentes que podem ser utilizados em um Fluxograma, os que serão
necessários para o curso apresentado neste texto, são:
>> Pseudocódigo:
Algoritmo <nome_do_algoritmo>
Var
<declaração_de_variáveis>
Início
<corpo_do_algoritmo>
Fim.
"Algoritmo" é uma palavra que indica o início da definição do algoritmo em forma de pseudocódigo.
"<nome_do_algoritmo>" – no lugar deste, deve ser colocado o nome simbólico do algoritmo, o que
irá distingui-lo dos demais.
"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.
Exemplo de um Algoritmo que calcula a média de duas notas, que devem ser digitados pelo Usuário
ao executar o programa, e ao final mostra se houve aprovação ou não, segundo um critério
estabelecido.
Algoritmo Media
Var
N1, N2, Media: Real;
Início
Leia (N1, N2);
Media = (N1+N2)/2;
Se Media >= 7 Então
Escreva ("Aprovado");
Senão
Escreva ("Reprovado");
Fim_se
Fim.
Tipos de Dados
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:
– As instruções, que comandam o funcionamento da máquina e determinam a maneira como devem
ser tratados os dados.
– Os dados propriamente ditos, que correspondem à porção das informações a serem processadas
pelo computador.
Para que sejam manipulados pelo processador, os dados devem ser declarados no início do
programa, a fim de que o compilador conheça os tipos e os nomes das variáveis que contemplarão
estes dados.
São 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, 234, -56, 1024 entre outros.
São os dados numéricos positivos e negativos, incluindo-se os números fracionários. Como exemplo
deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, 234.18, -45.8987 entre outros.
São 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 os dados com valor "verdadeiro" ou "falso", sendo que este tipo de dado poderá representar
apenas um dos dois valores. Ele é conhecido também por tipo "booleano", devido à contribuição do
filósofo e matemático inglês George Boole na área da lógica matemática.
Basicamente, uma variável possui três atributos: um nome, um tipo de dado associado à mesma, e
um valor por ela guardado.
Toda variável possui um nome que tem a função de diferenciá-la das demais. Cada linguagem de
programação estabelece suas próprias regras de formação de nomes de variáveis.
Adotaremos para os algoritmos, as seguintes regras para nome de variável:
- deve necessariamente começar com uma letra;
- não deve conter nenhum símbolo especial, exceto o "underline" (_);
- não deve conter nenhum espaço em branco;
- não deve ser uma palavra acentuada;
- não poderá ser uma palavra reservada a uma instrução de programa.
Obviamente é interessante adotar nomes relacionados às funções que serão exercidas pela variável
dentro de um programa.
Outro atributo característico de uma variável é o "tipo" do dado que ela pode armazenar. Este
atributo define a natureza das informações contidas na variável.
Por último há o atributo "valor", 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, estes não podem ser
alterados, e assim permanecem durante toda a sua existência no programa. Por outro lado, o
atributo "valor" está constantemente sujeito a mudanças de acordo com o fluxo de execução do
programa (por ser uma "variável").
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 declaradas antes de serem utilizadas. Isto se
faz necessário para permitir que o compilador reserve um espaço na memória para as mesmas.
Nos algoritmos, todas as variáveis utilizadas serão declaradas no início do mesmo, por meio de um
comando que pode ser escrito em uma das seguintes formas:
VAR
<nome_da_variável> : <tipo_da_variável>;
ou
<lista_de_variáveis> : <tipo_das_variáveis>;
Observações:
- numa mesma linha poderão ser definidas uma ou mais variáveis do mesmo tipo. Se forem várias,
estas devem estar separadas por vírgulas;
- variáveis de tipos diferentes devem ser declaradas em linhas diferentes.
Operadores
Operadores são elementos fundamentais que atuam sobre operandos e produzem um determinado
resultado. Por exemplo, a expressão 3 + 2 relaciona dois operandos (os números 3 e 2) por meio do
operador (+) que representa a operação de adição.
"O nome da variável que recebe o valor deve aparecer sempre sozinho, no lado esquerdo do sinal de
igual deste comando."
Exemplos:
a = 3;
nota1 = 8.5;
media = (nota1 + nota2) / 2;
v = v0 + a * t;
salFinal = sal * perc / 100;
Obs.: A prioridade (ou hierarquia) entre operadores define a ordem em que os mesmos serão
avaliados (e executados) dentro de uma mesma expressão.
Os operadores relacionais são operadores binários que "devolvem" os valores lógicos "verdadeiro" e
"falso".
Obs.: a palavra "devolvem" indica que uma operação com Operadores Relacionais tem como
possíveis resultados apenas 2 valores: "verdadeiro" ou "falso".
Operador Operação
< menor que
> maior que
<= menor ou igual a
>= maior ou igual a
!= diferente de
== igual a
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.
Por exemplo, digamos que a variável inteira "num" contenha o valor 7(sete). Assim as expressões a
seguir fornecem cada uma, um valor lógico, sendo falso a primeira, e verdadeiro a segunda:
num <= 5
num > 5
Operações que utilizam operadores relacionais são como perguntas, cuja resposta será sempre "Não"
ou "Sim"; "Falso" ou "Verdadeiro"; "0" ou "1".
Ex.: se num for igual a 7(sete), então:
num <= 5 ? ... Não (Falso)
num > 5 ? ... Sim (Verdadeiro)
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".
Operador
OU
E
NÃO
NÃO expressão1 é verdadeiro se expressão1 for falsa; de modo contrário, a expressão "NÃO
expressão1" resultará em falso, se expressão1 for verdadeira.
Ou seja, a expressão NÃO expressão1 resulta na negação da expressão1.
Tabela Verdade:
A B A 0U B AEB NÃO A NÃO B
V V V V F F
V F V F F V
F V V F V F
F F F F V V
São os operadores que atuam sobre caracteres. Eles variam muito de uma linguagem para outra. O
operador mais comum, e mais usado, é o operador que faz a concatenação (união) de strings: ou
seja, tomando-se duas strings e unindo-se (concatenando-se) a segunda ao final da primeira.
Podem-se utilizar dois operadores que fazem esta operação de união de caracteres: o "sinal de mais",
ou a "vírgula".
Por exemplo, a concatenação das strings "ALGO" e "RITMO" pode ser representada por:
"ALGO" + "RITMO"
ou
"ALGO", "RITMO"
...e o resultado de sua avaliação é: "ALGORITMO"
Funções Matemáticas
Abaixo, estão enumeradas algumas Funções Matemáticas que poderão ser abordadas e utilizadas em
exercícios neste curso:
Expressões
Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, seja ele inteiro ou
real. Somente o uso de funções, operadores aritméticos, variáveis numéricas e parênteses é
permitido em expressões deste tipo.
"Toda expressão aritmética deve estar linearizada, ou seja, representada inteiramente em apenas
uma linha."
1. Deve-se observar a prioridade dos operadores, conforme mostrado nas tabelas de operadores:
(obs.: operadores de maior prioridade devem ser avaliados primeiro. Se houver empate com relação
à precedência, então a avaliação se faz da esquerda para a direita).
3. Entre os quatro principais grupos de operadores existentes, a saber, aritmético, lógico, literal e
relacional, há uma certa prioridade de avaliação: os aritméticos e literais devem ser avaliados
primeiro; a seguir, são avaliadas as sub-expressões com operadores relacionais e, por último são
avaliados os operadores lógicos.
Os comandos de entrada de dados são o meio pelo qual as informações dos usuários são transferidas
para a memória dos computadores, para que possam ser usadas nos programas.
No diagrama, as variáveis que devem receber os valores devem ser descritas dentro do símbolo:
X nome, endereco,
cidade
OU
Comandos de Saída de Dados
Os comandos de saída de dados são o meio pelo qual informações contidas na memória dos
computadores são colocadas nos dispositivos de saída, para que os usuários possam apreciá-las.
No Fluxograma, os valores que devem ser mostrados na tela devem ser descritos dentro do símbolo:
X "Valor da média: ", media
OU
Exemplo: algoritmo que calcula o preço total de acordo com a quantidade de produto comprada.
Algoritmo exemplo_comando_de_entrada_de_dados
Var
preco_unit, preco_tot : Real;
quant : Inteiro;
Início
Leia (preco_unit, quant);
preco_tot = preco_unit * quant;
Escreva (preco_tot);
Fim.
Estruturas Condicionais:
(Comandos de Decisão)
Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da
avaliação de uma ou mais condições. Uma condição é uma expressão lógica.
A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser
testadas para que se decida qual o caminho a ser seguido. Segundo esta classificação, têm-se 3 tipos
de estruturas de decisão:
- Estrutura de Decisão Simples (Se..então..fim_se)
- Estrutura de Decisão Composta (Se..então..senão..fim_se)
- Estrutura de Decisão Múltipla (Se..então..senão se..então ... fim_se)
Uma Estrutura de decisão inicia-se na palavra reservada "SE" (inicial), e termina na palavra
reservada "FIM_SE".
Nesta estrutura uma única condição (expressão lógica) é avaliada. Dependendo do resultado desta
avaliação, um comando ou conjunto de comandos serão executados (se a avaliação for verdadeira)
ou não serão executados (se a avaliação for falsa).
FALSA VERDADEIRA
CONDIÇÃO
INSTRUÇÕES
SE <condição> ENTÃO
<instruções>;
FIM_SE
– a condição é avaliada:
– No caso da condição ser falsa, o fluxo do algoritmo prossegue pela instrução seguinte à construção,
ou seja, o primeiro comando APÓS a palavra-reservada "FIM_SE", sem executar o conjunto de
instruções entre as palavras-reservadas "ENTÃO" e "FIM_SE".
Exemplo de algoritmo que lê um número e escreve se o mesmo é maior que 10:
Algoritmo exemplo_estrutura_de_decisão_simples
Var
X : Inteiro;
Início
Escreva ("Digite um valor");
Leia (X);
Se X > 10 Então
Escreva ("X é maior que 10");
Fim_se
Fim.
Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for
"verdadeiro", um conjunto de instruções será executado. Caso contrário, ou seja, quando o resultado
da avaliação for "falso", um outro conjunto de instruções será executado.
FALSA VERDADEIRA
CONDIÇÃO
INSTRUÇÕES_2 INSTRUÇÕES_1
SE <condição> ENTÃO
<instruções_1>;
SENÃO
<instruções_2>;
FIM_SE
– a condição é avaliada:
– No caso da condição ser falsa, então o conjunto de "instruções_2" delimitado pelas palavras-
reservadas "SENÃO" e "FIM_SE" será executado. Ao término de sua execução o fluxo do algoritmo
prossegue pela instrução seguinte à construção, ou seja, o primeiro comando após a palavra-
reservada "FIM_SE".
Exemplo de algoritmo que lê um número e escreve se o mesmo é, ou não, maior que 100:
Algoritmo exemplo_estrutura_de_decisão_composta
Var
X : Inteiro;
Início
Leia (X);
Se X > 100 Então
Escreva ("X é maior que 100");
Senão
Escreva ("X não é maior que 100");
Fim_se
Fim.
Nesta estrutura várias condições (expressões lógicas) são avaliadas. Se o resultado de uma destas
avaliações for "verdadeiro", apenas o conjunto de instruções daquela condição será executado.
VERDADEIRA
CONDIÇÃO_1
INSTRUÇÕES_1
FALSA
VERDADEIRA
CONDIÇÃO_2 nome,
INSTRUÇÕES_2
FALSA nome,
VERDADEIRA
nome,
INSTRUÇÕES_3
FALSA nome,
INSTRUÇÕES_N
nome,
SE <condição_1> ENTÃO
<instruções_1>;
SENÃO SE <condição_2> ENTÃO
<instruções_2>;
SENÃO SE <condição_3> ENTÃO
<instruções_3>;
...
SENÃO
<instruções_N>;
FIM_SE
A semântica desta construção é a seguinte:
– a 1a condição é avaliada.
– Se ela for verdadeira, então o conjunto de "instruções_1" será executado. Ao término de sua
execução o fluxo do algoritmo prossegue pela instrução seguinte à construção, ou seja, o primeiro
comando após a palavra-reservada "FIM_SE".
– Se ela for verdadeira, então o conjunto de "instruções_2" será executado. Ao término de sua
execução o fluxo do algoritmo prossegue pela instrução seguinte à construção, ou seja, o primeiro
comando após a palavra-reservada "FIM_SE".
– No caso desta condição ser falsa, então as seguintes condições são avaliadas em sequência, até
encontrar alguma "verdadeira".
Se nenhuma das condições existentes for "verdadeira", o conjunto de "instruções_N" delimitado pelas
palavras-reservadas "SENÃO" e "FIM_SE" será executado. Ao término de sua execução o fluxo do
algoritmo prossegue pela instrução seguinte à construção, ou seja, o primeiro comando após a
palavra-reservada "FIM_SE".
Exemplo de algoritmo que lê um número e escreve se o mesmo é menor que: 10, 20, 30, ou 40:
Algoritmo exemplo_estrutura_de_decisão_multipla
Var
X : Inteiro;
Início
Leia (X);
Se X < 10 Então
Escreva ("X é menor que 10");
Senão Se X < 20 Então
Escreva ("X é menor que 20");
Senão Se X < 30 Então
Escreva ("X é menor que 30");
Senão Se X < 40 Então
Escreva ("X é menor que 40");
Senão
Escreva ("X é maior ou igual a 40");
Fim_se
Fim.