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 e Tecnicas de Programação, Notas de estudo de Algoritmos

- - - - - - -

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 09/11/2008

alexandra-soares-9
alexandra-soares-9 🇧🇷

3 documentos

1 / 25

Toggle sidebar

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

Não perca as partes importantes!

bg1
FABRAI
ALGORIMTOS
E
TÉCNICAS
DE
PROGRAMAÇÃO
PROFa. Juliana Santiago Teixeira
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19

Pré-visualização parcial do texto

Baixe Algoritmo e Tecnicas de Programação e outras Notas de estudo em PDF para Algoritmos, somente na Docsity!

FABRAI

ALGORIMTOS

E

TÉCNICAS

DE

PROGRAMAÇÃO

PROFa. Juliana Santiago Teixeira

Índice

  • ÍNDICE ..............................................................................................................................................................
    1. O COMPUTADOR: HARDWARE/SOFTWARE.....................................................................................
    • 1.1. HARDWARE ..............................................................................................................................................
      • 1.1.1. Introdução .......................................................................................................................................
      • 1.1.2. Representação das Informações ......................................................................................................
      • 1.1.3. Componentes do Hardware .............................................................................................................
    • 1.2. SOFTWARE ...............................................................................................................................................
      • 1.2.1. Introdução .......................................................................................................................................
      • 1.2.2. Linguagens de Programação...........................................................................................................
      • 1.2.3. Categorias de Software ...................................................................................................................
    1. SISTEMAS DE NUMERAÇÃO ..................................................................................................................
    • 2.1. INTRODUÇÃO............................................................................................................................................
    • 2.2. O SISTEMA BINÁRIO DE NUMERAÇÃO......................................................................................................
    • 2.3. O SISTEMA HEXADECIMAL DE NUMERAÇÃO..........................................................................................
    1. DESENVOLVIMENTO DE PROGRAMAS............................................................................................
    • 3.1. FASES PARA A SOLUÇÃO DE UM PROBLEMA:...........................................................................................
    • 3.2. ALGORITMOS .........................................................................................................................................
      • 3.2.1. Definição de Algoritmos................................................................................................................
      • 3.2.2. Por que precisamos de algoritmos? ..............................................................................................
      • 3.2.3. Característica................................................................................................................................
    1. PORTUGOL................................................................................................................................................
    • 4.1. ESTRUTURA SEQÜENCIAL ......................................................................................................................
    • 4.2. CONSTANTES..........................................................................................................................................
    • 4.3. VARIÁVEIS .............................................................................................................................................
      • 4.3.1. Identificadores...............................................................................................................................
      • 4.3.2. Tipos de dados...............................................................................................................................
      • 4.3.3. Declaração de variáveis................................................................................................................
      • 4.3.4. Declaração de constantes..............................................................................................................
    • 4.4. OPERAÇÕES BÁSICAS .............................................................................................................................
      • 4.4.1. Operadores aritméticos .................................................................................................................
      • 4.4.2. Operadores relacionais .................................................................................................................
      • 4.4.3. Operadores relacionais .................................................................................................................
      • 4.4.3. Funções .........................................................................................................................................
      • 4.4.5. Prioridade de operadores..............................................................................................................
    • 4.5. COMANDOS DE ENTRADA E SAÍDA .........................................................................................................
      • 4.5.1. Comando de entrada de dados ......................................................................................................
      • 4.5.2. Comando de saída de dados ..........................................................................................................
    • 4.6. COMANDO DE ATRIBUIÇÃO ....................................................................................................................
    • 4.7. ESTRUTURA CONDICIONAL ....................................................................................................................
      • 4.7.1. Alternativa Simples........................................................................................................................
      • 4.7.2. Alternativa Composta ....................................................................................................................
    • 4.8. ESTRUTURA DE REPETIÇÃO ....................................................................................................................
    • 4.9. REGRAS PRÁTICAS PARA A CONSTRUÇÃO DE ALGORITMOS LEGÍVEIS ...................................................
    • 4.10. EXEMPLOS DE ALGORITMOS ................................................................................................................

_________________________________________________________________________

Além o bit e do byte, há um outro conceito, relacionado à forma com que os dados binários serão acessados e processados. Trata-se do conceito palavra. Se tomarmos um computador de oito bits para analisar, veremos que se trata de um equipamento cujo tamanho da palavra é de oitos bits. Isso significa que os dados binários são acessados e processados em conjuntos ou grupos de oito.

1.1.3. Componentes do Hardware

O hardware é composto de três grandes partes: CPU, memória e periféricos. Essas partes são os componentes físicos do computador.

Unidade Central de Processamento

