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é:
varpromě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
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.
|