thinkabout Posted December 16, 2012 at 04:35 PM Report #487376 Posted December 16, 2012 at 04:35 PM Boas, A minha duvida prende-se com a questão dos parâmetros vs argumentos. Já tive a ler, http://www.portugal-a-programar.pt/topic/836-c-funcoes/ na parte dos Parâmetros, mas ainda não se fez luz. No exercício que fiz não sei como passar por parâmetros, acho que estou a passar por argumentos. #include <stdio.h> /* Desenvolva uma função que devolva o inteiro que mais se aproxima da média de dois reais positivos que são passados como parâmetro. Nota: Partir do princípio que não existe nenhuma função de arredondamento em C. */ int real(float x, float y) { float media,proximo,restomedia; media = (x+y)/2; // Calcula a média proximo = media; restomedia = media - (int) media; // Tira a parte inteira e deixa o decimal do numero. printf("O valor da media %f \n" , media); printf("O valor da media sem a parte inteira e %f \n" , restomedia ); if (restomedia >= 0.5) { printf("O inteiro que mais se aproxima da media e %d \n" ,(int) proximo+1); proximo += 1; } else printf("O inteiro que mais se aproxima da media e %d \n" ,(int) proximo); return (int) proximo; } int main() { float x,y; printf("Introduza dois numeros (reais) \n"); scanf("%f%f",&x , &y); printf("O Inteiro mais perto da media de %.2f e %.2f e: %d\n",x, y, real(x,y)); }
HappyHippyHippo Posted December 16, 2012 at 04:57 PM Report #487378 Posted December 16, 2012 at 04:57 PM primeiro de tudo tens de clarificar o significado de parâmetro e argumento. ficas a saber que as duas palavras se referem exactamente à mesma coisa : os valores dados à função. exemplo: int func1(int parametro1, int parametro2) { return 0; } int func2(int argumento1, int argumento2) { return 0; } agora, não percebi exactamente a tua dúvida pela maneira como escreveste, isto porque existe um conceito chamado: - passagem de parâmetros por valor - passagem de parâmetros por referência no primeiro caso, o que é fornecido à função quando esta é chamada com variáveis nos argumentos, é o valor da variável. isto implica que o que "existe" na função é uma cópia do valor dado. no segundo caso, o que é fornecido é a referência da variável, podendo assim alterar a variável na função estando a alterar a variável no código de chamada da função. exemplos: (nota que em C é sempre por valor, o exemplo de passagem por referência é somente explicativo, o código não funciona como descrito) void increment_por_valor(int i) { i++; } void increment_por_referencia(int i) { i++; } int main() { int i; i = 10; increment_por_valor(i); printf("%d", i); // o valor apresentado é "10", isto porque o que é incrementado é a cópia da valor da variável i da função main // volto a dizer que em C o seguinte código não funciona assim // é simplesmente para exemplificar o conceito i = 10; increment_por_referencia(i); printf("%d", i); // o valor apresentado é "11", porque a alteração implica alteração da variável i do main return 0; } é essa a razão que se usa ponteiros. ponteiros não é mais do que a referência(posição) de memória onde se encontra guardado o valor de uma variável. para perceberes melhor: void increment(int * i) // estou a receber um ponteiro (que não é mais do que um número da posição de memória) { (*i)++; // estou a dizer que o número na posição de memória indicada deverá ser incrementado } int main() { int i; i = 10; increment(&i); // lembrate que é sempre por valor, mas o valor é a posição de memória onde se "encontra a variável i" do main printf("%d", i); // agora sim, o valor a ser apresentado é o valor 11 return 0; } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
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