Algoritmos

Prof. Sidney Cassemiro do Nascimento ICC UFS
2009/2

Conteúdo
Motivação Introdução Conceitos Algoritmos
– Principais características dos algoritmos – Quais as limitações dos algoritmos? – Formas de representar um algoritmo

2

Conteúdo
Algoritmo (Portugol)
– – – – – – Identificadores, variáveis e constantes Tipos de dados Operadores aritméticos, relacionais e lógicos Comandos de entrada e saída e atribuição Conceito de bloco de comandos Estruturas de controle de fluxo – condicionais (se, sesenão e caso) – Estruturas de controle de fluxo – repetições (enquanto, repita-até e para)
3

Motivação
Algoritmos
– – – – Resolvem problemas do mundo real; Executam operações sobre um conjunto de dados; Os dados precisam ser organizados de forma coerente; Dados organizados expressam uma abstração do mundo real.

Conceito de Dado:
– “Informação organizada, com sentido lógico para quem a manipula”. Algoritmos
4

Motivação
Por que estudar Construção de Algoritmos?
– é um passo fundamental para desenvolver o raciocínio lógico e o pensamento estruturado para todos os estudantes de disciplinas científicas e técnicas – programação de computadores é uma ferramenta para resolução de problemas

Algoritmos

5

Introdução
O que é ciência da computação?
– Conceitos da disciplina
“Ciência da computação é – e sempre será – o interesse entre a manipulação mecanizada e humana de símbolos [algoritmos], usualmente referidos como ‘computação’ e ‘programação’, respectivamente.”

Edsger W. Dijkstra, 1989
Algoritmos
6

Introdução

“Ciência (engenharia) da computação é o estudo sistemático de processos algorítmicos — teoria, análise, projeto, eficiência, implementação e aplicação — que descrevem e transformam informação.”

ACM/IEEE-CS , 1989
Algoritmo – conceito fundamental na ciência da computação
Algoritmos
7

Introdução
A Programação de Computadores
– A Ciência da Computação podem ser aplicada em qualquer área do conhecimento humano. – O computador é uma máquina especial pelo fato de ser programável. – Ferramentas computacionais são criadas objetivando facilitar a vida do homem.

Algoritmos

8

Introdução
Como programar computadores?
– O computador só entende a linguagem de máquina – São programados através das Linguagens de Programação
Alto nível: JAVA, C#, C++, PASCAL, ... Baixo nível: linguagens de máquina e assembler (montagem)

Algoritmos

9

Conceitos
“Algoritmos, de maneira geral, representam um conjunto de passos ou instruções que têm por objetivo resolver um determinado problema” Conjunto de passos que definem a forma como uma tarefa é executada
Passos ordenados, não ambíguos e executáveis Atividade finita Algoritmos
10

Conceitos
Exemplos
Instruções para preparo de uma receita Instruções para utilização de caixas bancários Instruções para utilização de aparelho celular Regras para cálculo do imposto de renda Instruções para inscrição em um concurso ...

Algoritmos

11

Conceitos
O que é Programação? = ABSTRAÇÃO O que é abstração?
– Operação mental que observa a realidade e captura apenas os aspectos relevantes para um contexto.

Algoritmos

12

Abstração
O que você abstrai dessa realidade?

Realidade

Abstração + Programação

Sistema de Controle de Compras e Vendas de Veículos

Algoritmos

13

Conceitos
Hardware
– Conjunto de componentes eletrônicos que formar a parte física do computador – Processador, Placa Mãe, Disco rígido

Software
– Conjunto de instruções e dados processado pelos circuitos eletrônicos do hardware – Sistemas Operacionais, Editores de textos,Planilhas eletrônicas, Navegadores – Programas
Agem como instruções para o processador

Algoritmos

14

Conceitos
Compiladores
– Traduzem programas de linguagem humana para linguagem de máquina

Linguagens de Programação
– Técnica de comunicação padronizada para enviar instruções a um computador – Cada linguagem tem sua própria sintaxe e gramática – Existem diferentes tipos de linguagens de programação Algoritmos
15

Ciclo de Vida do Desenvolvimento de Programas

Definição do Problema

