/*
 * uzivatelske funkce
 */

#include <stdio.h>
#include <math.h>

double a,b;

double Aprum(double fp1, double fp2);        // uplny funkcni prototyp
double Gprum(double fp1, double fp2);        //   dava prekladaci informaci
double Hprum(double fp1, double fp2);        //   o navratove hodnote funkce,
void Prohod(double *fp1, double *fp2);       //   o poctu a typu parametru
void Cara(char fp) {
  int i;
  static int delka = 25;                 // delka je staticka lokalni promenna
  for (i=1;i<=delka;i++) putchar(fp);    //   je umistena v DATOVE oblasti pameti
  putchar('\n');      
  delka += 2;
}

int main(void) {
  Cara('=');
  Cara('-'); Cara('-');
  
  printf("zadej realne cislo a : "); scanf("%lf", &a);
  printf("zadej realne cislo b : "); scanf("%lf", &b);

  printf(" a = %9.6lf\n b = %9.6lf \n", a,b);
  printf("prohozeni promennych ...\n");
  Prohod(&a,&b);
  printf(" a = %9.6lf\n b = %9.6lf \n", a,b);
  
  printf("aritmeticky prumer = %9.6lf\n", Aprum(a,b) );
  printf("geometricky prumer = %9.6lf\n", Gprum(a,b) );
  printf("harmonicky prumer  = %9.6lf\n", Hprum(a,b) );
  Cara('-'); Cara('-');
  Cara('+');  
  return 0;
}

double Aprum(double fp1, double fp2) {
  return ((fp1+fp2)/2);
}
double Gprum(double fp1, double fp2) {
  return (sqrt(fp1*fp2));
}
double Hprum(double fp1, double fp2) {
  return (1/(1/fp1+1/fp2));
}
void Prohod(double *fp1, double *fp2) {
  double pom;
  pom=*fp1; *fp1=*fp2; *fp2=pom;
}