Pascal - ciferný součet čísla

Datum vydání: 2012-10-30 18:46:34 ; aktualizováno: 2013-10-13 09:02:34

Zadání příkladu

Program vyzve uživatele k zadání celého čísla. Úkolem programu je sečíst cifry čísla a vypsat tento součet. Např. když uživatel zadá „4652“ program vypíše „17“, protože 4 + 6 + 5 + 2 = 17. Zpracování ciferného součtu má být úkolem funkce, které se předá zadané načtené číslo jako parametr.

Řešení ve Free Pascalu

program CifernySoucet;
uses crt;
var n: integer;

function cifernySoucet(cislo: integer): integer;
var cifra, torzo, soucet: integer;
begin
    soucet := 0;
    torzo := cislo;
    repeat
        cifra := torzo mod 10; // dostanu posledni cifru cisla
        soucet := soucet + cifra;
        torzo := torzo div 10; // uriznu posledni cifru cisla
    until torzo = 0;
    cifernySoucet := soucet;
end;

begin
    clrScr;

    write('Zadejte cislo: ');
    read(n);
    writeln('Ciferny soucet cisla ', n, ' je ', cifernySoucet(n), '.');

    repeat
    until keyPressed;
end.

Spuštění programu

Zadejte cislo: 4652
Ciferny soucet cisla 4652 je 17.

Poznámky

Pro zpracování je použita funkce. Pro separaci čísel na jednotlivé cifry se využívá operátoru div a mod. Zavedená proměnná soucet je zde sice zbytečná, součet by se mohl rovnou ukládat do proměnné pro návratovou hodnotu cifernySoucet. Já už jsem ale z jiných programovacích jazyků spíše zvyklá na příkaz return, který se chová trochu jinak, a tak si návratovou hodnotu naplním až na konci funkce správnou hodnotou. Funkce by po odstranění proměnné soucet vypadala takto:

function cifernySoucet(cislo: integer): integer;
var cifra, torzo: integer;
begin
    cifernySoucet := 0;
    torzo := cislo;
    repeat
        cifra := torzo mod 10; // dostanu posledni cifru cisla
        CifernySoucet := CifernySoucet + cifra;
        torzo := torzo div 10; // uriznu posledni cifru cisla
    until torzo = 0;
end;

Podobně by šel cyklus repeat until nahradit cyklem while, který je o něco příjemnější. Proměnnou cifra bych také nemusela používat, ale já to mám takto ráda :). Je to pak srozumitelnější. Cyklus while je použit v referencích uvedených níže.

Další informace