Średnia arytmetyczna jako funkcja

0

Witam, mam mały problem z obliczaniem średniej arytmetycznej trzech liczb za pomocą funkcji w C. Proszę o pomoc

#include <stdio.h>
#include <stdlib.h>


float sredniaA(int u);

int main(int argc, char *argv[])
{
    

  float  l1, l2, l3,f;
  
  
  printf("podaj trzy liczby do obliczenia sredniej arytmetycznej: ");
  f=scanf("%f",&l1,"%f",&l2,"%f",&l3);

  printf("Srednia liczb %f, %f i %f to %f\n\n",l1,l2,l3,sredniaA(f)); 
  
  system("PAUSE");	
  return 0;
}

float sredniaA(int u)
{
	float srednia,wyn=0;
	int i=0;
	for(i;i<=3-1;i++)
	{
		wyn=wyn+u;
	}
	srednia=wyn/3;
	return srednia;
	
}
0

1 . Nie zadziała, bo dodajesz 3 krotnie jedną liczbę u, a potem wynik dzielisz przez 3
2. Twoja funkcja nie umozliwia przekazania właściwych argumentów. Zamiast f powinieneś przeslac l1, l2, l3

0

A jak to naprawić, żeby działało? Już sam nie wiem jak ma być to poprawnie

0
  1. Zastanów się co jest parametrami wejściowymi Twojej funkcji, czyli co jest Ci potrzebne żeby wyliczyć średnią. Czy jest to jedna liczba? 3 liczby? A może (podpowiedź) ciąg liczb?
  2. Wybierz odpowiedni typ, który najlepiej będzie reprezentował parametry wejściowe. Podpowiedź - nie jest to 1 int.
  3. Napisz nową deklarację funkcji.
  4. Zastanów się jak się wylicza średnią mając dane parametry i przełóż to na język.
0

Dobra arytmetyczna działa, teraz proszę o jakąkolwiek pomoc z średnią geometryczną

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
float sredniaG(int t1, int t2, int t3);
int main(int argc, char *argv[])
{

  float l4,l5,l6;
  printf("podaj trzy liczby do obliczenia sredniej geometrycznej: ");
  scanf("%f",&l4);
  scanf("%f",&l5); 
  scanf("%f",&l6);
  printf("Srednia geometryczna liczb %f, %f i %f to %f\n\n",l4,l5,l6,sredniaG(l4,l5,l6)); 

  system("PAUSE");  
  return 0;
}
float sredniaG(int t1, int t2, int t3)
{
    float c;
    double sredniag;
    c=t1*t2*t3;
    sredniag=pow(c,(-3));
    return sredniag;

}
1

Błędy widzę w tych linijkach:

float sredniaG(int t1, int t2, int t3)

Oraz:

sredniag=pow(c,(-3));

Zastanów się. Wczytujesz floaty, a potem używasz ich jako intów?? Czy wiesz, ile to (matematycznie) jest równe c^(-3)?

0

jeśli chodzi o te floaty to faktycznie głupi błąd, mimo wszystko ciągle liczy średnią jako 1.000

float sredniaG(float t1, float t2, float t3)
{
	float c;
	c=(t1*t2*t3);
	c=powf(c,(1/3));
	return c;
	
}
2

Typy. Sprawdź, ile to jest 1/3. A teraz sprawdź, ile to jest 1./3.

Jak masz liczby całkowite, to dzielenie jest całkowitoliczbowe.

EDIT: Poprawiłem głupi błąd wyżej.

EDIT2: Chociaż możesz liczyć pierwiastek trzeciego stopnia za pomocą pow (o ile poprawisz to 1/3), to dobrze wiedzieć, że jest funkcja cbrt: http://en.cppreference.com/w/c/numeric/math/cbrt która robi to samo, ale prościej.

0

Dziękuje Ci bardzo, w końcu to zrozumiałem!

1 użytkowników online, w tym zalogowanych: 0, gości: 1