Vnořené FOR cykly

Celá tato lekce je nepovinná, je určena jen pro zájemce (experty, proto je označena 9E). K řešení řady úloh je možné využít takzvané "hrubé výpočetní síly" počítače, můžeme nechat počítač dosazovat všechny možné hodnoty - mechanická činnost, která by nám zabrala mnoho času, je vykonána počítačem za několik vteřin. Budeme-li dosazovat více hodnot, využijeme FOR cykly, které jsou do sebe "vnořené":

První ukázkou je hledání tzv. Pythagorejských trojúhelníků, což jsou pravoúhlé trojúhelníky s celočíselnými stranami. Jak je vidět z obrázku (nebo z ukázky ), formulář obsahuje jeden Edit pro zadání maximální délky přepony a tlačítko pro spuštění výpočtu. Pro výpis nalezených možností byla využita komponenta Memo, jednotlivé řádky se zapisují do její vlastnosti memo.lines metodou (příkazem) memo.lines.Add(string). V programu jsou použity také proměnné c, a, b , (přepona a odvěsny trojúhelníku) a max pro maximální délku přepony - všechny jsou typu integer, nezapomeňte na jejich deklaraci:
var
Form2: TForm2;
c: integer;
a: integer;
b: integer;
max: integer;

Vlastní procedura události OnClick tlačítka pro výpočet by mohla vypadat takto:

procedure TForm2.Button1Click(Sender: TObject);
begin
memo1.lines.Clear; //vymazání MEMO
max:=strtoint(edit1.Text);
for c:=5 to max do
for a:=1 to c do
for b:=1 to a do
begin
if c=sqrt(a*a+b*b) then
memo1.lines.Add(inttostr(a)+ ', '+inttostr(b)+', '+inttostr(c));
end;
end;
V prvních dvou řádcích se vyprázdní komponenta memo1 a do proměnné max se načte číslo z Edit1. Následují tři vnořené FOR cykly - nejprve se vždy zvolí hodnota proměnné c (od 5, protože nejmenší pythagorejský trojúhelník je známý 3, 4, 5) až do max, ke každé hodnotě proměnné c se mění hodnota proměnné a od 1 do velikosti c a pro každou hodnotu proměnných c a a se mění vždy hodnota proměnné b od 1 do hodnoty proměnné a (b je menší nebo rovno a). Neboli se pro každou hodnotu proměnné c mechanicky projdou vždy všechny hodnoty velikostí odvěsen, pokud je splněna Pythagorova rovnost, vypíší se strany do komponenty memo.

Podobného mechanického dosazování se dá často využít ke kontrole výsledků obtížnějších matematických úloh (například z matematické olympiády):
Najděte dvojciferné číslo, pro které platí, že je součtem svého ciferného součtu a jeho druhé mocniny.

Pro vyhledání takových čísel v následujícím programu využijeme toho, že dvojciferné číslo s ciframi ab má rozvinutý zápis 10*a+b:
procedure TForm2.Button1Click(Sender: TObject);
begin
for a:=1 to 9 do
for b:=1 to 9 do
begin
if a+b+(a+b)*(a+b)=10*a+b then
memo1.lines.Add('reseni: '+inttostr(a)+inttostr(b));
end;
end;

Aplikace ukládej do složky s názvem lekce9E .

Úkoly:

V této lekci jsou všechny úlohy na plus:


MO 56.ročník (06/07) - Z9-I-1

Kolik šestimístných přirozených čísel má tu vlastnost, že součin jejich číslic je 750?


MO 55.ročník (05/06) - Z8-I-1

Součin ciferného součinu a ciferného součtu dvojciferného přirozeného čísla je 126. Najděte všechna taková čísla.


Algebrogram

Nahraďte písmena číslicemi (každé písmeno jinou číslicí) tak, aby platilo:
(l+e+n+k+a)*(l+e+n+k+a)*(l+e+n+k+a) = lenka