CURSO DE VERÃO EM BIOINFORMÁTICA ESTRUTURAL
Introdução a Algoritmos e
Estruturas de Dados
Sandro Carvalho Izidoro
[email protected]
Apresentação







Definição
Variáveis
Estrutura sequencial
Estrutura condicional
Estrutura de repetição
Procedimentos e funções
Vetor e Matriz
Sandro Carvalho Izidoro
Definição
Para resolver um problema através de um computador é
necessário encontrar uma maneira de descrevê-lo de uma
forma clara e precisa.
Assim se faz necessário estabelecer uma sequência de passos
que conduzam à sua resolução. Esta sequência de passos é
designada por algoritmo.
O conceito central de programação e da ciência da computação
é o de algoritmo. Programar é basicamente construir
algoritmos.
Algoritmo é a descrição de um conjunto de comandos
que, obedecidos, resultam numa sucessão finita de
ações.
Sandro Carvalho Izidoro
Definição
Pseudocódigo é uma forma genérica de escrever um
algoritmo, utilizando uma linguagem simples sem necessidade
de conhecer a sintaxe de nenhuma linguagem de programação.
Os programas de computadores nada mais são do que
algoritmos escritos em uma linguagem de programação
(Perl, Pascal, C/C++, Fortran, Java, etc.) e que são
interpretados e executados por um computador.
Sandro Carvalho Izidoro
Definição
Exemplo
A seguir um exemplo de um algoritmo para somar 2 números.
O que esse algoritmo faz é:




Obter o primeiro número;
Obter o segundo número;
Somar os 2 números;
Escrever o resultado.
Sandro Carvalho Izidoro
Algoritmo
declare a,b,c numerico
inicio
leia a
leia b
c←a+b
escreva c
Fim algoritmo
Definição
Algoritmo
declare a,b,c numerico
inicio
leia a
leia b
c←a+b
escreva c
Fim algoritmo
Sandro Carvalho Izidoro
{Programa que soma 2 numeros }
Program Soma;
var A, B, C : integer;
begin
Readln( A );
Readln( B );
C := A + B;
Writeln( C );
end.
/*Programa que soma 2 números
*/
#include <stdio.h>
int main(void){
int A, B, C;
scanf("%d", &A);
scanf("%d", &B);
C = A + B;
printf("%d", C );
}
Definição
Algoritmo
declare a,b,c numerico
inicio
leia a
leia b
c←a+b
escreva c
Fim algoritmo
Sandro Carvalho Izidoro
#!/usr/bin/perl
# Somando dois numeros.
my ($a, $b, $c);
print "Digite o valor de A: ";
$a = <STDIN>;
print "Digite o valor de B: ";
$b = <STDIN>;
$c = $a + $b;
print "Soma: $c\n";
Variáveis
Sabe-se da matemática que uma variável é a representação
simbólica dos elementos de um certo conjunto. Nos
algoritmos, destinados a resolver um problema no computador,
cada variável corresponde uma posição de memória cujo
conteúdo pode variar ao longo do tempo durante a execução
do programa.
Embora uma variável possa assumir diferentes valores, ela só
pode armazenar um único valor a cada instante.
Toda variável é identificada por um nome ou identificador.
Assim, por exemplo, em um algoritmo para cálculo das raízes
de uma equação de 2º grau (ax2+bx+c = 0), os identificadores
A, B, C podem representar as posições de memória que
armazenam os coeficientes da equação.
Sandro Carvalho Izidoro
Variáveis
Declaração de Variáveis
As variáveis só podem armazenar valores de um mesmo tipo e
são classificadas como numéricas, lógicas e literais.
A declaração de variáveis tem a seguinte forma:
declare lista-de-identificadores nome-do-tipo
Exemplo:
declare MASSA, CODIGO, X_5 numérico
TESTE, SIM lógico
NOME_PROTEINA literal
Sandro Carvalho Izidoro
Variáveis
Declaração de Variáveis
Um identificador é formado por 1 ou mais caracteres, sendo
que o 1º caractere deve, obrigatoriamente, ser uma letra e os
caracteres seguintes, letras ou dígitos, não sendo permitido o
uso de símbolos especiais.
Identificadores permitidos
A
X_5
NOTA
A3_2B MATRICULA
1G3H5
Identificadores NÃO permitidos
5B
X-Y
Sandro Carvalho Izidoro
E(13)
NOTA[1]
A:B
B*D
Variáveis
Comentários
Com a finalidade de simplificar o compreensão de um algoritmo
é utilizado um instrumento denominado comentário.
Os comentários podem ser colocados em qualquer ponto do
algoritmo onde se façam necessários.
Exemplo
declare
MAT, {Nº de matrícula do aluno}
NOTA, {Total de pontos no semestre}
COD {Código do curso} numérico
Sandro Carvalho Izidoro
Variáveis
Variável Simples
declare x, y, n numerico
…
x ← 100 / n
escreva x
Variável Composta Homogênea
Variáveis compostas homogêneas correspondem a posições de
memória, identificadas por um mesmo nome, individualizadas
por índices e cujo conteúdo é de mesmo tipo.
declare medias[1:50] numerico
...
leia medias[13]
Sandro Carvalho Izidoro
Variáveis
Variável Composta Heterogênea
Variáveis compostas heterogêneas são conjuntos de dados
logicamente relacionados, mas de tipos diferentes (numérico,
literal, lógico). São também conhecidos como registros ou
estruturas.
Cada componente é individualizado pela explicitação de seu
identificador.
declare Funcionario registro (Nome, Rua, Sexo literal,
Numero, CEP, CPF, Salario numerico,
Nascimento literal)
...
leia Funcionario.Nome, Funcionario.CPF
Funcionario.Salario ← Funcionario.Salario + Aumento
Sandro Carvalho Izidoro
Estrutura Sequencial
Estrutura sequencial em algoritmos

