Ir para o conteúdo
thinkabout

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

Mensagens Recomendadas

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

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.