Análise do Problema

Codificar e Depurar
Algoritmos

Projetar e Representar o Algoritmo
16

Etapas da atividade de Programação
1) Problema 1) Algoritmo Calcular a área de um 1) Obtenha o lado quadrado 2) área = lado X lado 3) Informe a área 1) Programa Fonte
... write ('Lado: '); readln (lado); area = lado * lado; writeln ('A Área é : ', area); ...

1) Ling. de Máquina
... 01101010 11101011 01101111 11001010 ... 01101011 11101001 01101010 10101000 17

Algoritmos

Algoritmos
Principais características dos algoritmos
– Concebidos por seres humanos – Representados por programas (software) escritos em linguagens de programação – Executados por máquinas Físicas - hardware
– Computadores (analógicos ou digitais), mecânicos, eletromecânicos, eletrônicos, ...

Abstratas
– Engendradas na mente humana, formalismo matemático, máquinas virtuais implementadas em programas de computador

Algoritmos

18

Algoritmos
Quais as limitações dos algoritmos?
– Não são capazes de calcular funções não-computáveis Função para provar teoremas em geral Impossibilidade de se construir uma máquina que, de modo consistente, resolva todos os problemas da matemática, apenas com os recursos do próprio sistema – Não são auto-organizáveis - depende do ser humano – A capacidade (“inteligência”) das máquinas limita-se ao conhecimento embutido no algoritmo Algoritmos
19

Formas de representar um algoritmo

Como representar um algoritmo?

Algoritmos

20

Formas de representar um algoritmo
Algoritmos podem ser representados, dentre outras maneiras, por:
– DESCRIÇÃO NARRATIVA
Utiliza uma linguagem de escrita natural para descrever algoritmos.

– FLUXOGRAMA
Utiliza uma linguagem de representação gráfica para descrever algoritmos.

– PORTUGOL
Utiliza uma linguagem de escrita artificial (PSEUDO-CÓDIGO) para descrever algoritmos.

Algoritmos

21

Formas de representar um algoritmo Exemplo:
– Algoritmo para converter um valor em reais (R$) para Euros (€)

Algoritmos

22

Formas de representar um algoritmo
Descrição narrativa do algoritmo ReaisEuros:
1. solicite o valor em Reais; 2. transforme o valor em Reais para Euros; 3. informe o valor em Euros.

Algoritmos

23

Formas de representar um algoritmo
Fluxograma do algoritmo Reais-Euros
Início

Início do algoritmo Entrada de Reais (R$) Cálculo de Euros (€)

Reais

Euros = 0.397182 * Reais

Apresentação do resultado
Euros

Fim do algoritmo

Fim

Algoritmos

24

Formas de representar um algoritmo
Portugol do algoritmo Reais-Euros Algoritmo “Reais-Euros” Var Reais, Euros : Real
Inicio Leia (Reais) Euros  0.397182 * Reais Escreva (Euros) FimAlgoritmo
Algoritmos
25

Formas de representar um algoritmo
Vantagens Descrição Narrativa  O português é bastante
conhecido por nós.

Desvantagens
 Imprecisão.  Pouca confiabilidade (a imprecisão acarreta a desconfiança).  Extensão (normalmente, escreve-se muito para dizer pouca coisa).  Complica-se à medida que o algoritmo cresce.  Pouca atenção aos dados, não oferecendo recursos para declará-los.  Exige a definição de uma linguagem não real para trabalho.  Não é padronizada.

Fluxograma

Portugol

 Padrão mundial.  Ferramenta bem conhecida.  Figuras dizem muito mais que palavras.  Independência de linguagem de programação.  Usa o português como base.  Define-se melhor quais e como os dados vão estar estruturados.  Passagem quase imediata do algoritmo para uma linguagem de programação qualquer.

Algoritmos

26

Construindo algoritmos
A programação de um sistema computacional pode ser resumida em 3 passos básicos
Entrada Dispositivo de Entrada Processamento Saída Dispositivo de Saída

UCP Memória

Algoritmos

27

Construindo algoritmos
Uma boa prática para construir algoritmos é dividir o problema em 3 fases:
Entrada Processamento Saída

