45
Introdução a Algoritmos e Estruturas de Dados

Introduçãoa Algoritmose Estruturasde Dados

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Introduçãoa Algoritmose Estruturasde Dados

Introdução a Algoritmos e Estruturas de Dados

Page 2: Introduçãoa Algoritmose Estruturasde Dados

Definição

Variáveis

Estrutura sequencial

Estrutura condicional

Estrutura de repetição Estrutura de repetição

Procedimentos e funções

Vetor e Matriz

Sandro Carvalho Izidoro

Page 3: Introduçãoa Algoritmose Estruturasde Dados

Para resolver um problema através de um computador énecessário encontrar uma maneira de descrevê-lo de umaforma clara e precisa.

Assim se faz necessário estabelecer uma sequência de passosque 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 construiralgoritmos.

Algoritmo é a descrição de um conjunto de comandosque, obedecidos, resultam numa sucessão finita deações.

Sandro Carvalho Izidoro

Page 4: Introduçãoa Algoritmose Estruturasde Dados

Pseudocódigo é uma forma genérica de escrever umalgoritmo, utilizando uma linguagem simples sem necessidadede conhecer a sintaxe de nenhuma linguagem de programação.

Os programas de computadores nada mais são do queOs programas de computadores nada mais são do quealgoritmos escritos em uma linguagem de programação(Perl, Pascal, C/C++, Fortran, Java, etc.) e que sãointerpretados e executados por um computador.

Page 5: Introduçãoa Algoritmose Estruturasde Dados

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;

Algoritmo

declare a,b,c numerico

inicio Somar os 2 números; Escrever o resultado.

Sandro Carvalho Izidoro

inicio

leia a

leia b

c ← a + b

escreva c

Fim algoritmo

Page 6: Introduçãoa Algoritmose Estruturasde Dados

Algoritmo

declare a,b,c numerico

inicio

leia a

leia b

{Programa que soma 2 numeros }Program Soma;

var A, B, C : integer;begin

Readln( A );Readln( B );C := A + B;Writeln( C );

end.

leia b

c ← a + b

escreva c

Fim algoritmo

