Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

O que são funções, para que servem e como usá-las em C

Para ter uma seção só para este assunto em nossa apostila online C Progressivo, você deve suspeitar que essas tais funções sejam bem importantes em C. E são mesmo, e muito.

Porém, se você lembrar bem, você já usou as benditas funções: printf, scanf, system e própria main é uma função. A partir de agora, vamos ensinar a você os conceitos de funções em C.


O que é uma função em linguagem C

Função é um bloco de código que, como o próprio nome diz, tem uma função, uma tarefa específica.
As funções servem como um atalho à um bloco de código. 
Veja função como uma maneira de se evitar a repetição de código.

Em vez de programar um trecho de código várias vezes, definimos uma função que faz tal tarefa e depois, ao longo do programa, basta invocar essa função que, automaticamente, o código nela é executado.

Desta maneira, podemos criar um trecho de código, que representa uma lógica, um passo ou rotina, do processo inteiro e isolá-lo.

Com a criação das funções, vamos ver como elas irão facilitar a vida de um programador, pois será necessário criar a função somente uma vez, e ela estará disponível e pronta para ser usada no futuro.

Para que serve uma função em C?

Um dos motivos nós já expomos no tópico anterior, que é o fato de você economizar linhas de código.
O que é possível fazer com função, é possível fazer sem, usando os laços e testes condicionais estudados na unidade anterior.

Porém, nossos programas em C ficariam enormes, e essa falta de organização deixa inviável a criação de programas mais complexos. Se estudou todos os tutoriais de nosso curso, deve ter notado que alguns programas ficaram bem extensos, e é difícil ter controle sobre centenas ou milhares de linhas de código.
Uma das utilidades das funções é, portanto, a organização e a redução de nossos códigos.

Quando um programador profissional inicia um projeto, ele já tem que ter boa parte do código pronto.
“Como ter código pronto, se você nem sabe que projeto vai participar nem o que o programa vai fazer?”

Todos os programadores, inclusive você que já é programador C, deve fazer a reusabilidade de código, e uma das maneiras mais comuns de se fazer isso é através de funções.

Durante seus anos de estudo da linguagem C, você irá criar centenas ou milhares de funções.
Então, atente bem para essa dica: guarde e organize suas funções.

Ainda não entendeu? Vamos dar um exemplo.
Vamos supor que uma empresa te contratou para fazer um sistema em C. Nesse sistema, serão necessários fazer cálculos matemáticos dos mais diversos.

Ora, se você já tiver feito uma função que soma números, outra que multiplica e por ai vai, você não vai precisar escrever elas de novo. Basta você ir em seu banco de dados de programação e copiar o código já feito.
Isso é reusabilidade. Ou seja, você vai usar bastante os códigos que você programou durante toda sua vida.

Antes de iniciar nossos estudos sobre funções, vamos dar uma dica importantíssima, que frequentemente é ignorada, mesmo por programadores experientes: suas funções devem fazer uma única coisa e muito bem feita.

Por exemplo, em vez de fazer uma função que calcula as raízes de uma equação do segundo grau, faça uma função que calcula do delta (Bháskara) e outra que calcula a raiz quadrada de um número. Só então faça a função que calcula as raízes, usando as outras funções.

Não faça uma função que cria uma casa. Faça uma função que cria quartos, outra que cria banheiros, outra que cria sala, outra que cria um jardim, outra que cria um cozinha etc.
Por fim, faça uma função que invoca as funções anteriores, montando assim, sua casa.
Se um dia você precisar de uma função que constrói banheiro, você já tem ela separada. Afinal, banheiro é banheiro. Mas se tivesse feito uma função que criava a casa de uma vez, você não teria esse código, que cria o banheiro, de maneira acessível.



Como declarar funções em C

A sintaxe de uma função é a seguinte

tipo_de_retorno nome_da_função(lista de parâmetros)
{
        // código da
          // função
}

