Obsah lekce:
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 ).
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.
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.
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.
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.
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.
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.
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.