Departamento de Informática Linguagem e Técnicas de Programação I Bacharelado em Sistemas de Informação Tecnologia em Processamento de Dados

Algoritmos
Fundamentos Básicos
Prof. Fabrício R. Lazilha fabricio@cesumar.br http://www.inf.cesumar.br/fabricio

Sistemas de Computação

Entrada

Processamento

Saída

Memória

Entrada

É responsável pelo fornecimento dos dados ao computador. Os periféricos mais usados são: teclado e mouse.

Saída
É responsável pelo fornecimento dos dados do computador para o usuário. Os periféricos mais utilizados são: o monitor de vídeo e a impressora.

Memória

Responsável pelo armazenamento dos dados e programas.

Processamento/Processador

Responsável pela execução dos programas.

Unidade Central de Processamento

Entrada

Saída

ULAUnidade Lógica e Aritmética

Reg. D Reg. C Reg. B Acumulador
Registradores

Clock
Memória

Exemplo
Somar o conteúdo do endereço 2000 com o endereço 2001 e guardar o resultado em 2002:

Endereço

Dado

2000 2001 2002 2003 2004

5 3 8

5 5 8 3

Reg. D Reg. Reg. C Reg. Reg. B Reg. Acumulador Registradores

Memória

A UCP copia o conteúdo do endereço 2000 para o acumulador. A UCP copia o conteúdo do endereço 2001 para o acumulador.O conteúdo anterior é transferido para o registrador B. A ULA realiza a operação. O resultado fica no acumulador e B é limpo. A UCP copia o conteúdo do acumulador para o endereço 2002.

Linguagens de Programação

Programa: seqüência de instruções que serão executadas pela UCP. A linguagem que a UCP trabalha chama-se Linguagem de Máquina e é composta de “0” e “1” (bits). Linguagem muito difícil de se trabalhar. Exemplo de um comando em Linguagem de Máquina: 10010010

Linguagens de Alto Nível

As linguagens faladas pela UCP são chamadas de Ling. de Baixo Nível. As linguagens que se aproximam da linguagem humana são chamadas de Ling. de Alto Nível. Uma Ling. da Alto Nível deve ser traduzida para uma Ling. de Baixo Nível para poder ser executada pela UCP.

Interpretadores

É um processo de tradução onde cada comando em Ling. de Alto Nível é traduzido para LM e depois executado pela UCP. Se um comando for executado diversas vezes, ele será traduzido e executado em LM várias vezes também. Isto deixa o processo de interpretação lento.

Compiladores
Todo o programa é primeiro traduzido para LM e depois executado pela UCP. Após a tradução é gerado um novo programa, totalmente em LM. Este programa é de execução muito mais rápida que o interpretado.

Exemplo
Comando Fluxo de execução Comando Comando Comando

LM LM LM LM

Interpretação
(BASIC e LOGO)

Compilação
(COBOL, FORTRAN, PASCAL, DELPHI, C)

Programa Ling. de Alto Nível

Fluxo de execução

LM

Algoritmo

Definição

O desenvolvimento de um programa é muito complexo. ALGORITMO: é a descrição dos passos necessários para se resolver um problema.

Problema

Algoritmo

Programa

Receitas de bolo

Um algoritmo é semelhante a uma receita de bolo: são fornecidos os ingredientes e o modo de fazer. Seguindo a receita obteremos o bolo.

Algoritmos & Receitas

Uma receita apresenta certa semelhança com algoritmos: ENTRADA: São os ingredientes. PROCESSAMENTO: Modo de preparo SAÍDA: O alimento pronto.

Exemplo:
Identifique a entrada, processamento e saída na receita abaixo:

Sanduíche Solduba
Ingredientes: •2 fatias de pão de forma integral •1 tomate •queijo branco •peito de peru •orégano •azeite •sal Modo de preparo: •Corte o tomate e o queijo branco em fatias finas e coloque sobre o pão. Acrescente o peito de peru, uma pitada de orégano, azeite e sal a gosto. Feche com a outra fatia. Você pode levar o sanduíche ao forno se preferir.

Imprecisões das Receitas