– ENTRADA: São os dados de entrada do algoritmo. – PROCESSAMENTO: São os procedimentos utilizados para chegar ao resultado final. – SAÍDA: São os dados já processados. Algoritmos
28

Portugol - Estrutura
algoritmo “Nome_Do_Algoritmo” “Tem como objetivo identificar o algoritmo, devemos utilizar um Nome_Do_Algoritmo o mais claro possível, para facilitar a identificação” var “Declaração das variáveis. Devemos aqui, informar quais e os tipos das variáveis que serão utilizadas no algoritmo.” inicio “Corpo do Algoritmo. Aqui será escrita a sequência de comandos que devem ser executados para solucionar o referido problema” fimalgoritmo Algoritmos
29

Algoritmo - Tipos de Dados Primitivos
Os dados, ao serem manipulados pelo computador, precisam ter um tipo associado a ele Os tipos primitivos são os tipos que são nativos da linguagem de programação Veremos mais adiante que podemos criar os nossos próprios tipos
Algoritmos
30

Tipos de Dados Primitivos
Conjunto de valores ao qual pertence o dado
– Ex.: números inteiros, números reais, lógicos, caracteres, etc. – Todo dado organizado e coerente possui um tipo

Classificação
Visão dos Dados Decomposição Classificação Primitivos, Derivados Homogêneos, Derivados Heterogêneos Estáticos ou Dinâmicos
31

Tamanho Algoritmos

Tipos de Dados Primitivos
Tipo de Dados Primitivos
– Não permitem a sua decomposição em outros tipos – São a base para os tipos derivados – Exemplos:
Tipo Inteiros Reais Lógicos Caracteres Algoritmos Valores ...-2, -1, 0, 1, 2, 3... -0.5, 1.67, -52.92, 1.11 True (Verdadeiro), False (Falso) ‘A’, ‘b’, ‘C’, ‘c’, ‘0’, ‘1’, ‘#‘, ...
32

Tipos de Dados Primitivos
Tipo de Dados Derivados Homogêneos
– Agrupam dados primitivos do mesmo tipo em um conjunto – Exemplos:
Tipo Valores

Vetores Matrizes Cadeias
Algoritmos

[0, 1, 2, 3, 4, 5] [0, 1, 2], [4, 5, 6] ‘palavra’
33

Tipos de Dados Primitivos
Tipo de Dados Derivados Heterogêneos
– Agrupam dados primitivos de tipos diferentes em um conjunto – Exemplos:
Tipo Valores

Registro

{0, 1, 2.5, ‘palavra’, [0,1], ’s’}

Algoritmos

34

Tipos de Dados Primitivos
Tipo de Dados Estáticos
– Possuem um tamanho finito no número de elementos de seu conjunto. – Exemplos: vetores, matrizes, cadeias de caracteres, etc.

Tipo de Dados Dinâmicos
– Possuem um tamanho indeterminado no número de elementos de seu conjunto, ao longo de seu ciclo de vida. – Exemplos: Pilhas, Filas, Listas e Arvores
Algoritmos
35

Algoritmo - Identificadores
Representam os nomes escolhidos para rotular as variáveis, procedimentos, funções e nomes de programas. Normalmente, obedecem as seguintes regras:
1. O primeiro caracter deve ser uma letra; 2. Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto: {a,b,c,..z,A,B,C,...Z,0,1,2,...,9,_}; 3. Não deve haver espaço em branco; 4. Não deve haver identificadores repetidos; 5. Não existe distinção de maiúsculas e minúsculas; 6. Os nomes escolhidos devem ser claros a fim de explicitar seu conteúdo uso, mas também não deve ser extenso para não dificultar a escrita. Algoritmos
36

Algoritmo - Variáveis
São as unidades básicas de armazenamento das informações em programação As variáveis representam espaços onde podemos armazenar e manipular dados Para cada variável é necessário ter um valor associado a ela
Algoritmos
37

Algoritmo - Variáveis
As variáveis devem ser declaradas da seguinte forma: Var Cod, Mat : Inteiro Nome, Logradouro: Caractere Nota1, Nota2, Media: Real Achou: Logico
Algoritmos
38

