Umíte pascalsky - 3.lekce ...

Umíte pascalsky?
3.lekce
Vytisknout  

Výpočty s čísly

     V této lekci se naučíme vytvořit jednoduchý prográmek realizující také jednoduchý výpočet. K tomu budeme potřebovat konstanty,proměnné, výrazy,příkaz přiřazení,příkaz vstupu a výstupu.
    
Konstatnty
Pascal umožňuje používat tzv. pojmenovaných konstant, které se zavádějí (v deklarační části programu) pomocí definice.

                 const konstanta = hodnota ;

Například:
const PI = 3.14159;
         Max = 1000;
Konstatnty umožňují zvýšit čitelnost programu a snadnou modifikovatelnost (změna konstanty na jediném řádku změní celý program).

Proměnné
Proměnnou je datový objekt,který může během realizace programu nabývat různých hodnot jednoho datového typu předepsaného pomocí deklarace proměnné:

                var proměnná : typ ;

Například:
var Cislo : integer;
      Vysledek : real;
      Znacka : char;
Každou proměnnou musíme v programu deklarovat. Počítač deklaraci realizuje tak,že si vymezí prostor v paměti potřebný pro uložení tohoto typu hodnoty a toto paměťové místo pojmenuje názvem proměnné. Po deklaraci je obsah  proměnné nedefinován (nemá hodnotu).
Definovat její obsah (hodnotu) můžeme:
a) přečtením hodnoty do proměnné (příkazem vstupu)
b) dosazením hodnoty do proměnné (přiřazovací příkaz)
Proměnnou tedy musíme nejprve deklarovat, potom definovat a pak ji můžeme v programu dále používat.

Výraz
Výrazem je předpis na získání hodnoty. Vytváří se z operandů (čísla ,konstatnty, proměnné ...) , operátorů (určují druh operace , např. + , - , * , / , ..) a kulatých závorek. Jako operátory používáme operátory operací definovaných pro zavedené datové typy (minulá lekce).Zápis výrazů je lineární, není možné používat zlomky ani exponenty.
Příklady výrazů a jejich zápis:

Matematický zápis Zápis v Pascalu
A.B+C A*B+C
(A.K):B (A*K)/B
A2 sqr(A)
sin2x sqr(sin(x))
Xe(1,5) (X<5) and (X>1)

     Operace se provádí v pořadí podle tzv. priority operátorů. Pro základní operátory vypadá takto:
1. not
2. * , / , div , mod , and
3. + , - , or
4. < , > , >= , <= , = , <>           ... relační operátory
Výraz se vyhodnocuje vždy zleva doprava , ale respektuje se priorita operátorů a závorky. Priorita logických operátorů (not,and,or) je vyšší než relačních operátorů, proto musíme požívat závorek - např.   (X<5) and (X>1)

Příkaz přiřazení
Příkazem přiřazení předepisujeme akci , kterou přiřazujeme proměnné hodnotu.Zápis příkazu přiřazení má tvar:

                  proměnná:=   výraz;

Je to předpis k provedení akce - nejprve se vyhodnotí výraz za symbolem := a potom se jeho výsledná hodnota přiřadí,uloží do proměnné před symbolem :=. Protože proměnná může nabývat jen hodnoty typu podle své deklarace, musí hodnota výrazu patřit do množiny hodnot specifikované typem proměnné nebo proměnná je typu real a výraz typu integer-proměnná a výraz musí být tzv. kompatibilní vzhledem k přiřazení.
Požijeme-li proměnnou ve výrazu, je nutné, aby měla definovanou hodnotu, jinak dojde k chybě při spuštění programu!

Například: 
Mějme následující deklaraci proměnných:
var cislo,vysledek: real;
          pocet,kolik:   integer;
                   znak: char;
               kontrola :boolean;
Potom jsou správné následující příkazy přiřazení:
      cislo:=14.5;              ( 4.5 patří do množiny hodnot typu real-cislo bude 14.5 )
      vysledek:=cislo*10 - 1;  ( hodnota výrazu na pravé straně je typu real-vysledek bude 144)
      kolik := 5;       
      znak:='k';
      kontrola:=true;
Pokud je proměnná na levé straně typu real a výraz na pravé straně typu integer , automaticky se provede konverze hodnoty typu integer na typ real.Je tedy možné přiřazení:
      vysledek:=2;
Ale není možné:
      kolik:=3.5;

Jedinou proměnnou,jejíž hodnota se po provedení přiřazovacího příkazu změní, je proměnná na levé straně symbolu := ! Pokud je táž proměnná i na pravé straně, např.
            kolik := kolik + 1 ;
vyhodnotí se nejprve výraz s pomocí původní hodnotou proměnné (musí mít tedy přiřazenu již nějakou hodnotu - v našem případě 5)  a pak je tato výsledná hodnota výrazu novou hodnotou proměnné. Tedy proměnná kolik se zvětší o jedna a bude mít tedy hodnotu 6.
            pocet := kolik div 4;       ( pocet bude 1 - celočíselný podíl 6 a 4)
            pocet := kolik mod 4;     ( pocet bude 2 - zbytek po celočíselném dělení 6 a 4)

Příkazy vstupu a výstupu
rozdělíme na dva druhy . Vstup z klávesnice a výstup na monitor (těmi se nyní budeme zabývat ) a vstup a výstup z disku (tyto rozebereme později).

