Funções em C Universidade do Estado de Santa Catarina

Slides:



Advertisements
Apresentações semelhantes
TIPOS ABSTRATOS DE DADOS
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 5 Criado por Frederick H. Colclough, Colorado Technical University Vetores.
Funções em C Prof. Fabiano Utiyama.
Técnicas de Programação II Revisão TP1 Parte2
Recursividade Inhaúma Neves Ferraz
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Algoritmos e Programação Linguagens de Programação Teoria Aula (09/06)
Algoritmos e Estrutura de Dados I
Introdução à Programação
Programação Orientada a Objetos*
Recursividade Inhaúma Neves Ferraz
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
Introdução Linguagem C
Algoritmos Escher.
LPG - I: Alocação Dinâmica de Memória - Ponteiros
UDESC - Prof. Juliano Maia
Tópicos Preliminares na Linguagem C
UDESC - Prof. Juliano Maia1 Funções. UDESC - Prof. Juliano Maia2 Índice Seção 1 – Funções em C Seção 2 – Iniciação Ponteiros Seção 3 – Recursão.
Banco de Dados (BAN-TSI)
Tópicos Preliminares Prof. Alexandre Parra
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Universidade Federal do Espírito Santo
PROGRAMAÇÃO ou LINGUAGEM C?
Algoritmos e Programação
Algoritmos e linguagens de programação 1 (aula 05)
Introdução a Computação e Cálculo Numérico
Introdução a Computação e Cálculo Numérico
Introdução a Computação e Cálculo Numérico
Tipos Agregados Homogêneos e Listas
Subprogramas São blocos de execução internas a um programa.
PROGRAMAÇÃO ESTRUTURADA II
PROGRAMAÇÃO ESTRUTURADA II
BCC /01 Funções. Material Didático Unificado. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento de Ciência.
UNIVERSIDADE REGIONAL INTEGRADA DO ALTO URUGUAI E DAS MISSÕES
Algoritmos e linguagens de programação 1 (aula 10)
Programação II Estruturas de Dados Aula 02 - continuação
Tipos Abstratos de Dados
Introdução à linguagem C
Teorema de Thèvenin em circuitos CA
Técnicas de Desenvolvimento de Programas
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Modularização Dividir um problema em subproblemas Módulos menores facilita a depuração Dividir o desenvolvimento entre vários programadores “Reutilização”
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 07) Prof. Alessandro Bernardo.
Introdução à Linguagem C
Algumas notas sobre a linguagem de programação C
Linguagens de Programação
Aula Prática 3 Funções Monitoria Introdução à Programação.
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
Prof. Eduardo Henrique Couto
Linguagens de Programação II
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 03) Prof. Alessandro Bernardo.
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 06) Prof. Alessandro Bernardo.
PROJETO TCC Prof. Luis S. B. Marques
Lista de exercício 4 Prof. Luis S. B. Marques MINISTÉRIO DA EDUCAÇÃO
FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS Tecnologia em Redes de Computadores Algoritmos e linguagens de programação 1 (aula 09) Prof. Alessandro Bernardo.
Aula Prática 3 Funções Monitoria Introdução à Programação.
Programação orientada a objetos Com Visual Studio.
Programação Computacional Aula 9: Meu primeiro programa em C
Introdução à Programação Engenharia da Computação Aula Prática 3 Funções Monitoria
Algoritmo e Estrutura de Dados I Introdução à Linguagem C Márcia Marra.
Lista de exercício 3 Prof. Luis S. B. Marques MINISTÉRIO DA EDUCAÇÃO
Microsoft Paint e Bloco de Notas
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
TÍTULO TAMANHO 50, NEGRITO AMORA DA SILVA MARIA LOPES Universidade do Estado de Santa Catarina (UDESC)
Funções definidas pelo usuário Escola Olímpio Professor Marcelo Josué Telles Linguagem de Programação I1 de 36.
Transcrição da apresentação:

Funções em C Universidade do Estado de Santa Catarina Centro de Ciências Tecnológicas Departamento de Ciências da Computação Funções em C Profa. Rebeca Schroeder Email: rebeca@joinville.udesc.br

