3. óra
Előző óráról tudunk nagy egészeket beolvasni, kiírni és összeadni. Következik a szorzás, majd a maradékos osztás. Végső cél az euklideszi algoritmus nagy számokon.
Nagy számok összeadása
függvény ad(a,b)
c := 0
r := 0;
Ciklus i := 0-tól 100-ig
c.jegy[i] := (a.jegy[i]+b.jegy[i]+r) mod 10
r := (a.jegy[i]+b.jegy[i]+r) div 10
Ha c.jegy[i]>0
akkor c.h :=i+1
Elágazás vége
Ciklus vége
függvény vége
Nagy számok szorzása
függvény szor(a,b)
c := 0
Ciklus i := 0-tól (b.h-1)-ig
r := 0
Ciklus j := 0-tól (a.h-1)-ig
t := c.jegy[i+j]+a.jegy[j]*b.jegy[i]+r
c.jegy[i+j] := t mod 10
r := t div 10
Ciklus vége
c.jegy[i+j+1] := r
Ciklus vége
t := a.h+b.h
Ha c.jegy[t-1]>0
akkor c.h := t
különben c.h := t-1
Elágazás vége
függvény vége
Szakköri tapasztalat a for-ciklusokról
A szorzás leprogramozásakor tapasztaltuk, hogy a "for-ciklus"
máshogy működik Pascal-ban és C#-ban.
pascal
for i := 1 to 10 do
begin
end;
writeln(i);
c#
for(i = 1; i <= 10; i++)
{
}
Console.WriteLine(i);
Ennek oka, hogy a java/C++/C# "for-ciklus" ezt jelenti:
for(i = 1; i <= 10; i++)
{
}
i = 1;
while( i <= 10 )
{
i++;
}
Nagy számok osztása 2-vel
r := 0
c := 0;
Ciklus i := (a.h-1)-tól 0-ig (-1)-esével
c.jegy[i] := (a.jegy[i] + r * 10) div 2
r := (a.jegy[i] + r * 10) mod 2
Ciklus vége
Ha c.jegy[a.h-1] = 0
akkor c.h:=a.h-1
különben c.h:=a.h
Elágazás vége
Nagy számok összehasonlítása
Feladat