linguagem de programação

31
Linguagem de Programação Aula 06 – Macros e Funções

Upload: thuong

Post on 15-Jan-2016

22 views

Category:

Documents


0 download

DESCRIPTION

Linguagem de Programação. Aula 06 – Macros e Funções. Média de uma seqüência de valores. Dado n positivo e uma seqüência de n números reais calcular a média dos elementos da seqüência. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Linguagem de Programação

Linguagem de Programação

Aula 06 – Macros e Funções

Page 2: Linguagem de Programação

Média de uma seqüência de valores

Dado n positivo e uma seqüência de n números reais calcular a média dos elementos da seqüência.

Faça um loop para validar se n é maior que zero, ou seja, enquanto n<=0 exiba uma mensagem de erro e solicite um novo valor de n.

Page 3: Linguagem de Programação

Soluçãomain(){

int qtd, i; float vlr, soma, media; soma = 0; do /* loop validação*/ { printf("\nDigite a quantidade: "); scanf("%d", &qtd); } while (qtd <=0);

printf("\nDigite os valores:\n "); for(i=0; i<qtd; i++) /*loop entrada de dados*/ { scanf("%f", &vlr); soma = soma + vlr; } media = soma/qtd; /*Calcula média*/ printf("\nMedia %.2f", media);

}

Page 4: Linguagem de Programação

Exercício para entregar Numa agência bancária, as contas são identificadas

por números de até 6 dígitos seguidos de um dígito verificador, calculado da seguinte forma:

Ex.: Seja n = 7314 o número da conta.

1) Obtemos a soma dos dígitos de n:s = 7+3+1+4 = 15

2) Obtemos o dígito verificador a partir do resto da divisão de s por 10:d = s % 10 = 15 % 10 = 5

O número da conta é: 007314-5 Dado um número de conta n, exiba o número de

conta completo correspondente.

Page 5: Linguagem de Programação

Lógica para a solução

Leia n (long int para suportar 6 dígitos);

Use um laço de repetição para somar seus dígitos;

Após o laço, obtenha o DV pelo resto da divisão por 10;

Imprima o número da conta formatado, incluindo o DV;

Page 6: Linguagem de Programação

Soluçãomain(){ long int n, s, c; printf("\n Digite numero da conta: "); scanf("%ld", &n); c = n; s = 0; while (n != 0) {

s = s + (n % 10); /* ou s += (n%10);*/ n /= 10; /* ou n = n / 10;*/ } printf("\nConta: %06ld-%1d",c ,s%10);}

Page 7: Linguagem de Programação

Mais exercícios

Um comerciante precisa informatizar o caixa de sua loja. Codifique um programa que:- Leia uma série de valores correspondendo aos preços das mercadorias compradas por um cliente (o valor zero finaliza a entrada);- Calcule o valor total;- Aplique o desconto

conforme tabela ao lado;- Mostre o valor a ser pago

pelo cliente.

Page 8: Linguagem de Programação

Soluçãomain(){ float total, vlr, final; total = 0; do { printf ("\nValor do item:"); scanf("%f", &vlr); total = total + vlr; } while (vlr!= 0); (...)

Page 9: Linguagem de Programação

Solução - continuação(...)if (total < 50)

final = (total * 0.95); else if (total <= 100)

final = (total * 0.90); else

if (total <=200)final = (total * 0.85);

elsefinal = (total * 0.80);

printf ("\nTotal da compra: %.2f", total);printf ("\nValor final com desconto: %.2f", final);

}

Page 10: Linguagem de Programação

Pré-processador

Módulo adicional pelo qual passa o programa C antes de ser compilado.

Modifica o programa antes do mesmo ser compilado

Modificações feitas a partir de diretivas embutidas no código fonte

Principais diretivas: #include #define

Page 11: Linguagem de Programação

Diretiva #define

Usada para definir constantes simbólicas (substituições)

Dá maior legibilidade do código. Sintaxe:

#define identificador texto

Ex.:

#define PI 3.14

Page 12: Linguagem de Programação

Exemplo

# include <stdio.h>

# define diga printf

# define oi “\nOlá, tudo bem?”

main()

{

diga (oi);

}

Page 13: Linguagem de Programação

Exercício

Inclua as diretivas define para o programa abaixo compilar/executar corretamente.

programainicio

limpaTela;diga ("olá !");

fim

Page 14: Linguagem de Programação

Macros

Quando a diretiva é usada para definir substituições com parâmetros.

Exemplo:

#define quad(n) nn

Substituições:quad( x ) => x * x

quad( 2 ) => 2 * 2

quad( f(x-3)) => f(x–3) * f(x–3)

quad( x+4 ) => x+4 * x+4

Cuidado com espaços!

Page 15: Linguagem de Programação