Introdução Funções constituem estruturas que permitem ao programador separar seus programas em blocos Em geral, utilizamos funções para definir um conjunto de operações para a resolução de um problema específico Função é o tipo mais primitivo de encapsulamento: através de um único nome (nome da função) é possível acionar uma série de operações ou dados

Introdução No C, e em linguagens procedurais, as funções são as estruturas primárias de estruturação dos programas Tudo no C é executado a partir de funções Inicialmente a função Main Separar a resolução de problemas em unidades funcionais (funções) é vantajoso: Promove o reuso de código Torna o programa mais limpo e organizado

Forma Geral de Funções { código_da_função } tipo_de_retorno nome_da_função (lista_de_argumentos) {     código_da_função }

Forma Geral de Funções - Exemplo float calculaMedia (float notas[10]) { float soma = 0;     for(int i=0; i<10; i++) soma+=notas[i]; return soma/10; }

O Comando return O comando return tem a seguinte forma geral: return valor_de_retorno; ou return; Durante a execução de uma função, quando se chega a um comando return a função é encerrada imediatamente e, se o valor de retorno é informado, a função retorna este valor É importante lembrar que o valor de retorno fornecido deve ser compatível com o tipo de retorno declarado para a função Uma função pode possuir mais de uma chamada ao comando return