E para invocar a função basta usar o comando: nome_da_função(lista de argumentos).

Quando aos parâmetros, argumentos e tipos de retorno, serão explicados em breve.
Por hora vamos usar funções que não retornam nada (funções do tipo void) e que não recebem nenhum argumento.


Exemplo de código:
Função que mostra uma mensagem na tela.

Criamos a função hello(), que não retorna nada, por isso colocamos o void.
A função dessa função é simplesmente mostrar uma mensagem na tela, quando é invocada.

#include<stdio.h>

void hello()
{
        printf("Ola mundo! Estou aprendendo C com o curso C Progressivo\n");
}

int main()
{
        hello();
}

Podemos colocar esse chamado da função em qualquer lugar da main, ou de outra função.
Poderíamos colocar dentro de um laço, e repetir o chamado dessa função quantas vezes quiséssemos. E a vantagem é que não precisamos escrever de novo o printf, basta chamar a função hello() que ela irá imprimir, automaticamente, a frase na tela.


55 comentários:

Anônimo disse...

vlew,muitos leem os tutoriais e nem dão um simples obrigado q gente egoista !

Anônimo disse...

Muito bom mesmo, na faculdade estava com muita dificuldade em entender isto, e aqui deu uma esclarecida de como se utilizar

Matheus disse...

Obrigado Mano, os tutoriais estão ajudando muito, se puder me add no skype ou fb para tirar uma duvidas:

skype: matheus.nascimento60
facebook:facebook.com/matheuslolnascimento

Anônimo disse...

Simplesmente muito show!!
Me ajudou a compreender e com uma linguagem fácil.

Apostila C Progressivo disse...

Olá Matheus,

Você pode tirar suas dúvidas de programação no nosso fórum, na seção da linguagem C:

http://progressiva.forumeiros.com/f4-c-duvidas

É interessante colocar lá, pois pode ser dúvida de outros estudantes.

Unknown disse...

Valew pelo empenho e por compartilhar todo esse conhecimento!!!!

Anônimo disse...

obrigado por disponibilizarem este conteúdo. mesmo o livro da faculdade com quase 900 paginas nao explica da forma tao pratica e funcional quanto voces. parabens

Anônimo disse...

Muita boa explicação vou fazer prova semana que vem e estou com dificuldade, mais deu uma clareada legal.

Rafael Ramos disse...

Olá a todo(a)s! Recentemente, não consegui passar na disciplina Estrutura de Dados, e agora estou revendo todos os conceitos de C, para depois aplicar em ED. Adoro a didática de vocês, sempre eficiente, simples (sem cair no banal) e elegante, além de algumas pitadas de bom humor: resumindo sensacional! Parabéns e continuem nos presenteando com projetos como esses.

Unknown disse...

Muito bom :]

Anônimo disse...

Ótimo tutorial em C, Parabéns!

Anônimo disse...

Valeu muito Obrigado!!!
Instituto Federal de Ciência e Tecnologia!!! Já passei o site pra turma!!!!!

Anônimo disse...

Muito boa explicação.
Obrigado pessoal da C Progressivo. :)

Anônimo disse...

Muito obrigado

joagostini disse...

No exemplo dado, diz-se que a função não retorna nada e por isso pomos void antes de seu nome. Mas a função hello() "retorna" uma frase quando é executada.
Então há uma diferença entre o conceito de retorno e de saída que a função realiza. Imprimir uma frase é o "retorno" da função chamada.
Acho que se deveria explicitar essa diferença. É uma sugestão.

Unknown disse...

Ajudou demais! Sensacional!!!

Unknown disse...

Nao posso deixar de dizer q esse site cprogressivo tem todo o meu RESPEITO...como sou um kbeca dura pra aprender a programar esses tutorias estao sendo mto uteis pra mim!!!

Anônimo disse...

Parabéns pela iniciativa

corintiano disse...