/*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 );

}

Page 7: Introduçãoa Algoritmose Estruturasde Dados

Algoritmo

declare a,b,c numerico

inicio

leia a

#!/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";leia a

leia b

c ← a + b

escreva c

Fim algoritmo

Sandro Carvalho Izidoro

Page 8: Introduçãoa Algoritmose Estruturasde Dados

VariáveisSabe-se da matemática que uma variável é a representaçãosimbólica dos elementos de um certo conjunto. Nosalgoritmos, destinados a resolver um problema no computador,cada variável corresponde uma posição de memória cujoconteúdo pode variar ao longo do tempo durante a execuçãodo programa.

Embora uma variável possa assumir diferentes valores, ela só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ízesde uma equação de 2º grau (ax2+bx+c = 0), os identificadoresA, B, C podem representar as posições de memória quearmazenam os coeficientes da equação.

Sandro Carvalho Izidoro

Page 9: Introduçãoa Algoritmose Estruturasde Dados

Declaração de Variáveis

As variáveis só podem armazenar valores de um mesmo tipo esã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-tipodeclare lista-de-identificadores nome-do-tipo

Exemplo:

declare MASSA, CODIGO, X_5 numéricoTESTE, SIM lógicoNOME_PROTEINA literal

Page 10: Introduçãoa Algoritmose Estruturasde Dados

Declaração de Variáveis

Um identificador é formado por 1 ou mais caracteres, sendoque o 1º caractere deve, obrigatoriamente, ser uma letra e oscaracteres seguintes, letras ou dígitos, não sendo permitido ouso 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

Page 11: Introduçãoa Algoritmose Estruturasde Dados

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 doalgoritmo 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

Page 12: Introduçãoa Algoritmose Estruturasde Dados

Variável Simples

declare x, y, n numerico…x ← 100 / nescreva x

Variável Composta HomogêneaVariável Composta Homogênea

Variáveis compostas homogêneas correspondem a posições dememória, identificadas por um mesmo nome, individualizadaspor índices e cujo conteúdo é de mesmo tipo.

declare medias[1:50] numerico...leia medias[13]

Sandro Carvalho Izidoro

Page 13: Introduçãoa Algoritmose Estruturasde Dados

Variável Composta Heterogênea

Variáveis compostas heterogêneas são conjuntos de dadoslogicamente relacionados, mas de tipos diferentes (numérico,literal, lógico). São também conhecidos como registros ouestruturas.

Cada componente é individualizado pela explicitação de seuCada componente é individualizado pela explicitação de seuidentificador.

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

Page 14: Introduçãoa Algoritmose Estruturasde Dados

Estrutura sequencial em algoritmos

Comando de atribuição

Comandos de entrada e saída

Operadores relacionais e lógicos

Sandro Carvalho Izidoro

Page 15: Introduçãoa Algoritmose Estruturasde Dados

Comando de atribuição

Este comando permite que se forneça um valor a uma certavariável, onde a natureza deste valor tem de ser compatívelcom o tipo da variável na qual está sendo armazenado. Ocomando de atribuição tem a seguinte forma geral:

identificador expressãoidentificador expressão

Exemplos

a) K 1b) MEDIA SOMA / Nc) COR "VERDE"d) TESTE Fe) A B

Sandro Carvalho Izidoro

Page 16: Introduçãoa Algoritmose Estruturasde Dados

Comandos de Entrada e Saída

As unidades de entrada e saída são dispositivos quepossibilitam a comunicação entre o usuário e o computador.Através do teclado o usuário consegue dar entrada aoprograma e aos dados na memória do computador. Por suavez, o computador pode emitir os resultados e outrasmensagens para o usuário através do vídeo ou de umamensagens para o usuário através do vídeo ou de umaimpressora.

Um comando de entrada e saída é construído de acordo com aforma geral:

leia lista de identificadores

escreva lista de identificadores e/ou constantes

Sandro Carvalho Izidoro

Page 17: Introduçãoa Algoritmose Estruturasde Dados

Expressões Lógicas

É comum nos algoritmos surgirem situações em que aexecução de uma ação, ou sequência de ações, estejasujeita a uma certa condição. Esta condição é representadano texto do algoritmo por meio de uma expressão lógica.

Denomina-se expressão lógica à expressão cujos operadoressão lógicos e cujos operandos são relações e/ou variáveisdo tipo lógico.

Sandro Carvalho Izidoro

Page 18: Introduçãoa Algoritmose Estruturasde Dados

Operadores Relacionais

Relações: Uma expressão relacional, ou relação, é umacomparação realizada entre dois valores de mesmo tipo básico.Estes valores são representados na relação através deconstantes, variáveis ou expressões aritméticas.

O resultado obtido de uma relação, é sempre um valor lógico.O resultado obtido de uma relação, é sempre um valor lógico.

Sandro Carvalho Izidoro

Page 19: Introduçãoa Algoritmose Estruturasde Dados

Operadores Lógicos

Sandro Carvalho Izidoro

Dadas as variáveis numéricas X,Y e Z, contendo os valores 2, 5e 9 respectivamente, a variável literal NOME, contendo asequência "MARIA" e a variável lógica SIM, contendo o valorló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

Page 20: Introduçãoa Algoritmose Estruturasde Dados

Estrutura Condicional

A estrutura condicional permite a escolha do grupo de ações eestruturas a ser executado quando determinadas condições são ou nãosatisfeitas. A estrutura condicional pode ser apresentada através deuma estrutura simples ou de uma estrutura composta.

Formato de uma Estrutura Condicional Simples

se condiçãoentão sequência de comandos

Sandro Carvalho Izidoro

Page 21: Introduçãoa Algoritmose Estruturasde Dados

Exemplo 01

Algoritmodeclare sequencia01, sequencia02 literalsequencia01 ← “GTGGGATC”leia sequencia02se sequencia01 = sequencia02

então escreva “Sequencia encontrada”Fim_Algoritmo

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";}

Page 22: Introduçãoa Algoritmose Estruturasde Dados

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

Sandro Carvalho Izidoro

Neste caso, a sequência 1 só será executada se a condição forverdadeira e a sequência 2 de comandos só será executadase a condição for falsa.

Page 23: Introduçãoa Algoritmose Estruturasde Dados

Exemplo 02

Algoritmodeclare sequencia01 literalleia sequencia01se 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";}

Sandro Carvalho Izidoro

Fim_Algoritmo } else {print "Sequencia não encontrada\n";}

Page 24: Introduçãoa Algoritmose Estruturasde Dados

Exemplo 03

Algoritmodeclare seq01, seq02, seq03 literalseq01 ← “GGTACGTA”seq02 ← “GGTACGAT”leia seq03se seq03 = seq01

então escreva “Encontrou”senão se seq03 = seq02

#!/usr/bin/perl# Selecao Composta.my ($seq01, $seq02, $seq03);$seq01 = "GGTACGTA";$seq02 = "GGTACGAT";print "Digite a sequencia: ";chomp($seq03 = <STDIN>);if ($seq03 eq $seq01){

Sandro Carvalho Izidoro

senão se seq03 = seq02então escreva “Encontrou”senão escreva “Não achou!”

Fim_Algoritmo

if ($seq03 eq $seq01){print "Encontrou\n";} elsif ($seq03 eq $seq02){

print "Encontrou\n";}else {print "Não achou\n";}

Page 25: Introduçãoa Algoritmose Estruturasde Dados

Exemplo 04

Algoritmodeclare nota1, nota2, media numericoescreva “digite nota 1:”leia nota1escreva “digite nota 2:”leia nota2media ← (nota1+nota2)/2se media >= 7se 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

Page 26: Introduçãoa Algoritmose Estruturasde Dados

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;

Sandro Carvalho Izidoro

$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";}

Page 27: Introduçãoa Algoritmose Estruturasde Dados

Exemplo 05

Algoritmodeclare media, faltas numericoescreva “digite a media:”leia mediaescreva “digite o numero de faltas:”leia faltasse media < 5 ou faltas > 25

então escreva “Reprovado”

Sandro Carvalho Izidoro

então escreva “Reprovado” senão se media >= 5 e media < 7

então escreva “Exame Final” senão escreva “Aprovado”

Fim_Algoritmo

Page 28: Introduçãoa Algoritmose Estruturasde Dados

Exemplo 05

#!/usr/bin/perl

# Selecao Composta.

my ($media, $faltas);

print "Digite a media: ";

$media = <STDIN>;

print "Digite o numero de faltas: ";

$faltas = <STDIN>;

Sandro Carvalho Izidoro

$faltas = <STDIN>;

if ($media < 5 || $faltas > 25){

print "Reprovado\n";

}

elsif ($media >= 5 && $media < 7){

print "Exame Final\n";

}

else {

print "Aprovado\n";

}

Page 29: Introduçãoa Algoritmose Estruturasde Dados

Estrutura de repetição

A estrutura de repetição permite que uma sequência de comandos sejaexecutada repetidamente até que uma determinada condição deinterrupção seja satisfeita. A condição de interrupção que deve sersatisfeita é representada por uma expressão lógica. As estruturas derepetição são:

Sandro Carvalho Izidoro

• Comando Enquanto

• Comando Repita

• Comando Para

Page 30: Introduçãoa Algoritmose Estruturasde Dados

Estrutura Enquanto

Enquanto o valor da condição for verdadeiro, as ações dos comandossão executadas. Quando for falso, o comando é abandonado. Se já daprimeira vez o resultado é falso, os comandos não são executadosnenhuma vez.

Formato do comando Enquanto

Sandro Carvalho Izidoro

Formato do comando Enquanto

enquanto condição façainicio

comandos fim

Page 31: Introduçãoa Algoritmose Estruturasde Dados

Exemplo

#!/usr/bin/perl# Repeticao: Enquanto.my ($x, $y, $l);$l = 0;while ($l <= 3){print "digite x: ";$x = <STDIN>;

Algoritmodeclare X,Y, L numéricoL ← 0enquanto L <= 3 façainício

leia X,Yse X > Y

Estrutura de repetição

$x = <STDIN>;print "digite y: ";$y = <STDIN>;if ($x > $y){

print "$x \n";} else {

print "$y \n";}$l = $l + 1;}

se X > Yentão escreva Xsenão escreva Y

L ← L + 1fimFim_Algoritmo.

Page 32: Introduçãoa Algoritmose Estruturasde Dados

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. Emoutras palavras os comandos são executados até que a condição setorne verdadeira.

Sandro Carvalho Izidoro

Formato do comando Repita

repitacomandos

até condição

Page 33: Introduçãoa Algoritmose Estruturasde Dados

Exemplo

#!/usr/bin/perl# Repeticao: Repita.my ($x, $y, $l);$l = 0;do {

print "digite x: ";$x = <STDIN>;

Algoritmodeclare X,Y, L numéricoL ← 0repita

leia X,Yse X > Y

então escreva X

Sandro Carvalho Izidoro

$x = <STDIN>;print "digite y: ";$y = <STDIN>;if ($x > $y){

print "$x \n";} else {

print "$y \n";}$l = $l + 1;

} until $l >= 3

então escreva Xsenão escreva Y

L ← L + 1até L > 3Fim_Algoritmo.

Page 34: Introduçãoa Algoritmose Estruturasde Dados

Estrutura Para

O comando para é, na verdade, o comando enquanto utilizando umavariável de controle, escrito numa notação compactada. Neste casoexistirá sempre uma inicialização da variável de controle, um teste paraverificar se a variável atingiu o limite e um acréscimo na variável decontrole.

Sandro Carvalho Izidoro

Formato do comando Para

para var de val_num_1 até val_num_2 [ passo val_num_3] façainíciocomandosfim

Page 35: Introduçãoa Algoritmose Estruturasde Dados

Exemplo

#!/usr/bin/perl# Repeticao: Para.my ($x, $y, $l);for ($l=0;$l<=3;$l++){

print "digite x: ";$x = <STDIN>;print "digite y: ";

Algoritmodeclare X,Y, L numéricopara L de 1 até 3 passo 1 faça

inícioleia X,Yse X > Y

então escreva X

Sandro Carvalho Izidoro

print "digite y: ";$y = <STDIN>;if ($x > $y){

print "$x \n";} else {

print "$y \n";}

}

então escreva Xsenão escreva Y

fimFim_Algoritmo.

Page 36: Introduçãoa Algoritmose Estruturasde Dados

Um módulo é um grupo de comandos, constituindo um trecho dealgoritmo, com uma função bem definida e o mais independentepossível em relação ao resto do algoritmo.

Todo módulo é constituído por uma sequência de comandos queoperam sobre um conjunto de objetos, que podem ser globais ou locais.

Objetos globais são entidades que podem ser usadas em módulos

Sandro Carvalho Izidoro

Objetos globais são entidades que podem ser usadas em módulosinternos a outro módulo do algoritmo onde foram declaradas.

Objetos locais são entidades que só podem ser usadas no módulo doalgoritmo 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.

Page 37: Introduçãoa Algoritmose Estruturasde Dados

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

Sandro Carvalho Izidoro

Como ferramentas de modularização podemos destacar as sub-rotinase as funções. Os módulos de programação servem basicamente a trêsobjetivos:

Repetição de código; Dividir e estruturar melhor um algoritmo; Aumentar a legibilidade de um algoritmo.

Page 38: Introduçãoa Algoritmose Estruturasde Dados

Sub-rotinas e funções são módulos hierarquicamente subordinados aum algoritmo, comumente chamado de módulo principal. Da mesmaforma, uma sub-rotina ou uma função pode conter outras sub-rotinas efunções aninhadas.

A sub-rotina e a função são criadas através das suas declarações em

Sandro Carvalho Izidoro

A sub-rotina e a função são criadas através das suas declarações emum algoritmo. Para serem executadas, necessitam de ativaçãoprovocada por um comando de chamada.

Page 39: Introduçãoa Algoritmose Estruturasde Dados

Procedimentos e FunçõesSub-rotinas

Sintaxe

Subrotina NOME (lista_de_parâmetros_formais)declarações dos objetos locais à sub-rotinacomandos da sub-rotina

Fim_sub_rotina NOME

Sandro Carvalho Izidoro

A chamada de uma sub-rotina é feita com uma referência a seunome e a indicação dos parâmetros atuais no local doalgoritmo onde a sub-rotina deve ser ativada, ou seja, onde asua execução deve ser iniciada. A forma geral para a ativaçãode uma sub-rotina é a seguinte:

NOME (lista_de_parâmetros_atuais)

Page 40: Introduçãoa Algoritmose Estruturasde Dados

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

Sandro Carvalho Izidoro

Fim_função NOME

A chamada de uma função é feita com uma referência a seunome e a indicação dos parâmetros atuais no local doalgoritmo onde a função deve ser ativada. Pode-se chamaruma função de várias formas:

valor ← NOME (lista_de_parâmetros_atuais)

escreva NOME (lista_de_parâmetros_atuais)

Page 41: Introduçãoa Algoritmose Estruturasde Dados

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.

Sandro Carvalho Izidoro

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

Page 42: Introduçãoa Algoritmose Estruturasde Dados

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";

Sandro Carvalho Izidoro

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";}}

Page 43: Introduçãoa Algoritmose Estruturasde Dados

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

para i de 1 até 3 passo 1 façainiciose (vetor1[ i ] <> vetor2[ i ] )

então flag ← 0fim parase (flag = 1)

então escreva “Iguais”senão escreva “diferentes”

Sandro Carvalho Izidoro

fim paraescreva “Digite o segundo vetor”para i de 1 até 3 passo 1 façainicio

leia (vetor2[ i ])fim para

flag ← 1

senão escreva “diferentes”

fim algoritmo.

Page 44: Introduçãoa Algoritmose Estruturasde Dados

Exemplo Vetor

#!/usr/bin/perl# Vetor

my (@vetor1, @vetor2, $flag);$flag = 1;

print "Digite o primeiro vetor:\n";for($i=0;$i<3;$i++){

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

for($i=0;$i<3;$i++){$vetor1[$i] = <STDIN>;}

print "Digite o segundo vetor:\n";for($i=0;$i<3;$i++){$vetor2[$i] = <STDIN>;}

else { print "Vetores diferentes\n";}

Page 45: Introduçãoa Algoritmose Estruturasde Dados

Exemplo Matriz

Algoritmodeclare 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ça

para j de 1 até 3 passo 1 façainiciose (matriz[ i, 1 ] = seq)

então escreva matriz[i , 2]fim para

fim algoritmo.

Sandro Carvalho Izidoro

para j de 1 até 2 passo 1 façainicio

leia (matriz[ i, j ])fim para

fim paraescreva “Digite uma sequência:”leia seq

fim algoritmo.