Possíveis erros Cuidado ao construir macros, pois a

substituição pode provocar alguns erros. Por exemplo:quad( 2+3 ) = 25?2+3 * 2+3 = 11

100/quad(2) = 25?100/ 2 * 2 = 100

Page 16: Linguagem de Programação

Corrigindo

Gostaríamos que ao invés de:quad(2 + 3) = 2+3*2+3

Tivéssemos:quad(2 + 3) = (2+3)*(2+3)

Então alteremos:#define quad(n) nn

Para:#define quad(n) (n)(n)

Page 17: Linguagem de Programação

Exercício

Defina as seguintes macros: soma(x, y); max(x, y); abs(n);

Para casa: eh_minuscula(c); eh_maiuscula(c); minuscula(c); maiuscula(c);

Page 18: Linguagem de Programação

Diretiva #include

Inclui uma cópia do arquivo entre <> ou “” no código fonte do nosso programa

Exemplos:

#include <stdio.h>

#include <conio.h>

#include <math.h>

Page 19: Linguagem de Programação

Incluindo nossos arquivos

Podemos desenvolver nossos arquivos cabeçalho (header) e incluí-los usando a diretiva #include.

Em geral usamos os sinais <> para arquivos do compilador C que ficam no diretório INCLUDE.

E “” para arquivos que nós mesmos desenvolvemos.

Page 20: Linguagem de Programação

Exemplo: arquivo de macros

/* macros.h */

# define abs(n) ((n)<0 ? -(n) : (n))

# define max(x, y) ((x)>(y)? (x) : (y))

# define soma(x, y) ((x) + (y))

Salvar como macros.h

Page 21: Linguagem de Programação

Usando arquivo de macros/*teste.c*/

#include <stdio.h>

#include “macros.h”

main()

{

int n1 = -7;

int n2 = 8;

printf("\n %d ", soma(2*3, 1 + 3));

printf("\n %d ", abs(n2));

printf("\n %d ", max(n1, n2));

}

Page 22: Linguagem de Programação

Exercício para casa

Crie o arquivo boolean.h com as definições necessárias para que o programa abaixo possa produzir a saída: true false true.

main() {

printf("%s ", bool(not false) );

printf("%s ", bool(false and true) );

printf("%s ", bool(true or false) );

}

Page 23: Linguagem de Programação

Funções

Que são funções? Programas em C possuem uma função

main( ) com a lógica principal do programa. Fazemos uso de funções existentes em

bibliotecas C. printf(); scanf(); getch(); clrscr();

Page 24: Linguagem de Programação

Definição de funções

Podemos definir nossas próprias funções.

Vantagens: Clareza do código fonte Reuso da lógica. Uma vez codificada

pode ficar disponível em bibliotecas

Page 25: Linguagem de Programação

Sintaxe

tipo_devolvido nome_funcao (parâmetros) {

declarações

comandos

} tipo_devolvido: tipo de dado que a função

devolve. (void: não devolve dados) nome_funcao: nome que identifica a função parâmetros: lista de variáveis que

representam entrada de dados na função

Page 26: Linguagem de Programação

Funções que não devolvem valores void boas_vindas( void ){

printf("\nSeja bem vindo.");}void main(){ boas_vindas(); getch();}

Não é possível atribuir a variáveis ou expressões; x = boas_vindas ();

Não é possível usar parâmetros quando não definidos;boas_vindas(“Olá”);

Page 27: Linguagem de Programação

Funções com parâmetrosvoid cumprimentos( char c ){

switch(c){

case ‘N’: printf("\nBoa noite!"); break;case ‘T’: printf("\nBoa tarde! ");break;default : printf("\nBom dia!");

}}void main(){ cumprimentos(‘N’); getch();}

Page 28: Linguagem de Programação

Funções que devolvem valores

Funções que não são do tipo void usam comando return para devolver o resultado da função;

O comando return interrompe a execução da função, voltando com o controle para o programa principal ou para a função que a chamou.

Neste caso, as linhas de comando codificadas após o comando return não serão executadas.

Page 29: Linguagem de Programação

Exemplosfloat hip (float a, float b) { float h; h = sqrt( pow(a,2)+pow(b,2)); return h;}

... x = hip (3, 4); /* x recebe 5 */

double max (double a, double b) { if ( a>b )

return a; /* interrompe a função*/ return b;}

... y = max (10, 20); /* y recebe 20*/

Page 30: Linguagem de Programação

Exercícios (entregar)

Codifique a função fat(n), que devolve o fatorial de n.

Codifique a função rodizio(placa), que recebe o número da placa de um veículo e exibe o dia em ele está no rodízio.

Page 31: Linguagem de Programação

Data da P1

Primeira prova de LP 13/out Após semana de tecnologia