Os principais motivos para se utilizar funções num programa em C (assim como em qualquer linguagem de programação estruturada) são:

Documentos relacionados
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Terceira Aula Prática - 10 de setembro de 2010

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Controle de Fluxo - Condicionais. INF1005 Programação I Profa. Simone D.J. Barbosa sala 410 RDC

Algoritmos e Programação

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Controle de Fluxo - Condicionais

Introdução à Ciência da Computação SCC0120 Prof. Zhao Liang. Aula de Laboratório 1: Operadores, comandos básicos e comando IF 27/03/2012

Faculdade de Computação

Aula 11: Laços e exercícios

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Capítulo 1: Introdução à Linguagem C. Pontifícia Universidade Católica Departamento de Informática

ESTRUTURAS CONDICIONAIS. Baseado nos slides de autoria de Rosely Sanches e Simone Senger de Souza

PCI- Estrutura de Repetição II. Profa. Mercedes Gonzales Márquez

Introdução à Algoritmos INF 1005 e INF Programação I

Controle de Fluxo Utilizando C

Sub Rotinas. Estrutura de Dados. Prof. Kleber Rezende

Simulado da Prova Parcial 2 (01/08/2013)

Programação de Computadores II Aula 03. Linguagem C I

Faculdade Anglo-Americano Curso de Ciência da Computação Linguagem de Programação. Lista de Exercícios 1

Programação de Computadores II

ESTRUTURAS CONDICIONAIS. Introdução à Ciência da ComputaçãoI Simone Senger de Souza

Programação: Vetores

Aula 11 - Repetições Encaixadas

Aula 03 -Introdução àlinguagc Programação: Estrutura-Repetição. OPL e IC1 Prof: Anilton Joaquim da Silva

Exercícios Repetição

Linguagem C vetores. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

Laboratório de 13 de maio de 2019

Introdução à Programação C

Programação Estruturada

controle de fluxo - condicionais

Introdução a Programação de Jogos

Prof. A. G. Silva. 25 de abril de Prof. A. G. Silva INE5231 Computação Científica I 25 de abril de / 68

MAC 2166 Introdução à Computação para Engenharia Escola Politécnica Primeiro Semestre de 2003 Primeira Prova 2 de abril de 2003

Sub-rotinas David Déharbe

Introdução à Programação

SSC 0301 IC para Engenharia Ambiental

Linguagem C: Introdução

ponteiros INF Programação I Prof. Roberto Azevedo

Algoritmos e Programação

Introdução a Programação de Jogos

INF 1620 P1-13/09/02 Questão 1 Nome:

Estruturas de Repetição. for() while() do-while() break; continue;

Aula 12- Variáveis e valores reais

Sistemas Operacionais e Introdução à Programação. Programação com linguagem C

Introdução a Programação de Jogos

Aula 5 - Mais C e repetição

AULA 2: INTRODUÇÃO A PYTHON. Luís Feliphe Silva Costa

INF1005: Programação 1. Repetições. 08/03/10 (c) Paula Rodrigues 1

Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Segunda Aula Prática - 29 de agosto de 2008

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA RIO GRANDE DO NORTE

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016

Linguagem de Programação Java Terceira aula. Prof. Rogério Albuquerque de Almeida

Estruturas de Repetição

Vejamos agora mais alguns exemplos de problemas envolvendo seqüência de números.

Linguagem C. André Tavares da Silva.

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Algoritmos e Estruturas de Dados I (DCC/003) Variável Indexada Vetor

Conceitos básicos. Computação eletrônica: Gurvan Huiban

SSC300- Linguagens de Programação e Aplicações Profa Vânia de Oliveira Neves. ICMC/USP São Carlos

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

Lista de Exercícios II. 01. Desenvolva um programa em C que receba um valor numérico real, verifique e mostre se esse número é positivo.

Linguagem C. Prof.ª Márcia Jani Cícero

Laços de repetição for, while, do-while

Capítulo 4: Condicionais

Algoritmos e Programação

Modularidade - Funções e Procedimentos

Estruturas condicionais

Explicação do programa:

Linguagem C (estruturas condicionais)

Computação eletrônica: Operadores, expressões e funções

Aula 16: Laços aninhados e desvios

Estruturas de Repetição

INF 1620 P1-04/10/03 Questão 1 Nome:

Computação 2. Diego Addan Aula 3. Funções

Solucionário de. Programação

Unidade 2: Estruturas de Controle Parte 1 - Scanner e Estrutura IF Prof. Daniel Caetano

Algoritmos e Estruturas de Dados I (DCC/003) Funções

Fundamentos de Programação 1

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

