14.03.2015 Views

Algoritmos - Unisinos

Algoritmos - Unisinos

Algoritmos - Unisinos

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Algoritmos</strong><br />

<strong>Algoritmos</strong><br />

Leandro Tonietto<br />

<strong>Unisinos</strong><br />

ltonietto@unisinos.br<br />

http://www.inf.unisinos.br/~ltonietto/inf/pg1/algoritmosI_Java.pdf<br />

Mar-2008<br />

<br />

<br />

<br />

Possuem sintaxe flexível e são mais úteis para<br />

descrição em alto nível da solução de problemas.<br />

É necessário fazer o “mapeamento” para alguma<br />

linguagem de programação.<br />

Programas são formados por:<br />

Variáveis<br />

Expressões<br />

Comandos<br />

Bloco principal de operações<br />

Blocos auxiliares de operações<br />

Opcionalmente, mas importante, comentários de código.<br />

Linguagem de programação<br />

Possui sintaxe própria e rígida<br />

Conjunto de palavras reservadas<br />

Bibliotecas padrão de funções<br />

Ambiente de desenvolvimento<br />

Permite declaração de variáveis<br />

Permite definições de blocos de comandos<br />

Permite organização de funções e módulos<br />

Utilizada para a implementação de algoritmos<br />

Conceitos<br />

Bibliotecas de software<br />

Bibliotecas são funções ou partes de programas que<br />

executam uma função padrão ou independente da<br />

aplicação aonde são usadas.<br />

Exemplo: programa que imprime dados no console do<br />

programa.<br />

A função de impressão, colocar caracteres na tela, é a<br />

mesma para todas as aplicações deste tipo. Não há<br />

motivos que justifiquem que tenham que escrever<br />

esta função em todos os programas; podemos fazer<br />

uma reutilização. Precisamos apenas importar ou<br />

incluir o arquivo da função nas nossas aplicações.<br />

Os programas não totalmente escritos do zero!<br />

Conceitos<br />

Sintaxe do comando para incluir<br />

bibliotecas no programa:<br />

Para incluir uma do diretório padrão de<br />

bibliotecas:<br />

import


Conceitos<br />

Bloco comandos:<br />

Sintaxe para blocos de instruções:<br />

([]) {<br />

<br />

}<br />

<br />

<br />

Sintaxe para blocos instruções para comandos:<br />

() {<br />

<br />

}<br />

Veremos mais sobre blocos auxiliares e comandos mais<br />

adiante. Por enquanto, isto é o suficiente...<br />

Conceitos<br />

Bloco comandos principal:<br />

É por onde começa a execução do algoritmo ou<br />

programa.<br />

É obrigatório. O compilador precisa saber por onde<br />

começar...<br />

Em Java, deve-se declarar um bloco chamado main:<br />

public static void main(String args[]){<br />

<br />

}<br />

Conceitos<br />

Comentários:<br />

Servem para:<br />

Documentar o programa.<br />

Para explicar algum trecho importante do<br />

algoritmo.<br />

Para colocar meta-informações.<br />

Dois tipos:<br />

// - comentário de linha<br />

/* */ - comentário de bloco<br />

/** */ - comentário<br />

Javadoc<br />

Conceitos<br />

Comentários:<br />

Exemplos:<br />

/** Esta classe realiza um operação<br />

* matemática...<br />

* @autor Fulano de tal<br />

* @version 01/04/2008<br />

*/<br />

/* Trecho de código abaixo... */<br />

// a linha abaixo calcula a média dos valores<br />

<br />

<br />

Conceitos<br />

Dados:<br />

São informações sobre determinados objetos, campos ou atributos.<br />

Tipos de dados:<br />

Numéricos:<br />

Inteiros: int, long, short e byte<br />

Ponto-flutuante: double, float (diferencia do double pela letra f após o<br />

número).<br />

Texto:<br />

char: um único caracter. Deve ser informado entre aspas simples (‘ ’).<br />

<br />

Cadeia de caracteres (strings): deve ser informado entre aspas duplas<br />

(“ ”). Classe String. Em Java, classe String é um tipo especial de<br />

classe, que pode ser usado também como tipo de dado.<br />

Booleano<br />

boolean: representa um estado binário. 1 ou 0, ligado ou desligado.<br />

Deve-se informar true ou false.<br />

Conceitos<br />

Variáveis:<br />

São posições de memória que guardam valores e<br />

podem ser referenciadas ao longo do programa.<br />

Representam os dados do programa.<br />

Conteúdo não constante, permitem alterações.<br />

São utilizadas com algum tipo de dado associado.<br />

Para se usar um dado (uma variável) deve-se<br />

declará-las antes de ser usada.<br />

Por exemplo: se é necessário solicitar que o usuário<br />

digite o seu CPF para fazer alguma busca, então é<br />

necessário antes declarar uma variável que comporte<br />

esta informação.<br />

2


