Anglická verze
logolink

< Zpět na seznam lekcí

Základní programátorské konstrukce II

AlgortimyObsah lekce:

  • Procedura Prumer, která vypíše průměrnou hodnotu pole
  • Procedura Kladne, která vypíše všechny hodnoty pole, které jsou kladné
  • Procedura Vydel, která vydělí mezi sebou dvě čísla a napíše výsledek
  • Procedura Porovnej, která mezi sebou porovná tři čísla a napíše výsledek

Procedura Prumer, která vypíše průměrnou hodnotu pole

K výpočtu průměru všech prvků pole budeme potřebovat dvě proměnné. Soucet - určuje celkový součet hodnot prvků pole a prum - proměnná sloužící k uložení průměru. Pří zadávání prvků do pole je zároveň ukládáme do soucet, ale nesmíme zapomenout na to, že nestačí přičíst vkládanou hodnotu, ale i hodnotu soucet ( soucet:=soucet+p[i] ). Jestliže je pole celé vyplněné, tak se vypočítá průměr- celkový součet vydělíme počtem prvků pole ( prum:=soucet/n ).

Algoritmus pro výpis průměru
 program Prumer;
 {$APPTYPE CONSOLE}
 uses
   SysUtils;
 const n=10;
 type pole=array [1..n]of integer;
 var p:pole;
     i,soucet:integer;
     prum:real;
 begin
  soucet:=0;
  prum:=0;
  for i:=1 to n do
   begin
    writeln('Zadejte hodnotu ',i,' pole');
    readln(p[i]);
    soucet:=soucet+p[i];
   end;
  prum:=soucet/n;
  writeln;
  writeln('Prumerna hodnota prvku pole je: ',prum:2:2);
  writeln;
  writeln('Pro ukonceni programu stisknete libovolnou klavesu');
  readln;
 end.

Procedura Kladne, která vypíše všechny hodnoty pole, které jsou kladné

K výpisu kladných čísel nám poslouží cyklus FOR pomocí něhož budeme polem procházet a pokud bude hodnota prvku pole větší nebo rovna nule ( if(p[i]>=0)then ), tak jej vypíšeme. Pro výpis prvků do jednoho řádku zavedeme proměnnou pocet , která udává počet kladných čisel pole. Pokud je hodnota pocet na 0 ( pocet=0) ), tak vypíšeme write('Kladne hodnoty pole jsou: ',p[i]). Kdybychom pouzili writeln, tak by se dalši prvky vypsali na následující řádek.

Pokud vypisujeme druhé, třetí, ... číslo, tedy pocet>0 tak se vypíše pouze čárka a hodnota pole ( write(', ',p[i]) ). Docílíme tím oddělení jednotlivých hodnot.

Algoritmus pro výpis kladných čísel
 program Kladne;
 {$APPTYPE CONSOLE}
 uses
   SysUtils;
 const n=10;
 type pole=array [1..n]of integer;
 var p:pole;
    i,pocet:integer;
 begin
  pocet:=0;
  for i:=1 to n do
   begin
    writeln('Zadejte hodnotu ',i,' pole');
    readln(p[i]);
   end;
  for i:=1 to n do
   begin
    if(p[i]>=0)then
     begin
      if(pocet=0)then
       write('Kladne hodnoty pole jsou: ',p[i])
      else
       write(', ',p[i]);
    pocet:=pocet+1;
     end;
   end;
  if (pocet=0) then
   begin
    writeln;
    writeln('Zadna z hodnot prvku pole neni kladna');writeln;
   end;
  writeln;writeln;
  writeln('Pro ukonceni programu stisknete libovolnou klavesu');
  readln;
 end.

Procedura Vydel, která vydělí mezi sebou dvě čísla a napíše výsledek

Naším cílem je vytvořit program který bude dělit dvě libovolná čísla. K zadání čísel použijeme funkci readln, která čeká na stisk klávesy a uloží hodnotu do proměnné v závorce. Musíme si uvědomit, že nulou není možne dělit a tak chceme po uživateli, aby zadal jakékoli číslo kromě nuly. Toho dosáhneme cyklem while, který po uživateli bude pořád vyžadovat, aby zadal čislo jiné než nula, jinak ho nepustí dál.

Po zadání hodnot se podíl a a b uloží do proměnné výsledek, která musí byt datového typu real, protože při podílu dvou čísel nemusí výsledek vyjít v celých číslech.

Pokud by jste pří výpisu podílu napsali pouze vysledek a ne vysledek:2:2 program by vám vypsal např. při zadání koeficientů a=10 a b=2 vysledek =5.00000000000000E+0000, ale výsledek by měl být 5. Možna se leknete, ale je to pouze jiný zápis 5*10^0, respektive 5. První číslo za proměnnou udává, že výpis bude minimálně na 2 platné číslice. Druhé číslo značí počet desetinných míst za desetinnou čárkou.

Algoritmus pro podíl dvou čísel
 program Vydel;
 {$APPTYPE CONSOLE}
 uses
  SysUtils;
 var a,b:integer;
     vysledek:real;
 begin
  writeln('Zadejte cislo a:');
  readln(a);
  writeln('Zadejte cislo b:');
  readln(b);
  if (b=0) then
   begin
    while (b=0) do
     begin
      writeln('Deleni nulou neni mozne, zadejte prosim jine cislo.');
      readln(b);
     end;
     vysledek:=a/b;
     writeln('Podil zadanych hodnot: ',a,'/',b,' = ',vysledek:2:2);
    end
  else
   begin
    vysledek:=a/b;
    writeln('Podil zadanych hodnot: ',a,'/',b,' = ',vysledek:2:2);
   end;
  writeln;
  writeln('Pro ukonceni programu stisknete libovolnou klavesu');
  readln;
 end.

Procedura Porovnej, která mezi sebou porovná tři čísla a napíše výsledek

Princip této funkce je velmi podobný Bubblesortu (který je zmíněnýv předchozí lekci), ale místo cyklu WHILE zde používáme cyklus FOR a neřadíme čísla od nejmenšího po největší, ale naopak. Máme porovnat tři čísla a tak nastavíme hodnotu const na 3. Pro seřazení prvků nám stačí, aby cykly FOR proběhnuly pouze 2x (tedy n-1 ). K výpisu čísel od největšího po nejmenší poslouží opět FOR cyklus.

Algoritmus pro porovnání tří čísel
 program Porovnej;
 {$APPTYPE CONSOLE}
 uses
   SysUtils;
 const n=3;
 type pole=array [1..n]of integer;
 var p:pole;
     i,k,pom:integer;
 begin
  for i:=1 to n do
   begin
    writeln('Zadejte hodnotu ',i,' pole');
    readln(p[i]);
   end;
  for k:=1 to n-1 do
   begin
    for i:=1 to n-1 do
     begin
      if p[i+1]>p[i] then
       begin
        pom:=p[i];
        p[i]:=p[i+1];
        p[i+1]:=pom;
       end;
     end;
   end;
  writeln;
  for i:=1 to n do
   begin
    if (i=1)then
     write('Porovnana cisla od nejvetsiho po nejmensi: ', p[i])
    else
     write(', ',p[i]);
   end;
  writeln;writeln;
  writeln('Pro ukonceni programu stisknete libovolnou klavesu');
  readln;
 end.
webdesign, xhtml, css, php - Mgr. Michal Mikláš