Buscar

aula_4_labor1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 15 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Laboratório de Programação I 
DESENVOLVIMENTO DE MACROS, 
 FUNÇÕES RECURSIVAS E A 
 DEFINIÇÃO DE NOVOS TIPOS 
02/03/2013 Jair Alves Barbosa 
02/03/2013 Laboratório de Programação I 2 
 A diretiva #define pode ser usada na substituição de 
textos que tenham um significado explicito ao compilador. 
 
Por exemplo: 
 
#include<stdio.h> 
#include<conio.c> 
#define ERRO printf("\nVALOR INVALIDO.\n") 
int main(void) 
{ 
 int nro; 
 printf("Informe um numero de 1 a 10: "); 
 scanf("%d",&nro); 
 if ((nro < 1) || (nro > 10)) 
 ERRO; 
 else 
 printf("Valor pertencente ao intervalo."); 
 getch(); 
} // encerra o programa 
MACROS 
02/03/2013 Laboratório de Programação I 3 
MACROS 
 
• Esta diretiva também pode receber argumentos para serem 
utilizados no momento de sua execução no programa. 
 #define MOSTRA(p1) printf("%f\n", p1) 
 int main (void) { // abrindo o bloco de instruções 
 float valor; 
 printf("Informe o valor desejado: "); 
 scanf("%f", &valor); 
 MOSTRA(valor); 
 valor = valor * 3; 
 MOSTRA(valor); 
 getch(); } // encerra o bloco de instruções 
VALOR é substituído pelo nome usado 
na macro 
02/03/2013 Laboratório de Programação I 4 
MACROS 
• Macros são definidas através da diretiva define 
podendo ter parâmetros; 
 
• Cada vez que o nome da macro é encontrado, os 
parâmetros usados na sua definição são substituídos 
pelos parâmetros encontrados no programa antes da 
compilação do programa; 
 
• Não é especificado o tipo de dado do parâmetro; 
 
• As macros diminuem o tempo de execução do 
programa, mas aumentam o seu código (duplicação); 
 
• Cuidados com a sintaxe na realização de expressões. 
02/03/2013 Laboratório de Programação I 5 
MACROS 
 A não utilização de parênteses nas macros pode resultar 
em erros na efetivação de uma expressão. 
Exemplo: 
 #define SOMAR(p1,p2) p1 + p2 
 int main (void) { // abrindo o bloco de instruções 
 int valor_1, valor_2, total; 
 printf("Informe os valores: "); 
 scanf("%d %d",&valor_1, &valor_2); 
 total = 10 * SOMAR(valor_1,valor_2); 
 printf("Resultado = %d", total); 
 getch(); } // encerra o bloco de instruções 
 
 Supondo que os valores informados sejam 3 para valor_1 e 5 
para valor_2 o resultado é 35 ao invés de 80 como esperado. 
Resultado = 35 
ao invés de 
Resultado = 80 
02/03/2013 Laboratório de Programação I 6 
MACROS 
 A solução neste exemplo seria incluir todo o texto 
envolvido por parênteses . 
#define SOMAR(p1,p2) (p1 + p2) 
 No exemplo anterior a solução acima funcionaria e o 
resultado seria o esperado, porém envolvendo todo o texto entre 
parênteses não soluciona todos os problemas. Por exemplo: 
#define MULTIPLICAR(p1,p2) (p1 * p2) 
 ... 
Resultado = MULTIPLICAR (2+3,4); 
Após a substituição do texto tem-se a expressão: 
Resultado = (2+3*4); // resultado 14 
onde o valor desejado seria vinte (20). 
 A solução é envolver cada parâmetro por parênteses 
#define MULTIPLICAR (p1,p2) ( (p1) * (p2) ) 
Resultado = ((2+3)*(4));// resultado 20 
02/03/2013 Laboratório de Programação I 7 
Exercícios de Fixação 
1) Desenvolva um programa que use uma macro para 
calcular a área de um retângulo, sendo informado os 
valores reais da base e da altura (base . altura). 
2) Fazer uma macro para calcular a área de uma esfera, 
dado o raio (4 .  . R2). 
3) Elabore um programa que use uma macro para retornar o 
valor da média aritmética de três valores numéricos 
informados pelo usuário. 
4) Faça um programa que use uma macro para determinar a 
quantidade de raízes de uma equação do segundo grau 
que pode ser 0,1 ou 2. 
02/03/2013 Laboratório de Programação I 8 
 Uma função é recursiva quando dentro dela existe uma 
chamada a ela própria. 
 Um código recursivo precisa usar mais memória, o que torna 
a execução mais lenta. Quando uma função chama a si mesmo 
novos parâmetros e variáveis locais são alocados na pilha e o 
código da função é executado com essas novas variáveis. 
 Uma chamada recursiva não faz uma nova cópia da função, 
