NézetNyomtat

3. óra
Címkék > Óra

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 {Nagy szám nulla.}
    
    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.:=i+1
        Elágazás vége
    Ciklus vége
    {Az eredmény c-ben van}
függvény vége

Nagy számok szorzása

függvény szor(a,b)
    c := 0 {Nagy szám nulla.}
    
    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 
        {itt eddig 0 volt, tehát nincs átvitel}
    Ciklus vége
    t := a.h+b.h
    Ha c.jegy[t-1]>0 
        akkor c.:= t 
        különben c.:= t-1
    Elágazás vége

    {Az eredmény c-ben van}
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
        {ciklusmag}
    end;
    writeln(i);

    {EREDMÉNY: 10}
c#
    for(= 1; i <= 10; i++)
    {
        //ciklusmag
    }
    Console.WriteLine(i);

    //EREDMÉNY: 11
Ennek oka, hogy a java/C++/C# "for-ciklus" ezt jelenti:
    for(= 1; i <= 10; i++)
    {
            //ciklusmag
    }
    
    //Ugyanaz, mint:

    i = 1;
    while( i <= 10 )
    {
            //ciklusmag
            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