Algoritmos e Estruturas de Dados
Algoritmos e Estruturas de Dados Prof. Charles Berta www.achoaki.com/charles
Ementa
Português Estruturado (pseudocódigo), Fluxograma Convencional. Construir e analisar Algoritmos: Tipos de Dados, constantes e variáveis; Comandos de atribuição, entrada e saída; Operações, funções e expressões; Estrutura seqüencial, condicional simples, composto e de repetição. Total de Horas = > 50
Conceito de Algoritmo
Um algoritmo é uma norma executável para estabelecer um certo efeito desejado, que na prática será geralmente a obtenção de uma solução a um certo tipo de problema.
Programar é basicamente construir algoritmos.
Conceito de Algoritmo
Algoritmo é a forma organizada de expressar uma seqüência de passos que visam atingir um objetivo definido. Algoritmo é a lógica necessária para o desenvolvimento de um programa.
Conceito de Algoritmo
Um algoritmo é a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações, das quais damos por certo que elas podem ser executadas.
Ação
Evento que ocorre num período de Tempo Finito, estabelecendo um efeito intencionado e bem definido. “Caminhar até a próxima esquina” “Colocar um livro em cima de uma mesa” “Descascar as Batata para o jantar”
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira”; “ Traga a panela do armário”; “ Descasque uma batata”; “ Devolva a sacola a geladeira”;
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. Desenvolver um algoritmo nĂŁo ĂŠ simplesmente escrever, temos sempre que analisar todas as possibilidades existentes. Usar um Avental?
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira ”; “ Traga a panela do armário ”; “ Coloca o Avental ”; “ Descasque uma batata ”; “ Devolva a sacola a geladeira ”;
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. Este evento evidentemente não é igual ao primeiro mas são altamente similares Descascar Batata. Nossa dona de casa sempre vai usar o avental? Suponhamos que ela somente coloque o avental caso a saia seja clara ou não. Então escrevemos o seguinte algoritmo para os dois tipos de eventos.
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira ”; “ Traga a panela do armário ”; Se “ Saia é clara ” então “ Coloca o Avental ”; “ Descasque uma batata ”; “ Devolva a sacola a geladeira ”;
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. O conceito de algoritmo nos permite reconhecer o mesmo padr達o. Neste algoritmo aparece um novo elemento estrutural o condicional:
Se ... ent達o
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. Caso nossa dona de casa num determinado fim de semana resolva descascar 13 Batata, nosso algoritmo teria entĂŁo uma nova estrutura. E se no outro dia resolver descascar 24 Batata terĂamos 2 algoritmos como segue. Obs. NĂŁo vamos analisar o uso do avental por enquanto.
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira ”; “ Traga a panela do armário ”; “ Descasque uma batata ”; “ Descasque uma batata ”; ... “ Descasque uma batata ”; “ Descasque uma batata ”;
13 Vezes
“ Devolva a sacola a geladeira ”;
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira ”; “ Traga a panela do armário ”; “ Descasque uma batata ”; “ Descasque uma batata ”; ... “ Descasque uma batata ”; “ Descasque uma batata ”;
24 Vezes
“ Devolva a sacola a geladeira ”;
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. Para termos um algoritmo melhor estruturado devemos analisar o padrão de comportamento nos dois casos anteriores. Como toda boa dona de casa sempre sabe as quantidades corretas para um ótima refeição. Utilizando do condicional SE ... ENTÃO para analisar se tem Batata suficientes e analisarmos novamente a necessidade de usar o avental
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira ”; “ Traga a panela do armário ”; Se “ Saia é clara ” então “ Coloca o Avental ”; Se “Numero de Batata é insuficiente” então “ Descasque uma batata ”; ... Se “Numero de Batata é insuficiente” então “ Descasque uma batata ”; “ Devolva a sacola a geladeira ”;
50 Vez
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. Temos ainda alguns inconvenientes Ăłbvios encontrados em tal algoritmo. Ao
executar o algoritmo, se a dona-de-casa constatar que 5 Batata foram suficientes, de fato ela nĂŁo precisaria olhar para a panela outras 45 vezes para se certificar que ĂŠ suficiente.
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. Temos ainda alguns inconvenientes óbvios encontrados em tal algoritmo. Muitas
vezes é difícil dar um limite superior; pode ser que um dia surjam muitos convidados e que as Batata estejam pequenas, ocasionando uma falha do algoritmo.
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador. “ Traga a sacola de Batata da geladeira ”; “ Traga a panela do armário ”; Se “ Saia é clara ” então “ Coloca o Avental ”; Enquanto “ Numero de Batata é insuficiente ” Faça “ Descasque uma batata ”;
“ Devolva a sacola a geladeira ”;
Exemplo de Algoritmo Descascar Batata para o Jantar Relato de um observador.
Notamos o surgimento de um novo CONDICIONAL. Enquanto ... Faça
Será executado tal ação até a primeira vez em que a condição for um valor falso. Com isto vemos o extremo poderio de um algoritmo, um texto estático, capaz de cobrir todos os acontecimentos.
Fatores a serem levados em consideração em um algoritmo
Complexidade A complexidade pode ser vista como um sinônimo de variedade (quantidade de situações diferentes que um problema pode apresentar), as quais devem ser previstas na sua solução. Muitos programadores aumentam a complexidade de um devido problema desnecessariamente.
Exemplo: digamos que se pergunte a um leigo a respeito de um relógio: Como é um relógio?
É um instrumento com três ponteiros concêntricos.
Exemplo: digamos que se pergunte a um leigo a respeito de um relógio: Como é um relógio? Poderíamos indagar: - Um relógio com 2 ponteiros é possível?
Exemplo: digamos que se pergunte a um leigo a respeito de um relógio: Como é um relógio? E um relógio com apenas 1 ponteiro não poderia ser uma possibilidade? Bem... Pode ser com 3, 2 ou 1 ponteiro.
Exemplo: digamos que se pergunte a um leigo a respeito de um rel贸gio: Como 茅 um rel贸gio? E sem ponteiro pode? Ah!, Sim! Pode ser digital
Exemplo: digamos que se pergunte a um leigo a respeito de um relógio: Como é um relógio? Já a pergunta: “O que é um relógio?”, poderia resultar na resposta: É um instrumento cuja finalidade é marcar o decorrer do tempo. -------------------------------------Ou seja, algumas variáveis podem aumentar ou diminuir a complexidade de um sistema quando forem bem ou mal utilizadas.
Legibilidade Mede a capacidade de compreensão de um algoritmo por qualquer observador (que não o construiu); a clareza com que sua lógica está exposta. Quanto mais legível for um algoritmo, menor será sua complexidade.
Técnica de resolução por método cartesiano A famosa frase de Descartes “Dividir para conquistar” é muito importante dentro da programação. ---------------------------- Dividir o problema em partes Analisar a divisão e garantir a coerência entre as partes. Reaplicar o método, se necessário
Método para construir um algoritmo
Ler atentamente o enunciado Deve-se reler o enunciado de um exercício quantas vezes for necessário, até compreendê-lo completamente. A maior parte da resolução de um exercício consiste na compreensão completa do enunciado.
Método para construir um algoritmo
Retirar a relação das entradas de dados do enunciado Através do enunciado, descobrimos quais são os dados que devem ser fornecidos ao programa, via teclado, a partir dos quais são desenvolvidos os cálculos. Obs. Pode haver algum algoritmo que não necessite da entrada de dados (pouco comum).
Método para construir um algoritmo
Retirar do enunciado, a relação das saídas das informações Através do enunciado podemos descobrir quais são as informações que devem ser mostradas para compor o resultado final, objetivo do algoritmo.
Método para construir um algoritmo
Determinar o que deve ser feito para transformar as entradas nas saídas especificadas Nessa fase é que teremos a construção do Algoritmo propriamente dito. Devemos determinar qual seqüência de passos ou ações é capaz de transformar um conjunto de dados nas informações de resultado. Para isso, utilizamos os fatores descritos anteriormente, tais como legibilidade, portabilidade, método cartesiano e planejamento reverso, e finalmente podemos construir o algoritmo.
ExercĂcio: Um homem quer atravessar um rio com um barco que pode carregar ele mesmo e apenas mais uma de suas trĂŞs cargas: um lobo, um carneiro e um maço de alfafa. O que o homem deve fazer para atravessar o rio sem perder nenhuma de suas cargas?
Elabore um algoritmo que mova 3 discos de uma torre de Hanói, que consiste em 3 hastes (a-b-c), uma das quais serve de suporte para os três discos de tamanhos diferentes (1-2-3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, sendo que nunca deve ser colocado um disco maior sobre um menor. O objetivo é transferir os três discos da haste A para haste C.
Dicas importantes na construção de um algoritmo
Não utilizar espaços entre as letras ou palavras. Exemplo: para um cadastro de clientes, o correto seria cad_cli ou cadcliente. O caracter underline ( _ ) pode ser utilizado para representar o espaço entre as letras. Não iniciar o nome com algarismos (números). Por exemplo: não usar 4algoritmo. O correto seria algoritmo4 ou algoritmo_4. Não utilizar caracteres especiais, como acentos, símbolos ( @ / ? # ..., entre outros. Não utilizar nomes iguais para representar variáveis diferentes. Ser sucinto e utilizar nomes coerentes.
Tipos Primitivos Inteiro: toda e qualquer informação numérica que pertença ao conjunto dos números inteiros (negativo, nulo ou positivo). Exemplos:
Joana tem 3 filhos. Ontem choveu 17 milímetros.
Tipos Primitivos Real: informação numérica que pertença ao conjunto dos números reais (negativa, nula ou positiva). Exemplos:
Meu salário é R$ 5.236,35. Firmino pesa 159,5 Kg.
Tipos Primitivos Lógico: informações que somente podem assumir dois valores (falso ou verdadeiro, sim ou não). Exemplos:
O computador pode estar ligado ou desligado. A gaveta pode estar aberta ou fechada.
Tipos Primitivos Caractere: São usados quando o programa envolve manipulação de caracteres isolados. Toda e qualquer informação composta por um caractere alfanumérico (0...9, a...z) e/ou especial ( @ , # , $ , % ...). Exemplos:
‘ A ’. ‘1’ ‘ $ ’.
Tipos Primitivos
String: Seqüência de caracteres entre dois apóstrofos. Exemplo: ‘ Meu nome é Pedro ’. A string mais curta é a string vazia (‘ ’) e seu comprimento é zero. O comprimento máximo de uma string é usada de 255 caracteres.
Pseudocódigo Exemplo 01 Algoritmo Exemplo_01; Var nome: String; idade: inteiro; Início Leia (nome, idade); Escreva ( nome, idade); Fim.
Identificação Declaração das variáveis Corpo do algoritmo
Pseudocódigo Exemplo 01 Algoritmo Exemplo_01; Var nome: String; idade: inteiro; Início Escreva(‘ Informe seu Nome: ’); Leia (nome); Escreva(‘ Informe Sua Idade: ’); Leia(idade); Escreva ( ‘ Seu Nome é : ’, nome); Escreva ( ‘ Sua Idade é : ’, idade); Fim.
Identificação Declaração das variáveis Corpo do algoritmo
Fluxograma Utiliza símbolos gráficos para representar as ações ou instruções a serem seguidas. Assim como o pseudocódigo, o fluxograma é utilizado para organizar o raciocínio lógico a ser seguido.
Simbologia Terminal – Representa o início e o final do fluxograma Processamento – Representa a execução de operações ou ações como cálculos aritméticos, atribuição de valores a variáveis, abertura e fechamento de arquivo, entre outras
Fluxograma Simbologia Teclado – Representa a entrada de dados para as variáveis por meio do teclado.
Vídeo – Representa a saída de informações (dados ou mensagens) por meio do monitor de vídeo ou outro dispositivo visual de saída de dados.
Fluxograma Simbologia Decisão – Representa uma ação lógica que resultará na escolha de uma das seqüências de instruções, ou seja, se o teste lógico apresentar o resultado ‘verdadeiro’, realizará um seqüência e, se o teste lógico representar o resultado ‘falso’, realizará outra seqüência. Preparação – representa uma ação de preparação para o processamento, ou seja, um processamento pré-definido.
Fluxograma Simbologia Conector – Utilizado para interligar partes do fluxograma em páginas distintas. Conector de páginas – utilizado para interligar partes do fluxograma em páginas distintas. Seta de orientação do fluxo – A seqüência do fluxograma pode ser desenvolvida horizontalmente ou verticalmente.
Fluxograma Exemplo 01: Ler o nome e a idade de uma pessoa e mostrar na tela. Início
‘Inf. Seu Nome’
‘Inf. Sua Idade’
‘Sua idade é : ’, idade
Fim
Nome
Idade
‘Seu Nome é : ’, nome
Fluxograma Exemplo 01: Ler o nome e a idade de uma pessoa e mostrar na tela.
Início
Nome, idade
‘ Nome ’, nome
Fim
‘ idade ’, idade
Exemplo 02: Ler o nome, idade, cargo e salário de 50 pessoas e mostrar na tela o número de pessoas com idade inferior a 30 anos e que apresentam salário igual ou maior do que 3 mil reais.
Pseudocódigo Exemplo 02 Algoritmo Exemplo_02
Identificação
Var nome, cargo : String; idade, tot_pessoas : inteiro; salario : real; Início
Declaração das variáveis
Corpo do algoritmo
Para n_pessoas = 1 até 50 faça inicio Ler (nome, idade, cargo, salario); Se (idade < 30) e (salario >= 3000,00) entao incio total_pessoas := tot_pessoas + 1; Fim-Se; Fim-Para; Mostrar ( ‘ O total de pessoas que atendem a condição é ’, tot_pessoas); Fim.
Fluxograma
Exemplo 02: Desenvolver um fluxograma para o exemplo 02. Início Pessoas, 1, 50, 1
‘ O total de pessoas é ’, Tot
Nome, id, Cargo, Sal
Id < 30 e Sal >= 3000
.F.
.V.
Tot := Tot+1
Fim
Exercícios de Fixação Exercício 03. Construa um pseudocódigo de um algoritmo capaz de ler dois números inteiros, armazenados nas variáveis a e b e que ao final da sua execução deixe os conteúdos de a e de b na ordem crescente.
Fluxograma Exemplo 03: Desenvolver um fluxograma para o exemplo 03. Algoritmo ordena; var X, A, B: inteiro; inicio escreva( ‘ Informe uma valor para a variavel A: ’ ); leia( A ); escreva( ‘ Informe uma valor para a variavel B: ’ ); leia( B ); se (A > B) entao inicio X := A; A := B; B := X; fim-Se; escreva( ‘ Os valores ordenados são:’ , A , ‘ - ’ , B); fim.
Exercícios de Fixação Exercício 04. Construa um pseudocódigo de um algoritmo capaz de ler três números inteiros, armazenados nas variáveis x, y e z e que ao final da sua execução deixe os conteúdos de x, de y e de z na ordem crescente.
Exercícios de Fixação Resolução exercício 01 // Programa que ordena três números Variaveis x, y, z, Aux : Integer; Inicio Escrever ( ‘ Digite os três números’) ; Ler x, y e z ; Se (x>y) ou (x>z) entao Se y>z entao // z é o menor Aux := x; // permuta x e z x := z; z :=Aux; Senao // y é o menor Aux := x; // permuta x e y x := y; y := Aux; Fim_Se; Fim_Se;
Se y > z entao Aux := y; y := z; z := Aux; Fim_Se; Escrever(‘ Números dados escritos em ordem crescente:’ , x y z ); Fim.