O Comando return - Exemplo int ePar (int num) { if (num % 2 == 0) return 1; return 0; } main () { int a; cout<<"Entre com numero: "; cin>>a; if (ePar(a) == 1) cout<<"\n\nO numero e par."; else cout<<"\n\nO numero e impar."; Observer que o retorno das funções pode ser aproveitado em atribuições ou em comparações Mesmo que a função retorne um valor, você não é obrigado a “aproveitar” este valor.

Protótipo de Funções As funções devem ser declaradas antes de serem utilizadas No exemplo anterior definimos a função antes do bloco main. Porém se tivéssemos definido abaixo do bloco main teríamos que informar o protótipo da função antes do ser efetivo uso Em geral, adicionamos o protótipo das funções abaixo das diretivas de include O protótipo de uma função nada mais é do que seu tipo de retorno, nome, e lista de parâmetros + ponto-e-vírgula (;) Um protótipo tem o seguinte formato: tipo_de_retorno nome_da_função (declaração_de_parâmetros);

Protótipo de Funções - Exemplo #include<iostream.h> int ePar(int num); main () { int a; cout<<"Entre com numero: "; cin>>a; if (ePar(a) == 1) cout<<"\n\nO numero e par."; else cout<<"\n\nO numero e impar."; } int ePar (int num) { if (num % 2 == 0) return 1; return 0;

Passagem de Parâmetros Por valor: os valores dos argumentos são copiados para os parâmetros das funções Consequência: alterações realizadas dentro da função não alteram o valor dos argumentos passados a função Por referência: o endereço dos argumentos é copiado para os parâmentros das funções Consequência: alterações realizadas dentro da função alteram o valor dos argumentos passados a função

Passagem de Parâmetros por Valor Quando chamamos uma função os parâmetros copiam os valores que são passados para ela Isso significa que os valores que os parâmetros têm fora da função não são alterados Esse tipo de chamada de função é denominado chamada por valor.

Passagem de Parâmetros por Valor - Exemplo #include <iostream.h> float sqr (float num); void main (void) { float num,sq; cout<<"Entre com um numero: "; cin>>num; sq=sqr(num); cout<<"\n\nO numero original e: “<<num; cout<<"O seu quadrado vale: “<<sq; } float sqr (float num) { num=num*num; return num;

Passagem de Parâmetros por Referência Passagem de parâmetros por referências ocorre quando as alterações realizadas dentro da função alteram os valores dos parâmetros que foram passados para a função Neste tipo de chamada, não se passa para a função os valores das variáveis, mas sim suas referências (a função usa as referências para alterar os valores das variáveis fora da função). Quando queremos alterar as variáveis que são passadas para uma função, nós podemos declarar seus parâmetros como sendo ponteiros. Os ponteiros são a "referência" que precisamos para poder alterar a variável fora da função Na chamada desse tipo de função, temos que colocar um & na frente das variáveis que estamos passando para a função.

Passagem de Parâmetros por Referência – Exemplo (1) #include <iostream.h> float sqr (float num); void main (void) { float num,sq; cout<<"Entre com um numero: "; cin>>num; sq=sqr(&num); cout<<"\n\nO numero original e: “<<num; cout<<"O seu quadrado vale: “<<sq; } float sqr (float *num) { *num=(*num)*(*num); return *num;

Passagem de Parâmetros por Referência – Exemplo (2) #include <iostream.h> void Swap (int *a,int *b); void main (void) { int num1,num2; num1=100; num2=200; Swap (&num1,&num2); cout<<“\n\nEles agora valem “<<num1<<“ e ”<<num2; } void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp;

Vetores como argumentos de Funções Quando vamos passar um vetor como argumento de uma função, podemos declarar a função de três maneiras equivalentes. Digamos que temos o seguinte vetor: int v[50]; e que queiramos passá-la como argumento de uma função func(). Podemos declarar func() das três maneiras seguintes: void func (int v[50]); void func (int v[]); void func (int *v); Ao passarmos um vetor para uma função, na realidade estamos passando um ponteiro. Neste ponteiro é armazenado o endereço do primeiro elemento do vetor. Isto significa que não é feita uma cópia, elemento a elemento do vetor. Isto faz com que possamos alterar o valor deste vetor dentro da função (Passagem por Referência!). PARA VETORES SÓ EXISTE PASSAGEM POR REFERÊNCIA!

Parâmetros da Função Main A função main() pode possuir parâmetros. Mas o programador não pode escolher quais serão eles A declaração mais completa que se pode ter para a função main() é: int main (int argc,char *argv[]); Os parâmetros argc e argv dão ao programador acesso à linha de comando com a qual o programa foi chamado O argc (argument count) é um inteiro e possui o número de argumentos com os quais a função main() foi chamada na linha de comando. Ele é, no mínimo 1, pois o nome do programa é contado como sendo o primeiro argumento. O argv (argument values) é um ponteiro para uma matriz de strings. Cada string desta matriz é um dos parâmetros da linha de comando. O argv[0] sempre aponta para o nome do programa (que é considerado o primeiro argumento).

Parâmetros da Função Main #include <iostream.h> #include <stdlib.h> void main (int argc, char *argv[]) { int mes; char *nomemes [] = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"}; if(argc == 4) { // Testa se o numero de parametros fornecidos está correto o 1o parametro é o nome do programa, o //2o o dia e o 3o o mes e o 4o os dois ultimos algarismos do ano mes = atoi(argv[2]); /* argv contem strings. A string referente ao mes deve ser transformada em um numero inteiro. A funcao atoi esta sendo usada para isto: recebe a string e transforma no inteiro equivalente */ if (mes<1 || mes>12) /* Testa se o mes é valido */ cout<<"Erro!\nUso: data dia mes ano, todos inteiros"; else cout<<"\n<<argv[1]<<“ de “<< nomemes[mes-1]<<“ de 20”<<argv[3]; } else cout<<“Erro!\nUso: data dia mes ano, todos inteiros”; }

Recursividade A função recursiva é uma função que faz chamada a si própria Um ponto fundamental para se trabalhar com funções recursivas é estabelecer um critério de parada, que corresponde a uma condição para que a função pare de chamar a si própria Evitar que a função chame a si própria infinitamente

Recursividade - Exemplo #include <iostream.h> int fat(int n) { if (n>0) return n*fat(n-1) else return 1; } void main() { int n; cout<<"\n\nDigite um valor para n: "; cin>>n; cout<<"\nO fatorial de “<<n<<“ é “<<fat(n);

Recursividade - Exemplo 1- fat recebe valor 4. 2- Passo 1:  4*fatorial(3); 3- Fatorial é chamada de dentro com o valor 3. 4- Passo 2: 3*fatorial(2); 5- Passo 3: 2*fatorial(1);  6- Se valor for 1, retorna 1. Fim de loop, mas não de contas. 7- Voltamos aos passos, ao contrário. 8- Passo 3: fatorial := 2*1;  9- Passo 2: fatorial := 3*2; 10- Passo 1: fatorial := 4*6; 11- A primeira retorna o valor 24. #include <iostream.h> int fat(int n) { if (n>0) return n*fat(n-1) else return 1; } void main() { int n; cout<<"Digite um valor: "; cin>>n; cout<<"\nO fatorial de “<<n<<“ é “<<fat(n);