Ir ao conteúdo
  • Cadastre-se

chamar função


apolimarkus

Posts recomendados

olá, boa tarde! estou com algumas dificuldades para realizar programas que envolvem funções, tenho pesquisado o assunto na internet, e encontro exemplos que se divergem em sua forma de construção , e isso acaba me confundindo ainda mais, por exemplo há programas que apresentam a seguinte estrutura: void imprime(vetor[]){, utilizando ao final uma chaves, já em outros exemplos apresenta a ausencia das "{}" e utiliza o ";" void troca(int *m, int *n);/ int volume(int n);. Gostaria que alguém pudesse me explicar o porque que isso acontece, porque há esta troca, se possivel mostre estas aplicações em um programa. valeu, e ate mais!!

Link para o comentário
Compartilhar em outros sites

Seguem alguns exemplos de uso de funções.

Nesse exemplo foi criada uma variável global, e sendo global, todas a funções têm acesso à ela. Veja que todas as funções têm obrigatóriamente abre e fecha chaves "{}".

A função "main" é a primeira a ser executada, depois dentro da "main é chamada a função para ler valores. Na função "le_valores" é solicitado ao usuário entrar com um valor, depois é chamada a função "imprime_valor", onde é feita a impressão do valor digitado.

#include <stdio.h>
#include <stdlib.h>

int valor;

void imprime_valor()
{
printf( "\nValor digitado: %d\n\n", valor );
}

void le_valor()
{
printf( "Entre com valor: " );
scanf( "%d", &valor );

imprime_valor();
}

void main()
{
le_valor();

system( "PAUSE" );
}

Repare que as funções são criadas na ordem inversa de execução. A função "imprime_valor" é a primeira a ser criada, porém é a última a ser executada. isso porque quando você chama uma função, o compilador busca ela antes da função que a chamou, pois entende-se que se houve uma chamada de função, essa função logicamente já foi criada anteriormente.

Mas tem uma maneira de não ter a obrigação de criar funções inversamente, ou seja, criar funções na sequencia lógica de execução do programa. Para isso usamos "protótipos", ou seja,informamos ao compilador que as funções existem. Segue alteração do código acima, para protótipo.


#include <stdio.h>
#include <stdlib.h>

int valor;

/* declaração dos protótipos */

void le_valor();
void imprime_valor();

// inicio da execução do programa

void main()
{
le_valor();

system( "PAUSE" );
}

void le_valor()
{
printf( "Entre com valor: " );
scanf( "%d", &valor );

imprime_valor();
}

void imprime_valor()
{
printf( "\nValor digitado: %d\n\n", valor );
}

Repare que a variável "valor" foi criada fora das funções, ou seja, global. Então todas as funções têm acesso à essa variável. Caso essa variável fosse declarada dentro da função le_valor, por exemplo, as demais funções não teriam acesso à ela, logo a função imprime_valor não conseguiria imprimir o valor digitado. Para corrigir esse problema usamos passagem de parâmetro por valor. Criamos uma variável na função "imprime_valor" que irá recebe via parâmetro uma cópia do valor informado na variável "valor".

#include <stdio.h>
#include <stdlib.h>

/* declaração dos protótipos */

void le_valor();
void imprime_valor( [COLOR="Red"]int[/COLOR] );

// inicio da execução do programa

void main()
{
le_valor();

system( "PAUSE" );
}

void le_valor()
{
int valor;

printf( "Entre com valor: " );
scanf( "%d", &valor );

// chamada da função imprime_valor passando o conteúdo da variável "valor" como parâmetro
imprime_valor( [COLOR="Red"]valor[/COLOR] );
}

// a variável criada entre parênteses recebe uma cópia do valor passado pela variável "valor"
void imprime_valor( [COLOR="Red"]int num[/COLOR] )
{
printf( "\nValor digitado: %d\n\n",[COLOR="Red"] num[/COLOR] );
}

Até agora as funções não retornam valor nenhum, por isso usamos "void", que significa vazio.

Segue abaixo código usando retorno de função. No caso o retorno é do tipo inteiro.

 #include <stdio.h>
#include <stdlib.h>

/* declaração dos protótipos */

[COLOR="Red"]int[/COLOR] le_valor();

// inicio da execução do programa

void main()
{
[COLOR="Red"] int V;

// é chamada a função le_valor, o valor digitado é retornado e atribuído à variável V
V = le_valor();[/COLOR]

printf( "\nValor digitado: %d\n\n",[COLOR="Red"] V[/COLOR] );

system( "PAUSE" );
}

[COLOR="Red"]int[/COLOR] le_valor()
{
iint valor;

printf( "Entre com valor: " );
scanf( "%d", &valor );

[COLOR="Red"] return valor; [/COLOR]
}

Esse exemplo com retorno de função pode ser feito também sem o uso de protótipos.

Espero ter ajudado...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...