Conceitos<br />

Variáveis:<br />

Sintaxe para declaração em C/C++:<br />

[ = ];<br />

int idade = 32;<br />

long cpf;<br />

float angulo = 45.0f;<br />

double total = 0.0;<br />

double media = total / numPessoas;<br />

char opcao = ‘A’;<br />

String nome = “Fulano de Tal”;<br />

String endereco = “Rua XYZ, 123”;<br />

boolean achouRegistro = false;<br />

Conceitos<br />

Variáveis:<br />

As declarações abaixo são válidas?<br />

int nome;<br />

boolean angulo = 45.0f;<br />

E quais delas são<br />

válidas de acordo com a<br />

double media = 1;<br />

lógica de programação?<br />

char idade = ‘8’;<br />

String cpf = “123.981.329-36”;<br />

Testar no ambiente de desenvolvimento...<br />

Erros de sintaxe o compilador avisa<br />

Erros de lógica só testando o programa mesmo!!<br />

Necessita maior cuidado na declaração. Decidir isto na<br />

etapa de pensar na solução = algoritmo.<br />

Conceitos<br />

Escopo da variável:<br />

Um bloco de comandos define o escopo das<br />

variáveis declaradas dentro dele. Portanto, a<br />

“vida útil” ou a validade de uma variável está<br />

dependente do bloco em que foi declarada. Isto<br />

será revisto na aula sobre memória e ponteiros.<br />

Conceitos – Exemplo 1<br />

Comentários<br />

/*<br />

Este baita programa executa duas tarefas:<br />

1) Aloca dados para descrever uma pessoa.<br />

2) Imprime os dados do vivente. Inclusão de bibliotecas<br />

*/<br />

import java.util.Datel // inclusão bibliotecas auxiliares, veremos<br />

mais tarde...<br />

public static void main(String args[]){<br />

// declaração ; dados do vivente<br />

int idade = 32; ;<br />

char sexo = ‘M’;<br />

;<br />

String nome = “Fulano de Tal”;<br />

Bloco principal do programa<br />

;<br />

// impressão dos dados ;<br />

System.out.println(“Dados ; do vivente:”);<br />

System.out.println(“Nome: ” + nome); ;<br />

System.out.println(“ – Idade: ” + idade);<br />

}<br />

System.out.println(“ – sexo: ” + sexo);<br />

Todos os comandos ou<br />

instruções do programa são<br />

terminados por “;”<br />

Conceitos<br />

Conceitos<br />

Variáveis:<br />

//declaração:<br />

int a, b;<br />

char c;<br />

float d;<br />

int e;<br />

Inteiro (int): 2 bytes<br />

Caractere (char): 1 byte<br />

Ponto flutuante (float): 4 bytes<br />

Slide do Prof. Sandro Rigo<br />

Memória:<br />

Endereço| Conteúdo<br />

------------------------------<br />

100 | a<br />

101 | a<br />

102 | b<br />

103 | b<br />

104 | c<br />

105 | d<br />

106 | d<br />

107 | d<br />

108 | d<br />

109 | d<br />

110 | e<br />

111 | e<br />

112 |<br />

113 |<br />

114 |<br />

Variáveis:<br />

//declaração:<br />

int a, b;<br />

char c;<br />

float d;<br />

int e;<br />

Inteiro (int): 2 bytes<br />

Caractere (char): 1 byte<br />

Ponto flutuante (float): 4 bytes<br />

Slide do Prof. Sandro Rigo<br />

Memória:<br />

Endereço| Conteúdo<br />

------------------------------<br />

100 | 00<br />

}<br />

101 | 00<br />

102 | 00<br />

}<br />

103 | 01<br />

104 | 33 (“!”) }<br />

105 | d<br />

106 | d<br />

107 | d<br />

108 | d<br />

109 | d<br />

110 | 00<br />

111 | 02<br />

}<br />

112 |<br />

113 |<br />

114 |<br />

Exemplo de uso:<br />

a = 0;<br />

b = 1;<br />

c = “!”;<br />

e = 2;<br />

Caractere<br />

Código ASCII<br />

3


Conceitos<br />

Conceitos<br />

<br />

Comandos:<br />

Sempre terminam com ponto-e-vírgula (“;”)<br />

Podem ser agrupados numa mesma linha<br />

int i=1; float f = 2.0f;<br />

Entretanto, não é uma boa prática de programação.<br />

Comandos são escritos dentro de um bloco de comandos, que<br />

está dentro de “{” e “}”.<br />

Comandos podem ser de uma linha:<br />

a = b + 1;<br />

Bloco de comandos:<br />

São comandos definidos dentro de um comando maior:<br />

if (achou) {<br />

System.out.println(“encontrou o dado”);<br />

indice = i;<br />

} else {<br />

System.out.println( “não encontrou o dado”);<br />

}<br />

Expressões:<br />

São instruções matemáticas. Resultam em alguns<br />

