Strict Standards: Declaration of action_plugin_importoldchangelog::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/lib/plugins/importoldchangelog/action.php on line 8 Strict Standards: Declaration of action_plugin_importoldindex::register() should be compatible with DokuWiki_Action_Plugin::register($controller) in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/lib/plugins/importoldindex/action.php on line 0 Deprecated: Function split() is deprecated in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 154 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 456 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 456 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/inc/auth.php on line 453 Strict Standards: Only variables should be passed by reference in /DISK2/WWW/pavel-rimsky.cz/vyuka/wiki/doku.php on line 71 orezany_prumer

Zadání

Napište program, který nejprve přečte z klávesnice kladné celé číslo n, které je alespoň 5. Poté přečte n čísel a vypíše jejich aritmetický průměr, do průměru však nezahrne dvě největší ani dvě nejmenší čísla. Příklad: je-li vstup 1 2 3 4 5 6 7, průměr bude počítat pouze z čísel 3, 4, 5 (čtyři krajní ignoruje), vypíše tedy číslo 4.

Řešení

uses crt;
 
{Program bude fungovat pouze pro cisla od -1000 po +1000.}
const MAX = 1000;
      MIN = -MAX;
 
{definice promennych}
var n: integer; {pocet cisel}
    i: integer; {citac cyklu}
    x: real;    {ctene cislo}
    max1,       {nejvetsi nactene cislo}
    max2,       {druhe nejvetsi nactene cislo}
    min1,       {nejmensi nactene cislo}
    min2: real; {druhe nejmensi nactene cislo}
    sum: real;  {soucet VSECH nactenych cisel}
 
 
begin
  {nacteni n - pocet cisel, z nichz chceme pocitat orezany prumer}
  write('Zadej pocet cisel (minimalne 5): ');
  readln(n);
  if (n < 5) then
    writeln('Cisel bylo mene nez 5...')
 
  {uzivatel spravne zadal n - muzeme zacit}
  else begin
    {zatim bylo precteno 0 cisel}
    i := 0;
 
    {fiktivni hodnoty maxim a minim - vsechna nactena cisla budou mezi MIN
     a MAX, tudiz po aspon ctyrech ctenich budou min1, min2, max1 a max2
     nahrazeny skutecnymi hodnotami maxim a minim}
    max1 := MIN - 1;
    max2 := MIN - 1;
    min1 := MAX + 1;
    min2 := MAX + 1;
 
    {Pocitame soucet vsech nactenych cisel - dokud jsme nic nenacetli,
     je roven nule.}
    sum := 0;
    {Budeme cist prave n-krat.}
    while (i < n) do begin
      {Citac cteni i zvysime o 1 a precteme i-te cislo.}
      i := i + 1;
      write ('Zadej ', i, '. cislo: ');
      readln(x);
 
      {K souctu vsech nactenych cisel pricteme prave nactenou hodnotu.}
      sum := sum + x;
 
      {Uprava zapamatovanych maxim a minim.}
      if (x > max1) then begin
        max2 := max1;
        max1 := x;
      end else if (x > max2) then
        max2 := x;
      if (x < min1) then begin
        min2 := min1;
        min1 := x;
      end else if (x < min2) then
        min2 := x;
    end;
 
    {Vypis vysledku - prumer spocitany z celkove sumy,
     ale bez ctyr krajnich hodnot.}
    writeln('Orazany prumer je ', (sum - min1 - min2 - max1 - max2) / (n - 4));
  end;
  readkey;
end.