Příkaz vstupu z klávesnice
Tento příkaz slouží k zadání vstupních dat do programu z klávesnice a má tvary:
read (proměnná)

read (proměnná1, ..., proměnnáN)

Průběh operace závisí na typu parametru proměnná :
typ proměnné :
char       přečte se jeden znak a přiřadí se proměnné
integer  přečte se posloupnost znaků tvořící dekadický zápis celého čísla ukončená mezerou,                čárkou nebo znakem konce řádku
real        podobně jako u INTEGER

readln;  přeskočí zbytek aktuálního řádku a dalším příkazem read se začíná od začátku                       nového řádku
readln ( proměnná );  má stejný význam jako realizace příkazů
                   read}proměnná);        
                   readln;

Příkaz výstupu na monitor
Tento příkaz slouží k výstupu hodnot (výstupních dat) z programu na obrazovku a má tvary:
write (proměnná)
write (proměnná1, ..., proměnnáN)
writeln   další výstup bude od začátku dalšího řádku

Vystupující hodnota se udává výrazem, jehož typ může být CHAR, INTEGER, REAL nebo BOOLEAN, přičemž hodnoty TRUE i FALSE vystupují jako řetězce.
Řetězce v uvozovkách ( ' ... ' ) vystupují beze změny.

write ( parametr );

Parametr může mít jeden z následujících tvarů:
a) výraz reprezentující výstupní hodnotu
b) výraz : počet , kde počet reprezentuje počet znaků výstupu
c) výraz : počet : desmísta , kde desmísta udává počet desetinných míst výstupu

Například:
writeln(kolik,znak)        vypíše    5k
writeln('Výsledek je' , kolik )        vypíše       Výsledek je 5

Příklady:

Příklad1:
Vytvořte program pro výpočet obsahu a obvodu obdélníka se zadanými stranami delka,sirka (celá nezáporná čísla).

program Obdelnik;
  var delka,sirka, obvod,obsah :integer; {Deklarace proměnných}
  begin
    writeln('Zadejte délku obdélníka'); {Napíše výzvu k zadání délky}
    read(delka);     {Načte délku}
    writeln('Zadejte délku obdélníka'); {Napíše výzvu k zadání šířky}
   read(sirka); {Načte šířku}
    obvod:=2*(delka+sirka); {Vypočítá obvod}
    obsah:=delka*sirka;   {Vypočítá obsah}
    writeln('Obvod je ', obvod); {Vytiskne obvod}
    writeln('Osah  je ', obsah); {Vytiskne obsah}
  end.

Příklad2:
Vytvořte program ,který ze zadaného času v hodinách,minutách a sekundách vyjádří čas
a)v minutách a sekundách
b)v sekundách

program Cas;
  var hod,min,sek: integer;
        minuty,sekundy,jensekundy:integer;
{Deklarace proměnných}
  begin
    writeln('Zadejte čas: hod  min  sek'); {Napíše výzvu k zadání času}
    read(hod,min,sek);    {Načte hodiny,minuty,sekundy}
    minuty:=hod*60+min; {Zjistí čas v minutách}
    sekundy:=sek; {Zjistí čas v sekundách}
    jensekundy:=3600*hod+60*min+sek; {Převede čas na sekundy}
    writeln('Minuty a sekundy ', minuty,':',sekundy); {Vytiskne v min a sekundách}
    writeln('V sekundách ', jensekundy); {Vytiskne jen v sekundách}
  end.

Příklad3:
Sestavte program, který po zadání obnosu v celých korunách zjistí, kolik budeme potřebovat na jeho vyplacení desetikorun, pětikorun a korun.

Nejprve si ukážeme výpočet na konkrétním příkladě.Zadaný obnos je 28 Kč.
      desetikoruny         28:10 = 2         tedy      28 div 2=2
      zbylý obnos          28 - 20 = 8       tedy      28 mod 10 = 8
      pětikoruny             8 : 5 = 1           tedy         8 div 5 = 1
      zbylý obnos          8 - 5 = 3           tedy        8 mod 5 = 3
      koruny                   3                      tedy        zbylý obnos
A nyní program:

program Drobne;
  var obnos,deset,pet,jedna: integer; {Deklarace proměnných}
  begin
    writeln('Zadejte obnos'); {Napíše výzvu k zadání obnosu}
    readln(obnos);    {Načte obnos}
    deset:=obnos div 10; {Zjistí počet desetikorun}
    obnos:=obnos mod 10; {Zbytek po vyplacení desetikorun}
    pet:=obnos div 5; {Počet pětikorun}
    obnos:=obnos mod 5; {Zbytek po vyplacení pětikorun}
    jedna:=obnos; {Počet korun}
    writeln('Desetikorun je ', deset , ' , petikorun je ', pet , ' a korun je ', jedna );
  end.

Domácí úkol:

     Sestavte program MujCas, který převede zadaný čas v sekundách na hodiny,minuty a sekundy.

On-line účast na řešení úkolu

Řešit úkol Prohlídka hodnocení úkolu Dotazy,připomínky

Pomocí volby Řešit můžete (po přihlášení) odeslat vaše řešení domácího úkolu (každý úkol smíte řešit jen jednou). Volbou Hodnocení si přečtete hodnocení a komentář od vyučujícího. Dotaz nebo připomínku můžete opakovaně zasílat pomocí tlačítka Dotazy, Komunikace (na levém okraji) zobrazuje příklad možné komunikace s vyučujícím.