2.5.7 Takaisin painonvartijaan

Palataan jälleen esimerkkinä kehiteltyyn ohjelmaan, jonka tehtävänä oli laskea ihannepaino. Ohjelma on saatu kysymään henkilön pituus ja paino sekä laskemaan niiden perusteella henkilön ihannepaino.

Otetaan ihannepainon laskentaan mukaan pituuden ja painon järjellisyyden tarkistaminen. Asetetaan raja-arvot symbolisiksi vakioiksi, jotta niiden muuttaminen myöhemmin olisi vaivattomampaa.

/* *********************************************************
PAINO5.CPP
  Lasketaan ihannepaino.
  Tarkistetaan käyttäjän antamat tiedot.
********************************************************* */

#include <iostream.h>
#include <stdio.h>

#define SUHDELUKU 100.0

/* raja-arvot */
#define ALIN_PITUUS 10.0
#define YLIN_PITUUS 300.0
#define ALIN_PAINO 1.0
#define YLIN_PAINO 350.0

void tulosta_esittely(void)
{
  cout << "\n\n";
  cout << "       Ihannepaino\n\n";
  cout << "Ohjelma laskee ihannepainosi\n";
  cout << "pituutesi perusteella.\n" << endl;
}

void kysy_pituus(double &pituus)
{
  cout << "Anna pituutesi sentteinä > ";
  cin >> pituus;
}

void kysy_paino(double &paino)
{
  cout << "Anna painosi kiloina     > ";
  cin >> paino;
}

double laske_ihanne(double pituus)
{
  return (pituus - SUHDELUKU);
}

double laske_erotus(double paino, double ihanne)
{
  return (paino - ihanne);
}

void tulosta_painot(double paino, double ihanne, double erotus)
{
  printf("\n");
  printf("Nykyinen painosi %5.1lf kg\n", paino);
  printf("Ihannepainosi    %5.1lf kg\n", ihanne);
  printf("Erotus           %5.1lf kg\n", erotus);
}

int main(void)
{
  double pituus, paino, ihanne, erotus;

  tulosta_esittely();
  kysy_pituus(pituus);
  kysy_paino(paino);

  /* Tutkitaan annettujen mittojen järkevyys.
     Huomaa ehtolauseen jakaminen kahdelle riville. */
  if (pituus < ALIN_PITUUS || pituus > YLIN_PITUUS ||
      paino < ALIN_PAINO || paino > YLIN_PAINO) {
    cout << "Antamasi mitat ovat järjettömiä,\n";
    cout << "ihannepainoa ei voi laskea!" << endl;
  }
  else {
    ihanne = laske_ihanne(pituus);
    erotus = laske_erotus(paino, ihanne);
    tulosta_painot(paino, ihanne, erotus);
  }

  return 0;
}

Millä pituuden ja painon arvoilla ihannepainoa ei voida laskea?