site mto bom ... estão de parabens ... esta me ajudando mto na facu ... Deus abençoe vcs

Anônimo disse...

obrigado, muito o curso.

Nilton Felipe disse...

OBRIGADO :)

Unknown disse...

Muito massa este conteúdo!!

Unknown disse...

Muito massa este conteúdo!!

Unknown disse...

Muito massa este conteúdo!!

Anônimo disse...

parabéns! ótima explicação!

Anônimo disse...

Muito Obrigado, tenho certeza que vcs estão ajudando a muitas pessoas com esse curso maravilhoso.
Continuem com esse altruismo.

Anônimo disse...

Isso e verdade!

Este é meu primeiro comentário mais estou muito grato pelo aprendizado!
Parabéns pela iniciativa em compartilhar conhecimento

Que Deus te abençoe

Anônimo disse...

Site muito top...Obrigado!

Vinicius disse...

Sempre muito bom!

Vinicius disse...

Sempre Muito bom!

Daniel Brito disse...

Muito obrigado!

Daniel disse...

Muito bem explicado. =D

Unknown disse...

Parabéns.

Muito legal!

Anônimo disse...

muito bem explicado. muito bom

Anônimo disse...

Alguém poderia, por gentileza, me ajudar com estes exercicios?1 Não é preciso resolvê-los por inteiro, mas ao menos dar uma ideia de como são feitos.
1. Faça um algoritmo que leia um numero real nao negativo de cada vez, calcule a media dos valores maiores que cinco e quantos numeros lidos sao menores ou iguais a cinco. Estabelça um criterio para finalizar o algoritmo atraves da leitura de dados, uma vez que n˜ao´e conhecido previamente o numero de valores que serao lidos.
3. Faca um programa em C para dividir sucessivamente, k vezes, um segmento AB do plano ao meio até que fique menor que 0.00001. Para isto, construa os seguintes subalgoritmos:
• uma funçao que calcule a distancia entre dois pontos no plano, fornecendo as suas coordenadas (dist =p(x2 −x1)2 + (y2 −y1)2).
• um procedimento que entre com as coordenadas de dois pontos no plano e saia com as coordenadas do ponto m´edio e com a distancia entre um dos pontos ao ponto medio. Utilize a funçao distancia implementada.
O seu programa deve ler as coordenadas de dois pontos do plano e sair com o numero de vezes que intervalo foi dividido, k, as coordenadas do ponto medio final e o tamanho final do intervalo.

Anônimo disse...

Muito obrigado!!

Anônimo disse...

valeu cara!!!

Anônimo disse...

Muito bom, ótima explicação

Unknown disse...

Os tutoriais são ótimos, obrigado por vocês ensinarem de uma forma de tão fácil compreensão!

Bruno Pádua disse...

Muito obrigado pelo excelente conteúdo, já recomendei para todos na minha Universidade.

Joyce disse...

Muito grata! Ajudou muito!

Unknown disse...

Minha salvação
VALEU !!!

Priscila Latuff disse...

Muito boa explicação está me ajudando na faculdade.

Anônimo disse...

Grato!

Anônimo disse...

Sensacional essa aula ,estao de parabens,muito obrigado!

Rondineli disse...

Muito obrigado, tem me ajudado demais as aulas daqui.

Anônimo disse...

Obrigado estrou apredendo muito com vcs!!

Derasmide disse...

Vcs explicam bem explicadinho com exemplos simples de entender, vlwww!!

MGSis Tecnologia disse...

Voces sao demais!!!

Anônimo disse...

Muito obrigado!

Anônimo disse...

Sensacional! Estou lendo vários tópicos e está me ajudando muito na faculdade! Obrigada!

Israeel disse...

Obrigado!!!

Anônimo disse...

Muito bom

vargasnunes disse...

Excelente Material !

Adilson Schwanck disse...

Ótima explicação. Gostei muito. Obrigado.