Vamos Programar? – Introdução à Programação #13
Funções e Procedimentos
O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Dentro das palavras que mais ouvimos atualmente, incluímos "evolução", "mudança", "futuro".
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Visualize este vídeo no YouTube
Pedimos desculpa pela gafe no vídeo onde é referido que 6 + 4 é igual a 11.Funções
Uma função é um bloco de código que, tal como o próprio nome indica, tem uma função própria, ou seja, que serve para aquela finalidade. As funções permitem-nos, por exemplo, reutilizar código.
Ao invés de colocarmos um determinado trecho de código diversas vezes, basta criarmos uma função com esse código e, de cada vez que for necessário, precisamos apenas de invocar a função.
Durante os seus anos de programador, irá criar milhares de funções para as mais diversas funções. Então, recomendamos que vá guardando as funções que utiliza porque, futuramente, poderá necessitar delas.
Existe uma função que tem vindo a ser sempre utilizada: a função main. É a função principal do programa, aquela que é executada automaticamente quando um programa é executado. A sintaxe das funções é a seguinte:
1 2 3 | tipo_dado_retorno nome_da_funcao(parametros) { //Codigo da Funcao } |
Vejamos então o exemplo de uma função simples que nos permite mostrar a mensagem "Olá Mundo!":
1 2 3 4 5 6 7 8 9 10 | #include <stdio.h> int main() { sayHello(); return 0; } void sayHello() { printf("Olá Mundo!\n"); } |
A função chama-se "sayHello" e não retorna nenhuns dados ("void"). O que está dentro das chavetas ("{}") é o código que é executado quando a função é chamada.
Argumentos e Parâmetros
No exemplo acima é possível visualizar que tanto na invocação da função, como na sua escrita foi colocado um par de parênteses sem nada. Isto acontece porque não existem parâmetros.
Vamos criar uma função que efetua uma soma: como enviamos os valores para a função? Definindo o nome e o tipo de parâmetros a serem recebidos. Veja o seguinte exemplo.
1 2 3 | void soma(int n1, int n2) { int soma = n1 + n2; } |
A função acima, denominada "soma", tem dois parâmetros, o "n1" e o "n2", ambos do tipo inteiro. Os valores que a eles irão ser atribuídos chamam-se argumentos.
Para utilizar a função, basta então proceder do seguinte modo:
1 | soma(4, 6); |
Substituindo os números 4 e 6 por quaisquer números que desejar e a função irá armazenar, na variável "soma" que apenas está disponível dentro da função, o valor da soma entre os dois números.
Retorno
Na função anterior somámos dois números mas nada mais aconteceu. E se quisermos, por exemplo, que a função retorne o valor da soma?
Para isso teremos que substituir o "void" pelo tipo de dados que, neste caso é "int" e utilizar o comando "return". Ficaria algo semelhante ao seguinte:
1 2 3 4 | int soma(int n1, int n2) { int soma = n1 + n2; return soma; } |
Ou seja, enviamos dois números para a função; esta cria a variável "soma" com a soma dos dois números e de seguida retorna esta variável que é do tipo "int". Podemos simplificar esta função ficando apenas com o seguinte:
1 2 3 | int soma(int n1, int n2) { return n1 + n2; } |
Podemos, por exemplo, utilizar esta função no seguinte contexto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> int main() { int a, b; printf("Insira o primeiro número: "); scanf("%d", &a); printf("Insira o segundo número: "); scanf("%d", &b); printf("A soma é %d", soma(a,b)); return 0; } int soma(int n1, int n2) { return n1 + n2; } |
Procedimentos
Procedimentos são também blocos de código que contêm uma função específica. A diferença entre funções e procedimentos é que os segundos não retornam quaisquer valores.
Exercícios
Nesta semana trazemos uma dose maior de exercícios em relação às semanas anteriores. Os exercícios das semanas anteriores podem ser reaproveitados!
1 - Crie uma função denominada "receberNumero" que recolha um número do tipo "float" e o retorne e outra chamada "receberInt" para receber um número inteiro.
2 - Crie funções que peçam, calculem e mostrem os valores das seguintes fórmulas/operações:
Perímetro
- Quadrado
- Retângulo
- Triângulo
- Círculo
Área
- Quadrado
- Retângulo
- Triângulo
- Losango
- Círculo
- Trapézio
- Elipse
Volume
- Cubo
- Paralelepípedo
- Cilindro
- Esfera
- Pirâmide Quadrangular/Retângular
- Cone
E também para resolver equações de segundo grau completas e imprimindo os seus resultados, relembrando que a fórmula é a seguinte e que, quando o resultado do que está dentro da raiz é negativo não se deve prosseguir (números imaginários não).
3 - Crie três funções para dizer os valores das áreas, perímetros e volumes finais. Deve ser chamada no final de cada uma das funções anteriores (excepto a da fórmula resolvente/equação de segundo grau).
4 - Articule tudo o que fez anteriormente através de menus.
Deixamos aqui a resolução deste exercício mas, primeiro tente, só depois de muitas tentativas é que deve ver a resolução.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que utilize a keyword [DUVIDA] no início do seu comentários.
Esta saga |
Henrique Dias |
|
Mais episódios: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13][12] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23][24] |
Este artigo tem mais de um ano
Boa tarde,
O meu projecto de IP envolve um jogo em C com utilização do wxWidgets.
Como posso fazer isto no Xcode?
Sem alguém conseguir ajudar 🙂
usa o Geany…
Gtk, tem support para wxWidgets através do port wxGTK para o Gtk toolkit…
É sempre a curtir nos callback’s .. 🙂
Nenhuma maneira de fazer utilizando o xcode?
Simplesmente adoro aquela interface….
podes fazer até num simples editor de texto 😉
/*
* Função que recebe um número inteiro e o retorna.
*/
int receberInt() {
int a;
scanf(” %d”, &a);
return a;
}
Desculpem lá, mas esta função naão recebe coisa nenhuma. Quanto muito, parte do seu procedimento é capturar o input. Para receber um valor, este teria de ser passado como argumento/parâmetro.
Se estão a ensinar a programar não deveriam distinguir entre funções e procedimentos. É que apesar de muito semelhantes tem objetivos diferentes. Para ensinar deveria estar claro esta distinção.
Obrigado pelo reparo 🙂 Adicionada a informação ao artigo.
Gostei da parte do vídeo onde dizes que 6 + 4 = 11 😀
Olá td,
Obrigado pelo reparo. Já adicionei uma nota abaixo do vídeo.
Boa tarde. Estava interessado em frequentar um curso de programação android. Neste momento a minha base é completamente zero. Acham que é possível interessar-me pela área? existem cursos bons para isso? Acham que teria hipótese de completar esse tipo de curso sem bases?
Cumprimentos…