Algoritmo - Constantes
São usadas em expressões para atribuir valores a variáveis ou em comandos Seus valores serão sempre os mesmos, ou seja, uma vez declarado, o seu valor não se altera mais durante o algoritmo Existem três tipos de constantes:
– Numérica – Lógica – Caractere Algoritmos
39

Algoritmo - Operações
Para solucionar alguns problemas computacionalmente será necessário a utilização de alguns operações Temos quatro tipos de operações:
– Operação de Atribuição – Operações Aritméticas – Operações Relacionais – Operações Lógicas
Algoritmos
40

Operação de Atribuição
Tem como finalidade armazenar um valor, variável ou expressão na variável É necessário que o tipo do valor, variável ou expressão seja compatível com o tipo da variável A sintaxe de uma operação de atribuição é a seguinte:
NomeDaVariavel  Valor, Variável ou Expressão

Algoritmos

41

Operações Aritméticas
São utilizados em expressões para realizar operações aritméticas com variáveis Os operadores e funções recebem argumentos (parâmetros) e retornam um resultado, o qual pode ser atribuído a uma variável ou utilizado numa expressão

Os operadores são representados por símbolos e as funções por palavras
Algoritmos
42

Operações Aritméticas
Operador +, + * / \ MOD ou % ^ Descrição Operadores unários, isto é, são aplicados a um único operando. Exemplos: -3, +x Adição Subtração Multiplicação Divisão Operador de divisão inteira. Por exemplo, 5 \ 2 = 2 Operador de módulo (isto é, resto da divisão inteira). Por exemplo, 8 MOD 3 = 2 Operador de potenciação. Por exemplo, 5 ^ 2 = 25.

Algoritmos

43

Operações Aritméticas
Função Quociente(a,b) Resto(a,b) Potência(a,b) Raiz(a,b) Sorteio(a) Seno(x) Cosseno(x) Modulo(x) Inteiro(x) Descrição Retorna o quociente da divisão inteira de a por b Retorna o resto da divisão inteira de a por b Retorna o valor de a elevado a b Retorna a raiz b de a. Raiz(a,b) Retorna um número aleatório, em intervalo fechado, entre 1 e a Retorna o seno de x Retorna o cosseno de x Retorna o módulo ou valor absoluto de x Retorna a parte inteira de x. Inteiro(10/3) = 3

Obs.: Não disponíveis no VisuAlg

Algoritmos

44

Operações Relacionais
São utilizados para relacionar variáveis ou expressões, resultando num valor lógico (Verdade ou Falso)
Operador = <> < > <= >= Algoritmos Igual Diferente Menor Maior Menor ou Igual Maior ou Igual
45

Descrição

Operações Lógicas
São utilizadas para avaliar expressões lógicas Uma expressão lógica representa a união de operações relacionais Uma operação lógica permite que o resultado de várias expressões relacionais seja transformado em um único resultado lógico

Algoritmos

46

Operações Lógicas
Operador e ou xou Descrição
Operador que resulta VERDADEIRO somente se seus dois operandos lógicos forem verdadeiros.

Operador que resulta VERDADEIRO quando um dos seus operandos lógicos for verdadeiro. Operador que resulta VERDADEIRO se seus dois operandos lógicos forem diferentes, e FALSO se forem iguais

nao

Operador unário de negação. nao VERDADEIRO = FALSO, e nao FALSO = VERDADEIRO.

Algoritmos

47

Prioridade de Operadores
Durante a execução de uma expressão que envolve vários operadores, é necessário a existência de prioridades Caso não exista essa prioridade entre operadores é possível obter valores não condizentes com a realidade

Algoritmos

48

Prioridade de Operadores
1º Operações embutidas em parênteses “mais internos” 2º Funções (Quociente, Resto, Potência e Funções Primitivas) 3º Multiplicação e/ou divisão 4º Adição e/ou Subtração 5º Operadores Relacionais 6º Operadores Lógicos

Algoritmos

49

