Mudanças entre as edições de "SOP-funcoes"
Linha 45: | Linha 45: | ||
Ola, mundo ! | Ola, mundo ! | ||
− | + | Mas e se fosse desejável criar uma função que pudesse mostrar diferentes mensagens na tela ? O exemplo abaixo ilustra uma forma de fazer isto: | |
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | void mostra_mensagem(char * mensagem) { | ||
+ | printf("Sua mensagem: %s\n", mensagem); | ||
+ | } | ||
+ | |||
+ | int main() { | ||
+ | mostra_mensagem("Ola, mundo"); | ||
+ | mostra_mensagem("testando ..."); | ||
+ | mostra_mensagem(""); | ||
+ | mostra_mensagem("testando de novo ..."); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Se o programa acima for executado, dará este resultado: | ||
+ | |||
+ | > gcc -o mostra mostra.c | ||
+ | > ./mostra | ||
+ | Sua mensagem: Ola, mundo | ||
+ | Sua mensagem: testando ... | ||
+ | Sua mensagem: | ||
+ | Sua mensagem: testando de novo ... | ||
+ | |||
+ | A função ''mostra_mensagem'' apresenta na tela uma string que é especificada no momento em que essa função é chamada. A isto se chama ''parametrização'': tornar um algoritmo independente de valores específicos de entrada, de forma que possa funcionar com qualquer valor de entrada compatível. O próximo exemplo aprofunda este conceito por meio de uma função que calcula o quadrado de um número: | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
Linha 59: | Linha 85: | ||
int main() { | int main() { | ||
printf("O quadrado de 2 é %f\n", quadrado(2)); | printf("O quadrado de 2 é %f\n", quadrado(2)); | ||
+ | printf("O quadrado de 3 é %f\n", quadrado(3)); | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Este segundo exemplo é mais elaborado do que | + | Este segundo exemplo é mais elaborado do que os anteriores, pois a função ''quadrado'' possui um dado de entrada (o parâmetro ''int x'', também chamado de ''argumento da função''), tem uma variável local (''int y'', que existe somente dentro da função) e devolve um valor do tipo ''int'' como resultado. A declaração da função revela esses detalhes: |
[[Image:Quadrado.png|300px]] | [[Image:Quadrado.png|300px]] | ||
− | Mas afinal para que servem funções ? Para | + | Mas afinal para que servem funções ? Para propósitos como: |
#'''Facilitar a reutilização de um algoritmo em diferentes partes de um programa:''' um exemplo são as funções [http://www.kernel.org/doc/man-pages/online/pages/man3/printf.3.html printf] e [http://www.kernel.org/doc/man-pages/online/pages/man3/scanf.3.html scanf], que fazem parte da [http://pt.wikipedia.org/wiki/Biblioteca_padr%C3%A3o_do_C biblioteca C padrão]. | #'''Facilitar a reutilização de um algoritmo em diferentes partes de um programa:''' um exemplo são as funções [http://www.kernel.org/doc/man-pages/online/pages/man3/printf.3.html printf] e [http://www.kernel.org/doc/man-pages/online/pages/man3/scanf.3.html scanf], que fazem parte da [http://pt.wikipedia.org/wiki/Biblioteca_padr%C3%A3o_do_C biblioteca C padrão]. | ||
− | #'''Reduzir a complexidade de um programa, ao dividi- | + | #'''Reduzir a complexidade de um programa, ao dividi-lo em algoritmos menores e mais simples''': a divisão de um programa em pequenos algoritmos especializados o torna mais fácil de ser escrito, de ser lido e entendido, de ser depurado (debug) e mantido, e também de ser modificado. |
Edição das 19h09min de 8 de novembro de 2009
Linguagem C: funções
Uma função corresponde a um algoritmo, que pode ser usado em diferentes partes de um programa. Um primeiro exemplo é mostrado a seguir:
#include <stdio.h>
void ola() {
printf("Ola, mundo !\n");
}
int main() {
ola();
}
Ao se executar o programa acima, o resultado é aparecer na tela a mensagem "Ola, mundo !":
> gcc -o ola ola.c > ./ola Ola, mundo !
Se o exemplo for modificado da seguinte forma:
#include <stdio.h>
void ola() {
printf("Ola, mundo !\n");
}
int main() {
ola();
ola();
ola();
}
... sua execução dará como resultado:
> gcc -o ola ola.c > ./ola Ola, mundo ! Ola, mundo ! Ola, mundo !
Mas e se fosse desejável criar uma função que pudesse mostrar diferentes mensagens na tela ? O exemplo abaixo ilustra uma forma de fazer isto:
#include <stdio.h>
void mostra_mensagem(char * mensagem) {
printf("Sua mensagem: %s\n", mensagem);
}
int main() {
mostra_mensagem("Ola, mundo");
mostra_mensagem("testando ...");
mostra_mensagem("");
mostra_mensagem("testando de novo ...");
}
Se o programa acima for executado, dará este resultado:
> gcc -o mostra mostra.c > ./mostra Sua mensagem: Ola, mundo Sua mensagem: testando ... Sua mensagem: Sua mensagem: testando de novo ...
A função mostra_mensagem apresenta na tela uma string que é especificada no momento em que essa função é chamada. A isto se chama parametrização: tornar um algoritmo independente de valores específicos de entrada, de forma que possa funcionar com qualquer valor de entrada compatível. O próximo exemplo aprofunda este conceito por meio de uma função que calcula o quadrado de um número:
#include <stdio.h>
int quadrado(int x) {
int y;
y = x*x;
return y;
}
int main() {
printf("O quadrado de 2 é %f\n", quadrado(2));
printf("O quadrado de 3 é %f\n", quadrado(3));
}
Este segundo exemplo é mais elaborado do que os anteriores, pois a função quadrado possui um dado de entrada (o parâmetro int x, também chamado de argumento da função), tem uma variável local (int y, que existe somente dentro da função) e devolve um valor do tipo int como resultado. A declaração da função revela esses detalhes:
Mas afinal para que servem funções ? Para propósitos como:
- Facilitar a reutilização de um algoritmo em diferentes partes de um programa: um exemplo são as funções printf e scanf, que fazem parte da biblioteca C padrão.
- Reduzir a complexidade de um programa, ao dividi-lo em algoritmos menores e mais simples: a divisão de um programa em pequenos algoritmos especializados o torna mais fácil de ser escrito, de ser lido e entendido, de ser depurado (debug) e mantido, e também de ser modificado.