• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrosimoes

Diferença na declaração de variaveis.

25 mensagens neste tópico

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No primeiro caso x é o argumento da função (recebida do exterior quando é chamada). No segundo é uma variável local interna.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dá erro porque provavelmente não estás a dar um argumento à função.

E o return serve para indicar o valor de retorno da função.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

OK.

O que estás a tentar fazer é declarar a função como recebendo um argumento do tipo int para que possas fazer algo do tipo ler(42).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

%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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora