Jump to content
pedrosimoes

Diferença na declaração de variaveis.

Recommended Posts

pedrosimoes

Boas, a minha dúvida é o seguinte:

Quando fazemos um programa em c, normalmente usamos varias funções cada uma destinada a uma determinada tarefa. A minha duvida é saber qual a diferença entre:

#include <stdio.h>
funcao (int x)
{}

e

#include <stdio.h>
funcao ()
{ int x;}

Já tentei testar com varios programas e continuo a não eprceber muito bem a diferença!

Share this post


Link to post
Share on other sites
KiNgPiTo

A diferença é que se chamares a função a partir de outra, por exemplo do main, se tiveres funcao(int x), vais poder associar um parâmetro... ou seja, passar um valor para a função que estas a chamar enquanto que a outra apenas estás a declarar uma variável que é usada dentro da função e não podes atribuir um valor directamente a partir de um outro local.

Um exemplo é uma simples função de somar...

Caso tenhas:

int somar (int v1, int v2){

return v1 + v2;

}

int main(){

printf("A soma e %d", somar(5,3)); // Estás a passar um 5 e um 3 o que vai dar 8, mas a utilização faz com que decidas os parâmetros da função que vais chamar por aqui

return 0;
}

Por outro lado:

int somar (){ // Aqui não recebes nada da função através da qual chamas esta, logo vais trabalhar com variáveis apenas dentro da função..

return 5 + 3;

}

int main(){

printf("A soma e %d", somar()); // Não podes passar nada pois a função não aceita parâmetros e estás limitado ao que acontecer na função..

return 0;
}

Share this post


Link to post
Share on other sites
pedrosimoes

Sim, já entendi! Já agora podem dar uma vista de olhos no programa que fiz? É simples mas foi mesmo so para aplicar a materia das funçoes.

#include <stdio.h>

int ler ()
{
int x;
printf("Escolha o numero da tabuada:");
scanf("%d", &x);
return x;

}
void escrever(int x, int y)
{

printf("\n%d * %d =%d",x,y,x*y);
}
void tabuada ()
{
int y;

for (y=1;y<11;y++)

}
void main()
{
int a;
a=ler();
tabuada (a);

Nao faz exactamente o que queria. Só indica a primeira multiplicaçao da tabuada e queria ate 10.

Share this post


Link to post
Share on other sites
renafi

Falta-te chamar o procedimento escrever dentro do ciclo da função tabuada...


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
Localhost

Bem acho que estão aí algumas coisas mal, na função main usaste a função tabuada com um argumento, e na própria função não existe nenhum, depois a função tabuada está incompleta. O código ficaria mais ou menos assim:

#include <stdio.h>

int ler ()
{
        int x;
        printf("Escolha o numero da tabuada:");
        scanf("%d", &x);
        return x;
}
void escrever(int x)
{
        int y;
        for(y=0; y<11; y++)
       { 
           printf("\n%d * %d =%d",x,y,x*y);
       }
}

void main()
{
        int a;
        a=ler();
        escrever(a);
        printf("\n");
        system("pause");
}

p.s. Tirei-te aí uma função por achar inútil e acrescentei um system("pause"); caso estejas em windows, caso não tira :D


here since 2009

Share this post


Link to post
Share on other sites
pedrosimoes

Eu fiz assim e deu.me bem!

#include <stdio.h>

int ler ()
{
int x;
printf("Escolha o numero da tabuada:");
scanf("%d", &x);
return x;

}
void escrever(int x, int y)
{

printf("\n%d * %d =%d",x,y,x*y);
}
void tabuada (int x)
{
int y;
for (y=1;y<11;y++)
	escrever (x,y);

}
void main()
{
int a;
a=ler();
tabuada(a);
}

Share this post


Link to post
Share on other sites
KiNgPiTo

O "deu-me" é relativo... Obviamente o código por exemplo do Localhost é mais eficaz, pois estás a chamar funções num ciclo, e vais chamar para cada operação, criando mais risco de falhar em vez de chamar apenas uma vez e ter lá o ciclo.

Share this post


Link to post
Share on other sites
pedrosimoes

Já percebi o meu problema. Agora a dúvida é outra. Por exemplo: na função ler, tem variavel interna, e se em vez disso tivesse

...
int ler (int x)

Eu sei que dá erro porque exprimentei, mas não percebo o porque! E tambem é obrigatorio usar o return x no fim da funçao?

Share this post


Link to post
Share on other sites
pedrosimoes

Se não te importares, explica melhor isso que disseste. Ainda sou iniciante, e ando aqui cheio de dúvidas.

Share this post


Link to post
Share on other sites
pedrosimoes

Então quer dizer, para poder ir buscar uma funçao mas mudar.lhe o valor tenho de usar int ler (int x), no caso do programa da tabuada que estava a fazer!

Share this post


Link to post
Share on other sites
pedrosimoes

Eu so posso alterar o valor da variavel se a funçao que estou a ir buscar é uma funcao (int x). Caso nao tenha nenhuma variavel dentro de paretises nao posso alterar o sei valor quando a chamo.

Tou certo?

Share this post


Link to post
Share on other sites
Localhost

Não tenho a certeza do que estás a perguntar mas acho que o que queres é mudar o valor de uma variável que está numa outra função, para fazeres isso tens de usar uma coisa chamada 'Chamada por referência' em que forneces o endereço de memória de uma variável de uma outra função e que podes mudá-la com uma simples atribuição.


here since 2009

Share this post


Link to post
Share on other sites
pedrosimoes

Exacto, penso que é isso mesmo. Mas só é possivel se a funçao que vou usar como referencia tiver parametros, isto é: funçao(int x, int y)

Share this post


Link to post
Share on other sites
Localhost

Acho que estás um bocado confuso, para usares Chamadas por Referências tens de passar como argumentos ponteiros e não variáveis 'comuns' do género:

função(int *x)


here since 2009

Share this post


Link to post
Share on other sites
pedrosimoes

Lol, isso já é apontadores e ainda nao estudei. Eu refiro-me à parte das funçoes. Uma funçao para fazer a "formula" no caso de somas, etc e a main que a chama e mete as variaveis internas da main!

Share this post


Link to post
Share on other sites
Localhost

Ah, sim claro... Quando metes por exemplo assim:

#include <stdio.h>

int soma(int x, int y)
{
  printf("%i", x+y);
  return 0;
}

int main()
{
  int a=4,b=4;
  soma(a,b);
  return 0;
}


here since 2009

Share this post


Link to post
Share on other sites
pedrosimoes

Duas perguntas: o que é %i? Normalmente para inteiros uso %d. E o porque de dares return 0!?

Share this post


Link to post
Share on other sites
Localhost

%i ou %d é exactamente a mesma coisa. Quanto ao return 0, digámos que é só para o teu SO ficar contente  ;)

EDIT: Como o Baderous disse eheheh


here since 2009

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.