valor.<br />

<br />

São usadas tanto na atribuição quanto na<br />

validação da execução de comandos de bloco.<br />

Atribuição:<br />

int a = 1;<br />

int a = (b – c) * 2;<br />

Em comandos de bloco:<br />

if(a < (b-c)*2 ) ...<br />

Conceitos<br />

Conceitos<br />

Tipos de expressões:<br />

Atribuição:<br />

int a = 1;<br />

Aritméticas:<br />

Faz uso dos operadores matemáticos e dos modificadores<br />

de preferência - parênteses.<br />

+, -, *, /, % e ()<br />

a = (b + c – 1)/2<br />

modulo = a % 2;<br />

Precedência:<br />

()<br />

* / %<br />

+ -<br />

<br />

Tipos de expressões:<br />

Booleanas:<br />

<br />

Sempre retornam verdadeiro ou falso.<br />

Usadas na avaliação dos comandos de bloco ou em atribuições.<br />

Operadores de comparação:<br />

, =, == e !=<br />

achou = total > 0;<br />

if(sexo == ‘F’){...};<br />

Muito cuidado = é diferente ==<br />

Operadores lógico:<br />

São usados para combinar expressões booleanas.<br />

Quando é necessário usar mais de uma condição para achar<br />

um valor booelano.<br />

&&, || e ! (respectivamente, AND, OR e NOT)<br />

achou = (total > 0) && (c == 2);<br />

if( (sexo == ‘F’) || (idade >= 60) ){ ... }<br />

Exemplo 02<br />

Exemplo 02<br />

Descreva em linguagem alto nível o<br />

algoritmo para conversão de polegadas para<br />

centímetros.<br />

Sabendo que a fórmula para conversão é:<br />

1 polegada = 2.54 centímetros<br />

<br />

Pensamento sistêmico para solucionar o problema.<br />

Para efetuar o cálculo de conversão é necessário saber<br />

qual é o número que deve ser convertido, então as<br />

primeiras instruções são:<br />

Solicitar ao usuário que informe um número<br />

Ler número a ser convertido<br />

Sabendo o número, é necessário executar a fórmula de<br />

conversão e armazenar o resultado<br />

Centímetros = polegadas * 2.54<br />

Agora basta apenas imprimir o resultado na tela.<br />

Imprimir centímetros<br />

4


Exemplo 02<br />

Algoritmo de conversão:<br />

1. Solicitar ao usuário que informe um número<br />

2. Ler número a ser convertido<br />

3. Centímetros = polegadas * 2.54<br />

4. Imprimir centímetros<br />

Fácil? Então escreva este código em Java<br />

Exemplo 02<br />

// algoritmo para conversão de polegadas para centímetros<br />

public static void main(String args[]){<br />

// declare variáveis com nomes significativos<br />

double polegadas;<br />

}<br />

System.out.println(“Informe as polegadas: ”);<br />

// este comando lê do teclado<br />

polegadas = Teclado.leFloat();<br />

// expressão que resolve o algoritmo<br />

// repare que o separador decimal dos ponto-flutuantes é o<br />

// ponto “.” e não a vírgula “,”<br />

double centimetros = polegadas * 2.54;<br />

System.out.println(“ = “ + centímetros + “ cm”);<br />

Exercícios 2:<br />

Classe de funções<br />

matemáticas<br />

Faça programa para resolver os problemas:<br />

Calcular o fatorial de um número qualquer.<br />

Converter um valor representando uma<br />

temperatura em Fahrenheit para Celsius.<br />

Fórmula: ((fahrenheit - 32) * 5 / 9).<br />

Calcular o índice de massa corporal de uma<br />

pessoa (cm 2 / kg).<br />

Ler os dados de uma pessoa e imprimi-los na tela<br />

<br />

<br />

Java possui uma classe que implementa diversas<br />

funções matemáticas: Math<br />

Para se usar as funções da Math não é necessário<br />

instanciar objeto. Exemplos:<br />

Math.round(numero): arredondamento.<br />

Math.abs(numero): valor absoluto.<br />

Math.min(a, b): o menor entre dois números.<br />

Math.sqrt(numero): raiz quadrada.<br />

Math.Pi(): número Pi<br />

Math.random(): gera um número aleatório entre 0 e 1<br />

Math.pow(a,b): calcula a elevado na potência b<br />

Classe de funções<br />

matemáticas<br />

Exemplos:<br />

int mes = Math.min(a, 12);<br />

double raiz = Math.sqrt(144);<br />

Sintaxe para definição de<br />

classes<br />

public class NomeDaClasse {<br />

private Tipo atributo;<br />

public NomeDaClasse(){<br />

// construtor<br />

}<br />

}<br />

public void setAtributo(Tipo parametro){<br />

atributo = parametro;<br />

}<br />

public Tipo getAtributo(){<br />

return atributo;<br />

}<br />

5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!