A UCP (Unidade Central de Processamento) pode ser vista como o componente mais importante do hardware. É na UCP que se encontra o processador central do equipamento. O processador central de um equipamento é a “peça” que comanda todas as suas funções, controla todos os seus componentes, permite acesso de outros equipamentos, realiza as tarefas de lógica e aritmética. O processador central é composto dos seguintes elementos:

  • Unidade de Controle: responsável pela verificação e pelo controle das instruções realizadas pela UCP;
  • Unidade de Lógica e Aritmética: responsável pela realização das operações aritméticas e lógicas;
  • Registrador de Dados: armazena temporariamente os operandos referentes à instrução que está sendo realizada pela UCP;
  • Registrador de Instruções: armazena temporariamente a instrução que está sendo realizada pela UCP;
  • Via de Dados (BUS): permite a conexão da UCP com as demais partes do computador.

_________________________________________________________________________

Memórias

Conceitualmente, a memória é um componente muito simples: é um “depósito” onde são guardados certos elementos para serem usados quando desejado.

A memória de um computador possui diferentes variedades:

  • de velocidade;
  • de capacidade de armazenamento;
  • de tecnologia de construção;
  • de utilidade dentro do sistema.

_________________________________________________________________________

Periféricos de Saída

  • Monitor de Vídeo: permite visualizar as etapas do processamento de dados, desde a entrada dos dados até a saída das informações.
  • Impressora: a função desse periférico é perpetuar as informações obtidas pelo processamento por meio da impressão em folhas.
  • Plotter: conhecido também como traçador gráfico, é um periférico cujo objetivo se assemelha ao da impressora, porém é de uso mais específico: destina-se à confecção de trabalhos gráficos.

1.2. Software

1.2.1. Introdução

Praticamente de nada adianta a existência apenas do hardware. O hardware tem de ser encarado com um potencial de recursos a serem extraídos na medida das necessidades de seu usuário. Para que seja possível usufruir desse potencial é necessária a parte lógica do computador: o software. O software é a parte lógica que dota o equipamento físico de capacidade para realizar todo tipo de trabalho. Por trás do software estão as linguagens de programação, que são regras básicas que permitem a melhor integração e buscam o ótimo relacionamento entre o software, o hardware e também o peopleware.

1.2.2. Linguagens de Programação

Linguagem de Máquina

  • É a linguagem de programação mais próxima da máquina.
  • O computador consegue “entender” somente essa linguagem.
  • Essa linguagem é a única que consegue enviar instruções ao processados.

Linguagem de Baixo Nível

  • É a linguagem de programação ainda bem próxima da máquina, porém com alguns artifícios que a torna mais acessível ao usuário.
  • O programador deve conhecer bem, tecnicamente o equipamento que estará programando para extrair dele o mais benefício possível.

Linguagem de Alto Nível

  • São linguagens de programação mais acessíveis ao ser humano.
  • São constituídas de regras e códigos mais próximos da linguagem do ser humano.

_________________________________________________________________________
  • Não exigem alto grau de conhecimento das características técnicas do equipamento.

1.2.3. Categorias de Software

Software Básico

  • O software básico é a primeira “interface” com a máquina.
  • Essa categoria de software realiza o elo de ligação entre a máquina e os demais softwares.
  • Exemplos: sistemas operacionais, compiladores, interpretadores, etc...

Software de Suporte

  • São os programas capazes de administrar as aplicações efetuadas
  • Exemplos: softwares gerenciadores de rede de computadores, softwares que controlam os espaços de memória em disco por usuário, etc...

Software Aplicativo

  • Esses softwares têm por característica principal estarem voltados para um objetivo previamente definido, porém com menor grau de abrangência.
  • Exemplos: programas de editoração de textos, sistemas gerenciadores de banco de dados, planilhas de cálculo, etc...

Software Aplicativo Específico

  • São uma especificidade dos softwares aplicativos.
  • Sua principal característica está nos objetivos estrita e claramente definidos, bem como seu campo de atuação é bem reduzido.
  • Exemplos: sistemas de contabilidade, de folha de pagamento, de controle de estoque, etc...

_________________________________________________________________________

Conversão do sistema decimal para o sistema binário

Para converter um número representado na base 10 para a base 2, tem-se que aplicar um processo para a parte inteira e outro para a parte fracionária. Para transformar um número inteiro na base 10 para a base 2 utiliza-se o método das divisões sucessivas, que consiste em dividir o número por 2, a seguir divide-se o quociente encontrado por 2 e assim o processo é repetido até que o último quociente seja igual a 1. O número binário será formado pela concatenação do último quociente com os restos das divisões lidos em sentido inverso ao que foram obtidos. Para transformar um número fracionário da base 10 para a base 2, utiliza- se o método das multiplicações sucessivas, que consistem em multiplicar o número fracionário por 2; deste resultado, a parte inteira será o primeiro dígito do número na base 2. O processo é repetido até que a parte fracionária do último produto seja igual a zero.