ESTRUTURAS COMPOSTAS. Variáveis Compostas Unidimensionais VETOR. Baseado nos slides de Rosely Sanches e Simone Senger de Souza

Algoritmos e Programação

#include <stdio.h> main() { int i; // Cabeçalho for (i = 1; i <=20; i++) putchar( * ); putchar( \n ); puts( Numeros entre 1 e 5 );

Algoritmos e Programação

Material sobre Funções AEDS 1

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Aula 07: Introdução a Funções

Prof. A. G. Silva. 04 de abril de Prof. A. G. Silva INE5231 Computação Científica I 04 de abril de / 90

Aula 12: Funções. CI208 - Programação de Computadores. Prof. MSc. Diego Roberto Antunes

MC102 Algoritmos e Programação de Computadores

Programação Estruturada

Aula 5 Oficina de Programação Introdução ao C. Profa. Elaine Faria UFU

Aula 13 Oficina de Programação Modularização. Profa. Elaine Faria UFU

Variáveis, Tipos de Dados e Operadores

Programação de Computadores II

Estruturas de repetição

INF1005: Programação 1. Condicionais. 08/03/10 (c) Rogério Rodrigues 1

Introdução à linguagem de programação C. Alexandre Mota

Funções de Entrada e Saída Formatada Constantes de barra invertida

Transcrição:

INSTITUTO SUPERIOR DE EDUCAÇÃO FRANCISCANO NOSSA SENHORA DE FÁTIMA Portaria Ministerial de Credenciamento 3.335, de 18 de outubro de 2004. CURSO TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS EM SOFTWARE LIVRE Autorizado pela portaria Nº 556 de 13 de novembro de 2007, publicada no D.O.U Nº 219 Atividade do dia 14 de novembro de 2007. Linguagem de Programação I Aula 08 Para que servem as funções. Modelo de desenvolvimento de função. Desenvolvimento do Modelo de Funções. Exercícios de criação de modelo de funções. Utilização de funções. Exercício sobre utilização de funções. Para que servem as funções? As funções são parte do código do programa com o objetivo de resolver pequenos problemas. Por exemplo, supomos que desejamos imprimir na tela todos o números primos de 4 algarismos. Não seria interessante se já tivéssemos uma função pronta em C (como a função de potência pow) que verificasse se um número é primo ou não. Supondo que essa função já exista e se chame eprimo (esta função retorna 1 se o número é primo ou 0 se o número não é primo), um código em C para a solução desse problema seria o seguinte: int i; for (i=1000; i<=9999; i++) if eprimo(i) printf( %d\n,i); Exemplo de programa utilizando a função eprimo(). No entanto, essa função não existe. O objetivo dessa aula é exatamente aprender a desenvolver essas funções. Os principais motivos para se utilizar funções num programa em C (assim como em qualquer linguagem de programação estruturada) são: Re-uso de código: O recente paradigma de programação em geral, dá ênfase exatamente a re-utilização de códigos. Ou seja, atualmente é muito importante que qualquer programador aprenda a utilizar rotinas prontas em seu próprio código. Primeiro para ganhar tempo e segundo porque ele não terá que re-escrever uma rotina que já existe.

Repetição: Num mesmo programa temos pequenas rotinas que se repetem diversas vezes. Essas rotinas são candidatas a funções. Organização: Com o objetivo de deixar o programa mais claro, podemos criar funções de pequenas rotinas do código. 1.Modelo de funções Antes de partirmos para o desenvolvimento de funções, iremos criar um modelo de funções que será utilizado ao longo dessa aula. Um primeiro passo a ser seguido para o desenvolvimento de suas próprias funções é o de fazer o modelo das funções inicialmente. Nesta seção, apresentaremos um modelo de funções que se baseia num modelo de sistemas aonde deve ser especificado os tipos de entradas e saídas do sistema, bem como o nome do sistema. Com isso, antes mesmo de iniciarmos o desenvolvimento em si, podemos ter uma visão geral do sistema (neste caso função). Por exemplo, suposmos que queremos montar o modelo da função eprimo. Esta função deve receber um número INTEIRO como entrada (int N) e a saída da função será um INTEIRO também (1 se o número for primo, 0 se o número não for primo). Assim, podemos desenhar o seguinte modelo: int N Eprimo int Na seção seguinte, serão apresentados mais exemplos de modelos de funções. Observar que, em alguns casos, um determinado modelo segue a convenção do programador e, portanto, isso não quer dizer que a solução apresentada seja a única. Desenvolvimento de modelos de funções Agora que criamos um modelo para desenvolver nossas funções, iremos apresentar alguns modelos de funções com o objetivo de deixar mais claro a idéia de como montar esses modelos. a) Fazer o modelo de uma função que receba como parâmetro três notas de um aluno e retorne se o aluno está ou não aprovado. (O critério de aprovação a ser usado deve considerar a média aritmética das três notas ser superior a 6,0) Solução: as entradas do modelo deve ser as três notas do aluno. Como as notas podem ser números decimais, então as entradas serão do tipo float. A saída será um inteiro (não existem booleano em C). Se a saída for 1, significa que o aluno está aprovado; se for 0, significa que o aluno está reprovado. O nome do modelo será avalia. float n1 int float n2 Avalia float n3

