Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

algoritmo FLF2014, Notas de estudo de Algoritmos

Visão Geral de Algoritmos

Tipologia: Notas de estudo

2014

Compartilhado em 07/03/2014

jose-miranda-da-silva-filho-7
jose-miranda-da-silva-filho-7 🇧🇷

1 documento

1 / 63

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Prof. José Miranda
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f

Pré-visualização parcial do texto

Baixe algoritmo FLF2014 e outras Notas de estudo em PDF para Algoritmos, somente na Docsity!

Prof. José Miranda

O conciso dicionário Oxford define um

algoritmo com um “processo ou regras para

(máquina) cálculos”.

 A execução de um algoritmo não deve incluir

qualquer decisão subjetiva, nem deve exigir o

uso de intuição ou criatividade (embora

veremos uma exceção a esta regra)

 Quando conversamos sobre algoritmo vem

logo à mente os computadores.

 Nem por isso, outros métodos sistemáticos

no intuito de resolver problemas poderiam

ser incluídos.

 (^) O mais famoso algoritmo na história data do tempo dos gregos:  (^) Isto é, o algoritmo de Euclides para calcular o múltiplo divisor comum de dois inteiros  (^) É também possível considerar certas receitas de pratos como algoritmos, garantindo que eles não incluam instruções como “adicione sal para dar sabor”  Quando nós nos organizamos para resolver um problema, é importante decidir qual algoritmo deverá ser usado para sua solução.

 A resposta pode depender de muitos fatores:  (^) O tamanho do exemplo a ser usado.  (^) A maneira ou jeito com que o problema é apresentado  (^) A rapidez e o tamanho de memória do equipamento de cálculo disponível, e assim por diante.  (^) Realizar um cálculo aritmético elementar como exemplo.  (^) Suponha que você tenha de multiplicar dois números inteiros usando somente lápis e papel.

 Escreva o multiplicador e multiplicando lado a lado.

 Crie colunas, uma de baixo de cada operando,

repetindo a seguinte regra até que o número debaixo

do multiplicador for 1.

 Divida o número debaixo do multiplicador por dois,

ignorando qualquer fração.

 Dobre o número debaixo do multiplicando adicionado

ele a ele mesmo.

 Finalmente, descarte a linha em que o número debaixo

do multiplicador é par, e então adicione todos os

números que restaram na coluna debaixo do

multiplicando.

 Vamos multiplicar 45 por 19 como é mostrado abaixo:

 (^) Neste exemplo nós obtemos 19 + 76 + 152 + 608 =855.  (^) Embora este algoritmo possa parecer engraçado a priori, ele é essencialmente um método usado no maquinário de muitos computadores.  (^) Para usar isso, não há necessidade de memorizar qualquer tabela de multiplicação: tudo que precisamos saber é como adicionar tudo, e como dobrar um número ou dividi-lo por 2. 45 19 19 22 38 --- 11 76 76 5 152 152 2 304 --- 1 608 608  855

 (^) Para evitar qualquer confusão, nós especificaremos no futuro nosso algoritmos fornecendo um programa.  (^) Todavia, nós não iremos nos confinar ao uso de uma única linguagem de programação específica, por outro lado, podemos abordar diferentes linguagens para depois decidir qualquer mais conveniente para nossas atuais necessidades no tocante a validação de nossos algoritmos.  (^) Assim, a figura do laboratório nos dará um teor prático ao longo de toda a disciplina.  (^) Dessa maneira, os pontos essenciais de um algoritmo não serão obscurecidos pelos detalhes de programação relativamente irrelevantes.  (^) Iremos usar frases do português em nossos programas onde quer que isso pareça favorecer a simplicidade e a clareza.

 (^) Essas frases em Português não deverão ser confundidas com comentários no programa.  (^) Assim optaremos em sempre colocar os comentários em chaves { }.  (^) Declarações de quantidades escalares (inteiro, real, ou Booleano) são geralmente omitidas.  (^) Parâmetros escalares das funções e procedimentos são passados por valor pelo menos um especificação diferente é fornecida explicitamente, e as agrupamentos (ARRAY) são passados por referência.  (^) A notação usada para especificar que uma função ou um procedimento tem um parâmetro de agrupamento varia de caso a caso.  (^) Podemos escrever por exemplo: procedimento proc1 (T: grupo ) ou mesmo procedimento proc2 (T)

 Para evitar proliferação das frases: começo do

procedimento e fim do procedimento , o alcance de uma

colocação tais como se , enquanto , ou para , como

também tais como aquelas encontradas em uma

declaração, procedimento , função , ou gravação , é

mostrada pela endentação das colocações afetadas.

 A colocação retorno marca o fim dinâmico de um

procedimento ou uma função.

 No último caso também fornece o valor da função.

 Os operadores de div e mod representam divisões de

inteiros (descartando qualquer resultado ponto flutuante)

e o resto de uma divisão, respectivamente.

 Logo iremos falar de conceitos de recursão e ponteiros.

 O último representado por uma seta apontando para cima

 Por exemplo, aqui está uma descrição formal da

multiplicação à la russe.

função russe(A,B) equanto I > 0 do

grupos X, Y se X[I] ímpar

então prod  prod +Y[I]

{inicialização} I  I – 1

X[1]  A; Y[1]  B retorne prod

I  1

{criar as duas colunas}

enquanto X[I] > I faça

X[I+1]  X[I] div 2

Y[I+1]  Y[I] + Y[I]

I  I + 1

prod  0

Os computadores das mais variadas

arquiteturas têm funcionamento similar.

Acima temos uma figura mostrando

uma arquitetura simplificada de um

computador

Na CPU (processador) existe um conjunto relativamente pequeno de instruções.

Cada tipo de processador tem um conjunto diferente de instruções apesar de similares entre si.

O local de onde as instruções são buscadas pelo processador é a memória.

Essas instruções podem ser desce de operações matemáticas a instruções com os dispositivos de entrada e saída.

A linguagem de programação pode ser

classificada em níveis.

Existe a linguagem de baixo nível como

é o caso de uma linguagem de máquina,

ASSEMBLY como é mostrada abaixo

INC CONT ; Incrementa a variável de memória CONT MOV TOTAL, 48 ; Transfere o valor 48 para variável de memória TOTAL ADD AH, BH ;Adicinar o conteúdo do registrador BH para o registrador AH AND MASK1, 128 ; Realizar operação AND na variável MASK1 e 128 ADD MARKS, 10 ; Adicionar 10 a variável MARKS MOV AL, 10 ; Transferir o valor 10 para o registrador AL

A palavra ASSEMBLY vem da palavra montar, que podemos também chamar de linguagem de montagem e para executar é usado um programa chamado ASSEMBLER (montador).

A linguagem de montagem é muito próxima da linguagem de máquina e por isso é conhecida como de baixo nível.

Todo o processo de programação e desvio de problemas pode ser sintetizado a seguir