A linguagem utilizada nas receitas é muito vaga para ser utilizada no desenvolvimento de programas. Por exemplo, na receita anterior não foi especificada a quantidade de queijo nem se o peito de peru deveria ser fatiado ou não!

Linguagens para algoritmos

Para formalizar a construção de algoritmos, são utilizadas as seguintes linguagens: Formato livre Fluxogramas Pseudocódigos

Formato livre
Consiste em se escrever os passos necessários numerados item a item. Exemplo: 1- Fornecer o primeiro valor 2- Fornecer o segundo valor 3 - Somar os dois valores 4 - Mostrar o resultado
(O que faz o algoritmo acima?)

Desvantagem do formato livre

O formato livre pode apresentar imprecisões em algoritmos mais complexos. O formato livre só é vantajoso em algoritmos muito simples.

Fluxogramas

Início

Introduzir 1º valor

É uma representação gráfica do formato livre. Exemplo:

Introduzir 2º valor

Calcular a soma dos dois valores

Mostrar o resultado

Fim

Fluxogramas

Um fluxograma pode se tornar muito difícil de se ler quando o algoritmo se torna complexo, além de gastar muito papel para ser desenhado!

Pseudocódigo
Os algoritmos atuais são muito complexos. Para facilitar o desenvolvimento, o algoritmo é dividido em blocos, que realizam determinadas tarefas que quando juntos formam a solução completa. Esta forma de desenvolvimento se chama Programação Estruturada. Estruturada

Programação estruturada
A programação estruturada produz algoritmos complexos mas fáceis de se ler (e entender!). O formato livre e o fluxograma não se adaptam à programação estruturada. Sua forma de programação chama-se PROGRAMAÇÃO LINEAR. LINEAR Para se escrever algoritmos estruturados são usados os PSEUDOCÓDIGOS. PSEUDOCÓDIGOS

Algoritmos estruturados

No desenvolvimento dos algoritmos estruturados devem ser observados 3 items básicos: 1-FUNCIONABILIDADE: o algoritmo deve funcionar! 2-SIMPLICIDADE: o algoritmo não deve realizar tarefas inúteis. Ele deve ser feito da forma mais simples possível. 3-CLAREZA: o algoritmo deve ser claro, isto é, fácil de se ler e entender. Sem estas características, o algoritmo estará ERRADO! ERRADO

Pseudocódigo - Português Estruturado

O Pseudocódigo utilizado no desenvolvimento de algoritmos estruturados é chamado de Português Estruturado. Estruturado Nas próximas telas veremos como são escritas as estruturas usando o Português Estruturado.

Estrutura de um algoritmo

Um algoritmo escrito em pseudocódigo possui a seguinte estrutura: Programa Nome var Declaração de variáveis início Instruções a serem executadas fim Obs.: Não utilize espaços no nome do algoritmo!

Contantes

Uma constante é um identificador que possui valor fixo, ou seja, que não se modifica ao longo do tempo, durante a execução de um programa. Pode ser um número (como conhecemos na matemática), um valor lógico, um caracter ou uma seqüência destes com algum significado para o problema em estudo. Conforme o seu tipo, a constante é classificada como sendo numérica, lógica ou literal.

Contante Numérica

A representação de uma constante numérica nos algoritmos é feita no sistema decimal, podendo ser um número com ou sem parte fracionária. Exemplos: 28 3.14 A constante numérica pode ser positiva ou negativa, de acordo com o sinal que precede os algarismos formadores do número. Caso não exista um sinal, a constante é considerada positiva.

Contante Literal
Uma constante desse tipo pode ser qualquer seqüência de caracteres (letras, dígitos ou símbolos especiais) que forme um literal com algum significado para o problema em estudo. Toda constante literal que seja utiliza no algoritmo deve ser colocada entre apóstrofo para que não seja confundida com outros itens importantes em um programa (variável, instrução, palavra reservada) no qual estudaremos mais adiante. Exemplos: “Ana Maria” “O Grêmio é o melhor time do mundo” “12345” “x+y=9!” “14/08/1999”