b) Fazer um modelo de uma função que receba três números inteiros e imprima na tela os três número em ordem crescente. Solução: as entradas deste modelo serão os três números inteiros. No entanto, como o enunciado quer que o resultado da operação seja o de imprimir na tela os três números, consideraremos que este modelo não tem saída. Neste problema, adotaremos o nome de orden. int n1 int n2 int n3 Ordena c)fazer um modelo de uma função que receba dois valores n e m e escreva na tela todos os quadrados perdeitos entre n e m. (Um número é quadrado perfeito se a raiz quadrada deste número for um inteiro). Solução: as entradas deste modelo serão dois números inteiros (não tem sentido perguntar se um númeor real é quadrado perfeito) e a saída será uma impressão na tela dos quadrados perfeitos entre n e m. Portanto, conforme vimos no exemplo anterior, adotamos que este modelo não tem saída. O nome deste modelo será q_perfeito. int m int n q_perfeito d)fazer um modelo de uma função que receba dois números e um caracter de uma operação (+, -, * ou /). A função deve retornar então o resultado da operação nos dois números. Solução: A entrada deste modelo será dois números reais a e b e um caracter op. A saída será um número real (o resultado a aplicação da operação nos números reais. O nome do modelo será calculadora. float a float b char op calculadora float r e) Fazer um modelo de uma função que receba como parâmetro o valor do salário do funcionário e o registro do funcionário. Se o registro tiver 1 algarismo, o salário deve ser aumentado em 10%. Se o registrofor de 2 algarismos, aumentar o salário em 35%. Solução: A entrada desta função será o salário do funcionário (float) e o registro (int). Podemos verificar que o modelo deve ALTERAR o valor de salário e portanto, também

consideraremos aqui que o modelo não tem saída (na verdade, ele apenas age sobre um dos valores da entrada). float salario int registro aumento Obs: notar que este modelo irá modificar o valor da entrada salario mas não da entrada registro. f) Fazer um modelo que receba a população inicial de bactérias de uma colônia e o número de dias que irão se passar. Sabendo que a população de bactérias dobra a cada dia, a função deve retornar a população de bactérias final. Solução: a entrada deste modelo será a quantidade inicial de bactérias da colônia (float) e a quantidade de dias que irão se passar (int). Ao invés de a função retornar o valor final da população de bactérias, modificaremos a variável com a quantidade inicial de bactérias com o valor da quantidade final de bactérias. Portanto, para esta solução, o modelo da função não terá saída. float pop int dias bacteria g) Fazer o modelo de uma função que receba como valor inicial o montante de uma aplicação, o número de meses que este montante será aplicado e a taxa da aplicação. A função deve modificar o valor do montante da aplicação condiderando o número de meses e a taxa da aplicação. Solução: este modelo terá como entradas o montante da aplicação (float), a taxa da aplicação (float) e o número de meses que a aplicação ficará aplicada (int). Como o valor do montante será modificado, consideraremos que esta função não terá saídas. float montante int dias float tx aplicacao h) Fazer o modelo de uma função que receba um número inteiro entre 1 e 10 e escreva na tela a tabuada deste número. Solução: Este modelo terá como entrada um número inteiro entre 1 e 10 (int). Conforme vimos anteriormente, este modelo não terá saídas (somente irá imprimir na tela). Assim, considerando o nome do modelo como tabuada teremos: int N tabuada

