introduçãoa algoritmose estruturasde dados
TRANSCRIPT
Introdução a Algoritmos e Estruturas de 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
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
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.
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
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 );
}
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
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
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
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
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
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
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
Estrutura sequencial em algoritmos
Comando de atribuição
Comandos de entrada e saída
Operadores relacionais e lógicos
Sandro Carvalho Izidoro
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
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
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
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
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
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
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";}
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.
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";}
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";}
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
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";}
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
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";
}
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
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
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.
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
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.
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
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.
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.
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.
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.
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)
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)
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
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";}}
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.
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";}
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.