2.3. O Sistema Hexadecimal de Numeração

O sistema hexadecimal possui 16 algarismos, sendo sua base igual a 16. Os algarismos são assim enumerados: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F. A letra A representa o algarismo A, que por sua vez representa a quantidade dez. A letra B representa o algarismo B que representa a quantidade onze, e assim sucede até a letra F que representa a quantidade quinze.

Conversão do sistema hexadecimal para o sistema decimal

Para convertermos um número hexadecimal em decimal, utilizaremos o conceito básico de formação de um número.

Conversão do sistema decimal para o sistema binário

O processo é análogo à conversão do sistema decimal para o sistema binário, somente que neste caso, utilizaremos a divisão por 16, pois sendo o sistema hexadecimal, sua base é igual a 16.

Conversão do sistema hexadecimal para o sistema binário

A regra consiste em transformar cada algarismo diretamente no correspondente em binário, respeitando-se o número padrão de bits do sistema, sendo o hexadecimal igual a 16 (2^4 = 16).

Conversão do sistema binário para o sistema hexadecimal

Neste caso, devemos separar o número em grupos de 4 bits a partir da direita. Em seguida, devemos efetuar a conversão de cada grupo de bits diretamente para o sistema hexadecimal.


_________________________________________________________________________

3. Desenvolvimento de Programas

3.1. Fases para a solução de um problema:

  1. Definição do problema: É a descrição e a delimitação adequada do problema a ser resolvido, caracterizando-o de maneira clara e completa.
  2. Desenvolvimento de um algoritmo: É a descrição, geralmente dividida em etapas, de diversas operações que devem ser realizadas pelo computador para resolver o problema e obter os resultados desejados.
  3. Transcrição do algoritmo para uma linguagem de programação: É a codificação do algoritmo, obtendo-se um programa equivalente, de acordo com as regras e recursos oferecidos pela linguagem.
  4. Processamento do programa pelo computador: Seguindo as instruções de um programa denominado compilador, o computador verifica a correção sintática do programa e o traduz para outra linguagem (linguagem de máquina) que, em seguida, passa a controlar o computador através de suas instruções, executando a resolução do problema e obtendo os resultados desejados.
  5. Análise dos resultados: Os resultados obtidos pelas primeiras execuções de um programa devem ser analisados, pois podem estar comprometidos com erros de lógica.

3.2. Algoritmos

3.2.1. Definição de Algoritmos

A palavra algoritmo, à primeira vista, parece-nos estranha. Embora possua designação desconhecida, fazemos uso constantemente de algoritmos em nosso cotidiano: a maneira como uma pessoa toma banho é um algoritmo. Definimos algoritmo como a seqüência de passos que visam atingir um objetivo bem definido. Os algoritmos são utilizados no dia-a-dia para a solução dos mais diversos problemas. Outros algoritmos freqüentemente encontrados são:

  • instruções para utilizar um aparelho eletrodoméstico;
  • uma receita para preparo de algum prato;
  • a maneira como as contas de água, luz e telefone são calculados mensalmente, etc.

_________________________________________________________________________

3.2.3. Característica

Todo algoritmo deve apresentar algumas características básicas:  ter fim;  não dar margem à dupla interpretação (não ambíguo);  capacidade de receber dado(s) de entrada do mundo exterior;  poder gerar informações de saída para o mundo externo ao do ambiente algoritmo;  ser efetivo (todas as etapas especificadas no algoritmo devem ser alcançáveis em um tempo finito).


_________________________________________________________________________

4. Portugol

Durante nosso curso iremos aprender a desenvolver nossos algoritmos em uma pseudo-linguagem conhecida como “Portugol” ou Português Estruturado. “Portugol” é derivado da aglutinação de Português + Algol. Algol é o nome de uma linguagem de programação estruturada usada no final da década de 50.

4.1. Estrutura Seqüencial

É uma seqüência de comandos, separados por ponto e vírgula. São executados em seqüência linear de cima para baixo.

início <declaração de variáveis>

C 1 ; C 2 ; ... Cn; fim

onde Cis são comandos, 1 ≤ i ≤ n

4.2. Constantes

Constantes são endereços de memória destinados a armazenar informações fixas, inalteráveis durante a execução do algoritmo. Conforme seu tipo, a constante é classificada como numérica, literal ou lógica. Exemplo:

4.3. Variáveis

Uma variável é uma posição de memória, representada por um nome simbólico, atribuído pelo usuário, a qual contém, em um determinado momento um valor de um determinado tipo. O nome de uma variável é representado por um identificador.


