310 likes | 389 Views
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.
E N D
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. • 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.
Solução main() { 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); }
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.
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;
Solução main(){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);}
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.
Solução main() { float total, vlr, final; total = 0; do { printf ("\nValor do item:"); scanf("%f", &vlr); total = total + vlr; } while (vlr!= 0); (...)
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); else final = (total * 0.80); printf ("\nTotal da compra: %.2f", total); printf ("\nValor final com desconto: %.2f", final); }
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
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
Exemplo # include <stdio.h> # define diga printf # define oi “\nOlá, tudo bem?” main() { diga (oi); }
Exercício Inclua as diretivas define para o programa abaixo compilar/executar corretamente. programa inicio limpaTela; diga ("olá !"); fim
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!
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
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)
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);
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>
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.
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
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)); }
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) ); }
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();
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
Sintaxe tipo_devolvidonome_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
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 quandonão definidos; boas_vindas(“Olá”);
Funções com parâmetros void 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(); }
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.
Exemplos float 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*/
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.
Data da P1 • Primeira prova de LP • 13/out • Após semana de tecnologia