mas apenas os seus argumentos são novos. Quando a função 
recursiva retorna, as variáveis locais e os parâmetros são 
removidos da pilha, a execução recomeça do ponto da chamada à 
função dentro da função. 
 O objetivo de uma função recursiva, também denominada de 
recorrência, é fazer com que ela passe por uma seqüência de 
chamadas até que um certo ponto seja atingido (resolvido). 
Funções Recursivas 
02/03/2013 Laboratório de Programação I 9 
 Toda função recursiva deve possuir um comando condicional (if) 
em algum lugar, forçando a função a retornar sem que a chamada 
recursiva ocorra (condição de escape). 
 
Exemplo: 
 
#include<stdio.h> 
#include<conio.c> 
 
int fatorial(int n) ; // protótipo 
 
int main(void) { 
 int um = 1; 
 while(num) { 
 printf("\nDigite um numero: "); 
 scanf("%d",&num); 
 printf("Fatorial = %ld“,fatorial(num)); 
 } 
 getch(); 
} 
Funções Recursivas 
// Definição da função 
long fatorial (int n) 
{ 
 if (n == 0) return (1) ; 
 else 
 return( fatorial(n-1) * n); 
 } 
Saída => 1*2*3*4*5 = ? 
0 = 1 
1 = 
2 = 
3 = 
4 = 
5 = 
1 
2 
6 
24 
120 
02/03/2013 Laboratório de Programação I 10 
Exercício de Fixação 
5)Escrever uma função recursiva (Potencia) que 
receba uma base real e um expoente inteiro e 
retorne o valor da base elevada ao expoente. 
Escrever também um programa para testar 
(executar) esta função. 
 
02/03/2013 Laboratório de Programação I 11 
CRIANDO TIPOS DE DADOS 
Um tipo de dado pode ser criado pelo usuário, além dos 
tipos definidos. Também é possível definir um novo nome 
para um tipo de dado já existente, aumentando assim, a 
portabilidade e melhorando a documentação dos programas. 
 
typedef <tipo> <novo_nome>; 
 
Exemplos: 
 
 typedef float NOTA; 
 
 NOTA nota_aluno; 
typedef char CORDAO[20]; 
 
 CORDAO apelido; 
 printf(“Qual o apelido: “); 
 gets(apelido); 
 printf(“Apelido=%s”, apelido); 
 tipo 
 de 
dado 
nome da variável 
02/03/2013 Laboratório de Programação I 12 
Exercício de Fixação 
6)Faça um programa que identifique o signo do zodíaco 
correspondente a uma data (dia/mês) qualquer. O 
usuário do programa poderá solicitar vários signos sem 
precisar estar iniciando o programa todas as vezes que 
desejar. A tabela abaixo identifica o último dia de cada 
mês e o signo correspondente. Encerrando os dados 
tem-se que de 22 à 31 de Dezembro o signo também é 
Capricórnio. 
Mês Último dia Signo 
Jan 20 Capricórnio 
Fev 19 Aquário 
Mar 20 Peixes 
Abr 20 Áries 
Maio 20 Touro 
Jun 20 Gêmeos 
Mês Último dia Signo 
Jul 21 Câncer 
Ag 22 Leão 
Set 22 Virgem 
Out 22 Libra 
Nov 21 Escorpião 
Dez 21 Sagitário 
02/03/2013 Laboratório de Programação I 13 
Exercício de Fixação 
7)Elabore um programa, com uma função recursiva, que 
retorne como resultado o valor do termo baseado na 
sequencia de Fibbonaci. 
 
Seqüência de Fibbonaci: 
 
 1 1 2 3 5 8 13 21 34 ...  Seqüência 
 01 02 03 04 05 06 07 08 09 ...  Termos 
 
8)Escrever uma função recursiva (converteBinario) que 
receba um número inteiro e apresente a sua conversão 
para a base 2. 
 7  1 1 1 
 5  1 0 1 
02/03/2013 Laboratório de Programação I 14 
Exercício de Fixação 
9) Alterar o exercício 8 para que a representação do 
número na base 2 seja armazenada em uma string cujo 
endereço será passado como parâmetro 
 
02/03/2013 Laboratório de Programação I 15 
Referência de Criação e Apoio ao Estudo 
Material para Consulta e Apoio ao Conteúdo 
• Universidade Federal de Minas Gerais - site 
ead1.eee.ufmg.br/cursos (escolha a opção ‘C’) 
 
• SCHILDT, H., C Completo e Total, Editora Makron 
Books do Brasil Editora Ltda, 1996. 
 Capítulo 6, 7 e 10 
 
• EVARISTO, J., Aprendendo a programar programando 
em C, Book Express, 205 p., 2001. 
 Capítulo 5 e 8 
 
•MIZRAHI, V. V., Treinamento em Linguagem C, Curso 
Completo, Módulo 1, Makron Books do Brasil Editora 
Ltda,1990. 
 Capítulo 5

Outros materiais