• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

tuasite

Media aritmetica e ponderada de 3 valores

14 mensagens neste tópico

Boas amigos foi me pedido para fazer este codigo referente a este exercicio:

Desenvolver um algoritmo que faça a leitura de uma sequencia de grupos de valores reais (3 de cada vez) e que para os valores lidos, calcule e mostre a media aritmetica ((a+b+c)/3) e media ponderada (com poderação de 1 para o menor dos valores, 1.5 para o valor intermedio e 2.5 para o maior dos valores digitados) dos valores lidos. O algoritmo só devera terminar quando for digitado o valor 0 para qualquer um dos valores de entrada.

float troca2n(float a, float b)
{
   float aux;
   aux=a;
   a=b;
   b=aux;
}

float ordenar3n(float x, float y, float z)
{
   float aux;
   if (x>y)
     troca2n(x,y);
   if (y>z)
     troca2n(y,z);
   if (x>y)
     troca2n(x,y);
}

float calcularmedias(float num1, float num2, float num3, float p1, float p2, float p3, float ma, float mp)
{
   ma=(num1+num2+num3)/3;
   mp=(num1*p1+num2*p2+num3*p3)/(p1+p2+p3);
}

int main()
{
   float n1,n2,n3,ma,mp;
   printf("Digite 3 numeros:");
   scanf("%f""%f""%f",&n1,n2,n3);
   while (n1*n2*n3==0)
   {
       ordenar3n(n1,n2,n3);
       calcularmedias(n1,n2,n3,1,1.4,2.5,ma,mp);
       printf("Media aritemetica = %f",ma);
       printf("Media ponderada = %f",mp);
       printf("Digite 3 numeros:");
       scanf("%f""%f""%f",&n1,n2,n3);
   }
}

Pede me para digitar os tres valores mas nao faz nada. Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para começar, parece-me que a função troca2n não faz nada e tens uma série de funções onde devias devolver um valor, mas não estás a devolver nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E faltam-te uns '&' nos scanfs.

Quanto à questão da troca, estás apenas a mexer em variáveis locais à função, o que não tem nenhum efeito no local onde a função foi chamada. Procura na net pela função swap, e verás como resolver o problema.

Por fim, tens a condição do ciclo mal. O que tu queres é o contrário, ou seja, executar o ciclo enquanto os valores forem diferentes de 0.

Nas funções das médias também estás com o mesmo problemas da função de troca, a main não vai ver os valores calculados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas amiga ja pus os & que faltavam agora ja corre mas nao apresenta nenhum resultado quanto ao swap nao posso usar o prof nao me deixa usar no codigo. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

na media alterei e pus assim o codigo:

float calcularmedias(float num1, float num2, float num3, float p1, float p2, float p3, float ma, float mp)
{
    ma=(num1+num2+num3)/3;
    mp=(num1*p1+num2*p2+num3*p3)/(p1+p2+p3);
    return ma;
    return mp;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para os valores diferente o sinal é !=0???

Sim.

Para a troca:

void troca(float* x, float* y)
{
 float aux;
 aux=*x;
 *x=*y;
 *y=aux;
}

f(...)
{
 float x,y;
 ...
 troca(&x,&y);
 ...
}

Atenção à forma como chamas a função.

Esse teu último código não funciona, pois só podes devolver um valor por cada função.

O mais fácil é separar em duas funções.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas amigo entao fica assim:

void troca2n(float* x, float* y)
{
    float aux;
    aux=*x;
    *x=*y;
    *y=aux;
}

float ordenar3n(float x, float y, float z)
{
    float aux;
    if (x>y)
      troca2n(&x,&y);
    if (y>z)
      troca2n(&y,&z);
    if (x>y)
      troca2n(&x,&y);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas amigo so me devolve zeros na media aritmetica e na media ponderada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o codigo que tenho agora é o seguinte:

void troca2n(float* x, float* y)
{
    float aux;
    aux=*x;
    *x=*y;
    *y=aux;
}

float ordenar3n(float x, float y, float z)
{
    float aux;
    if (x>y)
      troca2n(&x,&y);
    if (y>z)
      troca2n(&y,&z);
    if (x>y)
      troca2n(&x,&y);
}

float calcularmedias(float num1, float num2, float num3, float p1, float p2, float p3, float ma, float mp)
{
    ma=(num1+num2+num3)/3;
    mp=(num1*p1+num2*p2+num3*p3)/(p1+p2+p3);
    return ma;
    return mp;
}

int main()
{
    float n1,n2,n3,mA,mP;
    printf("Digite 3 numeros:");
    scanf("%f""%f""%f",&n1,&n2,&n3);
    while (n1*n2*n3!=0)
    {
        ordenar3n(n1,n2,n3);
        calcularmedias(n1,n2,n3,1,1.4,2.5,mA,mP);
        printf("Media aritemetica = %f\n",mA);
        printf("Media ponderada = %f\n",mP);
        printf("Digite 3 numeros:\n");
        scanf("%f""%f""%f",&n1,&n2,&n3);
    }
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

As outras funções continuam com problemas semelhantes à função de troca.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas amigos continua me sem funcionar o código alguém me pode ajudar, obrigado.

0

Partilhar esta mensagem


Link 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