Comando de atribuição

Comandos de entrada e saída

Operadores relacionais e lógicos
Sandro Carvalho Izidoro
Estrutura Sequencial
Comando de atribuição
Este comando permite que se forneça um valor a uma certa
variável, onde a natureza deste valor tem de ser compatível
com o tipo da variável na qual está sendo armazenado. O
comando de atribuição tem a seguinte forma geral:
identificador  expressão
Exemplos
a) K 1
b) MEDIA SOMA / N
c) COR "VERDE"
d) TESTE F
e) A B
Sandro Carvalho Izidoro
Estrutura Sequencial
Comandos de Entrada e Saída
As unidades de entrada e saída são dispositivos que
possibilitam a comunicação entre o usuário e o computador.
Através do teclado o usuário consegue dar entrada ao
programa e aos dados na memória do computador. Por sua
vez, o computador pode emitir os resultados e outras
mensagens para o usuário através do vídeo ou de uma
impressora.
Um comando de entrada e saída é construído de acordo com a
forma geral:
leia lista de identificadores
escreva lista de identificadores e/ou constantes
Sandro Carvalho Izidoro
Estrutura Sequencial
Expressões Lógicas
É comum nos algoritmos surgirem situações em que a
execução de uma ação, ou sequência de ações, esteja
sujeita a uma certa condição. Esta condição é representada
no texto do algoritmo por meio de uma expressão lógica.
Denomina-se expressão lógica à expressão cujos operadores
são lógicos e cujos operandos são relações e/ou variáveis
do tipo lógico.
Sandro Carvalho Izidoro
Estrutura Sequêncial
Operadores Relacionais
Relações: Uma expressão relacional, ou relação, é uma
comparação realizada entre dois valores de mesmo tipo básico.
Estes valores são representados na relação através de
constantes, variáveis ou expressões aritméticas.
O resultado obtido de uma relação, é sempre um valor lógico.
Sandro Carvalho Izidoro
Estrutura Sequêncial
Operadores Lógicos
Dadas as variáveis numéricas X,Y e Z, contendo os valores 2, 5
e 9 respectivamente, a variável literal NOME, contendo a
sequência "MARIA" e a variável lógica SIM, contendo o valor
lógico F, obter os resultados das expressões lógicas a seguir:
a)(
b)(
c)(
) X + Y > Z e NOME = "MARIA"
) SIM ou Y > X
) NOME = "JORGE" e SIM ou X2 < Z + 10
Sandro Carvalho Izidoro
Estrutura Condicional
Estrutura Condicional
A estrutura condicional permite a escolha do grupo de ações e
estruturas a ser executado quando determinadas condições são ou não
satisfeitas. A estrutura condicional pode ser apresentada através de
uma estrutura simples ou de uma estrutura composta.
Formato de uma Estrutura Condicional Simples
se condição
então sequência de comandos
Sandro Carvalho Izidoro
Estrutura Condicional
Exemplo 01
Algoritmo
declare sequencia01, sequencia02 literal
sequencia01 ← “GTGGGATC”
leia sequencia02
se sequencia01 = sequencia02
então escreva “Sequencia encontrada”
Fim_Algoritmo
#!/usr/bin/perl
# Selecao Simples.
my ($sequencia01, $sequencia02);
$sequencia01 = "GTGGGATC";
print "Digite a sequencia: ";
chomp($sequencia02 = <STDIN>);
if($sequencia01 eq $sequencia02){
print "Sequencia encontrada\n";
}
Sandro Carvalho Izidoro
Estrutura Condicional
Estrutura Condicional Composta
se condição
então sequência 1 de comandos
senão sequência 2 de comandos
Neste caso, a sequência 1 só será executada se a condição for
verdadeira e a sequência 2 de comandos só será executada
se a condição for falsa.
Sandro Carvalho Izidoro
Estrutura Condicional
Exemplo 02
Algoritmo
declare sequencia01 literal
leia sequencia01
se sequencia01 = “GGTCAG”
então escreva “Sequencia encontrada”
senão escreva “Sequencia não
encontrada”
Fim_Algoritmo
Sandro Carvalho Izidoro
#!/usr/bin/perl
# Selecao Composta.
my ($sequencia);
print "Digite a sequencia: ";
chomp($sequencia = <STDIN>);
if ($sequencia eq "GGTCAG"){
print "Sequencia encontrada\n";
}
else {
print "Sequencia não encontrada\n";
}
Estrutura Condicional
Exemplo 03
Algoritmo
declare seq01, seq02, seq03 literal
seq01 ← “GGTACGTA”
seq02 ← “GGTACGAT”
leia seq03
se seq03 = seq01
então escreva “Encontrou”
senão se seq03 = seq02
então escreva “Encontrou”
senão escreva “Não achou!”
Fim_Algoritmo
Sandro Carvalho Izidoro
#!/usr/bin/perl
# Selecao Composta.
my ($seq01, $seq02, $seq03);
$seq01 = "GGTACGTA";
$seq02 = "GGTACGAT";
print "Digite a sequencia: ";
chomp($seq03 = <STDIN>);
if ($seq03 eq $seq01){
print "Encontrou\n";
} elsif ($seq03 eq $seq02){
print "Encontrou\n";
}
else {print "Não achou\n";
}
Estrutura Condicional
Exemplo 04
Algoritmo
declare nota1, nota2, media numerico
escreva “digite nota 1:”
leia nota1
escreva “digite nota 2:”
leia nota2
media ← (nota1+nota2)/2
se media >= 7
então escreva “Media: ”, media, “ - Aprovado”
senão se media >= 5
então escreva “Media: ”, media, “ - Exame Final”
senão escreva “Media: ”, media, “ - Reprovado”
Fim_Algoritmo
Sandro Carvalho Izidoro
Estrutura Condicional
Exemplo 04
#!/usr/bin/perl
# Selecao Composta.
my ($nota1, $nota2, $media);
print "Digite nota 1: ";
$nota1 = <STDIN>;
print "Digite nota 2: ";
$nota2 = <STDIN>;
$media = ($nota1 + $nota2)/2;
if ($media >= 7){
print "Media: $media - Aprovado\n";
}
elsif ($media >= 5){
print "Media: $media - Exame final\n";
}
else {
print "Media: $media - Reprovado\n";
}
Sandro Carvalho Izidoro
Estrutura Condicional
Exemplo 05
Algoritmo
declare media, faltas numerico
escreva “digite a media:”
leia media
escreva “digite o numero de faltas:”
leia faltas
se media < 5 ou faltas > 25
então escreva “Reprovado”
senão se media >= 5 e media < 7
então escreva “Exame Final”
senão escreva “Aprovado”
Fim_Algoritmo
Sandro Carvalho Izidoro
Estrutura Condicional
Exemplo 05
#!/usr/bin/perl
# Selecao Composta.
my ($media, $faltas);
print "Digite a media: ";
$media = <STDIN>;
print "Digite o numero de faltas: ";
$faltas = <STDIN>;
if ($media < 5 || $faltas > 25){
print "Reprovado\n";
}
elsif ($media >= 5 && $media < 7){
print "Exame Final\n";
}
else {
print "Aprovado\n";
}
Sandro Carvalho Izidoro
Estrutura de Repetição
Estrutura de repetição
A estrutura de repetição permite que uma sequência de comandos seja
executada repetidamente até que uma determinada condição de
interrupção seja satisfeita. A condição de interrupção que deve ser
satisfeita é representada por uma expressão lógica. As estruturas de
repetição são:
• Comando Enquanto
• Comando Repita
• Comando Para
Sandro Carvalho Izidoro
Estrutura de Repetição
Estrutura Enquanto
Enquanto o valor da condição for verdadeiro, as ações dos comandos
são executadas. Quando for falso, o comando é abandonado. Se já da
primeira vez o resultado é falso, os comandos não são executados
nenhuma vez.
Formato do comando Enquanto
enquanto condição faça
inicio
comandos
fim
Sandro Carvalho Izidoro
Estrutura de repetição
Exemplo
Algoritmo
declare X,Y, L numérico
L←0
enquanto L <= 3 faça
início
leia X,Y
se X > Y
então escreva X
senão escreva Y
L←L+1
fim
Fim_Algoritmo.
Sandro Carvalho Izidoro
#!/usr/bin/perl
# Repeticao: Enquanto.
my ($x, $y, $l);
$l = 0;
while ($l <= 3){
print "digite x: ";
$x = <STDIN>;
print "digite y: ";
$y = <STDIN>;
if ($x > $y){
print "$x \n";
} else {
print "$y \n";
}
$l = $l + 1;
}
Estrutura de Repetição
Estrutura Repita
Os comandos são executados pelo menos uma vez. Quando a condição
é encontrada, ela é testada. Se for verdadeira o comando seguinte será
executado. Se for falsa, os comandos voltam a ser executados. Em
outras palavras os comandos são executados até que a condição se
torne verdadeira.
Formato do comando Repita
repita
comandos
até condição
Sandro Carvalho Izidoro
Estrutura de Repetição
Exemplo
Algoritmo
declare X,Y, L numérico
L←0
repita
leia X,Y
se X > Y
então escreva X
senão escreva Y
L←L+1
até L > 3
Fim_Algoritmo.
Sandro Carvalho Izidoro
#!/usr/bin/perl
# Repeticao: Repita.
my ($x, $y, $l);
$l = 0;
do {
print "digite x: ";
$x = <STDIN>;
print "digite y: ";
$y = <STDIN>;
if ($x > $y){
print "$x \n";
} else {
print "$y \n";
}
$l = $l + 1;
} until $l >= 3
Estrutura de Repetição
Estrutura Para
O comando para é, na verdade, o comando enquanto utilizando uma
variável de controle, escrito numa notação compactada. Neste caso
existirá sempre uma inicialização da variável de controle, um teste para
verificar se a variável atingiu o limite e um acréscimo na variável de
controle.
Formato do comando Para
para var de val_num_1 até val_num_2 [ passo val_num_3] faça
início
comandos
fim
Sandro Carvalho Izidoro
Estrutura de repetição
Exemplo
Algoritmo
declare X,Y, L numérico
para L de 1 até 3 passo 1 faça
início
leia X,Y
se X > Y
então escreva X
senão escreva Y
fim
Fim_Algoritmo.
Sandro Carvalho Izidoro
#!/usr/bin/perl
# Repeticao: Para.
my ($x, $y, $l);
for ($l=0;$l<=3;$l++){
print "digite x: ";
$x = <STDIN>;
print "digite y: ";
$y = <STDIN>;
if ($x > $y){
print "$x \n";
} else {
print "$y \n";
}
}
Procedimentos e Funções
Um módulo é um grupo de comandos, constituindo um trecho de
algoritmo, com uma função bem definida e o mais independente
possível em relação ao resto do algoritmo.
Todo módulo é constituído por uma sequência de comandos que
operam sobre um conjunto de objetos, que podem ser globais ou locais.
Objetos globais são entidades que podem ser usadas em módulos
internos a outro módulo do algoritmo onde foram declaradas.
Objetos locais são entidades que só podem ser usadas no módulo do
algoritmo onde foram declaradas.
A comunicação entre módulos deverá ser feita através de vínculos,
utilizando-se objetos globais ou transferência de parâmetros.
Sandro Carvalho Izidoro
Procedimentos e Funções
A divisão do algoritmo em módulos traz os seguintes benefícios:
Manutenção simples (módulos independentes);
 Elaboração e testes em separado;
 Reutilização do módulo em outros programas.

Ferramentas para modularização
Como ferramentas de modularização podemos destacar as sub-rotinas
e as funções. Os módulos de programação servem basicamente a três
objetivos:
Repetição de código;
 Dividir e estruturar melhor um algoritmo;
 Aumentar a legibilidade de um algoritmo.

Sandro Carvalho Izidoro
Procedimentos e Funções
Sub-rotinas e funções são módulos hierarquicamente subordinados a
um algoritmo, comumente chamado de módulo principal. Da mesma
forma, uma sub-rotina ou uma função pode conter outras sub-rotinas e
funções aninhadas.
A sub-rotina e a função são criadas através das suas declarações em
um algoritmo. Para serem executadas, necessitam de ativação
provocada por um comando de chamada.
Sandro Carvalho Izidoro
Procedimentos e Funções
Sub-rotinas
Sintaxe
Subrotina NOME (lista_de_parâmetros_formais)
declarações dos objetos locais à sub-rotina
comandos da sub-rotina
Fim_sub_rotina NOME
A chamada de uma sub-rotina é feita com uma referência a seu
nome e a indicação dos parâmetros atuais no local do
algoritmo onde a sub-rotina deve ser ativada, ou seja, onde a
sua execução deve ser iniciada. A forma geral para a ativação
de uma sub-rotina é a seguinte:
NOME (lista_de_parâmetros_atuais)
Sandro Carvalho Izidoro
Procedimentos e Funções
Funções
Sintaxe
Função tipo NOME (lista_de_parâmetros_formais)
declarações dos objetos locais à função
comandos da função
retorne valor
Fim_função NOME
A chamada de uma função é feita com uma referência a seu
nome e a indicação dos parâmetros atuais no local do
algoritmo onde a função deve ser ativada. Pode-se chamar
uma função de várias formas:
valor ← NOME (lista_de_parâmetros_atuais)
escreva NOME (lista_de_parâmetros_atuais)
Sandro Carvalho Izidoro
Procedimentos e Funções
Exemplo
Algoritmo
declare numero numerico
função literal ph (valor numerico)
escreva “forneça o ph da solução:”
leia numero
escreva “A solução é “, ph (numero)
Fim_Algoritmo.
função literal ph (numero numerico)
se numero > 7
então retorne “base”
senão se numero < 7
então retorne “ácida”
senão retorne “neutra”
fim função ph
Sandro Carvalho Izidoro
Procedimentos e Funções
Exemplo
#!/usr/bin/perl
# Função exemplo
my ($ph);
print "Forneça o ph da solução: ";
$ph = <STDIN>;
print "A solução é ", &retorna_ph($ph) , "\n";
sub retorna_ph {
my $parametro01 = $_[0];
if ($parametro01 > 7) {
return "base";
} elsif ($parametro01 < 7) {
return "ácida";
}else { return "neutra";}
}
Sandro Carvalho Izidoro
Vetor e Matriz
Exemplo Vetor
Algoritmo
declare vetor1[1:3], vetor2[1:3] literal
flag, i numérico
escreva “Digite o primeiro vetor”
para i de 1 até 3 passo 1 faça
inicio
leia (vetor1[ i ])
fim para
escreva “Digite o segundo vetor”
para i de 1 até 3 passo 1 faça
inicio
leia (vetor2[ i ])
fim para
flag ← 1
Sandro Carvalho Izidoro
para i de 1 até 3 passo 1 faça
inicio
se (vetor1[ i ] <> vetor2[ i ] )
então flag ← 0
fim para
se (flag = 1)
então escreva “Iguais”
senão escreva “diferentes”
fim algoritmo.
Vetor e Matriz
Exemplo Vetor
#!/usr/bin/perl
# Vetor
my (@vetor1, @vetor2, $flag);
$flag = 1;
print "Digite o primeiro vetor:\n";
for($i=0;$i<3;$i++){
$vetor1[$i] = <STDIN>;
}
print "Digite o segundo vetor:\n";
for($i=0;$i<3;$i++){
$vetor2[$i] = <STDIN>;
}
Sandro Carvalho Izidoro
for($i=0;$i<3;$i++){
if($vetor1[$i] ne $vetor2[$i]){
$flag = 0;
}
}
if($flag == 1){
print "Vetores iguais\n";}
else { print "Vetores diferentes\n";
}
Vetor e Matriz
Exemplo Matriz
Algoritmo
declare matriz[1:3,1:2], seq literal
i, j numérico
escreva “Digite os valores para a matriz”
para i de 1 até 3 passo 1 faça
inicio
para j de 1 até 2 passo 1 faça
inicio
leia (matriz[ i, j ])
fim para
fim para
escreva “Digite uma sequência:”
leia seq
Sandro Carvalho Izidoro
para j de 1 até 3 passo 1 faça
inicio
se (matriz[ i, 1 ] = seq)
então escreva matriz[i , 2]
fim para
fim algoritmo.
Download

algoritmo