Transcript
3/17/2011
Linguagens de Programação Representações de algoritmos Algoritmos com qualidade
Professora: Tanara Lauschner Departamento de Ciência da Computação (DCC) Email:
[email protected] Slides elaborados por Prfa. Fabíola Guerra Nakamura
Estabelece regras de sintaxe para que o algoritmo possa ser entendido por uma máquina.
Raciocínio
Algoritmo
int a, b, c; if (a > 2) a = b + c; else a = b – c; return;
Programa é a codificação de um algoritmo em uma linguagem de programação. Um computador é uma máquina que, a partir de uma entrada, realiza um número de cálculos matemáticos e lógicos, gerando uma saída. Programa é o elemento que diz ao computador quais cálculos devem ser realizados.
Programa
1
3/17/2011
É uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas:
Sua principal característica é a utilização de blocos para solução de um problema.
Seqüência Decisão Iteração
:: Exemplo 1. Compreender o problema. 2. Esboçar um procedimento para resolver o problema. 3. Formular o algoritmo. 4. Traduzir o algoritmo para uma linguagem de programação (Codificação).
1.
Calcular as raízes reais de:
ax 2 + bx + c
2.
Exemplo: Equação de 2o. grau Possibilidades de raízes:
02 raízes complexas; 02 raízes reais idênticas; 02 raízes reais distintas;
Calcular Δ. Se Δ ≥ 0, calcular raízes reais. Caso contrário, informar que não há raízes reais.
Condição para haver raízes reais: ∆ ≥ 0
2
3/17/2011
3.
4.
ler(a,b,c) delta = b^2 – 4*a*c se (delta ≥ 0) então r1 = – b – (delta)^(–1/2) r2 = – b + (delta)^(–1/2) escrever(r1,r2) senão escrever(“Não há raiz real”) fim do se fim do algoritmo
#include
#include #include int main(void) { float a, b, c, delta, r1, r2; scanf("%f %f %f", &a, &b, &c); delta = b*b – 4*a*c; if (delta >= 0) { r1 = – b – sqrt(delta); r2 = – b + sqrt(delta); printf("r1 = %f \n r2 = %f", r1, r2); } else printf("Nao ha raiz real\n"); }
Passos básicos para gerar um programa executável:
Codificação
A. Codificação B. Geração de Código Objeto C. Depuração (debug)
Código fonte
Depuração
Geração de código objeto Código objeto
Programa Executável
A. É a escrita de um programa de acordo com uma linguagem de programação. Utiliza Editores de Texto. Resultado: código-fonte.
B. Tradução do código-fonte para o código de máquina do processador. Realizado pelos Compiladores. Resultado: código executável pelo processador.
3
3/17/2011
C. Auxilia o programador a eliminar erros dos programas (“bugs”). Permite:
execução passo-a-passo. visualização do estado do programa através das variáveis.
início
Duas formas de representação de algoritmos:
C1
Fluxograma Pseudo-código
C2 C3 fim
início separar ingredientes misturar ingredientes colocar massa no forno tirar bolo do forno fim
início esperar assar separar ingredientes t ≥ 30min misturar ingredientes colocar massa no forno
F
V tirar bolo do forno fim
4
3/17/2011
Características: Sintaxe mais simples que a de uma Linguagem de Programação. Ênfase nas idéias e não nos detalhes. Facilita construir um programa em Linguagem de Programação.
Algoritmo
Ingredientes: farinha, açúcar, leite Separar os ingredientes Misturar os ingredientes Colocar massa no forno Esperar assar por 30 minutos Retirar bolo do forno
Exemplo Algoritmo perimetro_circunferência // declaração de constantes e variáveis
// comandos fim
fim
Exemplo Algoritmo perimetro_circunferência // declaração de constantes e variáveis const pi float raio float perim
// comandos ler (raio) perim = 2 * pi * raio escrever (perim)
= 3,1415
Dados (variáveis e constantes) Tipos de dados Operadores Comandos Funções Comentários
fim
5
3/17/2011
Dados
Algoritmo perimetro_circunferência // declaração de variáveis const PI float raio float perim
= 3,1415
dado constante dado variável tipo de dado
// comandos
comentário
ler (raio) perim = 2 * PI * raio
operador
Dados Constantes O valor de uma constante não se altera após sua definição. Exemplos: N_NEPERIANO = 2,7182 UNIVERSIDADE = 'UFAM'
Dados Variáveis Elemento que têm a função de associar um nome a uma porção da memória onde um dado pode ser armazenado.
escrever (perim (perim)) função
fim
:: Tipos de dados
:: Operadores
Definem a natureza do dado, as operações que podem ser realizadas com o dado e o espaço a ser ocupado na memória. Exemplos: Inteiro: Real (ponto flutuante): String de caracteres: Lógico:
10 -5 -128 1,34 13,4 -5,0 'quarta-feira’ 'Abril‘ Verdadeiro(1) Falso(0)
:: Operador Atribuição
:: Operadores Aritméticos
Utilizado para atribuir um valor a uma variável nome da variável
Notação: x1 ← 23; temp ← x2;
Atribuição Aritméticos Relacionais Lógicos
Valor
Dados de entrada: tipo numérico (int ou float) Resultado: tipo numérico (int ou float) Exemplos: x_2 ← 2 + 3; alfa ← 1 / 5; ang ← 1 / 5.0; resto ← 10 % 3; resto ← 1 % 4; delta ← 5 * 5 – 4 * 1 * 4;
6
3/17/2011
:: Operadores Relacionais
:: Operadores Relacionais Utilizados para realizar comparações entre dois valores de mesmo tipo primitivo. São comuns para a construção de equações. OPERADOR
OPERAÇÃO
EXEMPLO
RESULTADO
cond1 ←
2 == 3;
1 == 2
Falso
cond2 ←
1.6 ≠ 5.0;
Maior que
5>2
Verdadeiro
cond3 ←
1 > 5;
<
Menor que
11 < 4
Falso
>=
Maior ou Igual a
3 >= 3
Verdadeiro
cond4 ←
(1 + 2) < 5;
<=
Menor ou igual a
5<= 3
Falso
cond5 ←
10 ≥ 3;
cond6 ←
1 ≤ (– 4 / 3);
=
Igual a
>
<>
Diferente de
2 + 3 <> 5
Falso
:: Operadores Lógicos
:: Operadores Lógicos
Servem para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso. OPERAÇÃO CONJUNÇÃO
SÍMBOLO DESCRICAO AND – E
OR – ou
Conjunto de todas as possibilidades combinatórias entre os valores de diversas variáveis lógicas apenas duas situações (V ou F). OPERAÇÃO DE NEGAÇÃO
Uma expressão OR (OU) é verdadeira se pelo menos uma condição for verdadeira
NEGAÇÃO
TABELAS-VERDADE
Uma expressão AND (E) é verdadeira se todas as condições forem verdadeiras
DISJUNÇÃO
Dados de entrada: tipo numérico (int ou float ou cte) Resultado: tipo lógico Exemplos:
NOT – não Uma expressão NOT (NÃO) inverte o valor da expressão ou condição, se verdadeira inverte para
A
não A
F
V
V
F
falsa e vice-versa.
:: Operadores Lógicos
:: Operadores Lógicos OPERAÇÃO DE CONJUNÇÃO
OPERAÇÃO DE DISJUNÇÃO
A
B
AeB
A
B
A ou B
F
F
F
F
F
F
F
V
F
F
V
V
V
F
F
V
F
V
V
V
V
V
V
V
Dados de entrada: tipo lógico Resultado: tipo lógico Exemplos: cond1 cond2 cond3 cond4
← ← ← ←
V AND F; F OR F; NOT cond1; (V AND F) OR (5 > 3);
7
3/17/2011
:: Funções Pré-definidas Definidas pelo programador Exemplos: seno(angulo) pow(x,y) sqrt(resto) exp(tempo) ler(var1,var2,...) escrever(resul1,result2,...)
:: Comentários Utilizados para descrever o algoritmo, esclarecendo trechos do código Notação em Linguagem C: // /* */
Devem ser feitos para serem lidos por seres humanos! Escreva os comentários no momento em que estiver escrevendo o algoritmo.
Os comentários devem acrescentar alguma coisa, e não frasear o comando:
Use comentários no prólogo:
// Multiplicação de b por h: area ← b * h;
/***************************************** UNIVERSIDADE FEDERAL DO AMAZONAS FULANO DA SILVA DATA: 08/11/2010 ÚLTIMA MODIFICAÇÃO: 26/12/2010
// Cálculo da área do retângulo: area ← b * h;
ALGORITMO DE DEMONSTRAÇÃO *****************************************/
8
3/17/2011
Use espaços em branco para melhorar a legibilidade:
Escolha nomes representativos para as variáveis: p ← c + l;
hip←sqrt(cat1*cat1+cat2*cat2);
preco ← custo + lucro; hip ← sqrt(cat1 * cat1 + cat2 * cat2);
Utilize um comando por linha. Utilize parênteses para melhorar a compreensão e evitar erros.
1. Escreva um algoritmo para ler um número inteiro e imprimir seu sucessor e seu antecessor.
Utilize identação (recuo de texto). Atenção: identação ≠ endentação
52
Uma fábrica de arruelas precisa calcular o custo de envio de um conjunto de unidades sabendo que este custo leva em conta o peso das peças. Escreva um pseudo-código para tal.
1. 2. 3. 4.
Calcular área Calcular volume (área × espessura) Calcular peso (volume × densidade × unidades) Calcular custo (peso × frete)
9
3/17/2011
2. Calcular volume:
1. Calcular área d_int Areaint = π 2
2
d_int d _ ext Areaext = π 2
Volume = Area × espessura 3. Calcular peso:
Peso = Volume × densidade × unidades
2
4. Calcular custo (peso × frete)
Custo = Peso × frete d_ext
Area = Aext − Aint
Algoritmo arruela
...
// Constantes const PI
...
// Início = 3,1415
ler(d_ext, d_int, espessura, densidade, unidades, frete)
// Variáveis de entrada
area_ext
← pi * (d_ext/2) * (d_ext/2)
float d_ext, d_int
area_int
← pi * (d_int/2) * (d_int/2)
float espessura, densidade, unidades, frete
area
← area_ext – area_int
// Variável de saída
volume
← area * espessura
float custo
peso
← volume * densidade * unidades
// Variáveis do programa
custo
← peso * frete
float area, area_ext, area_int, volume, peso
escrever (custo) fim
10