i)fazer um modelo de uma função que receba a temperatura em graus Farenheit e retorne a temperatura em graus Celsius. Solução: a entrada deste modelo será um valor de temperatura em graus Farenheit (float) e a saída será uma temperatura em graus Celsius (float). Portanto, a solução seria a seguinte: float F Fare nhe it2ce lsius float Utilização das funções Nesta seção, consideraremos que as funções dos modelos desenvolvidos na seção anterior já existam nas bibliotecas do C. Portanto, apresentaremos nesta seção exemplos de problemas que utlizam essas funções. O objetivo desta seção é o de apresentar para o aluno alguns aspectos de aplicação de funções através de exemplos. a) Faça um programa que leia a matrícula e as três notas de 10 alunos do curso de LPII da faculdade. Para casa aluno, o programa deverá imprimir sua matrícula e se ele está ou não aprovado Solução: Utilizando a função desenvolvida na seção anterior: float n1 float n2 Avalia float n3 int Esta teria a assinatura int avalia(float n1, float n2, float n3) 1) int avalia(float n1, float n2, float n3) -> é porque a saída da função é um número inteiro (1 para aprovado e 0 para reprovado) 2) int avalia(float n1, float n2, float n3) -> é o nome da função. 3) int avalia(float n1, float n2, float n3) -> são os parâmetros de entrada da função. Para resolver o problema, teremos que ler matrícula (int) e as três notas de cada aluno. Em seguida, devemos passar as três notas como parâmetros para a função avalia. Dependendo o resultado desta função, escrevemos na tela se o aluno está ou não aprovado na disciplina.

int matricula; float nota1, nota2, nota3; int resp,i; for (i=0; i<50; i++) printf("entre com a matricula do aluno %d \n",i); scanf("%d",&matricula); printf("entre com as tres notas do aluno na disciplina LPII\n"); scanf("%f %f %f",&nota1,&nota2,&nota3); resp=avalia(nota1,nota2,nota3); printf("matricula: %d Situacao: ",matricula); if (resp) printf("aprovado\n"); else printf("reprovado\n"); b) Faça um programa que leia as três notas inteiras de uma determinada disciplina de 100 alunos da Faculdade. Para cada aluno, o programa deverá imprimir se alguma nota é maior que 7 ou não e de imprimir as notas do aluno em ordem crescente. Solução: Utilizando o modelo de função desenvolvido na seção anterior teremos: int n1 int n2 int n3 Ordena A assinatura deste modelo seria o seguinte: void ordena(int n1, int n2, int n3) void ordena(int n1, int n2, int n3) -> é porque a função não retorna nada void ordena(int n1, int n2, int n3) -> é o nome da função void ordena(int n1, int n2, int n3) -> são os parâmetros de entrada da função. Para resolver este problema, teremos que ler as notas (inteiras) de 100 alunos e para cada aluno, verificamos se a nota é maior ou não que 7 e imprimimos na tela. Em

seguida, utilizamos a função ordena para imprimir na tela as três notas inteiras em ordem crescente. int a,b,c; int i; for (i=0; i<100; i++) printf("entre com as tres notas do aluno na disciplina\n"); scanf("%d %d %d",&a,&b,&c); if ((a>=7) (b>=7) (c>=7)) printf("existe nota maior que 7"); else printf("nao existe nota maior que 7"); ordena(a,b,c); c) Escrever todos os números de 4 algarismos que são quadrado perfeito. Solução: Utilizando o modelo de função visto na seção anterior teremos: int m int n q_perfeito A assinatura desta função seria a seguinte: void q_perfeito(int m, int n) void q_perfeito(int m, int n) -> é porque a função não retorna nada (apenas escreve na tela) void q_perfeito(int m, int n) -> é o nome da função. void q_perfeito(int m, int n) -> são os parâmetros de passagem para função. Para solucionas este problema, devemos apenas passar para a função o valor de m=1000 (primeiro número com 4 algarismos) e n=9999 (último número com 4 algarismos).

q_perfeito(1000,9999); d) Fazer um programa em C que simule uma calculadora simples (com operações de +, -, *, /) Solução: Utilizando o modelo de função definido na seção anterior, teremos: float a float r float b calculadora char op A assinatura desta função será: float calculadora(float a, float b, char op) float calculadora(float a, float b, char op) -> é porque a função retorna o resultado de uma operação aritmética, e portanto, deve ser real. float calculadora(float a, float b, char op) -> é o nome da função float calculadora(float a, float b, char op) -> são os parâmetros de entrada da função: dois números reais e um caracter que representa a operação a ser efetuada. Para solucionar este problema, basta criar um conjunto de perguntas de forma que o usuário possa entrar com os dois números reais e com o operador. Chamando a função calculadora, obtemos o resultado. while(1) printf("entre com o numero operador numero"); scanf("%f %c %f",&a,&op,&b); resp=calculadora(a,b,op); printf("a resposta e %f\n\n",resp);