Comandos de Entrada e Saída
O comando de entrada é utilizado para que se possa ler um determinado dado do meio externo Esse dado é geralmente passado pelo usuário através do teclado ou de outros dispositivos de entrada Esses dados lidos serão armazenados na memória do computador através das variáveis A sintaxe para ler um dado é mostrada abaixo:

leia (<lista-de-variáveis>)
Ex1: leia(matricula) Ex2: leia(codigo, curso) 50

Algoritmos

Comandos de Entrada e Saída
O comando de saída é utilizado para permitir que se possa escrever algo na tela do computador
– Ex: Um resultado, uma mensagem de erro, etc.

A sintaxe do comando de saída é mostrada abaixo:

escreva (<lista-de-expressões>)
A expressão mostrada acima pode ser uma variável ou uma cadeia de caracteres, como mostrado nos exemplos abaixo:
– Ex1: escreva(curso) – Ex2: escreva(‘Matricula: ‘, matricula)

Algoritmos

51

Comandos de Controle
São os comandos utilizados nos algoritmos para ajudar a solucionar o problema em questão São três os comandos de controles conhecidos e utilizados na programação:
– Sequência – Seleção – Repetição (enquanto, repita e para)
Algoritmos
52

Sequência
Utilizado para executar comandos passo a passo, na qual todos os comandos serão executados nas ordem escrita sem desvio Pode possuir um ou mais comandos
– Quando tiver mais de um comando, identificar pelos identificadores inicio e fim (Obrigatório) – Quando tiver apenas um comando, o uso do inicio e fim é condicional
Algoritmos
53

Sequência
inicio
Comando_1 ... Comando_N

fim Importante a indentação dos comandos (recuo para direita) e também a linha indicando o inicio e fim
– Lembrar que o programa não será mantido apenas por você, outras pessoas irão também dar manutenção nele Algoritmos
54

Seleção
Usado para fazer comparações e simular uma decisão no fluxo do algoritmo Usado para tomar decisões, ou seja, desviar a condição do algoritmo de acordo com uma condição O comando de seleção pode ser de dois tipos:
– Simples – Composto Algoritmos
55

Seleção
A sintaxe do comando simples é mostrada abaixo:

se <expressão-lógica> entao     <sequência-de-comandos> fimse
O comando de seleção simples funciona da seguinte maneira:
1.A expressão lógica é resolvida; 2.Se o resultado da expressão for verdadeiro, então a

sequência-de-comandos será executada; 3.Caso o resultado seja falso a sequência-decomandos não será executada. Algoritmos

56

Seleção
A sintaxe do comando composto é mostrada abaixo: se <expressão-lógica> entao     <sequência-de-comandos-1> senao     <sequência-de-comandos-2> fimse

Algoritmos

57

Seleção
O comando de seleção composta funciona da seguinte maneira:
1.A expressão lógica é resolvida; 2.Se o resultado da expressão for verdadeiro, então a

sequência-de-comandos-1 será executada; 3.Caso o resultado seja falso a sequência-decomandos-2 será executada.

Algoritmos

58

Seleção
Duplicidades em Seleção
– Como na seleção composta apenas um blocos de comandos será executado, atentar para não repetir o mesmo comandos nos dois blocos se media >= 5 entao escreva (‘Aprovado’) escreva (‘Média = ‘, Media) senao escreva (‘Reprovado’) escreva (‘Média = ‘, Media) fimse Algoritmos se Media >= 5 entao escreva (‘Aprovado’) senao escreva (‘Reprovado’) fimse escreva (‘Média = ‘, Media)

59

Qualidade de Programação
A qualidade de um software se mede pelo produto desenvolvido e pelo seu processo de construção Benefícios de um código com qualidade
– Reduz defeitos e validação dos requisitos de software – Boa leitura e entendimento – Facilidade de manutenção

Técnicas de qualidade de programação
– Identação e espaçamentos – Comentários
Textos explicativos. Não é executado. EX: {isso é um comentário}

– Clareza na lógica – Variáveis representativas 60

Algoritmos

Qualidade de Programação
Algoritmo sem qualidade
algoritmo “Maior” var N1, N2, N3, Ma: Inteiro Inicio leia (N1, N2, N3) se N1 > N2 entao Ma <- N1 senao Ma <- N2 fimse se N3 > Ma entao Ma <- N3 fimse escreva(‘O maior é: ‘,Ma) fimalgoritmo

