Algoritmos

Propaganda
Algoritmos
Algoritmos
Leandro Tonietto
Unisinos
[email protected]
http://www.inf.unisinos.br/~ltonietto/inf/pg1/algoritmosI_Java.pdf
Mar-2008
Possuem sintaxe flexível e são mais úteis para
descrição em alto nível da solução de problemas.
É necessário fazer o “mapeamento” para alguma
linguagem de programação.
Programas são formados por:
Linguagem de programação
Possui sintaxe própria e rígida
Conceitos
Conjunto de palavras reservadas
Bibliotecas padrão de funções
Ambiente de desenvolvimento
Bibliotecas de software
Permite declaração de variáveis
Permite definições de blocos de comandos
Permite organização de funções e módulos
Utilizada para a implementação de algoritmos
Conceitos
Sintaxe do comando para incluir
bibliotecas no programa:
Para incluir uma do diretório padrão de
bibliotecas:
import
import
import
import
<nome_pacote.[*|nome_classe];
java.io.File;
java.util.*;
meuprojeto.AlgumaClasse;
Variáveis
Expressões
Comandos
Bloco principal de operações
Blocos auxiliares de operações
Opcionalmente, mas importante, comentários de código.
Bibliotecas são funções ou partes de programas que
executam uma função padrão ou independente da
aplicação aonde são usadas.
Exemplo: programa que imprime dados no console do
programa.
A função de impressão, colocar caracteres na tela, é a
mesma para todas as aplicações deste tipo. Não há
motivos que justifiquem que tenham que escrever
esta função em todos os programas; podemos fazer
uma reutilização. Precisamos apenas importar ou
incluir o arquivo da função nas nossas aplicações.
Os programas não totalmente escritos do zero!
Conceitos
Bloco comandos:
Agrupa um conjunto de instruções afins.
Instruções que deve ser executadas em conjunto, são
escritas dentro de um bloco de comando.
Determinados comandos podem exigir que escreva
as suas instruções internas dentro de um bloco de
comandos.
Declarara-se (codifica-se, programa-se) um bloco de
comandos com chaves:
{ – início do bloco
} – fim do bloco
Normalmente possuem um identificador (nome) ou
um comando associado.
1
Conceitos
Bloco comandos:
Conceitos
Sintaxe para blocos de instruções:
<tipo> <nome> ([<parâmetros>]) {
<comandos...>
}
Bloco comandos principal:
Sintaxe para blocos instruções para comandos:
<comando> (<expressão>) {
<comandos,...>
public static void main(String args[]){
<comandos,...>
}
}
Veremos mais sobre blocos auxiliares e comandos mais
adiante. Por enquanto, isto é o suficiente...
Conceitos
Comentários:
Comentários:
Documentar o programa.
Para explicar algum trecho importante do
algoritmo.
Para colocar meta-informações.
Exemplos:
/** Esta classe realiza um operação
* matemática...
* @autor Fulano de tal
* @version 01/04/2008
*/
Dois tipos:
Conceitos
Servem para:
É por onde começa a execução do algoritmo ou
programa.
É obrigatório. O compilador precisa saber por onde
começar...
Em Java, deve-se declarar um bloco chamado main:
// - comentário de linha
/* <informações> */ - comentário de bloco
/** <comentários e tags> */ - comentário
Javadoc
/* Trecho de código abaixo... */
// a linha abaixo calcula a média dos valores
Conceitos
Conceitos
Dados:
São informações sobre determinados objetos, campos ou atributos.
Tipos de dados:
Numéricos:
Inteiros: int, long, short e byte
Ponto-flutuante: double, float (diferencia do double pela letra f após o
número).
Texto:
char: um único caracter. Deve ser informado entre aspas simples (‘ ’).
Cadeia de caracteres (strings): deve ser informado entre aspas duplas
(“ ”). Classe String. Em Java, classe String é um tipo especial de
classe, que pode ser usado também como tipo de dado.
Booleano
boolean: representa um estado binário. 1 ou 0, ligado ou desligado.
Deve-se informar true ou false.
Variáveis:
São posições de memória que guardam valores e
podem ser referenciadas ao longo do programa.
Representam os dados do programa.
Conteúdo não constante, permitem alterações.
São utilizadas com algum tipo de dado associado.
Para se usar um dado (uma variável) deve-se
declará-las antes de ser usada.
Por exemplo: se é necessário solicitar que o usuário
digite o seu CPF para fazer alguma busca, então é
necessário antes declarar uma variável que comporte
esta informação.
2
Conceitos
Conceitos
Variáveis:
Sintaxe para declaração em C/C++:
<tipo> <nome> [ = <inicialização>];
int idade = 32;
long cpf;
float angulo = 45.0f;
double total = 0.0;
double media = total / numPessoas;
char opcao = ‘A’;
String nome = “Fulano de Tal”;
String endereco = “Rua XYZ, 123”;
boolean achouRegistro = false;
Conceitos
As declarações abaixo são válidas?
int nome;
E quais delas são
boolean angulo = 45.0f;
válidas de acordo com a
double media = 1;
lógica de programação?
char idade = ‘8’;
String cpf = “123.981.329-36”;
Testar no ambiente de desenvolvimento...
Erros de sintaxe o compilador avisa
Erros de lógica só testando o programa mesmo!!
Necessita maior cuidado na declaração. Decidir isto na
etapa de pensar na solução = algoritmo.
Conceitos – Exemplo 1
Comentários
Escopo da variável:
Variáveis:
Um bloco de comandos define o escopo das
variáveis declaradas dentro dele. Portanto, a
“vida útil” ou a validade de uma variável está
dependente do bloco em que foi declarada. Isto
será revisto na aula sobre memória e ponteiros.
/*
Este baita programa executa duas tarefas:
1) Aloca dados para descrever uma pessoa.
2) Imprime os dados do vivente.
Inclusão de bibliotecas
*/
import java.util.Datel // inclusão bibliotecas auxiliares, veremos
mais tarde...
public static void main(String args[]){
// declaração; dados do vivente
;
int idade = 32;
;
char sexo = ‘M’;
Bloco principal do programa
String nome = “Fulano de Tal”;
;
// impressão dos dados
;
System.out.println(“Dados ;do vivente:”);
System.out.println(“Nome: ” + nome);
;
System.out.println(“ – Idade: ” + idade);
System.out.println(“ – sexo: ” + sexo);
Todos os comandos ou
}
instruções do programa são
terminados por “;”
Conceitos
Variáveis:
//declaração:
int a, b;
char c;
float d;
int e;
Inteiro (int): 2 bytes
Caractere (char): 1 byte
Ponto flutuante (float): 4 bytes
Slide do Prof. Sandro Rigo
Conceitos
Memória:
Endereço| Conteúdo
-----------------------------100
| a
101
| a
102
| b
103
| b
104
| c
105
| d
106
| d
107
| d
108
| d
109
| d
110
| e
111
| e
112
|
113
|
114
|
Variáveis:
//declaração:
int a, b;
char c;
float d;
int e;
Inteiro (int): 2 bytes
Caractere (char): 1 byte
Ponto flutuante (float): 4 bytes
Slide do Prof. Sandro Rigo
Memória:
Endereço| Conteúdo
-----------------------------100
| 00 }
101
| 00
102
| 00
}
103
| 01
104
105
106
107
108
109
110
111
112
113
114
|
|
|
|
|
|
|
|
|
|
|
33 (“!”) }
d
d
d
d
d
00
02 }
Exemplo de uso:
a = 0;
b = 1;
c = “!”;
e = 2;
Caractere
Código ASCII
3
Conceitos
Comandos:
Sempre terminam com ponto-e-vírgula (“;”)
Podem ser agrupados numa mesma linha
Bloco de comandos:
Expressões:
int i=1; float f = 2.0f;
Entretanto, não é uma boa prática de programação.
Comandos são escritos dentro de um bloco de comandos, que
está dentro de “{” e “}”.
Comandos podem ser de uma linha:
Conceitos
a = b + 1;
Tipos de expressões:
Booleanas:
Faz uso dos operadores matemáticos e dos modificadores
de preferência - parênteses.
+, -, *, /, % e ()
a = (b + c – 1)/2
modulo = a % 2;
Precedência:
()
* / %
+ -
Descreva em linguagem alto nível o
algoritmo para conversão de polegadas para
centímetros.
Sabendo que a fórmula para conversão é:
if(a < (b-c)*2 ) ...
Conceitos
int a = 1;
Exemplo 02
int a = 1;
int a = (b – c) * 2;
Em comandos de bloco:
Aritméticas:
Atribuição:
Atribuição:
if (achou) {
System.out.println(“encontrou o dado”);
indice = i;
} else {
System.out.println( “não encontrou o dado”);
}
Tipos de expressões:
São comandos definidos dentro de um comando maior:
Conceitos
São instruções matemáticas. Resultam em alguns
valor.
São usadas tanto na atribuição quanto na
validação da execução de comandos de bloco.
Sempre retornam verdadeiro ou falso.
Usadas na avaliação dos comandos de bloco ou em atribuições.
Operadores de comparação:
<, >, <=, >=, == e !=
achou = total > 0;
if(sexo == ‘F’){...};
Muito cuidado = é diferente ==
Operadores lógico:
São usados para combinar expressões booleanas.
Quando é necessário usar mais de uma condição para achar
um valor booelano.
&&, || e ! (respectivamente, AND, OR e NOT)
achou = (total > 0) && (c == 2);
if( (sexo == ‘F’) || (idade >= 60) ){ ... }
Exemplo 02
Pensamento sistêmico para solucionar o problema.
1 polegada = 2.54 centímetros
Para efetuar o cálculo de conversão é necessário saber
qual é o número que deve ser convertido, então as
primeiras instruções são:
Solicitar ao usuário que informe um número
Ler número a ser convertido
Sabendo o número, é necessário executar a fórmula de
conversão e armazenar o resultado
Centímetros = polegadas * 2.54
Agora basta apenas imprimir o resultado na tela.
Imprimir centímetros
4
Exemplo 02
Algoritmo de conversão:
1.
2.
3.
4.
Solicitar ao usuário que informe um número
Ler número a ser convertido
Centímetros = polegadas * 2.54
Imprimir centímetros
Exemplo 02
// algoritmo para conversão de polegadas para centímetros
public static void main(String args[]){
// declare variáveis com nomes significativos
double polegadas;
System.out.println(“Informe as polegadas: ”);
// este comando lê do teclado
polegadas = Teclado.leFloat();
// expressão que resolve o algoritmo
// repare que o separador decimal dos ponto-flutuantes é o
// ponto “.” e não a vírgula “,”
double centimetros = polegadas * 2.54;
System.out.println(“ = “ + centímetros + “ cm”);
Fácil? Então escreva este código em Java
}
Exercícios 2:
Faça programa para resolver os problemas:
Calcular o fatorial de um número qualquer.
Converter um valor representando uma
temperatura em Fahrenheit para Celsius.
Fórmula: ((fahrenheit - 32) * 5 / 9).
Calcular o índice de massa corporal de uma
pessoa (cm2 / kg).
Ler os dados de uma pessoa e imprimi-los na tela
Classe de funções
matemáticas
Java possui uma classe que implementa diversas
funções matemáticas: Math
Para se usar as funções da Math não é necessário
instanciar objeto. Exemplos:
Classe de funções
matemáticas
Exemplos:
Math.round(numero): arredondamento.
Math.abs(numero): valor absoluto.
Math.min(a, b): o menor entre dois números.
Math.sqrt(numero): raiz quadrada.
Math.Pi(): número Pi
Math.random(): gera um número aleatório entre 0 e 1
Math.pow(a,b): calcula a elevado na potência b
Sintaxe para definição de
classes
public class NomeDaClasse {
private Tipo atributo;
int mes = Math.min(a, 12);
double raiz = Math.sqrt(144);
public NomeDaClasse(){
// construtor
}
public void setAtributo(Tipo parametro){
atributo = parametro;
}
public Tipo getAtributo(){
return atributo;
}
}
5
Download