e) Fazer um programa que leia o registro e salário de 200 funcionários de uma empresa. Conforme o número do registro, o salário será aumentado em 10% (o registro possui 1 algarismo) ou 35% (o registro possue 2 algarismos). Solução: Utilizando o modelo de função desenvolvido na seção anterior temos que : float salario int registro aumento O cabeçalho ou assinatura desta função ficaria da seguinte forma: void aumento (float *salario,int registro) void aumento (float *salario,int registro) -> é porque a função não retorna valor algum. Apenas modifica a variável salario. void aumento (float *salario,int registro) -> o nome da função. void aumento (float *salario,int registro) -> os parâmetros que serão passados para a função. Importante notar aqui que antes da variável salário foi colocado um asterisco (*). Isso deve ser feito para que a variável possa ser alterada pela função aumento. Já a variável registro não será alterada pela função aumento e, portanto, não precisa do asterisco. Para solucionar o problema, devemos ler o salário e registro de 200 funcionários. Para cada funcionário, passamos os dados para a função aumento e imprimimos na tela o valor do salário (que já foi modificado pela função aumento de acordo com o número do registro). Programa int i, reg; float S; // variavel para salario for(i=0;i<200;i++) printf("entre com o registro e salario do funcionario\n"); scanf("%d %f",&reg,&s); aumento(&s,reg); printf("o novo salario e %f",s);

f) Uma colônia de bactérias, com população de 1 elemento, aumenta uma taxa de 100% a cada dia. Fazer um programa que escreva na tela a população de bactérias dos próximos 30 dias. Solução: Utilizando o modelode função apresentado na seção anterior, podemos definir a seguinte assinatura para esta função: float pop int dias bacteria void bacteria(float pop, int dias) void bacteria(float pop, int dias) -> é porque a função apenas apresenta na tela a população de bactérias void bacteria(float pop, int dias) -> nome da função void bacteria(float pop, int dias) -> os dois parâmetros que são passados para a função: a população de bactérias e o número de dias. Como o programa quer imprimir na tela a população dia a dia, nos próximos 30 dias, podemos fazer um laço de 1 a 30 dias passando para a função sempre a população inicial (neste caso, 1 elemento) e o número de dias (índice do laço). int i; float pop=1; for(i=0;i<30;i++) bacteria(pop,i); g) Uma poupança rende em torno de 0.30% ao dia. Considerando um montante de 2000,00 reais, após quanto tempo (DIAS) o montante irá ultrapassar o valor de 5000 reais? Solução

Utilizando o modelo de função definido na seção anterior, podemos definir a seguinte assinatura da função: float montante int dias float tx aplicacao void aplicacao(float *montante, int dias, float tx) Onde void aplicacao(float *montante, int dias, float tx) -> é porque a função apenas modifica o valor do montante e portanto não retorna nada. void aplicacao(float *montante, int dias, float tx) -> é o nome da função void aplicacao(float *montante, int dias, float tx) -> são os parâmetros da função. Notar que como o montante será modificado pela função, deve-se colocar um asterisco antes dele. A solução agora é passar para a função o montante numa variável com o valor inicial de 2000 reais, a taxa de aplicação de 0.3 e o número de dias igual a 1. A cada dia, se verifica o valor do montante e compara com 5000. int main(int argc, char *argv[]) float montante=2000; float tx=0.3/100; int i; for (i=0;aplicacao<5000;i++) aplicacao(montante,i,tx); printf("valor da aplicacao: %f\n Dia: %d\n\n",montante,i); return 0; h) Faça um programa em C que escreva a tabuada do 1 ao 10. Solução: Utilizando o modelo de função da seção anterior, teremos: int N tabuada

que a assinatura da função será: void tabuada(int N) void tabuada(int N) -> é porque a função somente irá imprimir na tela void tabuada(int N) -> é o nome da função void tabuada(int N) -> é o parâmetro que a função deve receber. Para solucionar o problema, fazemos um laço de 1 a 10 e passamos para a função, já que ela por si só, imprime na tela a tabuada de N. int i; for (i=1;i<=10;i++) tabuada(i); return 0; h) Faça um programa em C que monte uma tabela com as temperaturas em Farenheit de -32 a 180 e as respectivas temperaturas em graus Celsius. Solução: Utilizando o modelo de função visto anteriormente: float F Fare nhe it2ce lsius float definimos a assinatura da função como: float farenheit2celsius(float F) float farenheit2celsius(float F) -> é a saída da função. Um número real (a temperatura em graus celsius) float farenheit2celsius(float F) -> é o nome da função.

float farenheit2celsius(float F) -> é o parâmetro de entrada da função (uma temperatura expressa em graus Farenheit) Para solucionar o problema, criamos um laço de -32 a 180 e passamos estes valores para a função acima descrita. float F,C; printf("farenheit \t Celsius"); for (F=-32;F<=180;F++) C=farenheit2celsius(F); printf("%f \t %f",f,c); return 0;