Jump to content
thinkabout

Devolução de inteiro , que mais se aproxima da média de dois reais positivos que são passados como parâmetro.

Recommended Posts

thinkabout

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

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.