pedrosimoes Posted December 10, 2009 at 06:17 AM Report Share #299550 Posted December 10, 2009 at 06:17 AM 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! Link to comment Share on other sites More sharing options...
Ferreira Posted December 10, 2009 at 10:38 AM Report Share #299560 Posted December 10, 2009 at 10:38 AM No primeiro caso x é o argumento da função (recebida do exterior quando é chamada). No segundo é uma variável local interna. http://twitter.com/ferreira Link to comment Share on other sites More sharing options...
KiNgPiTo Posted December 10, 2009 at 10:47 AM Report Share #299562 Posted December 10, 2009 at 10:47 AM 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; } Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 10, 2009 at 04:32 PM Author Report Share #299645 Posted December 10, 2009 at 04:32 PM 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. Link to comment Share on other sites More sharing options...
renafi Posted December 10, 2009 at 06:22 PM Report Share #299678 Posted December 10, 2009 at 06:22 PM 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 Link to comment Share on other sites More sharing options...
Localhost Posted December 10, 2009 at 08:01 PM Report Share #299696 Posted December 10, 2009 at 08:01 PM 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 Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 11, 2009 at 01:40 PM Author Report Share #299812 Posted December 11, 2009 at 01:40 PM 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); } Link to comment Share on other sites More sharing options...
KiNgPiTo Posted December 11, 2009 at 02:18 PM Report Share #299817 Posted December 11, 2009 at 02:18 PM 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. Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 11, 2009 at 07:56 PM Author Report Share #299937 Posted December 11, 2009 at 07:56 PM 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? Link to comment Share on other sites More sharing options...
Ferreira Posted December 11, 2009 at 08:00 PM Report Share #299939 Posted December 11, 2009 at 08:00 PM 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. http://twitter.com/ferreira Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 11, 2009 at 08:08 PM Author Report Share #299941 Posted December 11, 2009 at 08:08 PM Se não te importares, explica melhor isso que disseste. Ainda sou iniciante, e ando aqui cheio de dúvidas. Link to comment Share on other sites More sharing options...
Ferreira Posted December 11, 2009 at 08:11 PM Report Share #299942 Posted December 11, 2009 at 08:11 PM 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). http://twitter.com/ferreira Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 11, 2009 at 09:03 PM Author Report Share #299949 Posted December 11, 2009 at 09:03 PM 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! Link to comment Share on other sites More sharing options...
Ferreira Posted December 11, 2009 at 09:05 PM Report Share #299950 Posted December 11, 2009 at 09:05 PM Não percebi... Queres mudar o valor a quê? http://twitter.com/ferreira Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 11, 2009 at 09:17 PM Author Report Share #299951 Posted December 11, 2009 at 09:17 PM 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? Link to comment Share on other sites More sharing options...
Localhost Posted December 12, 2009 at 03:32 PM Report Share #300023 Posted December 12, 2009 at 03:32 PM 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 Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 12, 2009 at 07:09 PM Author Report Share #300063 Posted December 12, 2009 at 07:09 PM 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) Link to comment Share on other sites More sharing options...
Localhost Posted December 12, 2009 at 08:30 PM Report Share #300078 Posted December 12, 2009 at 08:30 PM 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 Link to comment Share on other sites More sharing options...
pedrosimoes Posted December 13, 2009 at 04:04 AM Author Report Share #300124 Posted December 13, 2009 at 04:04 AM 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! Link to comment Share on other sites More sharing options...
Localhost Posted December 13, 2009 at 10:58 AM Report Share #300131 Posted December 13, 2009 at 10:58 AM 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 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now