Algoritmos - Unisinos
Algoritmos - Unisinos
Algoritmos - Unisinos
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