MFF UK / Ústav teoretické fyziky / Tomáš Ledvinka
Přednášky
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
  Úvod
  Programy a algoritmy
  Píšeme program
  Píšeme program II
  Procedury a funkce
  Malujeme funkce
  Chyby. Typy I.
    Chyby při běhu programu
    Používáme knihovny I.
    I data mají strukturu
    Typy (interval, výčtový)
    Množiny
  Typy II. Pole a Záznamy
  Pole II.Řetězce.Soubory.
  Gnuplot.Interpolace...
  Matice. Velké O...
  Fronta,Zásobník. Postscript
  Bin. soubory, ...
  Ukazatele,Objekty, ...
Počítačová algebra
Klasická elektrodynamika (2.r)
Vybrané partie OTR

Cvičení
. . . . . . . . . . . . . . . . . . . . . . . . . .
Programování pro fyziky (1.r)
Teoretická mechanika (2.r)
Klasická elektrodynamika (2.r)


Věda
. . . . . . . . . . . . . . . . . . . . . . . . . .
Diskové zdroje v OTR
Hyperbolické systémy v OTR


Kontakt
. . . . . . . . . . . . . . . . . . . . . . . . . .
Email
Konzultační hodiny


Ostatní
. . . . . . . . . . . . . . . . . . . . . . . . .
Mallorca
Ze společnosti

Neplánované chyby při běhu programu

Následujíc program nám vypíše jako výsledek číslo 0. Je to pochopitelný, ale nejspíš nechtěný jev. Chyba spočívá v tom, že číslo 256 nepatří do rozsahu typu byte, který je 0..255.

program test;
var i : byte;
begin
  i:=255;
  i:=i+1;
  writeln(i);
  readln;
end.

Proto program trochu ozdobíme:

program test;
uses SysUtils;
var i : byte;
{$RANGECHECKS ON} {kamkoli nad radek i:=i+1}
begin
  i:=255;
  i:=i+1;
  writeln(i);
  readln;
end.

Vložením {$RANGECHECKS ON} komentáře začínajícího zankem dolaru jsme překladač uplatili, aby do přeloženého kódu přidal kontrolu na meze při přiřazování a indexování polí. Pozor tedy na znak $ nacházející se za složenou závorkou nebo jejím dálnopisným ekvivalentem (*, trerý také může omezovat komentář. Po přidání {$RANGECHECKS ON} se vypsání nuly nedočkáme, místo toho se pos tsiknutí F9 (zkratka pro spuštění programu) objeví varování:

a my po odklepnutí OK musíme v menu vývojového prosředí Delphi zvolit Run/Program Reset abychom se zbavili toho modrého zvýrazněného řádku s chybou.

Pokud místo práce ve vývojovém prostředí nastane chyba při běhu aplikace spuštěné z příkazové řádky, jsme upozorněni známým varováním, že program selhal:

Pokud by mezi importovanými kniovnami nebyla knihovna SysUtils, skončil by program jen vypsáním chybové hlášky, což nám většinou nestačí pro nalezení a odstranění chyby:

C:\Projects\prog\pokusy>test
Runtime error 201 at 00402570

C:\Projects\prog\pokusy>

Podobně jako se výsledek nemusí vejít do proměnné, může se také stát, že se výsledek aritmetické oprace, řekněme násobení, vůbec nevejde do překladačem předpokládané délky slova 32 bitů, a operace vrací nesmysly. V tomto případě jde o jiný typ chyby, tzv přetečení a odpovídá jí jiný přepínač: {$OVERFLOWCHECKS ON}, v krátkém (turbopascalovém) znění {$Q+}.

program test;
uses sysutils;
var j : integer;
{$OVERFLOWCHECKS ON}
begin
  j:=50000;
  j:=j*j;
  writeln(j);
  readln;
end.
.