Contante Literal
Note que um numeral entre apostrofo é considerado como uma seqüência de dígitos (literal), e não como uma constante numérica. Também não se deve confundir uma constante lógica (por exemplo, falso) como uma seqüência de caracteres (literal), que apareça entre apóstrofos (por exemplo, “falso”).

Pseudocódigo: Variáveis
As variáveis são utilizadas para guardar valores na memória. São utilizadas no lugar do endereço de memória. São identificadas por um nome ou identificadores. Os nomes devem obedecer às seguintes regras: 1-Só podem começar por LETRA. 2-Só podem ter LETRAS, NÚMEROS e o caractere _ (sublinhado). Exemplos: – A, B, A2, Contador, X_2, ABC2, Nome_Cliente (válidos) – 2A, ABC$%, A B C, Nome Cliente 2, Início (inválidos) Os comandos do pseudocódigo são palavras reservadas e não podem ser usados como nome de variáveis. Por isso, as palavras reservadas devem ser sublinhadas!

Declaração de variáveis
Equivale à lista de ingredientes da receita. Serve para informar quais os tipos de variáveis utilizadas no algoritmo. var NomeDaVariável : tipo Os tipos de variáveis são os seguintes:
– – – – Inteiro: Números sem parte decimal. Real: Números com parte decimal. Booleano: Valores VERDADEIRO e FALSO. Caractere: Conjunto de caracteres. Armazena um texto.

Exemplos:

var X : real i,j : inteiro Nome_cliente : caracter Valor1, Valor2 : real Letra : caractere

Atribuição de valores

Indicam o valor que uma variável deve receber em um algoritmo. variável ← valor Exemplos: x←2 x←y x←y + 2

Operadores Aritméticos

São utilizados os seguintes operadores:
Operador + % / * + Operação Manutenção de Sinal (números positivos) Inversão de Sinal (números negativos) Resto da divisão Divisão Multiplicação Adição Subtração Resultado

inteiro Inteiro ou real Inteiro ou real Inteiro ou real Inteiro ou real

Exemplos:
← ← ← ←

x y z r

a 2 5 5

+ * / %

b x 2 2 (quanto vale r?)

Entrada e Saída

Entrada: indica que algum dado deve ser fornecido Entrada ao algoritmo (programa) pelo USUÁRIO. Saída: indica que algum dado deve ser fornecido Saída pelo algoritmo (programa) ao USUÁRIO.

Pseudocódigo: Entrada

Leia Variável O valor digitado pelo usuário será armazenado na Variável. Exemplo: Leia X O valor digitado será armazenado na variável X.

Pseudocódigo: Saída
Escreva Variável Escreva “Mensagem” No primeiro caso, o valor da Variável será exibido ao usuário; no segundo, será mostrada a mensagem entre aspas (“”). Ex.: Escreva X Escreva “Bom dia!”

Problema/Exemplo
Desenvolva um programa que efetue a leitura de dois valores numéricos inteiros. Faça a operação de adição entre os dois valores e apresente o resultado obtido.

Antes de começarmos a escrever um algoritmo que resolva este problema ou um programa em uma linguagem de programação, devemos inicialmente responder algumas perguntas: Este problema tem uma solução geral? Você programador conhece esta solução?

Problema/Exemplo
Estas perguntas são fundamentais. Não podemos escrever um algoritmo que resolva todos os problemas do mundo. Isso é impossível. Lembra-se do conceito? “Um algoritmo é uma seqüência de instruções executadas pelo computador para se resolver um problema do mundo real”.

Problema/Exemplo
Montar uma estratégia passo-a-passo da solução do problema. No caso do nosso exemplo, devemos recorrer à matemática.

Estratégia
• Ler um valor inteiro para a variável A; • Ler outro valor inteiro para a variável B; • Efetuar a adição dos valores contidos nas variáveis A e B e implicar o resultado obtido em X; • Apresentar o valor da variável X após a operação de adição dos dois valores fornecidos.

Problema/Exemplo
Elaborar um algoritmo que represente a solução genérica do problema:
Programa soma Var a, b, x : inteiro início leia a leia b x ← a+b escreva x fim