#include<stdio.h>
#define MAX 1000

/* deklaracje funckcji */
void wczytaj(float t[],int n);
void wyswietl(float t[],int n);
float srednia(float t[],int n);
float suma(float t[],int n);
float maksimum(float t[],int n);
int maxind(float t[],int n);
void sortuj(float t[],int n);

int main()
{
   int n;
   float tab[MAX];

   printf("Ile elementow (nie wiecej niz %d) ? \n",MAX);
   scanf("%d",&n);

   wczytaj(tab,n);
   wyswietl(tab,n);
   printf("Suma = %f\n",suma(tab,n));
   printf("Srednie = %f\n",srednia(tab,n));
   printf("Najwieksza liczba = %f\n",maksimum(tab,n));
   printf("Najwieksza jest na pozycji = %d\n",maxind(tab,n));
   printf("Posortowane elementy tablicy:\n");
   sortuj(tab,n);
   wyswietl(tab,n);

   return 0;

}

/* definicje funkcji */

/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  wczytaj
 *  Description:  wczytuje ze standardowego wejscia n liczb rzeczywistych do tablicy t[]
 * =====================================================================================
 */
void wczytaj(float t[],int n)
{
	int i;
	for(i=0;i<n;i++)
	{
		printf("t[%i]=",i);
		scanf("%f",&t[i]);
	}
}



/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  wyswietl
 *  Description:  wyswietla n liczb rzeczywistych zawartych w tablicy t
 * =====================================================================================
 */
void wyswietl(float t[],int n)
{
	int i=0;
	printf("Zawartosc tablicy (ilosc elementow=%d)\n",n);
	while(i<n) printf("t[%i]=%f\n",i,t[i++]);

}


/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  suma
 *  Description:  zwraca sume n pierwszych elementow tablicy t
 * =====================================================================================
 */
float suma(float t[],int n)
{
	float s=0;
	while(n>0) s+=t[--n];
	return s;
}



/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  srednia
 *  Description:  zwraca srednia wartosc z n liczb z tablicy t
 * =====================================================================================
 */
float srednia(float t[],int n)
{
	return suma(t,n)/n;

}



/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  maxind
 *  Description:  zwraca indeks (pozycje) elementu tablicy t o najwiekszej wartosci
 * =====================================================================================
 */
int maxind(float tab[],int n)
{
	int m=0,i;

   for(i=0;i<n;i++)  if(tab[m]<tab[i]) m=i;
	return m;
}



/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  maksimum
 *  Description:  zwraca element tablicy o najwiekszej wartosci
 * =====================================================================================
 */
float maksimum(float t[],int n)
{
	return t[maxind(t,n)];
}


/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  sortuj
 *  Description:  ustawia elementy tablicy t w kolejnosci roznacej
 * =====================================================================================
 */
void sortuj(float t[],int n)
{
   float tmp;
   int m;

   while(n>0)
   {
      m=maxind(t,n);
      tmp=t[m];
      t[m]=t[n-1];
      t[n-1]=tmp;
      n--;
   }
}