_________________________________________________________________________

4.3.3. Declaração de variáveis

Para que os programas manipulem valores, estes devem ser armazenados em variáveis e para isso, devemos declará-las de acordo com a sintaxe:

tipo: identificador ;

Exemplos : inteiro: Idade; caracter: Nome; real: salario; lógico: fumante;

Se houver mais de uma variável do mesmo tipo deve-se definir de acordo com a sintaxe:

tipo: identificador 1 , identificador 2 , ..., identificadorn ;

Exemplos : inteiro: Idade, num_dependentes ; caracter: Nome, endereco, rg, estado_civil, nacionalidade ; real: salario, percentual ; lógico: fumante;

Quando uma variável é declarada, o compilador cria um local na memória, rotulado com o nome simbólico da variável e determina o tipo de valores que ele pode conter.

4.3.4. Declaração de constantes

Devemos declará-las de acordo com a sintaxe:

const identificador = valor;

Exemplo : const pi = 3.141592654;

4.4. Operações Básicas

Na solução da grande maioria dos problemas é necessário que as variáveis tenham seus valores consultados ou alterados. Para isto, devemos definir um conjunto de operadores, sendo eles: aritméticos, lógicos e relacionais.


_________________________________________________________________________

4.4.1. Operadores aritméticos

São usados para representar as operações matemáticas, e obedecem a mesma prioridade da matemática, ou seja, em um comando que aparecem várias operações básicas envolvidas, primeiro é resolvida a POTENCIAÇÃO , depois a MULTIPLICAÇÃO ou a DIVISÃO e por último a SOMA ou a SUBTRAÇÃO.

Operador Ação

  • Adição
  • Multiplicação
  • Subtração ou inversor do sinal / Divisão ** Exponenciação

Operadores Especiais

div: Retorna o valor inteiro que resulta da divisão entre 2 números inteiros. mod: Retorna o resto da divisão entre 2 números inteiros.

Exemplo:

Linearização de Expressões Para a construção de algoritmos todas as expressões aritméticas devem ser linearizadas, ou seja, colocadas em linhas. É importante também ressalvar o uso dos operadores correspondentes da aritmética tradicional para a computacional.

Exemplo:

Expressão Matemática Tradicional Expressão Computacional

Como pode ser observado no exemplo em expressões computacionais usamos somente parênteses “( )”. Em uma expressão computacional podemos ter parênteses dentro de parênteses.

( ) + =  

  

  • 5 − 3 1 3

2


_________________________________________________________________________

4.4.3. Funções

Uma função é um instrumento (sub–algoritmo) que tem como objetivo retornar um valor ou uma informação. A chamada de uma função é feita através da citação do seu nome seguido opcionalmente de seu argumento inicial entre parênteses. As funções podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. Bibliotecas de funções armazenam um conjunto de funções que podem ser usadas pelos programas.

As funções acima são as mais comuns e importantes para nosso desenvolvimento lógico, entretanto, cada linguagem possui suas funções próprias.

4.4.5. Prioridade de operadores

Durante a execução de uma expressão que envolve vários operadores, é necessário a existência de prioridades, caso contrário poderemos obter valores que não representam o resultado esperado.


_________________________________________________________________________

A maioria das linguagens de programação utiliza as seguintes prioridades de operadores:

1)Efetuar operações embutidas em parênteses "mais internos" 2)Efetuar funções 3)Efetuar exponenciação 4)Efetuar multiplicação e/ou divisão e/ou div e/ou mod 5)Efetuar adição e/ou subtração 6)Operadores relacionais 7)Operadores lógicos na ordem a seguir: 7.1) não 7.2). e 7.3) ou

4.5. Comandos de Entrada e Saída

Em um algoritmo é preciso representar a troca de informações que ocorrerá entre o mundo da máquina e o nosso mundo, para isso, devemos utilizar comandos de entrada e saída, sendo que, em nível de algoritmo esses comandos representam apenas a entrada e a saída da informação, independe do dispositivo utilizado (teclado, discos, impressora, monitor,...), mas, sabemos que nas linguagens de programação essa independência não existe, ou seja, nas linguagens de programação temos comandos específicos para cada tipo de unidade de entrada/saída.

4.5.1. Comando de entrada de dados

O comando de entrada de dados é utilizado para armazenar em uma variável um valor que se encontra em uma unidade de entrada de dados (usualmente o teclado). Existe apenas um comando simples para a entrada de dados, o comando leia:

leia(variavel);

onde: leia é uma palavra reservada variável representa a variável onde será armazenado o valor proveniente da unidade de entrada, qualquer que seja ela.