Algoritmos

61

Qualidade de Programação
Algoritmo com qualidade
{Algoritmo que, dado 3 números inteiros diferentes, identifica quem é o maior} algoritmo “MaiorNumero” var numero1, numero2, nunmero3, maiorNumero: Inteiro Inicio leia (numero1, numero2, numero3) {lendo os números} {Verificando quem é o maior número} se numero1 > numero2 entao maiorNumero <- numero1 {guardando o 1º número como o maior} senao maiorNumero <- numero2 {guardando o 2º número como o maior} fimse se nunmero3 > maiorNumero entao maiorNumero <- nunmero3 {guardando o 3º número como o maior} fimse escreva(‘O maior é: ‘, maiorNumero) {exibindo o maior número} fimalgoritmo

Algoritmos

62

Comando de Seleção Aninhado
É possível ter casos em que seja necessário a utilização de um comando de seleção dentro de outro comando de seleção O comando de seleção aninhado permiti a avaliação de diversas condições para os possíveis valores de um dado conjunto de variáveis

Algoritmos

63

Comando de Seleção Aninhado
Abaixo segue um exemplo de um trecho de um código utilizando comando de seleção aninhado:
se Num1 > Num2 entao escreva(‘O maior número é: ’, Num1) senao se Num1 < Num2 entao escreva(‘O maior número é: ’, Num2) senao escreva(‘Os números são iguais’) fimse fimse Algoritmos
64

Comando escolha
O comando ESCOLHA (CASO), corresponde ao comando SE-ENTAO, mas de uma forma mais compacta nas operações de seleção.

escolha  <expressão-de-seleção> caso <exp11>, <exp12>, ..., <exp1n>     <sequência-de-comandos-1> caso <exp21>, <exp22>, ..., <exp2n> <sequência-de-comandos-2> ... outrocaso <sequência-de-comandos-extra> fimescolha
Algoritmos
65

Comando de Repetição - Enquanto
A sintaxe do comando enquanto é mostrada abaixo: enquanto <expressão-lógica> faca    <sequência-de-comandos> fimenquanto Esta estrutura repete uma sequência de comandos enquanto uma determinada condição (especificada através de uma expressão lógica) for satisfeita.
Algoritmos
66

Comando de Repetição - Repita
A sintaxe do comando repita é mostrada abaixo:
repita    <seqüência-de-comandos> ate <expressão-lógica> Esta estrutrura repete uma sequência de comandos até que uma determinada condição (especificada através de uma expressão lógica) seja satisfeita.
Algoritmos
67

Comandos de Repetição - Observações
O comando enquanto e o repita são bastante parecidos, mas apresentam algumas diferenças peculiares; O comando enquanto primeiro avalia a expressão lógica e em seguida executa a sequência-de-comandos; O comando repita primeiro executa a sequência-decomandos para em seguida avaliar a expressão lógica ; O comando enquanto executa a sequência-de-comandos enquanto o resultado da expressão lógica for verdade; O comando repita executa a sequência-de-comandos até que o resultado da expressão lógica seja verdade; Os comandos enquanto e repita possuirão, para uma mesma situação, as expressão lógica invertidas. Algoritmos
68

Comando de Repetição - Para
A sintaxe do comando para é mostrada abaixo: para <variável> de <valor-inicial> ate <valorlimite> [passo <incremento>] faca    <sequência-de-comandos> fimpara O comando para incrementa, a variável, a partir do valor-inicial de uma unidade ou incremento, até que, esta atinja o valor-limite. E para cada incremento a sequência-de-comandos é executada.
Algoritmos
69

Comando de Repetição - Para
O <incremento> é opcional. Quando presente, precedida pela palavra passo, é uma expressão que especifica o incremento que será acrescentado à variável contadora em cada repetição do laço. Quando esta opção não é utilizada, o valor padrão de <incremento> é 1. Vale a pena ter em conta que também é possível especificar valores negativos para <incremento>.
Algoritmos
70

Sign up to vote on this title
UsefulNot useful