Jump to content

Recommended Posts

Posted

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!

Posted

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

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.

Posted

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

Posted

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 😄

here since 2009

Posted

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

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.

Posted

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?

Posted

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

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.