Introdução a Algoritmos e Estruturas de Dados Sandro Carvalho Izidoro [email protected]...
Transcript of Introdução a Algoritmos e Estruturas de Dados Sandro Carvalho Izidoro [email protected]...
Introdução a Algoritmos e Estruturas de Dados
Sandro Carvalho Izidoro
CURSO DE VERÃO EM BIOINFORMÁTICA ESTRUTURAL
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
Algoritmodeclare a,b,c numericoinicio leia a leia b c ← a + b escreva cFim algoritmo
Definição
Algoritmodeclare a,b,c numericoinicio leia a leia b c ← a + b escreva cFim 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
Algoritmodeclare a,b,c numericoinicio leia a leia b c ← a + b escreva cFim 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 E(13) NOTA[1] A:B B*D
Sandro Carvalho Izidoro
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 / nescreva 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.CPFFuncionario.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 / Nc) COR "VERDE"d) TESTE Fe) 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
Sandro Carvalho Izidoro
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)( ) X + Y > Z e NOME = "MARIA"b)( ) SIM ou Y > Xc)( ) NOME = "JORGE" e SIM ou X2 < Z + 10
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
Sandro Carvalho Izidoro
#!/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"; }
Algoritmodeclare sequencia01, sequencia02 literalsequencia01 ← “GTGGGATC”leia sequencia02se sequencia01 = sequencia02 então escreva “Sequencia encontrada”
Fim_Algoritmo
Estrutura Condicional
Sandro Carvalho Izidoro
Estrutura Condicional Composta
se condiçãoentão sequência 1 de comandossenã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.
Estrutura Condicional
Sandro Carvalho Izidoro
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
#!/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
Sandro Carvalho Izidoro
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
#!/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
Sandro Carvalho Izidoro
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
Estrutura Condicional
Sandro Carvalho Izidoro
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"; }
Estrutura Condicional
Sandro Carvalho Izidoro
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
Estrutura Condicional
Sandro Carvalho Izidoro
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";
}
Estrutura de Repetição
Sandro Carvalho Izidoro
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
Estrutura de Repetição
Sandro Carvalho Izidoro
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çainicio comandos fim
Estrutura de repetição
Sandro Carvalho Izidoro
Exemplo
#!/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;
}
Algoritmodeclare X,Y, L numéricoL ← 0enquanto L <= 3 façainício
leia X,Yse X > Y então escreva X senão escreva YL ← L + 1
fimFim_Algoritmo.
Estrutura de Repetição
Sandro Carvalho Izidoro
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
Estrutura de Repetição
Sandro Carvalho Izidoro
Exemplo
#!/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
Algoritmodeclare X,Y, L numéricoL ← 0repita
leia X,Yse X > Y então escreva X senão escreva Y
L ← L + 1até L > 3
Fim_Algoritmo.
Estrutura de Repetição
Sandro Carvalho Izidoro
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çainício
comandosfim
Estrutura de repetição
Sandro Carvalho Izidoro
Exemplo
#!/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"; }}
Algoritmodeclare X,Y, L numéricopara L de 1 até 3 passo 1 faça
início leia X,Yse X > Y então escreva X senão escreva Y
fimFim_Algoritmo.
Procedimentos e Funções
Sandro Carvalho Izidoro
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.
Procedimentos e Funções
Sandro Carvalho Izidoro
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.
Procedimentos e Funções
Sandro Carvalho Izidoro
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.
Procedimentos e Funções
Sandro Carvalho Izidoro
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)
Procedimentos e Funções
Sandro Carvalho Izidoro
Funções
Sintaxe
Função tipo NOME (lista_de_parâmetros_formais) declarações dos objetos locais à função
comandos da funçãoretorne 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)
Procedimentos e Funções
Sandro Carvalho Izidoro
Exemplo
Algoritmodeclare numero numerico função literal ph (valor numerico)
escreva “forneça o ph da solução:”leia numeroescreva “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
Procedimentos e Funções
Sandro Carvalho Izidoro
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";} }
Vetor e Matriz
Sandro Carvalho Izidoro
Exemplo Vetor
Algoritmodeclare vetor1[1:3], vetor2[1:3] literal flag, i numéricoescreva “Digite o primeiro vetor”para i de 1 até 3 passo 1 façainicio
leia (vetor1[ i ]) fim para
escreva “Digite o segundo vetor”para i de 1 até 3 passo 1 façainicio
leia (vetor2[ i ]) fim para
flag ← 1
para i de 1 até 3 passo 1 façainicio
se (vetor1[ i ] <> vetor2[ i ] ) então flag ← 0fim parase (flag = 1) então escreva “Iguais” senão escreva “diferentes”
fim algoritmo.
Vetor e Matriz
Sandro Carvalho Izidoro
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>; }
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
Sandro Carvalho Izidoro
Exemplo Matriz
Algoritmo declare matriz[1:3,1:2], seq literal
i, j numéricoescreva “Digite os valores para a matriz”para i de 1 até 3 passo 1 façainicio
para j de 1 até 2 passo 1 façainicio
leia (matriz[ i, j ]) fim para
fim paraescreva “Digite uma sequência:”leia seq
para j de 1 até 3 passo 1 façainicio
se (matriz[ i, 1 ] = seq) então escreva matriz[i , 2]fim para fim algoritmo.